From a8d795312b19d4ee980f84d794c87cb048f6f2e8 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Wed, 3 Jul 2024 21:58:11 +0000 Subject: [PATCH 01/52] Sync HAFS submodules with their latest authoritative branches as of 07/03/2024 (From @BijuThomas-NAA and @BinLiu-NOAA) --- modulefiles/hafs.hercules.lua | 4 ++-- modulefiles/hafs.jet.lua | 4 ++-- modulefiles/hafs.orion.lua | 4 ++-- modulefiles/hafs.wcoss2.lua | 12 ++++++------ parm/analysis/gsi/gsiparm.anl.tmp | 4 ---- scripts/exhafs_analysis.sh | 8 ++++---- sorc/hafs_forecast.fd | 2 +- sorc/hafs_gsi.fd | 2 +- sorc/hafs_utils.fd | 2 +- versions/build.ver | 4 ++-- versions/run.ver | 4 ++-- 11 files changed, 23 insertions(+), 27 deletions(-) diff --git a/modulefiles/hafs.hercules.lua b/modulefiles/hafs.hercules.lua index cc881cfc5..c8415468d 100644 --- a/modulefiles/hafs.hercules.lua +++ b/modulefiles/hafs.hercules.lua @@ -40,7 +40,7 @@ load(pathJoin("netcdf-fortran", netcdf_fortran_ver)) parallelio_ver=os.getenv("parallelio_ver") or "2.5.10" load(pathJoin("parallelio", parallelio_ver)) -esmf_ver=os.getenv("esmf_ver") or "8.5.0" +esmf_ver=os.getenv("esmf_ver") or "8.6.0" load(pathJoin("esmf", esmf_ver)) fms_ver=os.getenv("fms_ver") or "2023.04" @@ -76,7 +76,7 @@ load(pathJoin("gftl-shared", gftl_shared_ver)) yafyaml_ver=os.getenv("yafyaml_ver") or "0.2.5" load(pathJoin("libyaml", yafyaml_ver)) -mapl_ver=os.getenv("mapl_ver") or "2.40.3-esmf-8.5.0" +mapl_ver=os.getenv("mapl_ver") or "2.40.3-esmf-8.6.0" load(pathJoin("mapl", mapl_ver)) bufr_ver=os.getenv("bufr_ver") or "12.0.1" diff --git a/modulefiles/hafs.jet.lua b/modulefiles/hafs.jet.lua index 67cdfc127..aa3b02c68 100644 --- a/modulefiles/hafs.jet.lua +++ b/modulefiles/hafs.jet.lua @@ -37,7 +37,7 @@ load(pathJoin("netcdf-fortran", netcdf_fortran_ver)) parallelio_ver=os.getenv("parallelio_ver") or "2.5.10" load(pathJoin("parallelio", parallelio_ver)) -esmf_ver=os.getenv("esmf_ver") or "8.5.0" +esmf_ver=os.getenv("esmf_ver") or "8.6.0" load(pathJoin("esmf", esmf_ver)) fms_ver=os.getenv("fms_ver") or "2023.04" @@ -73,7 +73,7 @@ load(pathJoin("gftl-shared", gftl_shared_ver)) yafyaml_ver=os.getenv("yafyaml_ver") or "0.2.5" load(pathJoin("libyaml", yafyaml_ver)) -mapl_ver=os.getenv("mapl_ver") or "2.40.3-esmf-8.5.0" +mapl_ver=os.getenv("mapl_ver") or "2.40.3-esmf-8.6.0" load(pathJoin("mapl", mapl_ver)) bufr_ver=os.getenv("bufr_ver") or "12.0.1" diff --git a/modulefiles/hafs.orion.lua b/modulefiles/hafs.orion.lua index 6654488c2..5dd358415 100644 --- a/modulefiles/hafs.orion.lua +++ b/modulefiles/hafs.orion.lua @@ -37,7 +37,7 @@ load(pathJoin("netcdf-fortran", netcdf_fortran_ver)) parallelio_ver=os.getenv("parallelio_ver") or "2.5.10" load(pathJoin("parallelio", parallelio_ver)) -esmf_ver=os.getenv("esmf_ver") or "8.5.0" +esmf_ver=os.getenv("esmf_ver") or "8.6.0" load(pathJoin("esmf", esmf_ver)) fms_ver=os.getenv("fms_ver") or "2023.04" @@ -73,7 +73,7 @@ load(pathJoin("gftl-shared", gftl_shared_ver)) yafyaml_ver=os.getenv("yafyaml_ver") or "0.2.5" load(pathJoin("libyaml", yafyaml_ver)) -mapl_ver=os.getenv("mapl_ver") or "2.40.3-esmf-8.5.0" +mapl_ver=os.getenv("mapl_ver") or "2.40.3-esmf-8.6.0" load(pathJoin("mapl", mapl_ver)) bufr_ver=os.getenv("bufr_ver") or "12.0.1" diff --git a/modulefiles/hafs.wcoss2.lua b/modulefiles/hafs.wcoss2.lua index aa540c272..0e30719e8 100644 --- a/modulefiles/hafs.wcoss2.lua +++ b/modulefiles/hafs.wcoss2.lua @@ -36,13 +36,13 @@ libjpeg_ver=os.getenv("libjpeg_ver") load(pathJoin("libjpeg", libjpeg_ver)) hdf5_ver=os.getenv("hdf5_ver") -load(pathJoin("hdf5-A", hdf5_ver)) +load(pathJoin("hdf5-C", hdf5_ver)) netcdf_ver=os.getenv("netcdf_ver") -load(pathJoin("netcdf-A", netcdf_ver)) +load(pathJoin("netcdf-C", netcdf_ver)) fms_ver=os.getenv("fms_ver") -load(pathJoin("fms", fms_ver)) +load(pathJoin("fms-C", fms_ver)) bacio_ver=os.getenv("bacio_ver") load(pathJoin("bacio", bacio_ver)) @@ -117,16 +117,16 @@ ncio_ver=os.getenv("ncio_ver") load(pathJoin("ncio-A", ncio_ver)) pio_ver=os.getenv("pio_ver") -load(pathJoin("pio-B", pio_ver)) +load(pathJoin("pio-C", pio_ver)) esmf_ver=os.getenv("esmf_ver") -load(pathJoin("esmf-B", esmf_ver)) +load(pathJoin("esmf-C", esmf_ver)) gftl_shared_ver=os.getenv("gftl_shared_ver") --load(pathJoin("gftl-shared", gftl_shared_ver)) mapl_ver=os.getenv("mapl_ver") ---load(pathJoin("mapl-B", mapl_ver)) +--load(pathJoin("mapl-C", mapl_ver)) scotch_ver=os.getenv("scotch_ver") load(pathJoin("scotch", scotch_ver)) diff --git a/parm/analysis/gsi/gsiparm.anl.tmp b/parm/analysis/gsi/gsiparm.anl.tmp index f00dd3b53..6efa0e13a 100644 --- a/parm/analysis/gsi/gsiparm.anl.tmp +++ b/parm/analysis/gsi/gsiparm.anl.tmp @@ -100,8 +100,6 @@ OBS_INPUT:: sbuvbufr sbuv2 n16 sbuv8_n16 0.0 0 0 sbuvbufr sbuv2 n17 sbuv8_n17 0.0 0 0 sbuvbufr sbuv2 n18 sbuv8_n18 0.0 0 0 - hirs3bufr hirs3 n17 hirs3_n17 0.0 1 0 - hirs4bufr hirs4 metop-a hirs4_metop-a 0.0 1 1 gimgrbufr goes_img g11 imgr_g11 0.0 1 0 gimgrbufr goes_img g12 imgr_g12 0.0 1 0 airsbufr airs aqua airs_aqua 0.0 1 1 @@ -136,13 +134,11 @@ OBS_INPUT:: gomebufr gome metop-a gome_metop-a 0.0 2 0 omibufr omi aura omi_aura 0.0 2 0 sbuvbufr sbuv2 n19 sbuv8_n19 0.0 0 0 - hirs4bufr hirs4 n19 hirs4_n19 0.0 1 1 amsuabufr amsua n19 amsua_n19 0.0 2 1 mhsbufr mhs n19 mhs_n19 0.0 3 1 seviribufr seviri m08 seviri_m08 0.0 1 0 seviribufr seviri m09 seviri_m09 0.0 1 0 seviribufr seviri m10 seviri_m10 0.0 1 0 - hirs4bufr hirs4 metop-b hirs4_metop-b 0.0 1 0 amsuabufr amsua metop-b amsua_metop-b 0.0 2 0 mhsbufr mhs metop-b mhs_metop-b 0.0 3 0 iasibufr iasi metop-b iasi_metop-b 0.0 1 0 diff --git a/scripts/exhafs_analysis.sh b/scripts/exhafs_analysis.sh index 4c6b985cd..48c4c1850 100755 --- a/scripts/exhafs_analysis.sh +++ b/scripts/exhafs_analysis.sh @@ -412,16 +412,16 @@ ${WLN} $SATWHR satwhrbufr ${WLN} $GSNDBF1 gsnd1bufr ##${WLN} $B1HRS2 hirs2bufr ##${WLN} $B1MSU msubufr -${WLN} $B1HRS3 hirs3bufr -${WLN} $B1HRS4 hirs4bufr +#${WLN} $B1HRS3 hirs3bufr +#${WLN} $B1HRS4 hirs4bufr ${WLN} $B1AMUA amsuabufr ##${WLN} $B1AMUB amsubbufr ${WLN} $B1MHS mhsbufr -${WLN} $ESHRS3 hirs3bufrears +#${WLN} $ESHRS3 hirs3bufrears ${WLN} $ESAMUA amsuabufrears ##${WLN} $ESAMUB amsubbufrears #${WLN} $ESMHS mhsbufrears -${WLN} $HRS3DB hirs3bufr_db +#${WLN} $HRS3DB hirs3bufr_db ##${WLN} $AMUADB amsuabufr_db ##${WLN} $AMUBDB amsubbufr_db #${WLN} $MHSDB mhsbufr_db diff --git a/sorc/hafs_forecast.fd b/sorc/hafs_forecast.fd index 445f73e96..3cd869524 160000 --- a/sorc/hafs_forecast.fd +++ b/sorc/hafs_forecast.fd @@ -1 +1 @@ -Subproject commit 445f73e96f1d789080113f058ace4fde59fc3176 +Subproject commit 3cd8695245a4a819921febe5c04fb30275e58fed diff --git a/sorc/hafs_gsi.fd b/sorc/hafs_gsi.fd index 76a1fc08c..7a56a8f69 160000 --- a/sorc/hafs_gsi.fd +++ b/sorc/hafs_gsi.fd @@ -1 +1 @@ -Subproject commit 76a1fc08c31842aba7c98312343f04694db07b24 +Subproject commit 7a56a8f69f1dcc9aebe9b8e57dcd3280c015249a diff --git a/sorc/hafs_utils.fd b/sorc/hafs_utils.fd index fa729a301..499b72e6e 160000 --- a/sorc/hafs_utils.fd +++ b/sorc/hafs_utils.fd @@ -1 +1 @@ -Subproject commit fa729a301987bd04966569bbe806900bb5415daf +Subproject commit 499b72e6efe8f42cf0897020954cb4776aba958d diff --git a/versions/build.ver b/versions/build.ver index 0b49b032a..62ee09618 100644 --- a/versions/build.ver +++ b/versions/build.ver @@ -24,8 +24,8 @@ export libpng_ver=1.6.37 export libjpeg_ver=9c export hdf5_ver=1.14.0 export netcdf_ver=4.9.2 -export fms_ver=2023.02.01 -export esmf_ver=8.5.0 +export fms_ver=2023.04 +export esmf_ver=8.6.0 export mapl_ver=2.40.3 export gftl_shared_ver=1.6.1 export bacio_ver=2.4.1 diff --git a/versions/run.ver b/versions/run.ver index 1e3c1b2b9..3a3802513 100644 --- a/versions/run.ver +++ b/versions/run.ver @@ -29,8 +29,8 @@ export libpng_ver=1.6.37 export libjpeg_ver=9c export hdf5_ver=1.14.0 export netcdf_ver=4.9.2 -export fms_ver=2023.02.01 -export esmf_ver=8.5.0 +export fms_ver=2023.04 +export esmf_ver=8.6.0 export mapl_ver=2.40.3 export gftl_shared_ver=1.6.1 export scotch_ver=7.0.4 From f3ffd1a858a918e8affd53c5847ca2dd0d941ed8 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Thu, 4 Jul 2024 02:08:31 +0000 Subject: [PATCH 02/52] Update submodule sorc/hafs_utils.fd. --- sorc/hafs_utils.fd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/hafs_utils.fd b/sorc/hafs_utils.fd index 499b72e6e..d9be1efad 160000 --- a/sorc/hafs_utils.fd +++ b/sorc/hafs_utils.fd @@ -1 +1 @@ -Subproject commit 499b72e6efe8f42cf0897020954cb4776aba958d +Subproject commit d9be1efad5f041d971e362d7f04aef53b770acf1 From 9f5be0c68a46c23e66e663d317c6e3dc7596b41f Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Thu, 4 Jul 2024 02:32:05 +0000 Subject: [PATCH 03/52] Update parm/forecast/regional/fd_ufs.yaml and parm/post/params_grib2_tbl_new after the latest HAFS submodule syncing. --- parm/forecast/regional/fd_ufs.yaml | 40 ++- parm/post/params_grib2_tbl_new | 385 ++++++++++++++++++++++++++++- 2 files changed, 415 insertions(+), 10 deletions(-) diff --git a/parm/forecast/regional/fd_ufs.yaml b/parm/forecast/regional/fd_ufs.yaml index a91ff96d6..c0189f0bd 100644 --- a/parm/forecast/regional/fd_ufs.yaml +++ b/parm/forecast/regional/fd_ufs.yaml @@ -1055,43 +1055,76 @@ # - standard_name: u canonical_units: m s-1 + alias: u_component_of_native_D_grid_wind # - standard_name: v canonical_units: m s-1 + alias: v_component_of_native_D_grid_wind # - standard_name: ua canonical_units: m s-1 + alias: eastward_wind # - standard_name: va canonical_units: m s-1 + alias: northward_wind # - standard_name: t canonical_units: K + alias: air_temperature # - standard_name: delp canonical_units: Pa + alias: air_pressure_thickness + # + - standard_name: ps + canonical_units: Pa + alias: surface_pressure # - standard_name: sphum canonical_units: kg kg-1 + alias: specific_humidity # - standard_name: ice_wat canonical_units: kg kg-1 + alias: cloud_liquid_ice # - standard_name: liq_wat canonical_units: kg kg-1 + alias: cloud_liquid_water + # + - standard_name: rainwat + canonical_units: kg kg-1 + alias: rain_water + # + - standard_name: snowwat + canonical_units: kg kg-1 + alias: snow_water + # + - standard_name: graupel + canonical_units: kg kg-1 + alias: graupel # - standard_name: o3mr canonical_units: kg kg-1 + alias: ozone_mass_mixing_ratio # - standard_name: phis canonical_units: m2 s-2 + alias: sfc_geopotential_height_times_grav # - standard_name: u_srf canonical_units: m s-1 + alias: surface_eastward_wind # - standard_name: v_srf canonical_units: m s-1 + alias: surface_northward_wind + # # + - standard_name: t2m + canonical_units: K + alias: surface_temperature # - standard_name: slmsk canonical_units: flag @@ -1100,6 +1133,7 @@ - standard_name: weasd canonical_units: mm description: water equiv of acc snow depth over land and sea ice + alias: sheleg # - standard_name: tsea canonical_units: K @@ -1169,7 +1203,7 @@ - standard_name: Sl_sfrac alias: inst_snow_area_fraction_lnd canonical_units: 1 - description: land export + description: land export # - standard_name: Sl_tref alias: inst_temp_height2m_lnd @@ -1201,7 +1235,7 @@ canonical_units: W m-2 description: land export # - - standard_name: Fall_gflx + - standard_name: Fall_gflx alias: inst_upward_heat_flux_lnd canonical_units: W m-2 description: land export @@ -1222,7 +1256,7 @@ description: land export # - standard_name: Sl_chh - alias: inst_drag_mass_flux_for_heat_and_moisture + alias: inst_drag_mass_flux_for_heat_and_moisture canonical_units: kg m-2 s-1 description: land export # diff --git a/parm/post/params_grib2_tbl_new b/parm/post/params_grib2_tbl_new index c3cdd17de..20ab866ed 100644 --- a/parm/post/params_grib2_tbl_new +++ b/parm/post/params_grib2_tbl_new @@ -5,6 +5,7 @@ 0 3 15 0 5WAVH 0 3 193 1 5WAVH 0 20 106 0 AACOEF + 4 10 4 0 AATRATE 0 2 11 0 ABSD 4 2 5 0 ABSFRQ 0 1 18 0 ABSH @@ -24,8 +25,10 @@ 0 2 36 0 AFRWE 0 20 50 0 AIA 0 18 10 0 AIRCON + 10 0 82 0 AIRDENOC 2 0 208 1 AKHS 2 0 209 1 AKMS + 10 2 14 0 ALBDOICE 0 19 1 0 ALBDO 0 20 108 0 ALBGRD 0 20 107 0 ALBSAT @@ -37,6 +40,7 @@ 0 3 11 0 ALTS 10 0 37 0 ALTWH 2 0 219 1 AMIXL + 4 5 0 0 AMPL 3 192 11 0 AMSRE10 3 192 12 0 AMSRE11 3 192 13 0 AMSRE12 @@ -65,7 +69,11 @@ 0 190 0 0 ATEXT 3 1 13 0 ATMDIV 0 20 101 0 ATMTK + 4 10 7 0 AURELEC + 20 1 8 0 AVECTNUM + 20 1 7 0 AVHRATIO 2 3 201 1 AVSFT + 10 191 4 0 BARDSF 2 3 200 1 BARET 10 4 7 0 BATHY 10 0 44 0 BENINX @@ -79,6 +87,7 @@ 2 0 197 1 BMIXL 0 7 201 1 BNEGELAY 2 3 4 0 BOTLST + 10 4 29 0 BPEH 0 7 202 1 BPOSELAY 0 15 1 0 BREF 3 1 27 0 BRFLF @@ -87,6 +96,11 @@ 0 15 2 0 BRVEL 0 15 0 0 BSWID 4 3 0 0 BTOT + 2 6 2 0 BUILDCOVER + 2 6 3 0 BUILDHGT + 2 4 21 0 BURNABAREA + 2 4 20 0 BURNAREA + 2 4 17 0 BURNIDX 4 3 1 0 BVEC1 4 3 2 0 BVEC2 4 3 3 0 BVEC3 @@ -94,6 +108,7 @@ 4 8 4 0 CAIIRAD 0 7 206 1 CANGLE 2 1 192 1 CANL + 2 0 63 0 CANTMP 0 7 6 0 CAPE 0 1 88 0 CATCP 0 19 29 0 CATEDR @@ -111,27 +126,48 @@ 0 6 11 0 CDCB 0 6 22 0 CDCC 0 17 3 0 CDCDLTFD + 0 1 162 0 CDCIMF 0 6 23 0 CDCIMR + 0 1 161 0 CDCLWMF 0 6 2 0 CDCON 0 6 12 0 CDCTOP 0 6 8 0 CDCT 0 17 2 0 CDGDLTFD + 0 3 43 0 CDGFLUX + 0 20 80 0 CDIVMF 0 6 14 0 CDLYR 0 6 192 1 CDLYR + 0 1 163 0 CDRMF + 0 1 164 0 CDSMF + 0 3 35 0 CDTMF + 0 1 165 0 CDTWMF 0 4 195 1 CDUVB + 0 1 160 0 CDWFMF + 0 3 42 0 CDWGFLUX 10 0 16 0 CDWW 0 2 29 0 CD 0 2 196 1 CD + 0 1 154 0 CECIMF + 0 1 152 0 CECLWMF + 0 1 158 0 CEFMF + 0 3 40 0 CEGFLUX 0 6 13 0 CEIL + 0 20 78 0 CEMF + 0 1 156 0 CERMF + 0 3 36 0 CETMF + 0 1 150 0 CEWVMF 0 5 197 1 CFNLF 0 4 199 1 CFNSF 0 1 34 0 CFRZR 0 1 193 1 CFRZR 0 20 54 0 CGDRC 0 20 53 0 CGPRC + 10 0 76 0 CHNCK + 0 1 147 0 CHPRECIP 10 3 2 0 CH 0 18 17 0 CIAIRC 0 19 206 1 CICEL + 0 1 146 0 CICEPR 0 1 35 0 CICEP 0 1 194 1 CICEP 10 2 12 0 CICES @@ -147,7 +183,7 @@ 2 3 22 0 CISICE 2 3 20 0 CISOILM 2 0 23 0 CISOILW - 0 19 50 0 CITEDR + 0 19 50 0 CITEDR 0 19 207 1 CIVIS 3 2 9 0 CLDALB 3 2 10 0 CLDEMISS @@ -157,12 +193,23 @@ 3 2 6 0 CLDPER 3 2 4 0 CLDPHAS 3 1 16 0 CLDRAD + 3 1 31 0 CLDREF 3 2 3 0 CLDTYPE 0 1 235 1 CLLMR 0 1 22 0 CLMR 3 0 7 0 CLOUDM + 3 1 32 0 CLRREF + 0 3 39 0 CMATMOS + 0 1 155 0 CNCIMF + 0 1 153 0 CNCLWMF + 0 20 81 0 CNETS + 0 3 41 0 CNGFLUX 0 2 216 1 CNGWDU 0 2 217 1 CNGWDV + 0 20 79 0 CNMF + 0 1 157 0 CNRMF + 0 1 159 0 CNSMF + 0 3 37 0 CNTMF 0 3 209 1 CNVDEMF 0 3 208 1 CNVDMF 0 0 196 1 CNVHR @@ -172,8 +219,10 @@ 0 2 213 1 CNVV 2 0 13 0 CNWAT 2 0 196 1 CNWAT + 0 1 151 0 CNWVMF 0 20 56 0 COAIA 0 20 1 0 COLMD + 2 4 24 0 COMBCO 0 20 51 0 CONAIR 0 7 19 0 CONAPES 0 1 216 1 CONDP @@ -210,6 +259,7 @@ 0 1 33 0 CRAIN 0 1 192 1 CRAIN 0 20 71 0 CRERELSP + 2 0 48 0 CROPCOV 0 1 76 0 CRRATE 4 2 9 0 CRTFRQ 1 2 13 0 CSAFC @@ -220,6 +270,8 @@ 3 1 17 0 CSKYRAD 0 1 36 0 CSNOW 0 1 195 1 CSNOW + 20 3 8 0 CSPPCAP + 20 3 9 0 CSPPROD 0 1 58 0 CSRATE 0 1 55 0 CSRWE 0 5 195 1 CSULF @@ -231,29 +283,41 @@ 0 19 21 0 CTP 0 6 16 0 CUEFI 0 6 194 1 CUEFI + 0 19 239 1 CWASP + 0 1 149 0 CWATERMR 0 6 6 0 CWAT 0 7 195 1 CWDI 0 6 15 0 CWORK 0 6 193 1 CWORK 0 1 48 0 CWP 1 1 195 1 CWR + 0 1 166 0 CWVF + 0 19 41 0 DBHEIGHT 10 4 195 1 DBSS 0 7 203 1 DCAPE + 2 4 33 0 DDLMC 0 20 12 0 DDMFLX 0 3 30 0 DDRATE + 2 6 8 0 DDROAD + 2 6 6 0 DDROOF 0 20 15 0 DDVEL - 2 0 30 0 DECF + 2 4 35 0 DDWMC + 2 0 30 0 DECFC + 0 2 61 0 DEC 0 3 14 0 DENALT 0 3 10 0 DEN 0 0 7 0 DEPR 1 0 13 0 DEPWSS + 20 1 6 0 DFPRATIO 10 2 2 0 DICED + 4 10 3 0 DIDXSG 4 4 2 0 DIFEFLUX 4 4 4 0 DIFIFLUX 4 4 0 0 DIFPFLUX 3 6 5 0 DIFSOLEX 3 6 4 0 DIFSOLIR 0 4 14 0 DIFSWRF + 2 6 7 0 DIOWALL 10 1 0 0 DIRC 2 3 14 0 DIREC 10 0 10 0 DIRPW @@ -264,36 +328,82 @@ 10 0 32 0 DIRWWW 1 0 7 0 DISRS 0 3 6 0 DIST + 0 21 13 0 DIVENTFLUX + 0 21 16 0 DIVKENGFLUX + 0 21 14 0 DIVPOTFLUX + 0 21 17 0 DIVTOTFLUX + 0 21 18 0 DIVWENTFLUX + 0 21 15 0 DIVWPOTFLUX + 2 4 29 0 DLFL 0 5 8 0 DLWRFCS 0 5 3 0 DLWRF 0 5 192 1 DLWRF 0 3 28 0 DMFLX + 0 4 54 0 DNSWRFLX + 0 1 123 0 DPTYPE 0 0 6 0 DPT + 2 0 43 0 DRAINDIR + 2 4 13 0 DRFACT 2 4 8 0 DRTCODE 0 18 12 0 DRYDEP 0 19 237 1 DRYTPROB 4 7 2 0 DSKDAY 4 7 1 0 DSKINT 4 7 3 0 DSKNGT + 10 3 20 0 DSLIBARCOR 10 3 1 0 DSLM 10 191 3 0 DSLOBSO 0 191 3 0 DSLOBS 0 4 52 0 DSWRFCS + 0 4 61 0 DSWRFLXCS 0 4 13 0 DSWRFLX 0 4 7 0 DSWRF 0 4 192 1 DSWRF + 0 2 60 0 DTC 0 4 204 1 DTRF 2 4 7 0 DUFMCODE 0 4 194 1 DUVB + 2 4 30 0 DWFL + 10 3 4 0 DWHFLUX 0 4 12 0 DWUVR 0 2 9 0 DZDT 0 7 207 1 E3KH + 0 21 22 0 EADYGR 3 2 11 0 EAODR + 10 1 5 0 EASTCUR + 0 21 5 0 EASTENTFLUX + 0 21 19 0 EASTHFLUX + 0 21 9 0 EASTKINFLUX + 0 21 7 0 EASTPOTFLUX + 0 21 11 0 EASTTOTFLUX + 0 2 64 0 EASTTSSOD + 0 2 66 0 EASTTSSSR + 0 2 62 0 EASTTSS + 10 3 5 0 EASTWSS + 10 4 23 0 EASTWVEL 3 5 5 0 EBSDSSTS 3 5 4 0 EBSSTSTD + 2 0 61 0 ECORFLUX + 4 10 6 0 EDISSTIX 0 19 30 0 EDPARM + 0 1 138 0 EFARCICE + 0 1 140 0 EFARGRL + 0 1 141 0 EFARHAIL + 0 1 137 0 EFARRAIN + 0 1 142 0 EFARSIC + 0 1 139 0 EFARSNOW + 20 0 5 0 EFFTEMP 0 7 204 1 EFHL + 0 1 129 0 EFRCCWAT + 0 1 131 0 EFRCICE + 0 1 133 0 EFRGRL + 0 1 134 0 EFRHAIL + 0 1 130 0 EFRRAIN + 0 1 136 0 EFRSICEC + 0 1 135 0 EFRSLC + 0 1 132 0 EFRSNOW 0 3 222 1 EFSH + 10 0 89 0 EFWS 0 7 9 0 EHLX 2 0 237 1 EIWATER 4 2 1 0 ELCDEN @@ -303,9 +413,15 @@ 0 0 205 1 ELMELT 0 191 197 1 ELONN 0 191 193 1 ELON + 0 20 76 0 EMISFLX + 2 0 62 0 EMISS + 10 0 93 0 EMIWAVE 0 1 211 1 EMNP + 2 4 19 0 ENRELCOM + 0 21 3 0 ENTHALPY 0 0 3 0 EPOT 0 19 218 1 EPSR + 4 2 13 0 EQSLABT 10 3 252 1 EROSNP 1 0 3 0 ESCT 0 2 233 1 ESHR @@ -313,6 +429,8 @@ 3 1 0 0 ESTP 3 1 4 0 ESTUGRD 3 1 5 0 ESTVGRD + 10 3 14 0 ESURFWVEL + 10 4 38 0 ESWVP 0 2 32 0 ETACVV 10 3 250 1 ETCWL 4 3 4 0 ETOT @@ -320,6 +438,7 @@ 0 2 38 0 ETSS 4 6 3 0 EUVIRR 4 8 1 0 EUVRAD + 2 0 39 0 EVAPTRAT 2 0 6 0 EVAPT 0 1 79 0 EVARATE 2 3 198 1 EVBS @@ -327,22 +446,29 @@ 4 3 5 0 EVEC1 4 3 6 0 EVEC2 4 3 7 0 EVEC3 - 2 0 29 0 EVERF + 2 0 29 0 EVGFC 0 1 6 0 EVP 2 0 213 1 EWATR + 0 2 50 0 EWINDSTR 0 2 39 0 EWTPARM + 0 3 26 0 EXPRES 4 6 5 0 F107 + 20 1 5 0 FALPRATE 2 4 3 0 FBAREA 2 4 10 0 FBUPINX 0 6 37 0 FCONPC + 10 0 81 0 FCVOCEAN + 2 4 32 0 FDLMC 3 5 3 0 FDNSSTMP 2 4 11 0 FDSRTE + 2 4 34 0 FDWMC 1 0 0 0 FFLDG 1 0 1 0 FFLDRO 2 4 6 0 FFMCODE 0 1 228 1 FICEAC 0 6 21 0 FICE 0 6 199 1 FICE + 2 4 15 0 FIREDIDX 3 0 9 0 FIREDI 2 4 1 0 FIREODT 2 4 0 0 FIREOLK @@ -350,11 +476,15 @@ 1 0 12 0 FLDPSW 0 19 205 1 FLGHT 0 7 18 0 FLXRN + 20 1 9 0 FMALVRH + 0 6 50 0 FOG 2 4 4 0 FOSINDX 0 1 67 0 FPRATE 0 6 32 0 FRACCC + 2 4 36 0 FRADPOW 0 1 43 0 FRAIN 0 1 202 1 FRAIN + 4 5 2 0 FREQ 10 0 63 0 FREWWW 10 0 17 0 FRICVW 0 2 30 0 FRICV @@ -362,12 +492,19 @@ 0 1 227 1 FROZR 2 3 24 0 FRSTINX 10 0 64 0 FRWWTSW + 10 2 29 0 FRZDATE + 10 2 27 0 FRZMLTPOT 0 1 225 1 FRZR 10 3 204 1 FRZSPR 0 1 121 0 FSNOWC 0 6 36 0 FSTRPC + 2 4 23 0 FUELLOAD + 2 4 25 0 FUELMC + 10 4 31 0 FWFC + 10 4 30 0 FWFSW 2 4 5 0 FWINX 0 1 95 0 FZPRATE + 0 3 33 0 GAMSL 0 18 3 0 GDCES 0 18 4 0 GDIOD 0 18 5 0 GDRADP @@ -377,13 +514,19 @@ 0 2 44 0 GEOWS 2 0 10 0 GFLUX 2 0 193 1 GFLUX + 0 3 34 0 GHARGRD + 2 5 0 0 GLACCOV 2 5 1 0 GLACTMP + 0 19 47 0 GLIRRTS + 20 0 3 0 GLOBETMP 0 3 9 0 GPA 0 1 75 0 GPRATE 0 3 4 0 GP 0 4 3 0 GRAD + 2 0 49 0 GRASSCOV 0 7 17 0 GRDRN 0 1 32 0 GRLE + 2 0 60 0 GROSSFLUX 3 6 1 0 GSOLEXP 3 6 0 0 GSOLIRR 0 2 22 0 GUST @@ -397,13 +540,16 @@ 0 19 198 1 HAILPROB 0 1 73 0 HAILPR 0 1 31 0 HAIL + 10 3 10 0 HALOCSSH 4 8 2 0 HARAD 0 19 210 1 HAVNI + 20 1 3 0 HBRATEAV 0 6 5 0 HCDC 0 6 26 0 HCONCB 0 6 27 0 HCONCT 0 0 12 0 HEATX 4 8 6 0 HELCOR + 10 3 18 0 HFLUXCOR 2 0 24 0 HFLUX 0 20 62 0 HGTMD 0 3 211 1 HGTN @@ -412,6 +558,7 @@ 0 3 5 0 HGT 0 19 32 0 HIFREL 2 4 2 0 HINDEX + 2 0 54 0 HIVEGCOV 0 7 8 0 HLCY 0 18 16 0 HMXACON 0 3 18 0 HPBL @@ -422,14 +569,22 @@ 0 15 15 0 HSR 0 3 7 0 HSTDV 10 0 3 0 HTSGW + 20 0 4 0 HUMIDX + 0 3 44 0 HWBT 0 3 3 0 ICAHT 1 2 7 0 ICECIL 10 2 0 0 ICEC 10 2 7 0 ICED + 10 2 19 0 ICEFTHCK 10 2 6 0 ICEG + 10 2 21 0 ICEMPD + 10 2 20 0 ICEMPF + 10 2 22 0 ICEMPV 10 2 9 0 ICEPRS + 0 1 127 0 ICEP 0 19 27 0 ICESC 0 19 37 0 ICESEV + 2 3 29 0 ICETEMP 1 2 6 0 ICETIL 10 2 1 0 ICETK 10 2 8 0 ICETMP @@ -442,6 +597,7 @@ 0 19 234 1 ICSEV 1 2 5 0 ICTKIL 2 0 207 1 ICWAT + 2 4 18 0 IGNCOMP 0 1 20 0 ILIQW 10 0 27 0 IMFTSW 10 0 26 0 IMFWW @@ -455,13 +611,19 @@ 4 0 3 0 IONTMP 0 1 68 0 IPRATE 3 1 1 0 IRRATE + 2 0 47 0 IRRCOV 10 191 0 0 IRTSEC 3 5 0 0 ISSTMP 0 19 235 1 JFWPRB 10 3 201 1 KENG + 0 21 1 0 KINENG 0 7 3 0 KOX + 4 10 5 0 KP + 2 4 12 0 KRIDX 10 0 43 0 KSSEDW 0 7 2 0 KX + 2 0 56 0 LAIHI + 2 0 55 0 LAILO 0 7 198 1 LAI 2 0 234 1 LAKEFRC 2 0 233 1 LANDFRC @@ -477,19 +639,26 @@ 0 3 205 1 LAYTH 0 6 3 0 LCDC 10 3 203 1 LCH + 1 2 15 0 LDEPTH 2 0 28 0 LEAINX + 2 4 31 0 LFMC 0 7 10 0 LFTX 0 7 192 1 LFTX + 0 0 30 0 LHFLXE + 0 0 31 0 LHFLXS 0 0 10 0 LHTFL 0 1 229 1 LICEAC 0 13 195 1 LIPMF 2 3 10 0 LIQVSM + 2 4 27 0 LLFL 0 15 4 0 LMAXBR 4 7 0 0 LMBINT 0 3 210 1 LMH 0 2 218 1 LMV + 1 2 14 0 LNDSNOWT 0 2 203 1 LOPP 0 2 199 1 LOUV + 2 0 53 0 LOVEGCOV 0 2 201 1 LOVV 2 3 3 0 LOWLSM 0 13 194 1 LPMTF @@ -508,9 +677,13 @@ 0 17 192 1 LTNG 0 17 1 0 LTPINX 0 5 2 0 LWAVR + 2 4 28 0 LWFL 0 5 194 1 LWHR 0 4 5 0 LWRAD 2 3 23 0 LWSNWP + 20 1 1 0 MACPRATE + 20 1 0 0 MALACASE + 20 1 4 0 MALAIMM 4 8 7 0 MASK 0 6 38 0 MASSDCD 0 6 39 0 MASSDCI @@ -526,6 +699,7 @@ 0 2 21 0 MAXGUST 0 16 198 1 MAXREF 0 1 27 0 MAXRH + 4 2 10 0 MAXUFZ 0 2 220 1 MAXUVV 0 2 222 1 MAXUW 0 1 245 1 MAXVIG @@ -539,16 +713,22 @@ 0 1 112 0 MDLWGVA 0 1 109 0 MDLWHVA 0 1 115 0 MDLWSVA + 10 0 74 0 MDTSWEL + 10 0 75 0 MDWWAVE 3 2 30 0 MEACST + 20 0 1 0 MEANRTMP + 0 19 44 0 MEANVGRTL 0 6 200 1 MFLUX 0 2 26 0 MFLX 0 2 193 1 MFLX 0 0 14 0 MINDPD 0 1 198 1 MINRH + 0 19 45 0 MINVGRTL 0 19 3 0 MIXHT 0 19 204 1 MIXLY 0 1 2 0 MIXR 0 7 212 1 MLFC + 10 2 28 0 MLTDATE 0 191 195 1 MLYNO 0 1 114 0 MMLWGDA 0 1 111 0 MMLWHDA @@ -567,6 +747,7 @@ 10 0 20 0 MSSW 2 0 11 0 MSTAV 2 0 194 1 MSTAV + 2 3 204 1 MSTAV 2 0 7 0 MTERH 10 4 1 0 MTHA 10 4 0 0 MTHD @@ -599,25 +780,53 @@ 0 6 30 0 NDENCD 2 0 31 0 NDVINX 2 0 217 1 NDVI + 2 0 59 0 NECOFLUX + 10 0 85 0 NEFOCEAN + 10 0 83 0 NEFW + 0 19 46 0 NETRADFLUX + 10 3 13 0 NETUPWFLUX + 0 5 9 0 NIRALBDIF + 0 5 11 0 NIRALBDIRG + 0 5 12 0 NIRALBDIRI + 0 5 13 0 NIRALBDIRV + 0 5 10 0 NIRALBDIR 0 191 196 1 NLATN 0 191 192 1 NLAT 0 3 206 1 NLGSP 0 3 25 0 NLPRES + 0 2 54 0 NLSRLH + 0 2 55 0 NLSRLM 0 5 6 0 NLWRCS 0 5 5 0 NLWRF 0 5 0 0 NLWRS 0 5 1 0 NLWRT + 20 0 6 0 NOREFTMP + 10 3 6 0 NORTHWSS 3 1 6 0 NPIXU + 10 1 6 0 NRTHCUR + 0 21 6 0 NRTHENTFLUX + 0 21 20 0 NRTHHFLUX + 0 21 10 0 NRTHKINFLUX + 0 21 8 0 NRTHPOTFLUX + 0 21 12 0 NRTHTOTFLUX + 0 2 65 0 NRTHTSSOD + 0 2 67 0 NRTHTSSSR + 0 2 63 0 NRTHTSS + 10 4 24 0 NRTHWVEL + 10 0 84 0 NSOCEAN + 10 3 15 0 NSURFWVEL 0 4 11 0 NSWRFCS 0 4 9 0 NSWRF 0 4 0 0 NSWRS 0 4 1 0 NSWRT + 10 4 39 0 NSWVP 4 4 6 0 NTRNFLUX 0 2 37 0 NTSS 0 1 106 0 NUMDG 0 1 107 0 NUMDH 0 1 104 0 NUMDR 0 1 105 0 NUMDS + 0 2 51 0 NWINDSTR 0 2 34 0 NWIND 0 19 214 1 NWSALB 10 0 19 0 NWSTR @@ -649,19 +858,35 @@ 2 0 235 1 PAHFLX 3 3 2 0 PBINFRC 3 3 1 0 PBLIFRC + 0 1 126 0 PBLIZZ 0 19 12 0 PBLREG 3 3 0 0 PBMVFRC + 0 1 125 0 PBSNOW + 0 19 49 0 PCONTB + 0 19 48 0 PCONTT 0 1 234 1 PCPDUR 0 14 202 1 PDMAX1 0 14 203 1 PDMAX24 + 10 0 72 0 PDTSWELL + 10 0 71 0 PDWWAVE + 4 2 12 0 PEAKDEN + 4 2 11 0 PEAKH + 20 0 8 0 PEQUTMP + 0 1 143 0 PERATE 10 0 11 0 PERPW 1 0 16 0 PERRATE 10 0 13 0 PERSW + 2 0 40 0 PEVAPTRAT 0 1 40 0 PEVAP 0 1 199 1 PEVAP 0 1 41 0 PEVPR 0 1 200 1 PEVPR + 20 1 2 0 PFEIRATE + 4 5 1 0 PHASE + 0 4 60 0 PHOARFCS 0 4 10 0 PHOTAR + 0 1 122 0 PIIDX + 0 21 21 0 PILENERGY 3 0 8 0 PIXST 2 0 238 1 PLANTTR 0 7 0 0 PLI @@ -670,9 +895,12 @@ 10 0 23 0 PMAXWH 0 13 192 1 PMTC 0 13 193 1 PMTF + 20 2 0 0 POPDEN 1 1 2 0 POP 2 3 9 0 POROS 2 3 197 1 POROS + 0 20 18 0 POTHPH + 0 21 0 0 POTINTENG 0 0 2 0 POT 0 14 199 1 POZO 0 14 198 1 POZT @@ -682,11 +910,13 @@ 1 1 194 1 PPFFG 0 1 231 1 PPINDX 1 1 1 0 PPOSP + 10 3 3 0 PRACTSAL 0 1 7 0 PRATE 4 0 4 0 PRATMP 0 15 5 0 PREC 0 3 13 0 PRESALT 0 3 8 0 PRESA + 0 3 46 0 PRESDHS 0 3 212 1 PRESN 0 3 0 0 PRES 0 3 1 0 PRMSL @@ -698,6 +928,7 @@ 0 19 216 1 PRSIGSVR 0 19 215 1 PRSVR 10 4 21 0 PRTSAL + 0 1 124 0 PSHOW 0 19 36 0 PSNOWS 0 3 2 0 PTEND 0 1 19 0 PTYPE @@ -706,23 +937,33 @@ 0 1 3 0 PWAT 10 0 46 0 PWAVEDIR 0 1 30 0 PWCAT + 10 0 68 0 PWDFSPAR + 10 0 69 0 PWDSSPAR + 10 0 70 0 PWDTSPAR 10 0 34 0 PWPER + 10 0 65 0 PWPFSPAR + 10 0 66 0 PWPSSPAR + 10 0 67 0 PWPTSPAR 0 1 226 1 PWTHER 0 1 219 1 QMAX 0 1 220 1 QMIN + 1 1 196 1 QPFARI + 1 1 197 1 QPFFFG 2 0 215 1 QREC 0 1 218 1 QZ0 0 16 201 1 RADARVIL 2 3 202 1 RADT + 2 4 14 0 RATESPRD 3 1 8 0 RAZA - 2 0 21 0 RCQ + 2 0 20 0 RCQ 2 0 204 1 RCQ - 2 0 20 0 RCSOL + 2 0 21 0 RCSOL 2 0 205 1 RCSOL 2 0 18 0 RCS 2 0 202 1 RCS 2 0 19 0 RCT 2 0 203 1 RCT + 1 2 16 0 RDEPTH 2 0 206 1 RDRIP 0 15 6 0 RDSP1 0 15 7 0 RDSP2 @@ -740,6 +981,8 @@ 0 16 192 1 REFZR 0 2 13 0 RELD 0 2 12 0 RELV + 20 3 0 0 RENPCAP + 20 3 1 0 RENPPROD 0 16 3 0 RETOP 0 16 197 1 RETOP 0 0 194 1 REV @@ -747,6 +990,7 @@ 0 15 10 0 RFCI 0 15 13 0 RFGRPL 0 15 14 0 RFHAIL + 3 1 30 0 RFL04 3 1 9 0 RFL06 3 1 10 0 RFL08 3 1 11 0 RFL16 @@ -764,6 +1008,8 @@ 0 7 194 1 RI 2 3 6 0 RLYRS 2 3 193 1 RLYRS + 2 6 1 0 ROADCOVER + 4 10 2 0 ROTIDX 0 1 65 0 RPRATE 2 0 16 0 RSMIN 2 0 200 1 RSMIN @@ -771,11 +1017,13 @@ 0 191 194 1 RTSEC 10 3 206 1 RUNUP 1 0 11 0 RVERSW + 10 0 80 0 RWAVEAFW 0 1 24 0 RWMR 0 18 14 0 SACON 0 20 100 0 SADEN 0 19 19 0 SALBD 3 0 1 0 SALBEDO + 10 3 21 0 SALINITY 10 4 193 1 SALIN 1 2 12 0 SALTIL 10 4 3 0 SALTY @@ -845,22 +1093,39 @@ 3 192 68 0 SBTAHI9 3 0 2 0 SBTMP 0 7 210 1 SCCP - 4 2 10 0 SCINT + 4 10 1 0 SCIDEXS4 + 4 10 0 0 SCINIDX 0 1 84 0 SCLIWC 0 1 83 0 SCLLWC 3 1 29 0 SCRAD 0 20 112 0 SCTAOTK 3 0 5 0 SCTPRES + 2 6 5 0 SDBUILDHGT 0 20 6 0 SDDMFLX 0 1 61 0 SDEN + 0 3 38 0 SDFSO 3 1 99 0 SDMPEMRR 0 3 20 0 SDSGSO 0 1 60 0 SDWE + 10 4 48 0 SEACMMT + 10 4 44 0 SEACMVT + 10 4 50 0 SEACPSALT + 10 4 51 0 SEACSALT + 10 4 49 0 SEACZMT + 10 4 45 0 SEACZVT + 10 4 46 0 SEAMMT + 10 4 42 0 SEAMVT + 10 3 12 0 SEASFLUX + 10 4 47 0 SEAZMT + 10 4 43 0 SEAZVT 0 20 11 0 SEDMFLX 1 2 3 0 SEDTK 1 2 4 0 SEDTMP + 0 19 39 0 SEEINDEX 10 3 207 1 SETUP 0 1 62 0 SEVAP + 10 0 86 0 SEVWAVE + 0 20 77 0 SFCEFLX 2 0 216 1 SFCRH 2 0 1 0 SFCR 2 0 34 0 SFCWRO @@ -880,6 +1145,8 @@ 3 192 33 0 SFRA174 3 192 34 0 SFRA175 3 192 35 0 SFRA176 + 0 2 47 0 SFRHEAT + 0 2 48 0 SFRMOIST 10 4 11 0 SFSALP 1 2 9 0 SFSAL 10 4 12 0 SFTMPP @@ -893,17 +1160,24 @@ 0 1 108 0 SHTPRM 0 7 13 0 SHWINX 10 2 3 0 SICED + 10 2 17 0 SICEHC + 10 2 15 0 SICEVOL + 4 8 8 0 SICFL + 10 2 23 0 SIFTP 4 9 1 0 SIGHAL 0 7 209 1 SIGH 4 9 2 0 SIGPAR 4 9 0 0 SIGPED 0 7 211 1 SIGT 0 19 217 1 SIPD + 2 0 50 0 SKINRC 0 0 17 0 SKINT 3 5 1 0 SKSSTMP + 0 19 38 0 SKYIDX 0 1 230 1 SLACC 0 19 23 0 SLDP 3 0 4 0 SLFTI + 0 17 5 0 SLNGPIDX 10 3 202 1 SLTFL 2 3 194 1 SLTYP 0 6 34 0 SLWTC @@ -912,6 +1186,7 @@ 0 1 113 0 SMLWGMA 0 1 110 0 SMLWHMA 0 1 116 0 SMLWSMA + 2 0 41 0 SMRATE 2 3 7 0 SMREF 2 3 195 1 SMREF 0 19 18 0 SNFALB @@ -928,9 +1203,17 @@ 0 1 208 1 SNOT 0 1 42 0 SNOWC 0 1 201 1 SNOWC + 0 1 148 0 SNOWERAT 0 1 233 1 SNOWLR + 0 19 40 0 SNOWLVL 0 19 236 1 SNOWLVL + 2 3 28 0 SNOWTMP + 10 2 13 0 SNOWTSI 0 1 222 1 SNOWT + 20 3 6 0 SNPVPCAP + 20 3 7 0 SNPVPPROD + 10 2 18 0 SNSIHC + 10 2 16 0 SNVOLSI 2 3 25 0 SNWDEB 2 3 27 0 SOILDEP 2 3 21 0 SOILICE @@ -948,6 +1231,7 @@ 3 1 28 0 SPBRT 10 1 1 0 SPC 4 6 4 0 SPECIRR + 10 0 88 0 SPECWI 4 1 0 0 SPEED 0 1 0 0 SPFH 10 0 45 0 SPFTR @@ -956,7 +1240,10 @@ 0 1 100 0 SPNCR 0 1 101 0 SPNCS 0 1 66 0 SPRATE + 2 4 16 0 SPRDCOMP 4 2 7 0 SPRDF + 20 3 4 0 SPVPCAP + 20 3 5 0 SPVPPROD 3 0 3 0 SPWAT 3 0 0 0 SRAD 0 1 85 0 SRAINC @@ -967,16 +1254,20 @@ 3 192 49 0 SRFAGR4 3 192 50 0 SRFAGR5 3 192 51 0 SRFAGR6 + 0 1 144 0 SRWATERC 0 1 12 0 SRWEQ 0 20 103 0 SSALBK 0 3 22 0 SSGSO + 10 3 19 0 SSHGTPARM 10 3 195 1 SSHG 3 5 2 0 SSKSSTMP 3 192 62 0 SSMS1715 3 192 63 0 SSMS1716 3 192 64 0 SSMS1717 3 192 65 0 SSMS1718 + 0 1 145 0 SSNOWWC 0 1 86 0 SSNOWW + 0 1 168 0 SSPFHW 1 0 6 0 SSRUN 1 0 193 1 SSRUN 10 3 200 1 SSST @@ -984,22 +1275,31 @@ 2 0 211 1 SSTOR 10 3 199 1 SSTT 0 6 35 0 SSWTC + 20 0 7 0 STDEFTMP + 10 3 11 0 STERCSSH + 10 0 96 0 STMCREST + 10 0 97 0 STMWAVE 0 19 200 1 STORPROB 0 7 208 1 STPC 0 2 4 0 STRM 0 1 87 0 STRPRATE + 2 0 52 0 SUBSRATE + 0 6 51 0 SUNFRAC 0 6 33 0 SUNSD 0 6 201 1 SUNSD 0 6 24 0 SUNS + 2 0 51 0 SURFRATE 10 3 192 1 SURGE 0 19 220 1 SVRTS 10 3 208 1 SWASH + 0 3 32 0 SWATERVP 0 4 2 0 SWAVR 10 0 7 0 SWDIR 0 20 7 0 SWDMFLX 0 7 5 0 SWEATX 10 0 8 0 SWELL 1 0 4 0 SWEPON + 2 3 30 0 SWET 10 0 47 0 SWHFSWEL 0 4 197 1 SWHR 10 0 48 0 SWHSSWEL @@ -1009,10 +1309,18 @@ 3 1 194 1 SWQI 0 4 6 0 SWRAD 0 19 212 1 SWSALB + 10 4 41 0 SWSTBC + 10 4 35 0 SWSTNR + 10 4 37 0 SWSTP + 10 4 40 0 SWTTBC + 10 4 34 0 SWTTNR + 10 4 36 0 SWTTP 0 6 1 0 TCDC + 0 191 4 0 TCDTRACK 0 0 204 1 TCHP 0 1 81 0 TCICON 0 14 2 0 TCIOZ + 0 1 169 0 TCISSPFHW 0 1 64 0 TCIWV 2 0 35 0 TCLASS 0 1 209 1 TCLSW @@ -1035,6 +1343,7 @@ 0 6 17 0 TCONDO 0 1 21 0 TCOND 0 6 195 1 TCOND + 0 1 167 0 TCSLW 10 3 242 1 TCSRG20 10 3 243 1 TCSRG30 10 3 244 1 TCSRG40 @@ -1046,7 +1355,10 @@ 0 1 51 0 TCWAT 0 0 20 0 TDCHT 0 2 31 0 TDCMOM + 10 0 94 0 TDMCREST + 10 0 95 0 TDMWAVE 2 0 36 0 TFRCT + 10 3 9 0 THERCSSH 0 0 197 1 THFLX 0 3 12 0 THICK 0 6 10 0 THUNC @@ -1055,10 +1367,13 @@ 0 18 7 0 TIACIP 0 18 8 0 TIACRP 10 3 251 1 TIDE + 0 7 20 0 TIIDEX 0 1 206 1 TIPD 0 19 11 0 TKE 0 1 90 0 TKMFLX + 0 19 42 0 TLBHEIGHT 0 17 4 0 TLGTFD + 0 19 43 0 TLTHEIGH 0 6 9 0 TMAXT 0 0 4 0 TMAX 0 0 5 0 TMIN @@ -1073,12 +1388,15 @@ 0 19 197 1 TORPROB 0 7 4 0 TOTALX 0 1 80 0 TOTCON + 0 21 2 0 TOTENG 0 18 13 0 TOTLWD 0 14 0 0 TOZNE 0 14 197 1 TOZ 2 0 37 0 TPERCT 0 19 219 1 TPFI 0 1 52 0 TPRATE + 0 2 231 1 TPWDIR + 0 2 232 1 TPWSPD 0 20 13 0 TRANHH 2 3 12 0 TRANSO 2 0 230 1 TRANS @@ -1087,11 +1405,13 @@ 0 2 225 1 TRWSPD 0 0 200 1 TSD1D 0 191 0 0 TSEC + 0 2 58 0 TSFCSTR 4 6 0 0 TSI 0 3 199 1 TSLSA 0 1 50 0 TSNOWP 0 1 241 1 TSNOW 2 0 2 0 TSOIL + 0 1 128 0 TSPRATE 0 1 57 0 TSRATE 0 1 53 0 TSRWE 0 19 203 1 TSTMC @@ -1116,8 +1436,11 @@ 10 3 205 1 TWLWAV 0 20 58 0 TYAAL 0 20 57 0 TYABA + 2 0 58 0 TYPHIVEG + 2 0 57 0 TYPLOVEG 0 3 16 0 U-GWD 0 3 194 1 U-GWD + 0 4 57 0 UBALBDIRG 10 1 194 1 UBARO 0 3 31 0 UCLSPRS 0 1 120 0 UCSCIW @@ -1135,8 +1458,10 @@ 0 5 4 0 ULWRF 0 5 193 1 ULWRF 0 3 27 0 UMFLX + 2 4 22 0 UNBURNAREA 0 1 118 0 UNCSH 0 2 45 0 UNDIV + 0 2 56 0 UNWIND 10 1 2 0 UOGRD 1 0 14 0 UPAPCP 1 0 15 0 UPASM @@ -1144,17 +1469,28 @@ 0 7 197 1 UPHL 2 3 2 0 UPLSM 2 3 1 0 UPLST + 2 0 44 0 UPSAREA + 10 4 27 0 UPWWVEL + 2 6 0 0 URBCOVER 3 1 192 1 USCT + 10 0 90 0 USMFO 10 0 21 0 USSD 0 2 27 0 USTM 0 2 194 1 USTM 0 4 53 0 USWRFCS 0 4 8 0 USWRF 0 4 193 1 USWRF + 20 0 0 0 UTHCIDX 0 4 205 1 UTRF + 0 4 15 0 UUVEARTH + 0 4 55 0 UVALBDIF + 0 4 58 0 UVALBDIRI + 0 4 56 0 UVALBDIR + 0 4 59 0 UVBDIRV 0 4 50 0 UVIUCS 0 4 51 0 UVI 0 7 196 1 UVI + 0 2 52 0 UWINDSTR 0 3 17 0 V-GWD 0 3 195 1 V-GWD 0 19 232 1 VAFTD @@ -1167,6 +1503,8 @@ 0 14 195 1 VDFOZ 0 2 208 1 VDFUA 0 2 209 1 VDFVA + 0 2 59 0 VDIV + 10 4 28 0 VEDDYDIF 0 2 204 1 VEDH 2 0 232 1 VEGMAX 2 0 231 1 VEGMIN @@ -1193,6 +1531,7 @@ 0 19 0 0 VIS 0 1 92 0 VKMFLX 0 20 52 0 VMXR + 0 2 57 0 VNWIND 10 1 3 0 VOGRD 3 4 4 0 VOLACDEM 3 4 7 0 VOLACDEN @@ -1211,6 +1550,9 @@ 0 0 15 0 VPTMP 0 2 224 1 VRATE 3 1 193 1 VSCT + 10 4 33 0 VSFC + 10 4 32 0 VSFSW + 10 0 91 0 VSMFO 2 0 25 0 VSOILM 2 3 16 0 VSOSM 10 0 22 0 VSSD @@ -1222,18 +1564,29 @@ 0 2 16 0 VVCSH 0 2 8 0 VVEL 2 0 27 0 VWILTM + 0 2 53 0 VWINDSTR 0 2 25 0 VWSH 0 2 192 1 VWSH + 2 6 4 0 VZAFRAC 10 4 17 0 WATDENA + 0 21 4 0 WATENTHALPY 10 4 16 0 WATERDEN 2 0 236 1 WATERSA 10 4 20 0 WATPDENA 10 4 19 0 WATPDEN 10 4 18 0 WATPTEMP 2 0 5 0 WATR + 10 0 79 0 WAVEFDIR + 10 0 78 0 WAVEFMAG 10 0 62 0 WAVEFREW + 4 5 3 0 WAVELGTH + 10 0 87 0 WAVEMSLC + 10 0 77 0 WAVESPSK + 10 0 92 0 WAVETEFO + 10 0 73 0 WCAPFRAC 2 0 223 1 WCCONV 0 0 13 0 WCF + 10 4 22 0 WCHEATC 2 0 221 1 WCINC 2 0 226 1 WCUFLX 2 0 227 1 WCVFLX @@ -1247,9 +1600,15 @@ 10 0 58 0 WDWTSWEL 0 1 13 0 WEASD 10 0 42 0 WESP + 20 0 2 0 WETBGTMP + 0 0 32 0 WETBPT 0 0 27 0 WETBT + 2 0 45 0 WETCOV 0 18 11 0 WETDEP + 0 0 206 1 WETGLBT + 2 0 46 0 WETTYPE 0 20 75 0 WFIREFLX + 2 4 26 0 WFIREPOT 1 2 2 0 WFRACT 10 0 59 0 WFWFSWEL 10 0 60 0 WFWSSWEL @@ -1259,13 +1618,18 @@ 2 0 26 0 WILT 2 0 201 1 WILT 0 2 33 0 WINDF + 20 3 2 0 WINDPCAP + 20 3 3 0 WINDPPROD 0 19 199 1 WINDPROB + 0 2 49 0 WINDSTR 3 1 19 0 WINDS 0 2 1 0 WIND 0 19 25 0 WIWW 10 0 193 1 WLENG 0 20 9 0 WLSMFLX 0 2 19 0 WMIXE + 0 3 45 0 WOBT + 2 0 42 0 WRDRATE 2 0 33 0 WROD 10 0 192 1 WSTP 10 0 18 0 WSTR @@ -1285,8 +1649,15 @@ 2 0 224 1 WVUFLX 2 0 225 1 WVVFLX 10 0 14 0 WWSDIR + 10 3 7 0 XCOMPSS + 10 4 25 0 XCOMPWV + 10 2 24 0 XICE 4 6 1 0 XLONG - 0 3 26 0 XPRES 4 8 0 0 XRAYRAD 4 6 2 0 XSHRT + 10 3 16 0 XSURFWVEL + 10 3 8 0 YCOMPSS + 10 4 26 0 YCOMPWV + 10 2 25 0 YICE + 10 3 17 0 YSURFVWEL 10 2 10 0 ZVCICEP From dead48320c71479a54104fd4adfa6173dd6c6071 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Thu, 4 Jul 2024 04:24:57 +0000 Subject: [PATCH 04/52] Update FIXversion to 20240703, scripts/exhafs_atm_prep.sh, ush/hafs_filter_topo.sh, and ush/hafs_make_orog.sh. These updates are needed with the latest hafs_utils.fd sync. Also, the filter_topo and make_orog_gsl steps are substantialy speeded up through OMP threading. --- scripts/exhafs_atm_prep.sh | 22 +++---- sorc/link_fix.sh | 2 +- ush/hafs_filter_topo.sh | 4 +- ush/hafs_make_orog.sh | 127 +++++++++++++++++-------------------- 4 files changed, 71 insertions(+), 84 deletions(-) diff --git a/scripts/exhafs_atm_prep.sh b/scripts/exhafs_atm_prep.sh index b5560429b..036f0e71a 100755 --- a/scripts/exhafs_atm_prep.sh +++ b/scripts/exhafs_atm_prep.sh @@ -193,12 +193,12 @@ if [ $gtype = uniform ] || [ $gtype = stretch ]; then date echo "............ execute $MAKEOROGSSH ................." # Run multiple tiles simulatneously for the orography - echo "${APRUN} $MAKEOROGSSH $CRES 1 $grid_dir $orog_dir $script_dir $FIXorog $DATA ${BACKGROUND}" >$DATA/orog.file1 - echo "${APRUN} $MAKEOROGSSH $CRES 2 $grid_dir $orog_dir $script_dir $FIXorog $DATA ${BACKGROUND}" >>$DATA/orog.file1 - echo "${APRUN} $MAKEOROGSSH $CRES 3 $grid_dir $orog_dir $script_dir $FIXorog $DATA ${BACKGROUND}" >>$DATA/orog.file1 - echo "${APRUN} $MAKEOROGSSH $CRES 4 $grid_dir $orog_dir $script_dir $FIXorog $DATA ${BACKGROUND}" >>$DATA/orog.file1 - echo "${APRUN} $MAKEOROGSSH $CRES 5 $grid_dir $orog_dir $script_dir $FIXorog $DATA ${BACKGROUND}" >>$DATA/orog.file1 - echo "${APRUN} $MAKEOROGSSH $CRES 6 $grid_dir $orog_dir $script_dir $FIXorog $DATA ${BACKGROUND}" >>$DATA/orog.file1 + echo "${APRUN} $MAKEOROGSSH $CRES 1 $grid_dir $orog_dir $FIXorog $DATA ${BACKGROUND}" >$DATA/orog.file1 + echo "${APRUN} $MAKEOROGSSH $CRES 2 $grid_dir $orog_dir $FIXorog $DATA ${BACKGROUND}" >>$DATA/orog.file1 + echo "${APRUN} $MAKEOROGSSH $CRES 3 $grid_dir $orog_dir $FIXorog $DATA ${BACKGROUND}" >>$DATA/orog.file1 + echo "${APRUN} $MAKEOROGSSH $CRES 4 $grid_dir $orog_dir $FIXorog $DATA ${BACKGROUND}" >>$DATA/orog.file1 + echo "${APRUN} $MAKEOROGSSH $CRES 5 $grid_dir $orog_dir $FIXorog $DATA ${BACKGROUND}" >>$DATA/orog.file1 + echo "${APRUN} $MAKEOROGSSH $CRES 6 $grid_dir $orog_dir $FIXorog $DATA ${BACKGROUND}" >>$DATA/orog.file1 if [ "$machine" = hera ] || [ "$machine" = orion ] || [ "$machine" = jet ] || [ "$machine" = hercules ]; then echo 'wait' >> orog.file1 fi @@ -249,9 +249,9 @@ elif [ $gtype = nest ]; then date echo "............ execute $MAKEOROGSSH ................." # Run multiple tiles simulatneously for the orography - echo "${APRUN} $MAKEOROGSSH $CRES 1 $grid_dir $orog_dir $script_dir $FIXorog $DATA ${BACKGROUND}" >$DATA/orog.file1 + echo "${APRUN} $MAKEOROGSSH $CRES 1 $grid_dir $orog_dir $FIXorog $DATA ${BACKGROUND}" >$DATA/orog.file1 for itile in $(seq 2 $ntiles); do - echo "${APRUN} $MAKEOROGSSH $CRES ${itile} $grid_dir $orog_dir $script_dir $FIXorog $DATA ${BACKGROUND}" >>$DATA/orog.file1 + echo "${APRUN} $MAKEOROGSSH $CRES ${itile} $grid_dir $orog_dir $FIXorog $DATA ${BACKGROUND}" >>$DATA/orog.file1 done if [ "$machine" = hera ] || [ "$machine" = orion ] || [ "$machine" = jet ] || [ "$machine" = hercules ]; then echo 'wait' >> orog.file1 @@ -313,9 +313,9 @@ elif [ $gtype = regional ] && [ ${nest_grids} -gt 1 ]; then date echo "............ execute $MAKEOROGSSH ................." # Run multiple tiles simulatneously for the orography - echo "${APRUN} $MAKEOROGSSH $CRES 7 $grid_dir $orog_dir $script_dir $FIXorog $DATA ${BACKGROUND}" >$DATA/orog.file1 + echo "${APRUN} $MAKEOROGSSH $CRES 7 $grid_dir $orog_dir $FIXorog $DATA ${BACKGROUND}" >$DATA/orog.file1 for itile in $(seq 8 $ntiles); do - echo "${APRUN} $MAKEOROGSSH $CRES ${itile} $grid_dir $orog_dir $script_dir $FIXorog $DATA ${BACKGROUND}" >>$DATA/orog.file1 + echo "${APRUN} $MAKEOROGSSH $CRES ${itile} $grid_dir $orog_dir $FIXorog $DATA ${BACKGROUND}" >>$DATA/orog.file1 done if [ "$machine" = hera ] || [ "$machine" = orion ] || [ "$machine" = jet ] || [ "$machine" = hercules ]; then echo 'wait' >> orog.file1 @@ -411,7 +411,7 @@ if [ $gtype = regional ]; then date echo "............ execute $MAKEOROGSSH ................." - echo "${APRUN} $MAKEOROGSSH $CRES 7 $grid_dir $orog_dir $script_dir $FIXorog $DATA ${BACKGROUND}" >$DATA/orog.file1 + echo "${APRUN} $MAKEOROGSSH $CRES 7 $grid_dir $orog_dir $FIXorog $DATA ${BACKGROUND}" >$DATA/orog.file1 if [ "$machine" = hera ] || [ "$machine" = orion ] || [ "$machine" = jet ] || [ "$machine" = hercules ]; then echo 'wait' >> orog.file1 fi diff --git a/sorc/link_fix.sh b/sorc/link_fix.sh index b7530ea4c..2f5b61a4b 100755 --- a/sorc/link_fix.sh +++ b/sorc/link_fix.sh @@ -9,7 +9,7 @@ cwd=$(pwd) HOMEhafs=$(pwd)/.. FIXhafs=${HOMEhafs}/fix -FIXversion=20230518 +FIXversion=20240703 mkdir -p ${FIXhafs} cd ${FIXhafs} mkdir -p fix_fv3 diff --git a/ush/hafs_filter_topo.sh b/ush/hafs_filter_topo.sh index 0d64cbc26..e4f27489e 100755 --- a/ush/hafs_filter_topo.sh +++ b/ush/hafs_filter_topo.sh @@ -24,8 +24,6 @@ if [ $# -ne 4 ]; then exit 1 fi -APRUN=${APRUN:-time} - #if [ $gtype = stretch ] || [ $gtype = regional_gfdl ]; then if [ $gtype = stretch ] || [ $gtype = regional ] || [ $gtype = regional_gfdl ] || [ $gtype = regional_esg ]; then stretch=$stretch_fac @@ -72,7 +70,7 @@ cat > input.nml <&1 | tee ./filter_topo.log +${APRUNO} ./hafs_utils_filter_topo.x 2>&1 | tee ./filter_topo.log export err=$?; err_chk date diff --git a/ush/hafs_make_orog.sh b/ush/hafs_make_orog.sh index 699b25fd9..dd536fcdf 100755 --- a/ush/hafs_make_orog.sh +++ b/ush/hafs_make_orog.sh @@ -7,94 +7,88 @@ # static topographic statistics files. # History: # 04/24/2019: This script was adopted from UFS_UTILS' fv3gfs_make_orog.sh +# 07/03/2024: Sync with latest UFS_UTILS' fv3gfs_make_orog.sh +# Usage: +# Arguments: +# res - "C" Resolution of model grid - 48, 96, 768, etc. +# tile - Tile number. +# griddir - Location of model 'grid' file. +# outdir - Location of the model orography file output by +# the 'orog' program. +# indir - Location of input land mask and terrain data. +# tmpdir - Location to create the work direcotry +# +# Input Files: +# $GRIDFILE - The model 'grid' file +# containing georeference info. +# topography.antarctica.ramp.30s.nc - RAMP terrain data. +# landcover.umd.30s.nc - Global land mask data. +# topography.gmted2010.30s.nc - Global USGS GMTED 2010 +# terrain data. +# +# Output Files: +# out.oro.nc - The model orography file (single tile). +# +# Condition codes: +# 0 - Normal termination. +# 1 - Incorrect number of script arguments. +#------------------------------------------------------------------- + + ################################################################################ set -x -o pipefail nargv=$# -inorogexist=0 - -if [ $nargv -eq 6 ]; then # lat-lon grid - lonb=$1 - latb=$2 - outdir=$3 - script_dir=$4 - is_latlon=1 - orogfile="none" - hist_dir=$5 - TMPDIR=$6 - workdir=$TMPDIR/latlon/orog/latlon_${lonb}x${latb} -elif [ $nargv -eq 7 ]; then # cubed-sphere grid +if [ $nargv -eq 6 ]; then res=$1 - lonb=$1 - latb=$1 tile=$2 griddir=$3 outdir=$4 - script_dir=$5 - is_latlon=0 - orogfile="none" - hist_dir=$6 - TMPDIR=$7 - workdir=$TMPDIR/C${res}/orog/tile$tile -elif [ $nargv -eq 8 ]; then # input your own orography files - res=$1 - lonb=$1 - latb=$1 - tile=$2 - griddir=$3 - outdir=$4 - is_latlon=0 - inputorog=$5 - script_dir=$6 - orogfile=$inputorog - inorogexist=1 - hist_dir=$7 - TMPDIR=$8 - workdir=$TMPDIR/C${res}/orog/tile$tile + indir=$5 + tmpdir=$6 else - echo "Number of arguments must be 7 or 8 for cubic sphere grid and 6 for lat-lon grid" - echo "Usage for cubic sphere grid: $0 resolution tile griddir outdir script_dir hist_dir TMPDIR" + echo "FATAL ERROR: Number of arguments must be 6." + echo "Usage: $0 resolution tile griddir outdir indir tmpdir." exit 1 fi -indir=$hist_dir executable=${OROGEXEC:-$exec_dir/hafs_utils_orog.x} +workdir=$tmpdir/C${res}/orog/tile$tile mkdir -p $workdir $outdir -mtnres=1 -efac=0 -blat=0 - -if [ $is_latlon -eq 1 ]; then - OUTGRID="none" -else - OUTGRID="C${res}_grid.tile${tile}.nc" -fi +GRIDFILE="C${res}_grid.tile${tile}.nc" # Make Orograraphy -echo "OUTGRID = $OUTGRID" +echo "GRIDFILE = $GRIDFILE" echo "workdir = $workdir" echo "outdir = $outdir" echo "indir = $indir" cd $workdir -${NLN} ${indir}/thirty.second.antarctic.new.bin fort.15 -${NLN} ${indir}/landcover30.fixed . -${NLN} ${indir}/gmted2010.30sec.int fort.235 -if [ $inorogexist -eq 1 ]; then - ${NCP} $inputorog . -fi - -if [ $is_latlon -eq 0 ]; then - ${NCP} ${griddir}/$OUTGRID . -fi - -echo $mtnres $lonb $latb $efac $blat > INPS -echo $OUTGRID >> INPS -echo $orogfile >> INPS +${NLN} ${indir}/topography.antarctica.ramp.30s.nc . +${NLN} ${indir}/landcover.umd.30s.nc . +${NLN} ${indir}/topography.gmted2010.30s.nc . +${NLN} ${griddir}/$GRIDFILE . + +#------------------------------------------------------------------- +# Set up program namelist. The entries are: +# +# 1 - GRIDFILE - model 'grid' file. +# 2 - Logical to output land mask only. When creating a grid +# for the coupled model ("ocn" resolution is specified) +# this is true. The mask is then tweaked during the +# ocean merge step before the 'orog' program is run again +# (in fv3gfs_ocean_merge.sh) to create the full 'orog' +# file. When false, the 'orog' program outputs the +# full orography file. +# 3 - The input file from the ocean merge step. Defaults +# to 'none' for this script. +#------------------------------------------------------------------- + +echo $GRIDFILE > INPS if [ -z ${ocn+x} ]; then echo ".false." >> INPS else @@ -108,12 +102,7 @@ ${SOURCE_PREP_STEP} ${APRUNO} ./hafs_utils_orog.x < INPS 2>&1 | tee ./orog.log export err=$?; err_chk -if [ $is_latlon -eq 1 ]; then - outfile=oro.${lonb}x${latb}.nc -else - outfile=oro.C${res}.tile${tile}.nc -fi - +outfile=oro.C${res}.tile${tile}.nc mv ./out.oro.nc $outdir/$outfile echo "file $outdir/$outfile is created" echo "Successfully running $executable " From 84801fe6c53968cb596ac37630aa687756f7899b Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Thu, 4 Jul 2024 05:35:02 +0000 Subject: [PATCH 05/52] Update .gitmodules and submodules of hafs_forecast.fd and hafs_tracker.fd Update scripts/exhafs_enkf_hx.sh --- .gitmodules | 8 ++++---- scripts/exhafs_enkf_hx.sh | 8 ++++---- sorc/hafs_forecast.fd | 2 +- sorc/hafs_tracker.fd | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.gitmodules b/.gitmodules index da502fb73..bce9cbf06 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,19 +1,19 @@ [submodule "ufs-weather-model"] path = sorc/hafs_forecast.fd url = https://github.com/hafs-community/ufs-weather-model.git - branch = support/HAFS + branch = feature/hafs.v2.0.1 [submodule "UFS_UTILS"] path = sorc/hafs_utils.fd url = https://github.com/hafs-community/UFS_UTILS.git - branch = support/HAFS + branch = feature/hafs.v2.0.1 [submodule "gfdl-tracker"] path = sorc/hafs_tracker.fd url = https://github.com/hafs-community/gfdl-tracker.git - branch = support/HAFS + branch = feature/hafs.v2.0.1 [submodule "sorc/hafs_gsi.fd"] path = sorc/hafs_gsi.fd url = https://github.com/hafs-community/GSI.git - branch = support/HAFS + branch = feature/hafs.v2.0.1 [submodule "GPLOT"] path = sorc/hafs_graphics.fd/hrd_gplot url = https://github.com/hafs-community/GPLOT.git diff --git a/scripts/exhafs_enkf_hx.sh b/scripts/exhafs_enkf_hx.sh index ae38fc74b..be86054b5 100755 --- a/scripts/exhafs_enkf_hx.sh +++ b/scripts/exhafs_enkf_hx.sh @@ -308,16 +308,16 @@ ${WLN} $SATWHR satwhrbufr ${WLN} $GSNDBF1 gsnd1bufr ##${WLN} $B1HRS2 hirs2bufr ##${WLN} $B1MSU msubufr -${WLN} $B1HRS3 hirs3bufr -${WLN} $B1HRS4 hirs4bufr +#${WLN} $B1HRS3 hirs3bufr +#${WLN} $B1HRS4 hirs4bufr ${WLN} $B1AMUA amsuabufr ##${WLN} $B1AMUB amsubbufr ${WLN} $B1MHS mhsbufr -${WLN} $ESHRS3 hirs3bufrears +#${WLN} $ESHRS3 hirs3bufrears ${WLN} $ESAMUA amsuabufrears ##${WLN} $ESAMUB amsubbufrears #${WLN} $ESMHS mhsbufrears -${WLN} $HRS3DB hirs3bufr_db +#${WLN} $HRS3DB hirs3bufr_db ##${WLN} $AMUADB amsuabufr_db ##${WLN} $AMUBDB amsubbufr_db #${WLN} $MHSDB mhsbufr_db diff --git a/sorc/hafs_forecast.fd b/sorc/hafs_forecast.fd index 3cd869524..8b136694a 160000 --- a/sorc/hafs_forecast.fd +++ b/sorc/hafs_forecast.fd @@ -1 +1 @@ -Subproject commit 3cd8695245a4a819921febe5c04fb30275e58fed +Subproject commit 8b136694ad733cd1dd47d94069c7540fee3096d7 diff --git a/sorc/hafs_tracker.fd b/sorc/hafs_tracker.fd index 5f4aa28bd..781cc6ab0 160000 --- a/sorc/hafs_tracker.fd +++ b/sorc/hafs_tracker.fd @@ -1 +1 @@ -Subproject commit 5f4aa28bd65696eeaacc485d4c43af309f7e9ccb +Subproject commit 781cc6ab03554a5855e07c89a3fa4a9bfc0924cf From 3e29df5fd33d8d4ff603ccddc936efff0c41438b Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Thu, 4 Jul 2024 06:05:34 +0000 Subject: [PATCH 06/52] Update JHAFS_ANALYSIS, JHAFS_ENKF, and JHAFS_ENKF_HX to properly load gsi module on WCOSS2. --- jobs/JHAFS_ANALYSIS | 2 +- jobs/JHAFS_ENKF | 2 +- jobs/JHAFS_ENKF_HX | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/jobs/JHAFS_ANALYSIS b/jobs/JHAFS_ANALYSIS index 0494f6bf7..3c69a7459 100755 --- a/jobs/JHAFS_ANALYSIS +++ b/jobs/JHAFS_ANALYSIS @@ -36,7 +36,7 @@ if [ "${RUN_ENVIR^^}" != "NCO" ]; then if [ ${machine} = "wcoss2" ]; then module reset module use $HOMEhafs/sorc/hafs_gsi.fd/modulefiles - module load gsi_${machine} + module load gsi_${machine}.intel module load cray-pals/1.2.2 module load cfp/2.0.4 fi diff --git a/jobs/JHAFS_ENKF b/jobs/JHAFS_ENKF index 44932330f..c0e2385f8 100755 --- a/jobs/JHAFS_ENKF +++ b/jobs/JHAFS_ENKF @@ -36,7 +36,7 @@ if [ "${RUN_ENVIR^^}" != "NCO" ]; then if [ ${machine} = "wcoss2" ]; then module reset module use $HOMEhafs/sorc/hafs_gsi.fd/modulefiles - module load gsi_${machine} + module load gsi_${machine}.intel module load cray-pals/1.2.2 module load cfp/2.0.4 fi diff --git a/jobs/JHAFS_ENKF_HX b/jobs/JHAFS_ENKF_HX index a0e113013..e554e6511 100755 --- a/jobs/JHAFS_ENKF_HX +++ b/jobs/JHAFS_ENKF_HX @@ -36,7 +36,7 @@ if [ "${RUN_ENVIR^^}" != "NCO" ]; then if [ ${machine} = "wcoss2" ]; then module reset module use $HOMEhafs/sorc/hafs_gsi.fd/modulefiles - module load gsi_${machine} + module load gsi_${machine}.intel module load cray-pals/1.2.2 module load cfp/2.0.4 fi From 20ff9967c065673f302c5a9aa01db9383a3fffed Mon Sep 17 00:00:00 2001 From: BijuThomas-NOAA Date: Mon, 8 Jul 2024 15:26:24 +0000 Subject: [PATCH 07/52] Updates related to crtm/2.4.0.1 changes from crtm/2.4.0 for GSI --- parm/analysis/gsi/global_ozinfo.txt | 23 +++++++++++++++++++++++ parm/analysis/gsi/global_scaninfo.txt | 13 +++++++++++++ versions/build.ver | 2 +- versions/run.ver | 2 +- 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/parm/analysis/gsi/global_ozinfo.txt b/parm/analysis/gsi/global_ozinfo.txt index 7fcb4203d..94e8edb3c 100644 --- a/parm/analysis/gsi/global_ozinfo.txt +++ b/parm/analysis/gsi/global_ozinfo.txt @@ -163,6 +163,28 @@ ompsnp_npp 20 1 631.000 3.000 2.198 10.000 0.000 ompsnp_npp 21 1 1000.000 3.000 2.285 10.000 0.000 ompsnp_npp 22 -1 0.000 12.000 7.236 10.000 0.000 + ompsnp_n20 1 1 0.100 0.100 0.020 10.000 0.000 + ompsnp_n20 2 1 0.158 0.100 0.020 10.000 0.000 + ompsnp_n20 3 1 0.251 0.100 0.025 10.000 0.000 + ompsnp_n20 4 1 0.398 0.200 0.040 10.000 0.000 + ompsnp_n20 5 1 0.631 0.500 0.080 10.000 0.000 + ompsnp_n20 6 1 1.000 1.000 0.156 10.000 0.000 + ompsnp_n20 7 1 1.580 1.000 0.245 10.000 0.000 + ompsnp_n20 8 1 2.510 1.282 0.510 10.000 0.000 + ompsnp_n20 9 1 3.980 2.051 1.089 10.000 0.000 + ompsnp_n20 10 1 6.310 2.641 3.917 10.000 0.000 + ompsnp_n20 11 1 10.000 3.590 6.124 10.000 0.000 + ompsnp_n20 12 1 15.800 5.052 6.347 10.000 0.000 + ompsnp_n20 13 1 25.100 6.273 5.798 10.000 0.000 + ompsnp_n20 14 1 39.800 7.000 6.843 10.000 0.000 + ompsnp_n20 15 1 63.100 6.940 9.253 10.000 0.000 + ompsnp_n20 16 1 100.000 5.752 10.091 10.000 0.000 + ompsnp_n20 17 1 158.000 4.422 10.967 10.000 0.000 + ompsnp_n20 18 1 251.000 4.000 8.478 10.000 0.000 + ompsnp_n20 19 1 398.000 3.000 5.572 10.000 0.000 + ompsnp_n20 20 1 631.000 3.000 2.638 10.000 0.000 + ompsnp_n20 21 1 1000.000 3.000 3.525 10.000 0.000 + ompsnp_n20 22 -1 0.000 12.000 7.236 10.000 0.000 omi_aura 1 1 0.000 6.000 6.000 10.000 0.000 gome_metop-a 1 -1 0.000 12.000 2.236 10.000 0.000 gome_metop-b 1 -1 0.000 12.000 2.236 10.000 0.000 @@ -296,3 +318,4 @@ mls30_aura 54 -1 999.999 9.999 9.999 10.000 0.000 mls30_aura 55 -1 999.999 9.999 9.999 10.000 0.000 ompstc8_npp 1 1 0.000 6.000 6.000 10.000 0.000 + ompstc8_n20 1 1 0.000 6.000 6.000 10.000 0.000 diff --git a/parm/analysis/gsi/global_scaninfo.txt b/parm/analysis/gsi/global_scaninfo.txt index 7c4ccd1ce..c4380f272 100644 --- a/parm/analysis/gsi/global_scaninfo.txt +++ b/parm/analysis/gsi/global_scaninfo.txt @@ -13,6 +13,7 @@ amsub_n17 -48.950 1.100 90 10 81 atms_npp -52.725 1.110 96 7 90 atms_n20 -52.725 1.110 96 7 90 + atms_n21 -52.725 1.110 96 7 90 mhs_n18 -49.444 1.111 90 10 81 mhs_n19 -49.444 1.111 90 10 81 airs_aqua -48.900 1.100 90 10 81 @@ -31,11 +32,19 @@ msu_n14 -47.370 9.474 90 2 10 ssu -35.000 10.000 90 2 7 hsb -48.950 1.100 90 10 81 + seviri_m08 0.000 1.000 90 -1 -1 seviri_m09 0.000 1.000 90 -1 -1 seviri_m10 0.000 1.000 90 -1 -1 + seviri_m11 0.000 1.000 90 -1 -1 + abi_g16 0.000 1.000 90 -1 -1 + abi_g17 0.000 1.000 90 -1 -1 + abi_g18 0.000 1.000 90 -1 -1 + ahi_himawari8 0.000 1.000 90 -1 -1 + ahi_himawari9 0.000 1.000 90 -1 -1 cris_npp -48.330 3.3331 30 1 30 cris-fsr_npp -48.330 3.3331 30 1 30 cris-fsr_n20 -48.330 3.3331 30 1 30 + cris-fsr_n21 -48.330 3.3331 30 1 30 ssmis_f16 0.000 1.000 60 1 60 ssmis_f17 0.000 1.000 60 1 60 ssmis_f18 0.000 1.000 60 1 60 @@ -45,4 +54,8 @@ avhrr3_metop-b -52.612 1.182 90 1 90 avhrr3_metop-c -52.612 1.182 90 1 90 saphir_meghat -42.960 0.666 130 1 130 + viirs-m_npp -56.280 1.265 90 1 90 + viirs-m_j1 -56.280 1.265 90 1 90 + viirs-m_j2 -56.280 1.265 90 1 90 + gmi_gpm 0.000 1.000 221 15 207 !sat_sis start step nstep edge1 edge2 diff --git a/versions/build.ver b/versions/build.ver index 62ee09618..4cb3828c4 100644 --- a/versions/build.ver +++ b/versions/build.ver @@ -30,7 +30,7 @@ export mapl_ver=2.40.3 export gftl_shared_ver=1.6.1 export bacio_ver=2.4.1 export scotch_ver=7.0.4 -export crtm_ver=2.4.0 +export crtm_ver=2.4.0.1 export g2_ver=3.4.5 export g2tmpl_ver=1.10.2 export bufr_ver=12.0.0 diff --git a/versions/run.ver b/versions/run.ver index 3a3802513..598daa0dd 100644 --- a/versions/run.ver +++ b/versions/run.ver @@ -35,7 +35,7 @@ export mapl_ver=2.40.3 export gftl_shared_ver=1.6.1 export scotch_ver=7.0.4 export bacio_ver=2.4.1 -export crtm_ver=2.4.0 +export crtm_ver=2.4.0.1 export g2_ver=3.4.5 export g2tmpl_ver=1.10.2 export bufr_ver=12.0.0 From a93ed2f8b77387df72e5dbe7c78680059aa1b861 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Wed, 10 Jul 2024 03:38:44 +0000 Subject: [PATCH 08/52] * Update submodule hafs_utils.fd to point to a specific version for HAFS.v2.0.1, due to issues associated with the new updated restart file (sfc_data) with the latest UFS_UTILS chgres_cube updates. This is a temporary solution. The longer term solution is to update hafs_datool, VI, and GSI/DA so that they can work with the update restart files. * Update parm/mom6/regional/hafs_mom6.input.IN needed for MOM6 update. * Update scripts/exhafs_analysis.sh to link a new crtm fix file. --- parm/mom6/regional/hafs_mom6.input.IN | 4 ++-- scripts/exhafs_analysis.sh | 1 + sorc/hafs_utils.fd | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/parm/mom6/regional/hafs_mom6.input.IN b/parm/mom6/regional/hafs_mom6.input.IN index 5aad5aeee..ad12a54b2 100644 --- a/parm/mom6/regional/hafs_mom6.input.IN +++ b/parm/mom6/regional/hafs_mom6.input.IN @@ -93,8 +93,8 @@ BAD_VAL_SST_MAX = 55.0 ! [deg C] default = 45.0 BAD_VAL_SST_MIN = -3.0 ! [deg C] default = -2.1 ! The value of SST below which a bad value message is triggered, if ! CHECK_BAD_SURFACE_VALS is true. -DEFAULT_2018_ANSWERS = False !True ! [Boolean] default = True - ! This sets the default value for the various _2018_ANSWERS parameters. +DEFAULT_ANSWER_DATE = 20181231 ! default = 99991231 + ! This sets the default value for the various _ANSWERS_DATE parameters. WRITE_GEOM = 0 ! default = 1 ! If =0, never write the geometry and vertical grid files. If =1, write the ! geometry and vertical grid files only for a new simulation. If =2, always diff --git a/scripts/exhafs_analysis.sh b/scripts/exhafs_analysis.sh index 48c4c1850..fc308201b 100755 --- a/scripts/exhafs_analysis.sh +++ b/scripts/exhafs_analysis.sh @@ -297,6 +297,7 @@ for file in $(awk '{if($1!~"!"){print $1}}' ./satinfo | sort | uniq); do ${NLN} ${FIXcrtm}/${file}.SpcCoeff.bin ./ ${NLN} ${FIXcrtm}/${file}.TauCoeff.bin ./ done +${NLN} ${FIXcrtm}/amsua_metop-a_v2.SpcCoeff.bin ./amsua_metop-a_v2.SpcCoeff.bin ${NLN} ${FIXcrtm}/Nalli.IRwater.EmisCoeff.bin ./Nalli.IRwater.EmisCoeff.bin ${NLN} ${FIXcrtm}/NPOESS.IRice.EmisCoeff.bin ./NPOESS.IRice.EmisCoeff.bin diff --git a/sorc/hafs_utils.fd b/sorc/hafs_utils.fd index d9be1efad..d6673683a 160000 --- a/sorc/hafs_utils.fd +++ b/sorc/hafs_utils.fd @@ -1 +1 @@ -Subproject commit d9be1efad5f041d971e362d7f04aef53b770acf1 +Subproject commit d6673683a63fe9459140568203423cc7d306ac99 From c4f750878a22c7489d9065460cf4fcac1b5f4932 Mon Sep 17 00:00:00 2001 From: AndrewHazelton Date: Thu, 11 Jul 2024 13:53:59 +0000 Subject: [PATCH 09/52] Changes to source code, CCPP SDF files, and the build script to add scale-aware Tiedtke for HAFS --- sorc/build_forecast.sh | 4 ++-- sorc/hafs_forecast.fd | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sorc/build_forecast.sh b/sorc/build_forecast.sh index 1b06497f8..41806e967 100755 --- a/sorc/build_forecast.sh +++ b/sorc/build_forecast.sh @@ -18,8 +18,8 @@ else fi app=HAFS-MOM6W -./compile.sh "$target" "-DAPP=$app -DREGIONAL_MOM6=ON -DCDEPS_INLINE=ON -DMOVING_NEST=ON -DFASTER=ON -DDEBUG=$debug -DCCPP_SUITES=FV3_HAFS_v1_thompson_nonsst,FV3_HAFS_v1_thompson,FV3_HAFS_v1_gfdlmp_tedmf_nonsst,FV3_HAFS_v1_gfdlmp_tedmf,FV3_HAFS_v1_thompson_noahmp_nonsst,FV3_HAFS_v1_thompson_noahmp -D32BIT=ON" hafs_mom6 intel YES NO +./compile.sh "$target" "-DAPP=$app -DREGIONAL_MOM6=ON -DCDEPS_INLINE=ON -DMOVING_NEST=ON -DFASTER=ON -DDEBUG=$debug -DCCPP_SUITES=FV3_HAFS_v1_thompson_nonsst,FV3_HAFS_v1_thompson,FV3_HAFS_v1_gfdlmp_tedmf_nonsst,FV3_HAFS_v1_gfdlmp_tedmf,FV3_HAFS_v1_thompson_noahmp_nonsst,FV3_HAFS_v1_thompson_noahmp,FV3_HAFS_v1_thompson_tiedtke,FV3_HAFS_v1_thompson_tiedtke_nonsst -D32BIT=ON" hafs_mom6 intel YES NO app=HAFSW -./compile.sh "$target" "-DAPP=$app -DMOVING_NEST=ON -DFASTER=ON -DDEBUG=$debug -DCCPP_SUITES=FV3_HAFS_v1_thompson_nonsst,FV3_HAFS_v1_thompson,FV3_HAFS_v1_gfdlmp_tedmf_nonsst,FV3_HAFS_v1_gfdlmp_tedmf,FV3_HAFS_v1_thompson_noahmp_nonsst,FV3_HAFS_v1_thompson_noahmp -D32BIT=ON" hafs_hycom intel YES NO +./compile.sh "$target" "-DAPP=$app -DMOVING_NEST=ON -DFASTER=ON -DDEBUG=$debug -DCCPP_SUITES=FV3_HAFS_v1_thompson_nonsst,FV3_HAFS_v1_thompson,FV3_HAFS_v1_gfdlmp_tedmf_nonsst,FV3_HAFS_v1_gfdlmp_tedmf,FV3_HAFS_v1_thompson_noahmp_nonsst,FV3_HAFS_v1_thompson_noahmp,FV3_HAFS_v1_thompson_tiedtke,FV3_HAFS_v1_thompson_tiedtke_nonsst -D32BIT=ON" hafs_hycom intel YES NO diff --git a/sorc/hafs_forecast.fd b/sorc/hafs_forecast.fd index 8b136694a..b4f59a129 160000 --- a/sorc/hafs_forecast.fd +++ b/sorc/hafs_forecast.fd @@ -1 +1 @@ -Subproject commit 8b136694ad733cd1dd47d94069c7540fee3096d7 +Subproject commit b4f59a12963ef42a014fe580eaa09635eec50625 From 1b43edd56cee4868688c6b9835e5f37106caddb7 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Thu, 11 Jul 2024 14:18:07 +0000 Subject: [PATCH 10/52] Enable using imfshalcnv and imfshalcnv config option to use different CP schemes. --- parm/forecast/regional/input.nml.tmp | 4 ++-- parm/forecast/regional/input_nest.nml.tmp | 4 ++-- parm/hafs.conf | 2 ++ parm/hafs_holdvars.conf | 2 ++ parm/hafs_holdvars.txt | 2 ++ 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/parm/forecast/regional/input.nml.tmp b/parm/forecast/regional/input.nml.tmp index 6101887f9..0b7bc3ae4 100644 --- a/parm/forecast/regional/input.nml.tmp +++ b/parm/forecast/regional/input.nml.tmp @@ -219,8 +219,8 @@ cnvcld = .true. shal_cnv = @[shal_cnv_nml] !Shallow convection do_deep = @[do_deep_nml] - imfshalcnv = 2 - imfdeepcnv = 2 + imfshalcnv = @[imfshalcnv] + imfdeepcnv = @[imfdeepcnv] clam_deep = @[clam_deep] betal_deep = 0.05 betas_deep = 0.05 diff --git a/parm/forecast/regional/input_nest.nml.tmp b/parm/forecast/regional/input_nest.nml.tmp index 36d174c1a..57427e6eb 100644 --- a/parm/forecast/regional/input_nest.nml.tmp +++ b/parm/forecast/regional/input_nest.nml.tmp @@ -195,8 +195,8 @@ cnvcld = .true. shal_cnv = @[shal_cnv_nml] !Shallow convection do_deep = @[do_deep_nml] - imfshalcnv = 2 - imfdeepcnv = 2 + imfshalcnv = @[imfshalcnv] + imfdeepcnv = @[imfdeepcnv] clam_deep = @[clam_deep] betal_deep = 0.05 betas_deep = 0.05 diff --git a/parm/hafs.conf b/parm/hafs.conf index 452245b51..4cc9c7dfb 100644 --- a/parm/hafs.conf +++ b/parm/hafs.conf @@ -457,6 +457,8 @@ fhlwr=900. #aerosol option iaer=1011 lseaspray=.false. +imfshalcnv=2 +imfdeepcnv=2 #deep convection entrainment rate parameter clam_deep=0.15 c1_deep=0.002 diff --git a/parm/hafs_holdvars.conf b/parm/hafs_holdvars.conf index 96e11d06f..c62c71de6 100644 --- a/parm/hafs_holdvars.conf +++ b/parm/hafs_holdvars.conf @@ -206,6 +206,8 @@ fhswr={forecast/fhswr} fhlwr={forecast/fhlwr} iaer={forecast/iaer} lseaspray={forecast/lseaspray} +imfshalcnv={forecast/imfshalcnv} +imfdeepcnv={forecast/imfdeepcnv} clam_deep={forecast/clam_deep} c1_deep={forecast/c1_deep} c1_shal={forecast/c1_shal} diff --git a/parm/hafs_holdvars.txt b/parm/hafs_holdvars.txt index c94695ddb..21deafa1c 100644 --- a/parm/hafs_holdvars.txt +++ b/parm/hafs_holdvars.txt @@ -280,6 +280,8 @@ export fhswr={fhswr} export fhlwr={fhlwr} export iaer={iaer} export lseaspray={lseaspray} +export imfshalcnv={imfshalcnv} +export imfdeepcnv={imfdeepcnv} export clam_deep={clam_deep} export c1_deep={c1_deep} export c1_shal={c1_shal} From 4e95fb2cb6c549a47138277828c3dfa40cd07977 Mon Sep 17 00:00:00 2001 From: JungHoon Shin Date: Thu, 11 Jul 2024 14:22:11 +0000 Subject: [PATCH 11/52] Updated exhafs_atm_vi.sh, VI sources, and hafs_holdvars.txt, hafs_holdvars.conf, hafs.conf to improve the SLP and short range forecast. In convert_axi_xy.f90, the threshold for shallow composite vortex is changed from p_obs.lt.91510 (HAFS vortex SLP) to vslp.lt.92010 (TCVitals SLP) --- parm/hafs.conf | 1 + parm/hafs_holdvars.conf | 1 + parm/hafs_holdvars.txt | 1 + scripts/exhafs_atm_vi.sh | 3 +- .../sorc/hafs_vi/anl_enhance/anl_enhance.f90 | 60 ++++++++++++++----- .../hafs_vi/anl_enhance/convert_axi_xy.f90 | 13 ++-- 6 files changed, 58 insertions(+), 21 deletions(-) diff --git a/parm/hafs.conf b/parm/hafs.conf index 4cc9c7dfb..38facc775 100644 --- a/parm/hafs.conf +++ b/parm/hafs.conf @@ -338,6 +338,7 @@ vi_storm_relocation=yes vi_storm_modification=yes ;; yes: always VM; no: no VM; auto: do VM based on vmax diff; vmax_threshold: do VM based on vmax threshold vi_composite_vortex=2 ;; 1, hwrf-based composite vortex; 2, hfsa-based composite vortex vi_cloud=2 ;; 0: No cloud&vertical velocity modification as same as HAFSv1; 1: GFDL & partial Thompson microphysics 2:Thompson microphysics +vi_slp_adjust=0 ;; 0: Using old HWRF style for SLP; 1: Using improved SLP adjustment for HAFS vi_adjust_intensity=yes ;; place holder vi_adjust_size=yes ;; place holder diff --git a/parm/hafs_holdvars.conf b/parm/hafs_holdvars.conf index c62c71de6..522ed4cbb 100644 --- a/parm/hafs_holdvars.conf +++ b/parm/hafs_holdvars.conf @@ -53,6 +53,7 @@ vi_adjust_intensity={vi/vi_adjust_intensity} vi_adjust_size={vi/vi_adjust_size} vi_composite_vortex={vi/vi_composite_vortex} vi_cloud={vi/vi_cloud} +vi_slp_adjust={vi/vi_slp_adjust} atm_merge_method={atm_merge/atm_merge_method} analysis_merge_method={analysis_merge/analysis_merge_method} diff --git a/parm/hafs_holdvars.txt b/parm/hafs_holdvars.txt index 21deafa1c..5fa3ff33e 100644 --- a/parm/hafs_holdvars.txt +++ b/parm/hafs_holdvars.txt @@ -94,6 +94,7 @@ export vi_adjust_intensity={vi_adjust_intensity} export vi_adjust_size={vi_adjust_size} export vi_composite_vortex={vi_composite_vortex} export vi_cloud={vi_cloud} +export vi_slp_adjust={vi_slp_adjust} export atm_merge_method={atm_merge_method} export analysis_merge_method={analysis_merge_method} diff --git a/scripts/exhafs_atm_vi.sh b/scripts/exhafs_atm_vi.sh index 4b12f6390..cc2863cd7 100755 --- a/scripts/exhafs_atm_vi.sh +++ b/scripts/exhafs_atm_vi.sh @@ -18,6 +18,7 @@ vi_adjust_intensity=${vi_adjust_intensity:-yes} vi_adjust_size=${vi_adjust_size:-yes} vi_composite_vortex=${vi_composite_vortex:-2} vi_cloud=${vi_cloud:-0} +vi_slp_adjust=${vi_slp_adjust:-0} crfactor=${crfactor:-1.0} pubbasin2=${pubbasin2:-AL} @@ -546,7 +547,7 @@ else # warm-start from prior cycle or cold start from global/parent model iflag_cold=${iflag_cold:-0} ${NCP} -p ${EXEChafs}/hafs_tools_vi_anl_enhance.x ./ ${SOURCE_PREP_STEP} - echo 6 ${pubbasin2} ${iflag_cold} ${vi_cloud} | ${APRUNO} ./hafs_tools_vi_anl_enhance.x 2>&1 | tee ./vi_anl_enhance.log + echo 6 ${pubbasin2} ${iflag_cold} ${vi_cloud} ${vi_slp_adjust} | ${APRUNO} ./hafs_tools_vi_anl_enhance.x 2>&1 | tee ./vi_anl_enhance.log export err=$?; err_chk ${NCP} -p storm_anl_enhance storm_anl fi diff --git a/sorc/hafs_tools.fd/sorc/hafs_vi/anl_enhance/anl_enhance.f90 b/sorc/hafs_tools.fd/sorc/hafs_vi/anl_enhance/anl_enhance.f90 index 5e594a1be..8d0c72095 100644 --- a/sorc/hafs_tools.fd/sorc/hafs_vi/anl_enhance/anl_enhance.f90 +++ b/sorc/hafs_tools.fd/sorc/hafs_vi/anl_enhance/anl_enhance.f90 @@ -8,21 +8,22 @@ ! : Use observed ROCI and Rmax to correct the composite storm ! : (old version uses the averaged values from obs and model) ! Revised by: JungHoon Shin, 2022 -! : Remove/Clean up "go to" statements and modernizing -! : the code +! : Remove/Clean up "go to" statements and modernizing the code ! Revised by: JungHoon Shin Feb 2023 NCEP/EMC -! This code reads cloud and vertical velocity fields, -! which is modified by anl_combine.f90, and -! re-interpolcates those variables into newly adjusted +! This code reads cloud and vertical velocity fields, which is modified +! by anl_combine.f90, and re-interpolcates those variables into newly adjusted ! model pressure level (PMID1) in the TC core region ! Revised by: JungHoon Shin July 2023 NCEP/EMC ! The code is updated further with one more input argument (ivi_cloud) ! so that cloud modification can be on (1 or 2) or off (0). ! 0: No cloud changes in VI, 1: GFDL microphysics, 2: Thompson microphysics ! This change requires changes in exhafs_atm_vi.sh -! Now input arguement is like this: -! ./hafs_vi_anl_enhance.x 6 ${pubbasin2} ${iflag_cold} ${vi_cloud} ! Revised by: Chuan-Kai Wang (NCEP/EMC) 2024: fixes for storm near dateline +! Revised by: JungHoon Shin June 2024 NCEP/EMC +! Modify the code to produce better SLP (0 or 1 or SLP) +! 0: Use old HWRF SLP style, 1: Use advanced HAFS SLP style +! Usage: +! ./hafs_vi_anl_enhance.x 6 ${pubbasin2} ${iflag_cold} ${vi_cloud} ${vi_slp_adjust} | ${APRUNO} ./hafs_vi_anl_enhance.x ! ! DECLARE VARIABLES ! @@ -32,17 +33,17 @@ integer ITIM,IUNIT,I360,iflag_cold,IM1,JM1,id_storm,KST integer ICLAT,ICLON,Ipsfc,Ipcls,Irmax,ivobs,Ir_vobs,IFLAG,K850 integer ictr,jctr,imn1,imx1,jmn1,jmx1,imax1,jmax1,iter,IMV,JMV - integer imax12,jmax12,i_psm,j_psm,k1,ics,icen,jcen + integer imax12,jmax12,i_psm,j_psm,k1,ics,icen,jcen,ithres real GAMMA,G,Rd,D608,Cp,GRD,COEF1,COEF2,COEF3,DST1,TENV1,press1 real pi,pi_deg,arad,rad,TV1,ZSF1,PSF1,A,SUM11,vobs,vobs_o,VRmax - real SLP1_MEAN,SLP_AVE,SLP_SUM,SLP_MIN,DP_CT,psfc_obs,psfc_cls,PRMAX + real SLP1_MEAN,SLP_AVE,SLP_SUM,SLP_MIN,DP_CT,psfc_obs,psfc_cls,PRMAX,vslp real Rctp,cost,TWMAX1,RWMAX1,fact_v,dp_obs,distm,distt,delt_z1,pt_c real sum1,dist1,psfc_env,psfc_obs1,vobs_kt,vmax1,vmax2,d_max,RMX_d real z0,vmax_s,vmax_s_b,vobs1,RMN,W,W1,crtn,beta,VMAX,UUT,VVT,FF,R_DIST real UU11,VV11,UUM1,VVM1,QQ1,uv22,QQ,beta1,vmax_1,ff0,ps_min,beta11 real DIF,U_2S3,WT1,WT2,strm11,strm22,force,force2,PS_C1,PS_C2 real fact,pt_c1,ps_rat,TEK1,TEK2,ESRR,T_OLD,Q_OLD,ZSFC,TSFC,QENV1 - real dx,dy,dis + real dx,dy,dis,thres,beta_fac ! PARAMETER (NST=5,IR=200) @@ -199,7 +200,7 @@ arad=6.371E6*rad DST1=6.371E6*rad - READ(5,*)ITIM,basin,iflag_cold,ivi_cloud + READ(5,*)ITIM,basin,iflag_cold,ivi_cloud,ithres if(ivi_cloud.eq.0) write(*,*) 'Cloud modification is OFF!!' if(ivi_cloud.eq.1) write(*,*) 'Cloud change is ON (GFDL)!!' if(ivi_cloud.eq.2) write(*,*) 'Cloud change is ON (Thompson)!!' @@ -488,6 +489,8 @@ psfc_obs=Ipsfc*100. psfc_cls=Ipcls*100. + vslp=Ipsfc*100. + thres=ithres*100. PRMAX=Irmax*1. Rctp=Irmax*1. ! in km @@ -728,7 +731,7 @@ CALL axisym_xy_new(NX,NY,NZ,KMX,HLON,HLAT,VLON,VLAT, & CLON_NHC,CLAT_NHC,SLP_1,T_1,Q_1,U_1,V_1, & TH1,RADIUS2,SLPE,TENV,PCST,HP,HV,ZMAX,vobs1, & - dp_obs,psfc_obs,RWMAX1,PRMAX,RMN, & + dp_obs,psfc_obs,vslp,RWMAX1,PRMAX,RMN, & U_2SB,T_2SB,SLP_2SB,R_2SB,temp_e,DEPTH,SN) k850=1 ! use surface wind @@ -1120,9 +1123,37 @@ if(ps_rat.gt.10.)ps_rat=10.0 if(ps_rat.lt.(-10.))ps_rat=-10.0 + !shin------------------------------------------ + IF( ithres.eq.0 )THEN + beta_fac=ps_rat + ENDIF + + IF(ithres.ne.0)THEN + + if( ithres.ne.1 )then + if(vslp.ge.thres) beta_fac=ps_rat + if(vslp.lt.thres)then + beta_fac=beta + if(beta_fac.gt.0.8)then + beta_fac=sqrt(beta_fac)/2.0 + endif + endif + endif + + if( ithres.eq.1 )then + beta_fac=beta + if(beta_fac.gt.0.8)then + beta_fac=sqrt(beta_fac)/2.0 + endif + endif + + ENDIF + !shin----------------------------------------- + DO J=1,NY DO I=1,NX - SLP_1(I,J)=SLP_1(I,J)*ps_rat + ! SLP_1(I,J)=SLP_1(I,J)*ps_rat + SLP_1(I,J)=SLP_1(I,J)*beta_fac END DO END DO @@ -1132,7 +1163,8 @@ TEK1=TENV(I,J,K)+T_1(I,J,K) ! T_1(I,J,K)=(T_1(I,J,K)+T_X(I,J,K))*PW(k) ! Q_1(I,J,K)=(Q_1(I,J,K)+Q_X(I,J,K))*PW(k) - T_1(I,J,K)=T_X(I,J,K)*PW(k)*ps_rat +! T_1(I,J,K)=T_X(I,J,K)*PW(k)*ps_rat + T_1(I,J,K)=T_X(I,J,K)*PW(k)*beta_fac ! Q_1(I,J,K)=Q_X(I,J,K)*PW(k) TEK2=TENV(I,J,K)+T_1(I,J,K) ESRR=exp(4302.645*(TEK2-TEK1)/((TEK2-29.66)*(TEK1-29.66))) diff --git a/sorc/hafs_tools.fd/sorc/hafs_vi/anl_enhance/convert_axi_xy.f90 b/sorc/hafs_tools.fd/sorc/hafs_vi/anl_enhance/convert_axi_xy.f90 index 712d81b37..22e1aacb4 100644 --- a/sorc/hafs_tools.fd/sorc/hafs_vi/anl_enhance/convert_axi_xy.f90 +++ b/sorc/hafs_tools.fd/sorc/hafs_vi/anl_enhance/convert_axi_xy.f90 @@ -5,7 +5,7 @@ SUBROUTINE axisym_xy_new(NX,NY,NZ,KMX, & CLON_NHC,CLAT_NHC, & SLP_1,T_1,Q_1,U_1,V_1,th1,rp1, & SLPE,TENV,PCST,HP,HV,ZMAX,vobs, & - dp_obs,p_obs,vrmax,PRMAX,RMN, & + dp_obs,p_obs,vslp,vrmax,PRMAX,RMN, & U_2SB,T_2SB,SLP_2SB,R_2SB,temp_e,DEPTH,SN) ! Authors and history @@ -15,7 +15,8 @@ SUBROUTINE axisym_xy_new(NX,NY,NZ,KMX, & ! Revised by: JungHoon Shin 2023 NCEP/EMC ! Modify the code: If SLP of modified TC is too deep, ! call the shallow composite vortex to alleviate low SLP issue - +! Revised by: JungHoon Shin 2024 June NCEP/EMC +! Modify the code further when the code calls the shallow composite vortex ! SUBPROGRAM ! PRGRMMR ! @@ -29,7 +30,7 @@ SUBROUTINE axisym_xy_new(NX,NY,NZ,KMX, & real GAMMA,G,Rd,D608,Cp,eps6,pi,pi180,arad,deg2m,cost,zmax,vobs,p_obs,cost_old real count_smth,TWMAX,twsum,RWMAX,Rmax_0,fact,fact1,fact_v,vrmax,FC1,FC2,DFC real density,sum_vt,sum_vt2,th_m,xxx,yyy,rmw1,rmw2,dp_obs,roc1,roc2,cut_off - real aaa,bbb,ddd,RMN,RMN1,RMN2,prmax,DIF,DTX,DTY,DTR,RIJ_m,PIJ_m + real aaa,bbb,ddd,RMN,RMN1,RMN2,prmax,DIF,DTX,DTY,DTR,RIJ_m,PIJ_m,vslp ! PARAMETER (NST=5) ! PARAMETER (NX=420,NY=820,NZ=42) !* E-grid dimensions @@ -111,9 +112,9 @@ SUBROUTINE axisym_xy_new(NX,NY,NZ,KMX, & NHCT=75 END IF - if(p_obs.lt.91510.)then + if(vslp.lt.92010.)then NHCT=77 - print*,'minimum pressure < 915 mb', p_obs + print*,'minimum pressure < 920 mb', vslp, p_obs end if READ(NHCT)delc,thac !* vortex lon, lat @@ -139,7 +140,7 @@ SUBROUTINE axisym_xy_new(NX,NY,NZ,KMX, & READ(NHCT)(ur(k,i),i=1,IR1) !* vortex radial wind READ(NHCT)(th(k,i),i=1,IR1) !* vortex tangen wind print*,'k,th1,2,200=',k,th(k,1),th(k,2),th(k,IR) - if(p_obs.lt.91510.)then + if(vslp.lt.92010.)then do i=1,IR1 ! ur(k,i)=ur(k,i)*0.1 !* reduce convergence ur(k,i)=ur(k,i)*0.5 !* reduce convergence From f5b174d315952ca0d1d85574f72724951d69ba7d Mon Sep 17 00:00:00 2001 From: Weiguo Wang Date: Fri, 12 Jul 2024 14:20:44 +0000 Subject: [PATCH 12/52] update submodule sorc/hafs_forecast.fd --- sorc/hafs_forecast.fd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/hafs_forecast.fd b/sorc/hafs_forecast.fd index b4f59a129..c422a8611 160000 --- a/sorc/hafs_forecast.fd +++ b/sorc/hafs_forecast.fd @@ -1 +1 @@ -Subproject commit b4f59a12963ef42a014fe580eaa09635eec50625 +Subproject commit c422a861157563b4135839cbf7e8bf0e878b891b From d862855bc4bfe167093f293473ae63caff5281c5 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Fri, 12 Jul 2024 16:05:20 +0000 Subject: [PATCH 13/52] Update submodule sorc/hafs_forecast.fd, which cherry-picked @lisa-bengtsson's change to improve convection/radiation interaction. --- sorc/hafs_forecast.fd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/hafs_forecast.fd b/sorc/hafs_forecast.fd index c422a8611..7705a69b7 160000 --- a/sorc/hafs_forecast.fd +++ b/sorc/hafs_forecast.fd @@ -1 +1 @@ -Subproject commit c422a861157563b4135839cbf7e8bf0e878b891b +Subproject commit 7705a69b7f631e7acae2ed9d05c8e2eb3b896848 From 2883ca6da2420d0f786cb98c203bebae8680fd97 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Fri, 12 Jul 2024 16:51:09 +0000 Subject: [PATCH 14/52] Add the PARMmom6 config option for controlling MOM6 related parm files. Add parm/mom6/regional_hafs.v2.0.1a and parm/mom6/regional_hafs.v2.0.1b. --- parm/hafs.conf | 1 + parm/hafs_holdvars.txt | 1 + .../regional_hafs.v2.0.1a/hafs_mom6.input.IN | 957 ++++++++++++++++++ .../hafs_mom6_hat10.rtofs_ocean_3d_ic.in | 1 + .../hafs_mom6_hat10.rtofs_ocean_3d_obc.in | 1 + .../hafs_mom6_hat10.rtofs_ocean_ssh_ic.in | 1 + .../hafs_mom6_hat10.rtofs_ocean_ssh_obc.in | 1 + .../hafs_mom6_jtnh.rtofs_ocean_3d_ic.in | 1 + .../hafs_mom6_jtnh.rtofs_ocean_3d_obc.in | 1 + .../hafs_mom6_jtnh.rtofs_ocean_ssh_ic.in | 1 + .../hafs_mom6_jtnh.rtofs_ocean_ssh_obc.in | 1 + .../hafs_mom6_jtsh.rtofs_ocean_3d_ic.in | 1 + .../hafs_mom6_jtsh.rtofs_ocean_3d_obc.in | 1 + .../hafs_mom6_jtsh.rtofs_ocean_ssh_ic.in | 1 + .../hafs_mom6_jtsh.rtofs_ocean_ssh_obc.in | 1 + .../hafs_mom6_nhc.rtofs_ocean_3d_ic.in | 1 + .../hafs_mom6_nhc.rtofs_ocean_3d_obc.in | 1 + .../hafs_mom6_nhc.rtofs_ocean_ssh_ic.in | 1 + .../hafs_mom6_nhc.rtofs_ocean_ssh_obc.in | 1 + .../regional_hafs.v2.0.1b/hafs_mom6.input.IN | 935 +++++++++++++++++ .../hafs_mom6_hat10.rtofs_ocean_3d_ic.in | 1 + .../hafs_mom6_hat10.rtofs_ocean_3d_obc.in | 1 + .../hafs_mom6_hat10.rtofs_ocean_ssh_ic.in | 1 + .../hafs_mom6_hat10.rtofs_ocean_ssh_obc.in | 1 + .../hafs_mom6_jtnh.rtofs_ocean_3d_ic.in | 1 + .../hafs_mom6_jtnh.rtofs_ocean_3d_obc.in | 1 + .../hafs_mom6_jtnh.rtofs_ocean_ssh_ic.in | 1 + .../hafs_mom6_jtnh.rtofs_ocean_ssh_obc.in | 1 + .../hafs_mom6_jtsh.rtofs_ocean_3d_ic.in | 1 + .../hafs_mom6_jtsh.rtofs_ocean_3d_obc.in | 1 + .../hafs_mom6_jtsh.rtofs_ocean_ssh_ic.in | 1 + .../hafs_mom6_jtsh.rtofs_ocean_ssh_obc.in | 1 + .../hafs_mom6_nhc.rtofs_ocean_3d_ic.in | 1 + .../hafs_mom6_nhc.rtofs_ocean_3d_obc.in | 1 + .../hafs_mom6_nhc.rtofs_ocean_ssh_ic.in | 1 + .../hafs_mom6_nhc.rtofs_ocean_ssh_obc.in | 1 + scripts/exhafs_forecast.sh | 3 +- scripts/exhafs_ocn_prep.sh | 8 +- 38 files changed, 1932 insertions(+), 5 deletions(-) create mode 100644 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6.input.IN create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_3d_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_3d_obc.in create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_ssh_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_ssh_obc.in create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_3d_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_3d_obc.in create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_ssh_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_ssh_obc.in create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_3d_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_3d_obc.in create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_ssh_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_ssh_obc.in create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_3d_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_3d_obc.in create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_ssh_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_ssh_obc.in create mode 100644 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6.input.IN create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_3d_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_3d_obc.in create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_ssh_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_ssh_obc.in create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_3d_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_3d_obc.in create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_ssh_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_ssh_obc.in create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_3d_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_3d_obc.in create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_ssh_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_ssh_obc.in create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_3d_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_3d_obc.in create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_ssh_ic.in create mode 120000 parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_ssh_obc.in diff --git a/parm/hafs.conf b/parm/hafs.conf index 38facc775..1c300ac4d 100644 --- a/parm/hafs.conf +++ b/parm/hafs.conf @@ -65,6 +65,7 @@ HISTCHECK={oldcom}/{oldvit[stnum]:02d}{oldvit[basin1lc]}.{oldvit[YMDH]}.{RUN}.do PARMforecast={PARMhafs}/forecast/regional ;; The location where the forecast job will find its parm and namelist files PARMgsi={PARMhafs}/hafs-gsi/ ;; GSI input data for everything except CRTM PARMhycom={PARMhafs}/hycom/regional ;; hycom parameter files +PARMmom6={PARMhafs}/mom6/regional ;; mom6 parameter files PARMww3={PARMhafs}/ww3/regional ;; ww3 parameter files FIXhycom={FIXhafs}/fix_hycom ;; HYCOM fix files FIXww3={FIXhafs}/fix_ww3 ;; WW3 fix files diff --git a/parm/hafs_holdvars.txt b/parm/hafs_holdvars.txt index 5fa3ff33e..4df44970e 100644 --- a/parm/hafs_holdvars.txt +++ b/parm/hafs_holdvars.txt @@ -119,6 +119,7 @@ export DOCN_SOURCE={DOCN_SOURCE} export DATM_SOURCE={DATM_SOURCE} export PARMforecast={PARMforecast} +export PARMmom6={PARMmom6} export NHRS={NHRS} export NBDYHRS={NBDYHRS} diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6.input.IN b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6.input.IN new file mode 100644 index 000000000..da932e976 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6.input.IN @@ -0,0 +1,957 @@ + +! Where appropriate, parameters use usually given in MKS units. + +! This particular file is for the example in ice_ocean_SIS2/Baltic_OM4_025. + +! This MOM_input file typically contains only the non-default values that are needed to reproduce this example. +! A full list of parameters for this example can be found in the corresponding MOM_parameter_doc.all file +! which is generated by the model at run-time. + + +! === module MOM_domains === +REENTRANT_X = False ! [Boolean] default = True + ! If true, the domain is zonally reentrant. +!SYMMETRIC_MEMORY_ = True +!STATIC_MEMORY_ = False + +NIGLOBAL = @[NIGLOBAL] ! + ! The total number of thickness grid points in the x-direction in the physical + ! domain. With STATIC_MEMORY_ this is set in MOM_memory.h at compile time. +NJGLOBAL = @[NJGLOBAL] ! + ! The total number of thickness grid points in the y-direction in the physical + ! domain. With STATIC_MEMORY_ this is set in MOM_memory.h at compile time. +!NIHALO = 4 ! default = 4 + ! The number of halo points on each side in the x-direction. With + ! STATIC_MEMORY_ this is set as NIHALO_ in MOM_memory.h at compile time; without + ! STATIC_MEMORY_ the default is NIHALO_ in MOM_memory.h (if defined) or 2. +!NJHALO = 4 ! default = 4 + ! The number of halo points on each side in the y-direction. With + ! STATIC_MEMORY_ this is set as NJHALO_ in MOM_memory.h at compile time; without + ! STATIC_MEMORY_ the default is NJHALO_ in MOM_memory.h (if defined) or 2. +! LAYOUT = 4, 4 ! + ! The processor layout that was actually used. +! IO_LAYOUT = 1, 1 ! default = 1 + ! The processor layout to be used, or 0,0 to automatically set the io_layout to + ! be the same as the layout. + +! === module MOM === +DIABATIC_FIRST = False ! [Boolean] default = False + ! If true, apply diabatic and thermodynamic processes, including buoyancy + ! forcing and mass gain or loss, before stepping the dynamics forward. +USE_REGRIDDING = True ! [Boolean] default = False + ! If True, use the ALE algorithm (regridding/remapping). If False, use the + ! layered isopycnal algorithm. +THICKNESSDIFFUSE = True ! [Boolean] default = False + ! If true, interface heights are diffused with a coefficient of KHTH. +THICKNESSDIFFUSE_FIRST = True ! [Boolean] default = False + ! If true, do thickness diffusion before dynamics. This is only used if + ! THICKNESSDIFFUSE is true. +DT = 360.0 ! [s] + ! The (baroclinic) dynamics time step. The time-step that is actually used will + ! be an integer fraction of the forcing time-step (DT_FORCING in ocean-only mode + ! or the coupling timestep in coupled mode.) +DT_THERM = 360.0 ! [s] default = 3600.0 + ! The thermodynamic and tracer advection time step. Ideally DT_THERM should be + ! an integer multiple of DT and less than the forcing or coupling time-step, + ! unless THERMO_SPANS_COUPLING is true, in which case DT_THERM can be an integer + ! multiple of the coupling timestep. By default DT_THERM is set to DT. +THERMO_SPANS_COUPLING = True ! [Boolean] default = False + ! If true, the MOM will take thermodynamic and tracer timesteps that can be + ! longer than the coupling timestep. The actual thermodynamic timestep that is + ! used in this case is the largest integer multiple of the coupling timestep + ! that is less than or equal to DT_THERM. +USE_PSURF_IN_EOS = False ! [Boolean] default = False + ! If true, always include the surface pressure contributions in equation of + ! state calculations. +FRAZIL = True ! [Boolean] default = False + ! If true, water freezes if it gets too cold, and the accumulated heat deficit + ! is returned in the surface state. FRAZIL is only used if + ! ENABLE_THERMODYNAMICS is true. +DO_GEOTHERMAL = True ! [Boolean] default = False + ! If true, apply geothermal heating. +BOUND_SALINITY = True ! [Boolean] default = False + ! If true, limit salinity to being positive. (The sea-ice model may ask for more + ! salt than is available and drive the salinity negative otherwise.) +MIN_SALINITY = 0.01 ! [PPT] default = 0.01 + ! The minimum value of salinity when BOUND_SALINITY=True. The default is 0.01 + ! for backward compatibility but ideally should be 0. +C_P = 3925.0 !3992.0 ! [J kg-1 K-1] default = 3991.86795711963 + ! The heat capacity of sea water, approximated as a constant. This is only used + ! if ENABLE_THERMODYNAMICS is true. The default value is from the TEOS-10 + ! definition of conservative temperature. +CHECK_BAD_SURFACE_VALS = True ! [Boolean] default = False + ! If true, check the surface state for ridiculous values. +BAD_VAL_SSH_MAX = 50.0 ! [m] default = 20.0 + ! The value of SSH above which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SSS_MAX = 75.0 ! [PPT] default = 45.0 + ! The value of SSS above which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SST_MAX = 55.0 ! [deg C] default = 45.0 + ! The value of SST above which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SST_MIN = -3.0 ! [deg C] default = -2.1 + ! The value of SST below which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +DEFAULT_ANSWER_DATE = 20181231 ! default = 99991231 + ! This sets the default value for the various _ANSWERS_DATE parameters. +WRITE_GEOM = 0 ! default = 1 + ! If =0, never write the geometry and vertical grid files. If =1, write the + ! geometry and vertical grid files only for a new simulation. If =2, always + ! write the geometry and vertical grid files. Other values are invalid. +SAVE_INITIAL_CONDS = False ! [Boolean] default = False + ! If true, write the initial conditions to a file given by IC_OUTPUT_FILE. +IC_OUTPUT_FILE = "MOM_IC" ! default = "MOM_IC" + ! The file into which to write the initial conditions. + +! === module MOM_hor_index === +! Sets the horizontal array index types. + +! === module MOM_fixed_initialization === +INPUTDIR = "INPUT" ! default = "." + ! The directory in which input files are found. + +! === module MOM_grid_init === +GRID_CONFIG = "mosaic" ! + ! A character string that determines the method for defining the horizontal + ! grid. Current options are: + ! mosaic - read the grid from a mosaic (supergrid) + ! file set by GRID_FILE. + ! cartesian - use a (flat) Cartesian grid. + ! spherical - use a simple spherical grid. + ! mercator - use a Mercator spherical grid. +GRID_FILE = "ocean_hgrid.nc" ! + ! Name of the file from which to read horizontal grid data. +TOPO_CONFIG = "file" ! + ! This specifies how bathymetry is specified: + ! file - read bathymetric information from the file + ! specified by (TOPO_FILE). + ! flat - flat bottom set to MAXIMUM_DEPTH. + ! bowl - an analytically specified bowl-shaped basin + ! ranging between MAXIMUM_DEPTH and MINIMUM_DEPTH. + ! spoon - a similar shape to 'bowl', but with an vertical + ! wall at the southern face. + ! halfpipe - a zonally uniform channel with a half-sine + ! profile in the meridional direction. + ! benchmark - use the benchmark test case topography. + ! Neverland - use the Neverland test case topography. + ! DOME - use a slope and channel configuration for the + ! DOME sill-overflow test case. + ! ISOMIP - use a slope and channel configuration for the + ! ISOMIP test case. + ! DOME2D - use a shelf and slope configuration for the + ! DOME2D gravity current/overflow test case. + ! Kelvin - flat but with rotated land mask. + ! seamount - Gaussian bump for spontaneous motion test case. + ! dumbbell - Sloshing channel with reservoirs on both ends. + ! shelfwave - exponential slope for shelfwave test case. + ! Phillips - ACC-like idealized topography used in the Phillips config. + ! dense - Denmark Strait-like dense water formation and overflow. + ! USER - call a user modified routine. +TOPO_FILE = "ocean_topog.nc" ! default = "topog.nc" + ! The file from which the bathymetry is read. +MAXIMUM_DEPTH = 6500.0 ! [m] + ! The maximum depth of the ocean. +MINIMUM_DEPTH = 5.0 !9.5 ! [m] default = 0.0 + ! If MASKING_DEPTH is unspecified, then anything shallower than MINIMUM_DEPTH is + ! assumed to be land and all fluxes are masked out. If MASKING_DEPTH is + ! specified, then all depths shallower than MINIMUM_DEPTH but deeper than + ! MASKING_DEPTH are rounded to MINIMUM_DEPTH. + +! === module MOM_open_boundary === +! Controls where open boundaries are located, what kind of boundary condition to impose, and what data to apply, +! if any. +! khs_testMASKING_DEPTH = 1.0 ! [m] default = -9999.0 +MASKING_DEPTH = 5.0 ! [m] default = -9999.0 + ! The depth below which to mask points as land points, for which all fluxes are + ! zeroed out. MASKING_DEPTH is ignored if negative. +CHANNEL_CONFIG = "none" ! default = "none" + ! A parameter that determines which set of channels are + ! restricted to specific widths. Options are: + ! none - All channels have the grid width. + ! global_1deg - Sets 16 specific channels appropriate + ! for a 1-degree model, as used in CM2G. + ! list - Read the channel locations and widths from a + ! text file, like MOM_channel_list in the MOM_SIS + ! test case. + ! file - Read open face widths everywhere from a + ! NetCDF file on the model grid. +!CHANNEL_LIST_FILE = "MOM_channels_global_025" ! default = "MOM_channel_list" + ! The file from which the list of narrowed channels is read. +OBC_NUMBER_OF_SEGMENTS = 4 ! default = 0 + ! The number of open boundary segments. +OBC_FREESLIP_VORTICITY = True ! [Boolean] default = True + ! If true, sets the normal gradient of tangential velocity to zero in the + ! relative vorticity on open boundaries. This cannot be true if another + ! OBC_XXX_VORTICITY option is True. +OBC_COMPUTED_VORTICITY = False ! [Boolean] default = False + ! If true, uses the external values of tangential velocity in the relative + ! vorticity on open boundaries. This cannot be true if another OBC_XXX_VORTICITY + ! option is True. +OBC_ZERO_BIHARMONIC = False ! [Boolean] default = False + ! If true, zeros the Laplacian of flow on open boundaries in the biharmonic + ! viscosity term. +OBC_FREESLIP_STRAIN = False ! [Boolean] default = True +OBC_COMPUTED_STRAIN = True ! [Boolean] default = False +OBC_SEGMENT_001 = "J=N,I=N:0,FLATHER,ORLANSKI,NUDGED,ORLANSKI_TAN,NUDGED_TAN" ! north +OBC_SEGMENT_002 = "J=0,I=0:N,FLATHER,ORLANSKI,NUDGED,ORLANSKI_TAN,NUDGED_TAN" ! south +OBC_SEGMENT_003 = "I=N,J=0:N,FLATHER,ORLANSKI,NUDGED,ORLANSKI_TAN,NUDGED_TAN" ! east +OBC_SEGMENT_004 = "I=0,J=N:0,FLATHER,ORLANSKI,NUDGED,ORLANSKI_TAN,NUDGED_TAN" ! west + ! Documentation needs to be dynamic????? +OBC_SEGMENT_001_VELOCITY_NUDGING_TIMESCALES = 3, 360.0 !3, 360.0 !0.3, 360.0 !3, 3600.0 !0.3, 360.0 ! [days] default = 0.0 + ! Timescales in days for nudging along a segment, for inflow, then outflow. + ! Setting both to zero should behave like SIMPLE obcs for the baroclinic + ! velocities. + ! Documentation needs to be dynamic????? +OBC_SEGMENT_002_VELOCITY_NUDGING_TIMESCALES = 3, 360.0 !3, 360.0 !0.3, 360.0 !3, 3600.0 !0.3, 360.0 ! [days] default = 0.0 + ! Timescales in days for nudging along a segment, for inflow, then outflow. + ! Setting both to zero should behave like SIMPLE obcs for the baroclinic + ! velocities. +OBC_SEGMENT_003_VELOCITY_NUDGING_TIMESCALES = 3, 360.0 !3, 360.0 !0.3, 360.0 !3, 3600.0 !0.3, 360.0 !3, 3600.0 ! [days] default = 0.0 + ! Timescales in days for nudging along a segment, for inflow, then outflow. + ! Setting both to zero should behave like SIMPLE obcs for the baroclinic + ! velocities. + ! Documentation needs to be dynamic????? +OBC_SEGMENT_004_VELOCITY_NUDGING_TIMESCALES = 3, 360.0 !3, 360.0 !0.3, 360.0 !3, 3600.0 !0.3, 360.0 !3, 3600.0 ! [days] default = 0.0 + ! Timescales in days for nudging along a segment, for inflow, then outflow. + ! Setting both to zero should behave like SIMPLE obcs for the baroclinic + ! velocities. + ! Documentation needs to be dynamic????? +BRUSHCUTTER_MODE = True ! [Boolean] default = False + ! If true, read external OBC data on the supergrid. +OBC_SEGMENT_001_DATA = "U=file:ocean_uv_obc_north.nc(u),V=file:ocean_uv_obc_north.nc(v),SSH=file:ocean_ssh_obc_north.nc(ssh),TEMP=file:ocean_ts_obc_north.nc(temp),SALT=file:ocean_ts_obc_north.nc(salt)" ! +OBC_SEGMENT_002_DATA = "U=file:ocean_uv_obc_south.nc(u),V=file:ocean_uv_obc_south.nc(v),SSH=file:ocean_ssh_obc_south.nc(ssh),TEMP=file:ocean_ts_obc_south.nc(temp),SALT=file:ocean_ts_obc_south.nc(salt)" ! +OBC_SEGMENT_003_DATA = "U=file:ocean_uv_obc_east.nc(u),V=file:ocean_uv_obc_east.nc(v),SSH=file:ocean_ssh_obc_east.nc(ssh),TEMP=file:ocean_ts_obc_east.nc(temp),SALT=file:ocean_ts_obc_east.nc(salt)" ! +OBC_SEGMENT_004_DATA = "U=file:ocean_uv_obc_west.nc(u),V=file:ocean_uv_obc_west.nc(v),SSH=file:ocean_ssh_obc_west.nc(ssh),TEMP=file:ocean_ts_obc_west.nc(temp),SALT=file:ocean_ts_obc_west.nc(salt)" ! +OBC_TRACER_RESERVOIR_LENGTH_SCALE_OUT = 3000.0 !0.0 !3000.0 ! [m] default = 0.0 + ! An effective length scale for restoring the tracer concentration at the + ! boundaries to externally imposed values when the flow is exiting the domain. +OBC_TRACER_RESERVOIR_LENGTH_SCALE_IN = 3.0E+04 !0.0 !3.0E+04 ! [m] default = 0.0 + ! An effective length scale for restoring the tracer concentration at the + ! boundaries to values from the interior when the flow is entering the domain. +RAMP_OBCS = False ! default = False +OBC_RAMP_TIMESCALE = 2.0 ! [days] default = 1.0 +OBC_RADIATION_MAX = 1.0 ! [nondim] default = 1.0 + +! === module MOM_verticalGrid === +! Parameters providing information about the vertical grid. +NK = 55 ! [nondim] + ! The number of model layers. + +! === module MOM_tracer_registry === + +! === module MOM_EOS === +DTFREEZE_DP = -7.75E-08 ! [deg C Pa-1] default = 0.0 + ! When TFREEZE_FORM=LINEAR, this is the derivative of the freezing potential + ! temperature with pressure. + +! === module MOM_restart === +PARALLEL_RESTARTFILES = False ! [Boolean] default = False + ! If true, each processor writes its own restart file, otherwise a single + ! restart file is generated +RESTART_CHECKSUMS_REQUIRED = False + +! === module MOM_tracer_flow_control === +USE_IDEAL_AGE_TRACER = True ! [Boolean] default = False + ! If true, use the ideal_age_example tracer package. + +! === module ideal_age_example === + +! === module MOM_coord_initialization === +COORD_CONFIG = "gprime" !"file" ! default = "none" + ! This specifies how layers are to be defined: + ! ALE or none - used to avoid defining layers in ALE mode + ! file - read coordinate information from the file + ! specified by (COORD_FILE). + ! BFB - Custom coords for buoyancy-forced basin case + ! based on SST_S, T_BOT and DRHO_DT. + ! linear - linear based on interfaces not layers + ! layer_ref - linear based on layer densities + ! ts_ref - use reference temperature and salinity + ! ts_range - use range of temperature and salinity + ! (T_REF and S_REF) to determine surface density + ! and GINT calculate internal densities. + ! gprime - use reference density (RHO_0) for surface + ! density and GINT calculate internal densities. + ! ts_profile - use temperature and salinity profiles + ! (read from COORD_FILE) to set layer densities. + ! USER - call a user modified routine. +GINT = 0.0098 ! [m s-2] +!COORD_FILE = "layer_coord.nc" ! + ! The file from which the coordinate densities are read. +REMAP_UV_USING_OLD_ALG = True ! [Boolean] default = True + ! If true, uses the old remapping-via-a-delta-z method for remapping u and v. If + ! false, uses the new method that remaps between grids described by an old and + ! new thickness. +REGRIDDING_COORDINATE_MODE = "Z*" !"HYCOM1" ! default = "LAYER" + ! Coordinate mode for vertical regridding. Choose among the following + ! possibilities: LAYER - Isopycnal or stacked shallow water layers + ! ZSTAR, Z* - stretched geopotential z* + ! SIGMA_SHELF_ZSTAR - stretched geopotential z* ignoring shelf + ! SIGMA - terrain following coordinates + ! RHO - continuous isopycnal + ! HYCOM1 - HyCOM-like hybrid coordinate + ! SLIGHT - stretched coordinates above continuous isopycnal + ! ADAPTIVE - optimize for smooth neutral density surfaces +BOUNDARY_EXTRAPOLATION = True ! [Boolean] default = False + ! When defined, a proper high-order reconstruction scheme is used within + ! boundary cells rather than PCM. E.g., if PPM is used for remapping, a PPM + ! reconstruction will also be used within boundary cells. +ALE_COORDINATE_CONFIG = "FILE:ocean_vgrid.nc,dz" !"HYBRID:hycom1_75_800m.nc,sigma2,FNC1:2,4000,4.5,.01" ! default = "UNIFORM" + ! Determines how to specify the coordinate resolution. Valid options are: + ! PARAM - use the vector-parameter ALE_RESOLUTION + ! UNIFORM[:N] - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,dz + ! or FILE:lev.nc,interfaces=zw + ! WOA09[:N] - the WOA09 vertical grid (approximately) + ! FNC1:string - FNC1:dz_min,H_total,power,precision + ! HYBRID:string - read from a file. The string specifies + ! the filename and two variable names, separated + ! by a comma or space, for sigma-2 and dz. e.g. + ! HYBRID:vgrid.nc,sigma2,dz +!ALE_RESOLUTION = 7*2.0, 2*2.01, 2.02, 2.03, 2.05, 2.08, 2.11, 2.15, 2.21, 2.2800000000000002, 2.37, 2.48, 2.61, 2.77, 2.95, 3.17, 3.4299999999999997, 3.74, 4.09, 4.49, 4.95, 5.48, 6.07, 6.74, 7.5, 8.34, 9.280000000000001, 10.33, 11.49, 12.77, 14.19, 15.74, 17.450000000000003, 19.31, 21.35, 23.56, 25.97, 28.580000000000002, 31.41, 34.47, 37.77, 41.32, 45.14, 49.25, 53.65, 58.370000000000005, 63.42, 68.81, 74.56, 80.68, 87.21000000000001, 94.14, 101.51, 109.33, 117.62, 126.4, 135.68, 145.5, 155.87, 166.81, 178.35, 190.51, 203.31, 216.78, 230.93, 245.8, 261.42, 277.83 ! [m] + ! The distribution of vertical resolution for the target + ! grid used for Eulerian-like coordinates. For example, + ! in z-coordinate mode, the parameter is a list of level + ! thicknesses (in m). In sigma-coordinate mode, the list + ! is of non-dimensional fractions of the water column. +!TARGET_DENSITIES = 1010.0, 1014.3034, 1017.8088, 1020.843, 1023.5566, 1025.813, 1027.0275, 1027.9114, 1028.6422, 1029.2795, 1029.852, 1030.3762, 1030.8626, 1031.3183, 1031.7486, 1032.1572, 1032.5471, 1032.9207, 1033.2798, 1033.6261, 1033.9608, 1034.2519, 1034.4817, 1034.6774, 1034.8508, 1035.0082, 1035.1533, 1035.2886, 1035.4159, 1035.5364, 1035.6511, 1035.7608, 1035.8661, 1035.9675, 1036.0645, 1036.1554, 1036.2411, 1036.3223, 1036.3998, 1036.4739, 1036.5451, 1036.6137, 1036.68, 1036.7441, 1036.8062, 1036.8526, 1036.8874, 1036.9164, 1036.9418, 1036.9647, 1036.9857, 1037.0052, 1037.0236, 1037.0409, 1037.0574, 1037.0738, 1037.0902, 1037.1066, 1037.123, 1037.1394, 1037.1558, 1037.1722, 1037.1887, 1037.206, 1037.2241, 1037.2435, 1037.2642, 1037.2866, 1037.3112, 1037.3389, 1037.3713, 1037.4118, 1037.475, 1037.6332, 1037.8104, 1038.0 ! [m] + ! HYBRID target densities for interfaces +REGRID_COMPRESSIBILITY_FRACTION = 0.01 ! [nondim] default = 0.0 + ! When interpolating potential density profiles we can add some artificial + ! compressibility solely to make homogeneous regions appear stratified. +MAXIMUM_INT_DEPTH_CONFIG = "FNC1:5,8000.0,1.0,.01" ! default = "NONE" + ! Determines how to specify the maximum interface depths. + ! Valid options are: + ! NONE - there are no maximum interface depths + ! PARAM - use the vector-parameter MAXIMUM_INTERFACE_DEPTHS + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,Z + ! FNC1:string - FNC1:dz_min,H_total,power,precision +!MAXIMUM_INT_DEPTHS = 0.0, 5.0, 12.75, 23.25, 36.49, 52.480000000000004, 71.22, 92.71000000000001, 116.94000000000001, 143.92000000000002, 173.65, 206.13, 241.36, 279.33000000000004, 320.05000000000007, 363.5200000000001, 409.7400000000001, 458.7000000000001, 510.4100000000001, 564.8700000000001, 622.0800000000002, 682.0300000000002, 744.7300000000002, 810.1800000000003, 878.3800000000003, 949.3300000000004, 1023.0200000000004, 1099.4600000000005, 1178.6500000000005, 1260.5900000000006, 1345.2700000000007, 1432.7000000000007, 1522.8800000000008, 1615.8100000000009, 1711.490000000001, 1809.910000000001, 1911.080000000001, 2015.0000000000011, 2121.670000000001, 2231.080000000001, 2343.2400000000007, 2458.1500000000005, 2575.8100000000004, 2696.2200000000003, 2819.3700000000003, 2945.2700000000004, 3073.9200000000005, 3205.3200000000006, 3339.4600000000005, 3476.3500000000004, 3615.9900000000002, 3758.38, 3903.52, 4051.4, 4202.03, 4355.41, 4511.54, 4670.41, 4832.03, 4996.4, 5163.5199999999995, 5333.379999999999, 5505.989999999999, 5681.3499999999985, 5859.459999999998, 6040.319999999998, 6223.919999999998, 6410.269999999999, 6599.369999999999, 6791.219999999999, 6985.8099999999995, 7183.15, 7383.24, 7586.08, 7791.67, 8000.0 + ! The list of maximum depths for each interface. +MAX_LAYER_THICKNESS_CONFIG = "FNC1:400,31000.0,0.1,.01" ! default = "NONE" + ! Determines how to specify the maximum layer thicknesses. + ! Valid options are: + ! NONE - there are no maximum layer thicknesses + ! PARAM - use the vector-parameter MAX_LAYER_THICKNESS + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,Z + ! FNC1:string - FNC1:dz_min,H_total,power,precision +!MAX_LAYER_THICKNESS = 400.0, 409.63, 410.32, 410.75, 411.07, 411.32, 411.52, 411.7, 411.86, 412.0, 412.13, 412.24, 412.35, 412.45, 412.54, 412.63, 412.71, 412.79, 412.86, 412.93, 413.0, 413.06, 413.12, 413.18, 413.24, 413.29, 413.34, 413.39, 413.44, 413.49, 413.54, 413.58, 413.62, 413.67, 413.71, 413.75, 413.78, 413.82, 413.86, 413.9, 413.93, 413.97, 414.0, 414.03, 414.06, 414.1, 414.13, 414.16, 414.19, 414.22, 414.24, 414.27, 414.3, 414.33, 414.35, 414.38, 414.41, 414.43, 414.46, 414.48, 414.51, 414.53, 414.55, 414.58, 414.6, 414.62, 414.65, 414.67, 414.69, 414.71, 414.73, 414.75, 414.77, 414.79, 414.83 ! [m] + ! The list of maximum thickness for each layer. +REMAPPING_SCHEME = "PPM_H4" ! default = "PLM" + ! This sets the reconstruction scheme used for vertical remapping for all + ! variables. It can be one of the following schemes: PCM (1st-order + ! accurate) + ! PLM (2nd-order accurate) + ! PPM_H4 (3rd-order accurate) + ! PPM_IH4 (3rd-order accurate) + ! PQM_IH4IH3 (4th-order accurate) + ! PQM_IH6IH5 (5th-order accurate) + +! === module MOM_grid === +! Parameters providing information about the lateral grid. + +! === module MOM_state_initialization === +TS_CONFIG = "file" ! + ! A string that determines how the initial tempertures and salinities are + ! specified for a new run: + ! file - read velocities from the file specified + ! by (TS_FILE). + ! fit - find the temperatures that are consistent with + ! the layer densities and salinity S_REF. + ! TS_profile - use temperature and salinity profiles + ! (read from TS_FILE) to set layer densities. + ! benchmark - use the benchmark test case T & S. + ! linear - linear in logical layer space. + ! DOME2D - 2D DOME initialization. + ! ISOMIP - ISOMIP initialization. + ! adjustment2d - 2d lock exchange T/S ICs. + ! sloshing - sloshing mode T/S ICs. + ! seamount - no motion test with seamount ICs. + ! dumbbell - sloshing channel ICs. + ! rossby_front - a mixed layer front in thermal wind balance. + ! SCM_CVMix_tests - used in the SCM CVMix tests. + ! USER - call a user modified routine. +TS_FILE = "ocean_ts_ic.nc" ! + ! The initial condition file for temperature. + +INIT_LAYERS_FROM_Z_FILE = True ! [Boolean] default = False + ! If true, initialize the layer thicknesses, temperatures, and salinities from a + ! Z-space file on a latitude-longitude grid. + + +! === module MOM_initialize_layers_from_Z === +TEMP_SALT_Z_INIT_FILE = "ocean_ts_ic.nc" ! default = "temp_salt_z.nc" + ! The name of the z-space input file used to initialize temperatures (T) and + ! salinities (S). If T and S are not in the same file, TEMP_Z_INIT_FILE and + ! SALT_Z_INIT_FILE must be set. +!TEMP_Z_INIT_FILE = "" ! default = "" + ! The name of the z-space input file used to initialize temperatures, only. +!SALT_Z_INIT_FILE = "" ! default = "" + ! The name of the z-space input file used to initialize temperatures, only. +Z_INIT_FILE_PTEMP_VAR = "Temp" ! default = "ptemp" + ! The name of the potential temperature variable in TEMP_Z_INIT_FILE. +Z_INIT_FILE_SALT_VAR = "Salt" ! default = "salt" + ! The name of the salinity variable in SALT_Z_INIT_FILE. +Z_INIT_ALE_REMAPPING = True ! [Boolean] default = False + ! If True, then remap straight to model coordinate from file. +Z_INIT_REMAP_OLD_ALG = True ! [Boolean] default = True + ! If false, uses the preferred remapping algorithm for initialization. If true, + ! use an older, less robust algorithm for remapping. +Z_INIT_REMAP_GENERAL = True ! [Boolean] default = False + ! If false, only initializes to z* coordinates. + ! If true, allows initialization directly to general coordinates. +Z_INIT_REMAP_FULL_COLUMN = True ! [Boolean] default = True + ! If false, only reconstructs profiles for valid data points. + ! If true, inserts vanished layers below the valid data. +DEPRESS_INITIAL_SURFACE = True ! [Boolean] default = False + ! If true, depress the initial surface to avoid huge tsunamis when a large + ! surface pressure is applied. +SURFACE_HEIGHT_IC_FILE = "ocean_ssh_ic.nc" ! + ! The initial condition file for the surface height. +SURFACE_HEIGHT_IC_VAR = "ave_ssh" ! default = "SSH" + ! The initial condition variable for the surface height +VELOCITY_CONFIG = "file" +VELOCITY_FILE = "ocean_uv_ic.nc" + +! === module MOM_diag_mediator === +NUM_DIAG_COORDS = 2 ! default = 1 + ! The number of diagnostic vertical coordinates to use. For each coordinate, an + ! entry in DIAG_COORDS must be provided. +DIAG_COORDS = "z Z ZSTAR", "rho2 RHO2 RHO" ! + ! A list of string tuples associating diag_table modules to a coordinate + ! definition used for diagnostics. Each string is of the form + ! "MODULE_SUFFIX,PARAMETER_SUFFIX,COORDINATE_NAME". +DIAG_COORD_DEF_RHO2 = "RFNC1:35,999.5,1028,1028.5,8.,1038.,0.0078125" ! default = "WOA09" + ! Determines how to specify the coordinate resolution. Valid options are: + ! PARAM - use the vector-parameter DIAG_COORD_RES_RHO2 + ! UNIFORM[:N] - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,dz + ! or FILE:lev.nc,interfaces=zw + ! WOA09[:N] - the WOA09 vertical grid (approximately) + ! FNC1:string - FNC1:dz_min,H_total,power,precision + ! HYBRID:string - read from a file. The string specifies + ! the filename and two variable names, separated + ! by a comma or space, for sigma-2 and dz. e.g. + ! HYBRID:vgrid.nc,sigma2,dz +DIAG_COORD_DEF_Z = "FILE:ocean_vgrid.nc,interfaces=zw" ! default = "WOA09" + ! Determines how to specify the coordinate + ! resolution. Valid options are: + ! PARAM - use the vector-parameter DIAG_COORD_RES_RHO2 + ! UNIFORM[:N] - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,dz + ! or FILE:lev.nc,interfaces=zw + ! WOA09[:N] - the WOA09 vertical grid (approximately) + ! FNC1:string - FNC1:dz_min,H_total,power,precision + ! HYBRID:string - read from a file. The string specifies + ! the filename and two variable names, separated + ! by a comma or space, for sigma-2 and dz. e.g. + ! HYBRID:vgrid.nc,sigma2,dz + +! === module MOM_MEKE === +USE_MEKE = True ! [Boolean] default = False + ! If true, turns on the MEKE scheme which calculates a sub-grid mesoscale eddy + ! kinetic energy budget. +MEKE_GMCOEFF = 1.0 ! [nondim] default = -1.0 + ! The efficiency of the conversion of potential energy into MEKE by the + ! thickness mixing parameterization. If MEKE_GMCOEFF is negative, this + ! conversion is not used or calculated. +MEKE_BGSRC = 1.0E-13 ! [W kg-1] default = 0.0 + ! A background energy source for MEKE. +MEKE_KHMEKE_FAC = 1.0 ! [nondim] default = 0.0 + ! A factor that maps MEKE%Kh to Kh for MEKE itself. +MEKE_ALPHA_RHINES = 0.15 ! [nondim] default = 0.05 + ! If positive, is a coefficient weighting the Rhines scale in the expression for + ! mixing length used in MEKE-derived diffusivity. +MEKE_ALPHA_EADY = 0.15 ! [nondim] default = 0.05 + ! If positive, is a coefficient weighting the Eady length scale in the + ! expression for mixing length used in MEKE-derived diffusivity. + +! === module MOM_lateral_mixing_coeffs === +USE_VARIABLE_MIXING = True ! [Boolean] default = False + ! If true, the variable mixing code will be called. This allows diagnostics to + ! be created even if the scheme is not used. If KHTR_SLOPE_CFF>0 or + ! KhTh_Slope_Cff>0, this is set to true regardless of what is in the parameter + ! file. +RESOLN_SCALED_KH = True ! [Boolean] default = False + ! If true, the Laplacian lateral viscosity is scaled away when the first + ! baroclinic deformation radius is well resolved. +RESOLN_SCALED_KHTH = True ! [Boolean] default = False + ! If true, the interface depth diffusivity is scaled away when the first + ! baroclinic deformation radius is well resolved. +KHTR_SLOPE_CFF = 0.25 ! [nondim] default = 0.0 + ! The nondimensional coefficient in the Visbeck formula for the epipycnal tracer + ! diffusivity +USE_STORED_SLOPES = True ! [Boolean] default = False + ! If true, the isopycnal slopes are calculated once and stored for re-use. This + ! uses more memory but avoids calling the equation of state more times than + ! should be necessary. +INTERPOLATE_RES_FN = False ! [Boolean] default = True + ! If true, interpolate the resolution function to the velocity points from the + ! thickness points; otherwise interpolate the wave speed and calculate the + ! resolution function independently at each point. +GILL_EQUATORIAL_LD = True ! [Boolean] default = False + ! If true, uses Gill's definition of the baroclinic equatorial deformation + ! radius, otherwise, if false, use Pedlosky's definition. These definitions + ! differ by a factor of 2 in front of the beta term in the denominator. Gill's + ! is the more appropriate definition. + +! === module MOM_set_visc === +CHANNEL_DRAG = True ! [Boolean] default = False + ! If true, the bottom drag is exerted directly on each layer proportional to the + ! fraction of the bottom it overlies. +PRANDTL_TURB = 1.25 ! [nondim] default = 1.0 + ! The turbulent Prandtl number applied to shear instability. +HBBL = 10.0 ! [m] + ! The thickness of a bottom boundary layer with a viscosity of KVBBL if + ! BOTTOMDRAGLAW is not defined, or the thickness over which near-bottom + ! velocities are averaged for the drag law if BOTTOMDRAGLAW is defined but + ! LINEAR_DRAG is not. +DRAG_BG_VEL = 0.01 ! [m s-1] default = 0.0 + ! DRAG_BG_VEL is either the assumed bottom velocity (with LINEAR_DRAG) or an + ! unresolved velocity that is combined with the resolved velocity to estimate + ! the velocity magnitude. DRAG_BG_VEL is only used when BOTTOMDRAGLAW is + ! defined. +BBL_USE_EOS = True ! [Boolean] default = False + ! If true, use the equation of state in determining the properties of the bottom + ! boundary layer. Otherwise use the layer target potential densities. +BBL_THICK_MIN = 0.1 ! [m] default = 0.0 + ! The minimum bottom boundary layer thickness that can be used with + ! BOTTOMDRAGLAW. This might be Kv/(cdrag*drag_bg_vel) to give Kv as the minimum + ! near-bottom viscosity. +KV = 1.0E-06 ! [m2 s-1] + ! The background kinematic viscosity in the interior. The molecular value, ~1e-6 + ! m2 s-1, may be used. +KV_BBL_MIN = 0.0 ! [m2 s-1] default = 1.0E-04 + ! The minimum viscosities in the bottom boundary layer. +KV_TBL_MIN = 0.0 ! [m2 s-1] default = 1.0E-04 + ! The minimum viscosities in the top boundary layer. + +! === module MOM_thickness_diffuse === +KHTH_MAX_CFL = 0.1 ! [nondimensional] default = 0.8 + ! The maximum value of the local diffusive CFL ratio that is permitted for the + ! thickness diffusivity. 1.0 is the marginally unstable value in a pure layered + ! model, but much smaller numbers (e.g. 0.1) seem to work better for ALE-based + ! models. +USE_GM_WORK_BUG = True ! [Boolean] default = True + ! If true, compute the top-layer work tendency on the u-grid with the incorrect + ! sign, for legacy reproducibility. + +! === module MOM_continuity === + +! === module MOM_continuity_PPM === +ETA_TOLERANCE = 1.0E-06 ! [m] default = 3.75E-09 + ! The tolerance for the differences between the barotropic and baroclinic + ! estimates of the sea surface height due to the fluxes through each face. The + ! total tolerance for SSH is 4 times this value. The default is + ! 0.5*NK*ANGSTROM, and this should not be set less than about + ! 10^-15*MAXIMUM_DEPTH. +ETA_TOLERANCE_AUX = 0.001 ! [m] default = 1.0E-06 + ! The tolerance for free-surface height discrepancies between the barotropic + ! solution and the sum of the layer thicknesses when calculating the auxiliary + ! corrected velocities. By default, this is the same as ETA_TOLERANCE, but can + ! be made larger for efficiency. + +! === module MOM_CoriolisAdv === +CORIOLIS_SCHEME = "SADOURNY75_ENSTRO" ! default = "SADOURNY75_ENERGY" + ! CORIOLIS_SCHEME selects the discretization for the Coriolis terms. Valid + ! values are: + ! SADOURNY75_ENERGY - Sadourny, 1975; energy cons. + ! ARAKAWA_HSU90 - Arakawa & Hsu, 1990 + ! SADOURNY75_ENSTRO - Sadourny, 1975; enstrophy cons. + ! ARAKAWA_LAMB81 - Arakawa & Lamb, 1981; En. + Enst. + ! ARAKAWA_LAMB_BLEND - A blend of Arakawa & Lamb with + ! Arakawa & Hsu and Sadourny energy +BOUND_CORIOLIS = True ! [Boolean] default = False + ! If true, the Coriolis terms at u-points are bounded by the four estimates of + ! (f+rv)v from the four neighboring v-points, and similarly at v-points. This + ! option would have no effect on the SADOURNY Coriolis scheme if it were + ! possible to use centered difference thickness fluxes. + +! === module MOM_PressureForce === + +! === module MOM_PressureForce_AFV === +MASS_WEIGHT_IN_PRESSURE_GRADIENT = True ! [Boolean] default = False + ! If true, use mass weighting when interpolating T/S for integrals near the + ! bathymetry in AFV pressure gradient calculations. + +! === module MOM_hor_visc === +LAPLACIAN = True ! [Boolean] default = False + ! If true, use a Laplacian horizontal viscosity. +AH_VEL_SCALE = 0.005 ! [m s-1] default = 0.0 + ! The velocity scale which is multiplied by the cube of the grid spacing to + ! calculate the biharmonic viscosity. The final viscosity is the largest of this + ! scaled viscosity, the Smagorinsky and Leith viscosities, and AH. +SMAGORINSKY_AH = False ! [Boolean] default = False + ! If true, use a biharmonic Smagorinsky nonlinear eddy viscosity. +SMAG_BI_CONST = 0.06 ! [nondim] default = 0.0 + ! The nondimensional biharmonic Smagorinsky constant, typically 0.015 - 0.06. +USE_LAND_MASK_FOR_HVISC = False ! [Boolean] default = False + ! If true, use Use the land mask for the computation of thicknesses at velocity + ! locations. This eliminates the dependence on arbitrary values over land or + ! outside of the domain. Default is False in order to maintain answers with + ! legacy experiments but should be changed to True for new experiments. + +! === module MOM_vert_friction === +HMIX_FIXED = 0.5 ! [m] + ! The prescribed depth over which the near-surface viscosity and diffusivity are + ! elevated when the bulk mixed layer is not used. +! khs_testMAXVEL = 6.0 ! [m s-1] default = 3.0E+08 +MAXVEL = 3.0E+08 ! [m s-1] default = 3.0E+08 + ! The maximum velocity allowed before the velocity components are truncated. + +! === module MOM_PointAccel === +U_TRUNC_FILE = "U_velocity_truncations" ! default = "" + ! The absolute path to a file into which the accelerations leading to zonal + ! velocity truncations are written. Undefine this for efficiency if this + ! diagnostic is not needed. +V_TRUNC_FILE = "V_velocity_truncations" ! default = "" + ! The absolute path to a file into which the accelerations leading to meridional + ! velocity truncations are written. Undefine this for efficiency if this + ! diagnostic is not needed. + +! === module MOM_barotropic === +BOUND_BT_CORRECTION = True ! [Boolean] default = False + ! If true, the corrective pseudo mass-fluxes into the barotropic solver are + ! limited to values that require less than maxCFL_BT_cont to be accommodated. +BT_PROJECT_VELOCITY = True ! [Boolean] default = False + ! If true, step the barotropic velocity first and project out the velocity + ! tendency by 1+BEBT when calculating the transport. The default (false) is to + ! use a predictor continuity step to find the pressure field, and then to do a + ! corrector continuity step using a weighted average of the old and new + ! velocities, with weights of (1-BEBT) and BEBT. +DYNAMIC_SURFACE_PRESSURE = True ! [Boolean] default = False + ! If true, add a dynamic pressure due to a viscous ice shelf, for instance. +DT_BT_FILTER = 360 ! [sec or nondim] default = -0.25 + ! A time-scale over which the barotropic mode solutions are filtered, in seconds + ! if positive, or as a fraction of DT if negative. When used this can never be + ! take to be longer than 2*dt. Set this to 0 to apply no filtering. +BEBT = 0.2 ! [nondim] default = 0.1 + ! BEBT determines whether the barotropic time stepping uses the forward-backward + ! time-stepping scheme or a backward Euler scheme. BEBT is valid in the range + ! from 0 (for a forward-backward treatment of nonrotating gravity waves) to 1 + ! (for a backward Euler treatment). In practice, BEBT must be greater than about + ! 0.05. +DTBT = -0.9 ! [s or nondim] default = -0.98 + ! The barotropic time step, in s. DTBT is only used with the split explicit time + ! stepping. To set the time step automatically based the maximum stable value + ! use 0, or a negative value gives the fraction of the stable value. Setting + ! DTBT to 0 is the same as setting it to -0.98. The value of DTBT that will + ! actually be used is an integer fraction of DT, rounding down. +BT_USE_OLD_CORIOLIS_BRACKET_BUG = True ! [Boolean] default = False + ! If True, use an order of operations that is not bitwise rotationally symmetric + ! in the meridional Coriolis term of the barotropic solver. + +! === module MOM_mixed_layer_restrat === +MIXEDLAYER_RESTRAT = True ! [Boolean] default = False + ! If true, a density-gradient dependent re-stratifying flow is imposed in the + ! mixed layer. Can be used in ALE mode without restriction but in layer mode can + ! only be used if BULKMIXEDLAYER is true. +! FOX_KEMPER_ML_RESTRAT_COEF = 1.0 ! [nondim] default = 0.0 + ! A nondimensional coefficient that is proportional to the ratio of the + ! deformation radius to the dominant lengthscale of the submesoscale mixed layer + ! instabilities, times the minimum of the ratio of the mesoscale eddy kinetic + ! energy to the large-scale geostrophic kinetic energy or 1 plus the square of + ! the grid spacing over the deformation radius, as detailed by Fox-Kemper et al. + ! (2010) +MLE_FRONT_LENGTH = 500.0 ! [m] default = 0.0 + ! If non-zero, is the frontal-length scale used to calculate the upscaling of + ! buoyancy gradients that is otherwise represented by the parameter + ! FOX_KEMPER_ML_RESTRAT_COEF. If MLE_FRONT_LENGTH is non-zero, it is recommended + ! to set FOX_KEMPER_ML_RESTRAT_COEF=1.0. +MLE_USE_PBL_MLD = True ! [Boolean] default = False + ! If true, the MLE parameterization will use the mixed-layer depth provided by + ! the active PBL parameterization. If false, MLE will estimate a MLD based on a + ! density difference with the surface using the parameter MLE_DENSITY_DIFF. +MLE_MLD_DECAY_TIME = 2.592E+06 ! [s] default = 0.0 + ! The time-scale for a running-mean filter applied to the mixed-layer depth used + ! in the MLE restratification parameterization. When the MLD deepens below the + ! current running-mean the running-mean is instantaneously set to the current + ! MLD. + +! === module MOM_diabatic_driver === +! The following parameters are used for diabatic processes. +ENERGETICS_SFC_PBL = True ! [Boolean] default = False + ! If true, use an implied energetics planetary boundary layer scheme to + ! determine the diffusivity and viscosity in the surface boundary layer. +EPBL_IS_ADDITIVE = False ! [Boolean] default = True + ! If true, the diffusivity from ePBL is added to all other diffusivities. + ! Otherwise, the larger of kappa-shear and ePBL diffusivities are used. + +! === module MOM_CVMix_KPP === +! This is the MOM wrapper to CVMix:KPP +! See http://cvmix.github.io/ + +! === module MOM_tidal_mixing === +! Vertical Tidal Mixing Parameterization +INT_TIDE_DISSIPATION = True ! [Boolean] default = False + ! If true, use an internal tidal dissipation scheme to drive diapycnal mixing, + ! along the lines of St. Laurent et al. (2002) and Simmons et al. (2004). +INT_TIDE_PROFILE = "POLZIN_09" ! default = "STLAURENT_02" + ! INT_TIDE_PROFILE selects the vertical profile of energy dissipation with + ! INT_TIDE_DISSIPATION. Valid values are: + ! STLAURENT_02 - Use the St. Laurent et al exponential + ! decay profile. + ! POLZIN_09 - Use the Polzin WKB-stretched algebraic + ! decay profile. +INT_TIDE_DECAY_SCALE = 300.3003003003003 ! [m] default = 500.0 + ! The decay scale away from the bottom for tidal TKE with the new coding when + ! INT_TIDE_DISSIPATION is used. +KAPPA_ITIDES = 6.28319E-04 ! [m-1] default = 6.283185307179586E-04 + ! A topographic wavenumber used with INT_TIDE_DISSIPATION. The default is 2pi/10 + ! km, as in St.Laurent et al. 2002. +KAPPA_H2_FACTOR = 0.84 ! [nondim] default = 1.0 + ! A scaling factor for the roughness amplitude with INT_TIDE_DISSIPATION. +TKE_ITIDE_MAX = 0.1 ! [W m-2] default = 1000.0 + ! The maximum internal tide energy source available to mix above the bottom + ! boundary layer with INT_TIDE_DISSIPATION. +READ_TIDEAMP = True ! [Boolean] default = False + ! If true, read a file (given by TIDEAMP_FILE) containing the tidal amplitude + ! with INT_TIDE_DISSIPATION. +TIDEAMP_FILE = "ocean_tidal_amplitude.nc" ! default = "tideamp.nc" + ! The path to the file containing the spatially varying tidal amplitudes with + ! INT_TIDE_DISSIPATION. +H2_FILE = "ocean_topog.nc" ! + ! The path to the file containing the sub-grid-scale topographic roughness + ! amplitude with INT_TIDE_DISSIPATION. + +! === module MOM_CVMix_conv === +! Parameterization of enhanced mixing due to convection via CVMix + +! === module MOM_geothermal === +GEOTHERMAL_SCALE = 1.0 ! [W m-2 or various] default = 0.0 + ! The constant geothermal heat flux, a rescaling factor for the heat flux read + ! from GEOTHERMAL_FILE, or 0 to disable the geothermal heating. +GEOTHERMAL_FILE = "ocean_geothermal.nc" ! default = "" + ! The file from which the geothermal heating is to be read, or blank to use a + ! constant heating rate. +GEOTHERMAL_VARNAME = "geothermal_hf" ! default = "geo_heat" + ! The name of the geothermal heating variable in GEOTHERMAL_FILE. + +! === module MOM_set_diffusivity === +BBL_MIXING_AS_MAX = False ! [Boolean] default = True + ! If true, take the maximum of the diffusivity from the BBL mixing and the other + ! diffusivities. Otherwise, diffusivity from the BBL_mixing is simply added. +USE_LOTW_BBL_DIFFUSIVITY = True ! [Boolean] default = False + ! If true, uses a simple, imprecise but non-coordinate dependent, model of BBL + ! mixing diffusivity based on Law of the Wall. Otherwise, uses the original BBL + ! scheme. +SIMPLE_TKE_TO_KD = True ! [Boolean] default = False + ! If true, uses a simple estimate of Kd/TKE that will work for arbitrary + ! vertical coordinates. If false, calculates Kd/TKE and bounds based on exact + ! energetics for an isopycnal layer-formulation. + +! === module MOM_bkgnd_mixing === +! Adding static vertical background mixing coefficients +KD = 1.5E-05 ! [m2 s-1] + ! The background diapycnal diffusivity of density in the interior. Zero or the + ! molecular value, ~1e-7 m2 s-1, may be used. +KD_MIN = 2.0E-06 ! [m2 s-1] default = 1.5E-07 + ! The minimum diapycnal diffusivity. +HENYEY_IGW_BACKGROUND = True ! [Boolean] default = False + ! If true, use a latitude-dependent scaling for the near surface background + ! diffusivity, as described in Harrison & Hallberg, JPO 2008. +KD_MAX = 0.1 ! [m2 s-1] default = -1.0 + ! The maximum permitted increment for the diapycnal diffusivity from TKE-based + ! parameterizations, or a negative value for no limit. + +! === module MOM_kappa_shear === +! Parameterization of shear-driven turbulence following Jackson, Hallberg and Legg, JPO 2008 +USE_JACKSON_PARAM = True ! [Boolean] default = False + ! If true, use the Jackson-Hallberg-Legg (JPO 2008) shear mixing + ! parameterization. +MAX_RINO_IT = 25 ! [nondim] default = 50 + ! The maximum number of iterations that may be used to estimate the Richardson + ! number driven mixing. +KAPPA_SHEAR_ITER_BUG = True ! [Boolean] default = True + ! If true, use an older, dimensionally inconsistent estimate of the derivative + ! of diffusivity with energy in the Newton's method iteration. The bug causes + ! undercorrections when dz > 1 m. +KAPPA_SHEAR_ALL_LAYER_TKE_BUG = True ! [Boolean] default = True + ! If true, report back the latest estimate of TKE instead of the time average + ! TKE when there is mass in all layers. Otherwise always report the time + ! averaged TKE, as is currently done when there are some massless layers. + +! === module MOM_CVMix_shear === +! Parameterization of shear-driven turbulence via CVMix (various options) + +! === module MOM_CVMix_ddiff === +! Parameterization of mixing due to double diffusion processes via CVMix + +! === module MOM_diabatic_aux === +! The following parameters are used for auxiliary diabatic processes. +PRESSURE_DEPENDENT_FRAZIL = True ! [Boolean] default = False + ! If true, use a pressure dependent freezing temperature when making frazil. The + ! default is false, which will be faster but is inappropriate with ice-shelf + ! cavities. +VAR_PEN_SW = True ! [Boolean] default = False + ! If true, use one of the CHL_A schemes specified by OPACITY_SCHEME to determine + ! the e-folding depth of incoming short wave radiation. +CHL_FILE = "ocean_chla.nc" ! + ! CHL_FILE is the file containing chl_a concentrations in the variable CHL_A. It + ! is used when VAR_PEN_SW and CHL_FROM_FILE are true. + +EPBL_VEL_SCALE_FACTOR = 0.5 ! [nondim] default = 1.0 + ! An overall nondimensional scaling factor for wT. Making this larger increases + ! the PBL diffusivity. + +! === module MOM_energetic_PBL === +ML_OMEGA_FRAC = 0.001 ! [nondim] default = 0.0 + ! When setting the decay scale for turbulence, use this fraction of the absolute + ! rotation rate blended with the local value of f, as sqrt((1-of)*f^2 + + ! of*4*omega^2). +TKE_DECAY = 0.001 ! [nondim] default = 2.5 + ! TKE_DECAY relates the vertical rate of decay of the TKE available for + ! mechanical entrainment to the natural Ekman depth. +EPBL_MSTAR_SCHEME = "CONSTANT" ! default = "CONSTANT" + ! EPBL_MSTAR_SCHEME selects the method for setting mstar. Valid values are: + ! CONSTANT - Use a fixed mstar given by MSTAR + ! OM4 - Use L_Ekman/L_Obukhov in the sabilizing limit, as in OM4 + ! REICHL_H18 - Use the scheme documented in Reichl & Hallberg, 2018. +MSTAR_CAP = 10.0 ! [nondim] default = -1.0 + ! If this value is positive, it sets the maximum value of mstar allowed in ePBL. + ! (This is not used if EPBL_MSTAR_SCHEME = CONSTANT). +NSTAR = 0.06 ! [nondim] default = 0.2 + ! The portion of the buoyant potential energy imparted by surface fluxes that is + ! available to drive entrainment at the base of mixed layer when that energy is + ! positive. +MSTAR_CONV_ADJ = 0.66 ! [nondim] default = 0.0 + ! Coefficient used for reducing mstar during convection due to reduction of + ! stable density gradient. +USE_MLD_ITERATION = True ! [Boolean] default = False + ! A logical that specifies whether or not to use the distance to the bottom of + ! the actively turbulent boundary layer to help set the EPBL length scale. +EPBL_TRANSITION_SCALE = 0.01 ! [nondim] default = 0.1 + ! A scale for the mixing length in the transition layer at the edge of the + ! boundary layer as a fraction of the boundary layer thickness. +MIX_LEN_EXPONENT = 1.0 ! [nondim] default = 2.0 + ! The exponent applied to the ratio of the distance to the MLD and the MLD depth + ! which determines the shape of the mixing length. This is only used if + ! USE_MLD_ITERATION is True. +USE_LA_LI2016 = True ! [nondim] default = False + ! A logical to use the Li et al. 2016 (submitted) formula to determine the + ! Langmuir number. +EPBL_LANGMUIR_SCHEME = "NONE" ! default = "NONE" + ! EPBL_LANGMUIR_SCHEME selects the method for including Langmuir turbulence. + ! Valid values are: + ! NONE - Do not do any extra mixing due to Langmuir turbulence + ! RESCALE - Use a multiplicative rescaling of mstar to account for Langmuir + ! turbulence + ! ADDITIVE - Add a Langmuir turblence contribution to mstar to other + ! contributions + +! === module MOM_regularize_layers === + +! === module MOM_opacity === +PEN_SW_NBANDS = 3 ! default = 1 + ! The number of bands of penetrating shortwave radiation. + +! === module MOM_tracer_advect === +TRACER_ADVECTION_SCHEME = "PPM:H3" ! default = "PLM" + ! The horizontal transport scheme for tracers: + ! PLM - Piecewise Linear Method + ! PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order) + ! PPM - Piecewise Parabolic Method (Colella-Woodward) + +! === module MOM_tracer_hor_diff === +CHECK_DIFFUSIVE_CFL = True ! [Boolean] default = False + ! If true, use enough iterations the diffusion to ensure that the diffusive + ! equivalent of the CFL limit is not violated. If false, always use the greater + ! of 1 or MAX_TR_DIFFUSION_CFL iteration. + +! === module MOM_neutral_diffusion === +! This module implements neutral diffusion of tracers + +! === module MOM_lateral_boundary_diffusion === +! This module implements lateral diffusion of tracers near boundaries + +! === module MOM_sum_output === +MAXTRUNC = 100000 ! [truncations save_interval-1] default = 0 + ! The run will be stopped, and the day set to a very large value if the velocity + ! is truncated more than MAXTRUNC times between energy saves. Set MAXTRUNC to 0 + ! to stop if there is any truncation of velocities. +ENERGYSAVEDAYS = 0.25 ! [days] default = 1.0 + ! The interval in units of TIMEUNIT between saves of the energies of the run and + ! other globally summed diagnostics. + +! === module ocean_model_init === + +! === module MOM_surface_forcing === +BUOY_CONFIG = "data_override" ! default = "zero" + ! The character string that indicates how buoyancy forcing is specified. Valid + ! options include (file), (zero), (linear), (USER), (BFB) and (NONE). +ARCHAIC_OMIP_FORCING_FILE = False ! [Boolean] default = True + ! If true, use the forcing variable decomposition from the old German OMIP + ! prescription that predated CORE. If false, use the variable groupings + ! available from MOM output diagnostics of forcing variables. +MAX_P_SURF = 0.0 ! [Pa] default = -1.0 + ! The maximum surface pressure that can be exerted by the atmosphere and + ! floating sea-ice or ice shelves. This is needed because the FMS coupling + ! structure does not limit the water that can be frozen out of the ocean and the + ! ice-ocean heat fluxes are treated explicitly. No limit is applied if a + ! negative value is used. +CD_TIDES = 0.0018 ! [nondim] default = 1.0E-04 + ! The drag coefficient that applies to the tides. +WIND_CONFIG = "data_override" ! default = "zero" + ! The character string that indicates how wind forcing is specified. Valid + ! options include (file), (2gyre), (1gyre), (gyres), (zero), and (USER). +RESTOREBUOY = True ! [Boolean] default = False + ! If true, the buoyancy fluxes drive the model back toward some specified + ! surface state with a rate given by FLUXCONST. +LATENT_HEAT_FUSION = 3.34E+05 ! [J/kg] default = 3.34E+05 + ! The latent heat of fusion. +LATENT_HEAT_VAPORIZATION = 2.5E+06 ! [J/kg] default = 2.5E+06 + ! The latent heat of fusion. +!FLUXCONST = 0.5 ! [m day-1] default = 0.0 + ! The constant that relates the restoring surface fluxes to the relative surface + ! anomalies (akin to a piston velocity). Note the non-MKS units. +!FLUXCONST_T = 0.5 ! [m day-1] default = 0.5 + ! The constant that relates the restoring surface temperature flux to the + ! relative surface anomaly (akin to a piston velocity). Note the non-MKS units. +!FLUXCONST_S = 0.5 ! [m day-1] default = 0.5 + ! The constant that relates the restoring surface salinity flux to the relative + ! surface anomaly (akin to a piston velocity). Note the non-MKS units. +GUST_CONST = 0.0 ! [Pa] default = 0.0 + ! The background gustiness in the winds. +FIX_USTAR_GUSTLESS_BUG = True ! [Boolean] default = True + ! If true correct a bug in the time-averaging of the gustless wind friction + ! velocity + +! These parameters are used in CORE mode but should not be used in +! the coupled model (CM4). +RESTORE_SALINITY = False ! [Boolean] default = False + ! If true, the coupled driver will add a globally-balanced + ! fresh-water flux that drives sea-surface salinity + ! toward specified values. +ADJUST_NET_FRESH_WATER_TO_ZERO = True ! [Boolean] default = False + ! If true, adjusts the net fresh-water forcing seen + ! by the ocean (including restoring) to zero. +FLUXCONST = 0.1667 !0.500 !0.1667 ! [m day-1] + ! The constant that relates the restoring surface fluxes + ! to the relative surface anomalies (akin to a piston + ! velocity). Note the non-MKS units. +SALT_RESTORE_FILE = "ocean_salt_restore.nc" !"salt_restore_correct.nc" ! default = "salt_restore.nc" + ! A file in which to find the surface salinity to use for restoring. +SALT_RESTORE_VARIABLE = "SALT" +SRESTORE_AS_SFLUX = True ! [Boolean] default = False + ! If true, the restoring of salinity is applied as a salt + ! flux instead of as a freshwater flux. +MAX_DELTA_SRESTORE = 5.0 ! [PSU or g kg-1] default = 999.0 + ! The maximum salinity difference used in restoring terms. +USE_NET_FW_ADJUSTMENT_SIGN_BUG = False ! [Boolean] default = True + ! If true, use the wrong sign for the adjustment to + ! the net fresh-water. + +! === module MOM_restart === + +! === module MOM_file_parser === diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_3d_ic.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_3d_ic.in new file mode 120000 index 000000000..f1907dc10 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_3d_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_hat10.rtofs_ocean_3d_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_3d_obc.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_3d_obc.in new file mode 120000 index 000000000..a3e9291a8 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_3d_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_hat10.rtofs_ocean_3d_obc.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_ssh_ic.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_ssh_ic.in new file mode 120000 index 000000000..9546a2826 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_ssh_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_hat10.rtofs_ocean_ssh_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_ssh_obc.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_ssh_obc.in new file mode 120000 index 000000000..89575cbb8 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_hat10.rtofs_ocean_ssh_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_hat10.rtofs_ocean_ssh_obc.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_3d_ic.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_3d_ic.in new file mode 120000 index 000000000..1a6fba9d8 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_3d_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtnh.rtofs_ocean_3d_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_3d_obc.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_3d_obc.in new file mode 120000 index 000000000..0ed3afe1e --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_3d_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtnh.rtofs_ocean_3d_obc.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_ssh_ic.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_ssh_ic.in new file mode 120000 index 000000000..1886a6212 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_ssh_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtnh.rtofs_ocean_ssh_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_ssh_obc.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_ssh_obc.in new file mode 120000 index 000000000..51fd3e1cf --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtnh.rtofs_ocean_ssh_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtnh.rtofs_ocean_ssh_obc.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_3d_ic.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_3d_ic.in new file mode 120000 index 000000000..cd4945c23 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_3d_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtsh.rtofs_ocean_3d_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_3d_obc.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_3d_obc.in new file mode 120000 index 000000000..192a33a72 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_3d_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtsh.rtofs_ocean_3d_obc.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_ssh_ic.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_ssh_ic.in new file mode 120000 index 000000000..ee978bce2 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_ssh_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtsh.rtofs_ocean_ssh_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_ssh_obc.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_ssh_obc.in new file mode 120000 index 000000000..8d912503a --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_jtsh.rtofs_ocean_ssh_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtsh.rtofs_ocean_ssh_obc.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_3d_ic.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_3d_ic.in new file mode 120000 index 000000000..461376107 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_3d_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_nhc.rtofs_ocean_3d_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_3d_obc.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_3d_obc.in new file mode 120000 index 000000000..e0ea53c5c --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_3d_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_nhc.rtofs_ocean_3d_obc.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_ssh_ic.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_ssh_ic.in new file mode 120000 index 000000000..2460c15c9 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_ssh_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_nhc.rtofs_ocean_ssh_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_ssh_obc.in b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_ssh_obc.in new file mode 120000 index 000000000..2c2c19101 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6_nhc.rtofs_ocean_ssh_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_nhc.rtofs_ocean_ssh_obc.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6.input.IN b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6.input.IN new file mode 100644 index 000000000..fc4f26c8b --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6.input.IN @@ -0,0 +1,935 @@ + +! Where appropriate, parameters use usually given in MKS units. + +! This particular file is for the example in ice_ocean_SIS2/Baltic_OM4_025. + +! This MOM_input file typically contains only the non-default values that are needed to reproduce this example. +! A full list of parameters for this example can be found in the corresponding MOM_parameter_doc.all file +! which is generated by the model at run-time. + + +! === module MOM_domains === +REENTRANT_X = False ! [Boolean] default = True + ! If true, the domain is zonally reentrant. +!SYMMETRIC_MEMORY_ = True +!STATIC_MEMORY_ = False + +NIGLOBAL = @[NIGLOBAL] ! + ! The total number of thickness grid points in the x-direction in the physical + ! domain. With STATIC_MEMORY_ this is set in MOM_memory.h at compile time. +NJGLOBAL = @[NJGLOBAL] ! + ! The total number of thickness grid points in the y-direction in the physical + ! domain. With STATIC_MEMORY_ this is set in MOM_memory.h at compile time. +!NIHALO = 4 ! default = 4 + ! The number of halo points on each side in the x-direction. With + ! STATIC_MEMORY_ this is set as NIHALO_ in MOM_memory.h at compile time; without + ! STATIC_MEMORY_ the default is NIHALO_ in MOM_memory.h (if defined) or 2. +!NJHALO = 4 ! default = 4 + ! The number of halo points on each side in the y-direction. With + ! STATIC_MEMORY_ this is set as NJHALO_ in MOM_memory.h at compile time; without + ! STATIC_MEMORY_ the default is NJHALO_ in MOM_memory.h (if defined) or 2. +! LAYOUT = 4, 4 ! + ! The processor layout that was actually used. +! IO_LAYOUT = 1, 1 ! default = 1 + ! The processor layout to be used, or 0,0 to automatically set the io_layout to + ! be the same as the layout. + +! === module MOM === +DIABATIC_FIRST = False ! [Boolean] default = False + ! If true, apply diabatic and thermodynamic processes, including buoyancy + ! forcing and mass gain or loss, before stepping the dynamics forward. +USE_REGRIDDING = True ! [Boolean] default = False + ! If True, use the ALE algorithm (regridding/remapping). If False, use the + ! layered isopycnal algorithm. +THICKNESSDIFFUSE = True ! [Boolean] default = False + ! If true, interface heights are diffused with a coefficient of KHTH. +THICKNESSDIFFUSE_FIRST = True ! [Boolean] default = False + ! If true, do thickness diffusion before dynamics. This is only used if + ! THICKNESSDIFFUSE is true. +DT = 360.0 ! [s] + ! The (baroclinic) dynamics time step. The time-step that is actually used will + ! be an integer fraction of the forcing time-step (DT_FORCING in ocean-only mode + ! or the coupling timestep in coupled mode.) +DT_THERM = 360.0 ! [s] default = 3600.0 + ! The thermodynamic and tracer advection time step. Ideally DT_THERM should be + ! an integer multiple of DT and less than the forcing or coupling time-step, + ! unless THERMO_SPANS_COUPLING is true, in which case DT_THERM can be an integer + ! multiple of the coupling timestep. By default DT_THERM is set to DT. +THERMO_SPANS_COUPLING = True ! [Boolean] default = False + ! If true, the MOM will take thermodynamic and tracer timesteps that can be + ! longer than the coupling timestep. The actual thermodynamic timestep that is + ! used in this case is the largest integer multiple of the coupling timestep + ! that is less than or equal to DT_THERM. +USE_PSURF_IN_EOS = False ! [Boolean] default = False + ! If true, always include the surface pressure contributions in equation of + ! state calculations. +FRAZIL = True ! [Boolean] default = False + ! If true, water freezes if it gets too cold, and the accumulated heat deficit + ! is returned in the surface state. FRAZIL is only used if + ! ENABLE_THERMODYNAMICS is true. +DO_GEOTHERMAL = True ! [Boolean] default = False + ! If true, apply geothermal heating. +BOUND_SALINITY = True ! [Boolean] default = False + ! If true, limit salinity to being positive. (The sea-ice model may ask for more + ! salt than is available and drive the salinity negative otherwise.) +MIN_SALINITY = 0.01 ! [PPT] default = 0.01 + ! The minimum value of salinity when BOUND_SALINITY=True. The default is 0.01 + ! for backward compatibility but ideally should be 0. +C_P = 3925.0 !3992.0 ! [J kg-1 K-1] default = 3991.86795711963 + ! The heat capacity of sea water, approximated as a constant. This is only used + ! if ENABLE_THERMODYNAMICS is true. The default value is from the TEOS-10 + ! definition of conservative temperature. +CHECK_BAD_SURFACE_VALS = True ! [Boolean] default = False + ! If true, check the surface state for ridiculous values. +BAD_VAL_SSH_MAX = 50.0 ! [m] default = 20.0 + ! The value of SSH above which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SSS_MAX = 75.0 ! [PPT] default = 45.0 + ! The value of SSS above which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SST_MAX = 55.0 ! [deg C] default = 45.0 + ! The value of SST above which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SST_MIN = -3.0 ! [deg C] default = -2.1 + ! The value of SST below which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +DEFAULT_ANSWER_DATE = 20181231 ! default = 99991231 + ! This sets the default value for the various _ANSWERS_DATE parameters. +WRITE_GEOM = 0 ! default = 1 + ! If =0, never write the geometry and vertical grid files. If =1, write the + ! geometry and vertical grid files only for a new simulation. If =2, always + ! write the geometry and vertical grid files. Other values are invalid. +SAVE_INITIAL_CONDS = False ! [Boolean] default = False + ! If true, write the initial conditions to a file given by IC_OUTPUT_FILE. +IC_OUTPUT_FILE = "MOM_IC" ! default = "MOM_IC" + ! The file into which to write the initial conditions. + +! === module MOM_hor_index === +! Sets the horizontal array index types. + +! === module MOM_fixed_initialization === +INPUTDIR = "INPUT" ! default = "." + ! The directory in which input files are found. + +! === module MOM_grid_init === +GRID_CONFIG = "mosaic" ! + ! A character string that determines the method for defining the horizontal + ! grid. Current options are: + ! mosaic - read the grid from a mosaic (supergrid) + ! file set by GRID_FILE. + ! cartesian - use a (flat) Cartesian grid. + ! spherical - use a simple spherical grid. + ! mercator - use a Mercator spherical grid. +GRID_FILE = "ocean_hgrid.nc" ! + ! Name of the file from which to read horizontal grid data. +TOPO_CONFIG = "file" ! + ! This specifies how bathymetry is specified: + ! file - read bathymetric information from the file + ! specified by (TOPO_FILE). + ! flat - flat bottom set to MAXIMUM_DEPTH. + ! bowl - an analytically specified bowl-shaped basin + ! ranging between MAXIMUM_DEPTH and MINIMUM_DEPTH. + ! spoon - a similar shape to 'bowl', but with an vertical + ! wall at the southern face. + ! halfpipe - a zonally uniform channel with a half-sine + ! profile in the meridional direction. + ! benchmark - use the benchmark test case topography. + ! Neverland - use the Neverland test case topography. + ! DOME - use a slope and channel configuration for the + ! DOME sill-overflow test case. + ! ISOMIP - use a slope and channel configuration for the + ! ISOMIP test case. + ! DOME2D - use a shelf and slope configuration for the + ! DOME2D gravity current/overflow test case. + ! Kelvin - flat but with rotated land mask. + ! seamount - Gaussian bump for spontaneous motion test case. + ! dumbbell - Sloshing channel with reservoirs on both ends. + ! shelfwave - exponential slope for shelfwave test case. + ! Phillips - ACC-like idealized topography used in the Phillips config. + ! dense - Denmark Strait-like dense water formation and overflow. + ! USER - call a user modified routine. +TOPO_FILE = "ocean_topog.nc" ! default = "topog.nc" + ! The file from which the bathymetry is read. +MAXIMUM_DEPTH = 6500.0 ! [m] + ! The maximum depth of the ocean. +MINIMUM_DEPTH = 5.0 !9.5 ! [m] default = 0.0 + ! If MASKING_DEPTH is unspecified, then anything shallower than MINIMUM_DEPTH is + ! assumed to be land and all fluxes are masked out. If MASKING_DEPTH is + ! specified, then all depths shallower than MINIMUM_DEPTH but deeper than + ! MASKING_DEPTH are rounded to MINIMUM_DEPTH. + +! === module MOM_open_boundary === +! Controls where open boundaries are located, what kind of boundary condition to impose, and what data to apply, +! if any. +! khs_testMASKING_DEPTH = 1.0 ! [m] default = -9999.0 +MASKING_DEPTH = 5.0 ! [m] default = -9999.0 + ! The depth below which to mask points as land points, for which all fluxes are + ! zeroed out. MASKING_DEPTH is ignored if negative. +CHANNEL_CONFIG = "none" ! default = "none" + ! A parameter that determines which set of channels are + ! restricted to specific widths. Options are: + ! none - All channels have the grid width. + ! global_1deg - Sets 16 specific channels appropriate + ! for a 1-degree model, as used in CM2G. + ! list - Read the channel locations and widths from a + ! text file, like MOM_channel_list in the MOM_SIS + ! test case. + ! file - Read open face widths everywhere from a + ! NetCDF file on the model grid. +!CHANNEL_LIST_FILE = "MOM_channels_global_025" ! default = "MOM_channel_list" + ! The file from which the list of narrowed channels is read. +OBC_NUMBER_OF_SEGMENTS = 4 ! default = 0 + ! The number of open boundary segments. +OBC_FREESLIP_VORTICITY = True ! [Boolean] default = True + ! If true, sets the normal gradient of tangential velocity to zero in the + ! relative vorticity on open boundaries. This cannot be true if another + ! OBC_XXX_VORTICITY option is True. +OBC_COMPUTED_VORTICITY = False ! [Boolean] default = False + ! If true, uses the external values of tangential velocity in the relative + ! vorticity on open boundaries. This cannot be true if another OBC_XXX_VORTICITY + ! option is True. +OBC_ZERO_BIHARMONIC = False ! [Boolean] default = False + ! If true, zeros the Laplacian of flow on open boundaries in the biharmonic + ! viscosity term. +OBC_FREESLIP_STRAIN = False ! [Boolean] default = True +OBC_COMPUTED_STRAIN = True ! [Boolean] default = False +OBC_SEGMENT_001 = "J=N,I=N:0,FLATHER,ORLANSKI,NUDGED,ORLANSKI_TAN,NUDGED_TAN" ! north +OBC_SEGMENT_002 = "J=0,I=0:N,FLATHER,ORLANSKI,NUDGED,ORLANSKI_TAN,NUDGED_TAN" ! south +OBC_SEGMENT_003 = "I=N,J=0:N,FLATHER,ORLANSKI,NUDGED,ORLANSKI_TAN,NUDGED_TAN" ! east +OBC_SEGMENT_004 = "I=0,J=N:0,FLATHER,ORLANSKI,NUDGED,ORLANSKI_TAN,NUDGED_TAN" ! west + ! Documentation needs to be dynamic????? +OBC_SEGMENT_001_VELOCITY_NUDGING_TIMESCALES = 3, 360.0 !3, 360.0 !0.3, 360.0 !3, 3600.0 !0.3, 360.0 ! [days] default = 0.0 + ! Timescales in days for nudging along a segment, for inflow, then outflow. + ! Setting both to zero should behave like SIMPLE obcs for the baroclinic + ! velocities. + ! Documentation needs to be dynamic????? +OBC_SEGMENT_002_VELOCITY_NUDGING_TIMESCALES = 3, 360.0 !3, 360.0 !0.3, 360.0 !3, 3600.0 !0.3, 360.0 ! [days] default = 0.0 + ! Timescales in days for nudging along a segment, for inflow, then outflow. + ! Setting both to zero should behave like SIMPLE obcs for the baroclinic + ! velocities. +OBC_SEGMENT_003_VELOCITY_NUDGING_TIMESCALES = 3, 360.0 !3, 360.0 !0.3, 360.0 !3, 3600.0 !0.3, 360.0 !3, 3600.0 ! [days] default = 0.0 + ! Timescales in days for nudging along a segment, for inflow, then outflow. + ! Setting both to zero should behave like SIMPLE obcs for the baroclinic + ! velocities. + ! Documentation needs to be dynamic????? +OBC_SEGMENT_004_VELOCITY_NUDGING_TIMESCALES = 3, 360.0 !3, 360.0 !0.3, 360.0 !3, 3600.0 !0.3, 360.0 !3, 3600.0 ! [days] default = 0.0 + ! Timescales in days for nudging along a segment, for inflow, then outflow. + ! Setting both to zero should behave like SIMPLE obcs for the baroclinic + ! velocities. + ! Documentation needs to be dynamic????? +BRUSHCUTTER_MODE = True ! [Boolean] default = False + ! If true, read external OBC data on the supergrid. +OBC_SEGMENT_001_DATA = "U=file:ocean_uv_obc_north.nc(u),V=file:ocean_uv_obc_north.nc(v),SSH=file:ocean_ssh_obc_north.nc(ssh),TEMP=file:ocean_ts_obc_north.nc(temp),SALT=file:ocean_ts_obc_north.nc(salt)" ! +OBC_SEGMENT_002_DATA = "U=file:ocean_uv_obc_south.nc(u),V=file:ocean_uv_obc_south.nc(v),SSH=file:ocean_ssh_obc_south.nc(ssh),TEMP=file:ocean_ts_obc_south.nc(temp),SALT=file:ocean_ts_obc_south.nc(salt)" ! +OBC_SEGMENT_003_DATA = "U=file:ocean_uv_obc_east.nc(u),V=file:ocean_uv_obc_east.nc(v),SSH=file:ocean_ssh_obc_east.nc(ssh),TEMP=file:ocean_ts_obc_east.nc(temp),SALT=file:ocean_ts_obc_east.nc(salt)" ! +OBC_SEGMENT_004_DATA = "U=file:ocean_uv_obc_west.nc(u),V=file:ocean_uv_obc_west.nc(v),SSH=file:ocean_ssh_obc_west.nc(ssh),TEMP=file:ocean_ts_obc_west.nc(temp),SALT=file:ocean_ts_obc_west.nc(salt)" ! +OBC_TRACER_RESERVOIR_LENGTH_SCALE_OUT = 3000.0 !0.0 !3000.0 ! [m] default = 0.0 + ! An effective length scale for restoring the tracer concentration at the + ! boundaries to externally imposed values when the flow is exiting the domain. +OBC_TRACER_RESERVOIR_LENGTH_SCALE_IN = 3.0E+04 !0.0 !3.0E+04 ! [m] default = 0.0 + ! An effective length scale for restoring the tracer concentration at the + ! boundaries to values from the interior when the flow is entering the domain. +RAMP_OBCS = False ! default = False +OBC_RAMP_TIMESCALE = 2.0 ! [days] default = 1.0 +OBC_RADIATION_MAX = 1.0 ! [nondim] default = 1.0 + +! === module MOM_verticalGrid === +! Parameters providing information about the vertical grid. +NK = 55 ! [nondim] + ! The number of model layers. + +! === module MOM_tracer_registry === + +! === module MOM_EOS === +DTFREEZE_DP = -7.75E-08 ! [deg C Pa-1] default = 0.0 + ! When TFREEZE_FORM=LINEAR, this is the derivative of the freezing potential + ! temperature with pressure. +EQN_OF_STATE = "JACKETT_06" ! default = "WRIGHT" + ! EQN_OF_STATE determines which ocean equation of state should be used. + ! Currently, the valid choices are "LINEAR", "UNESCO", "JACKETT_MCD", "WRIGHT", + ! "WRIGHT_REDUCED", "WRIGHT_FULL", "NEMO", "ROQUET_RHO", "ROQUET_SPV" and + ! "TEOS10". This is only used if USE_EOS is true. + +! === module MOM_restart === +PARALLEL_RESTARTFILES = False ! [Boolean] default = False + ! If true, each processor writes its own restart file, otherwise a single + ! restart file is generated +RESTART_CHECKSUMS_REQUIRED = False + +! === module MOM_tracer_flow_control === +USE_IDEAL_AGE_TRACER = True ! [Boolean] default = False + ! If true, use the ideal_age_example tracer package. + +! === module ideal_age_example === + +! === module MOM_coord_initialization === +COORD_CONFIG = "gprime" !"file" ! default = "none" + ! This specifies how layers are to be defined: + ! ALE or none - used to avoid defining layers in ALE mode + ! file - read coordinate information from the file + ! specified by (COORD_FILE). + ! BFB - Custom coords for buoyancy-forced basin case + ! based on SST_S, T_BOT and DRHO_DT. + ! linear - linear based on interfaces not layers + ! layer_ref - linear based on layer densities + ! ts_ref - use reference temperature and salinity + ! ts_range - use range of temperature and salinity + ! (T_REF and S_REF) to determine surface density + ! and GINT calculate internal densities. + ! gprime - use reference density (RHO_0) for surface + ! density and GINT calculate internal densities. + ! ts_profile - use temperature and salinity profiles + ! (read from COORD_FILE) to set layer densities. + ! USER - call a user modified routine. +GINT = 0.0098 ! [m s-2] +!COORD_FILE = "layer_coord.nc" ! + ! The file from which the coordinate densities are read. +REMAP_UV_USING_OLD_ALG = True ! [Boolean] default = True + ! If true, uses the old remapping-via-a-delta-z method for remapping u and v. If + ! false, uses the new method that remaps between grids described by an old and + ! new thickness. +REGRIDDING_COORDINATE_MODE = "Z*" !"HYCOM1" ! default = "LAYER" + ! Coordinate mode for vertical regridding. Choose among the following + ! possibilities: LAYER - Isopycnal or stacked shallow water layers + ! ZSTAR, Z* - stretched geopotential z* + ! SIGMA_SHELF_ZSTAR - stretched geopotential z* ignoring shelf + ! SIGMA - terrain following coordinates + ! RHO - continuous isopycnal + ! HYCOM1 - HyCOM-like hybrid coordinate + ! SLIGHT - stretched coordinates above continuous isopycnal + ! ADAPTIVE - optimize for smooth neutral density surfaces +BOUNDARY_EXTRAPOLATION = True ! [Boolean] default = False + ! When defined, a proper high-order reconstruction scheme is used within + ! boundary cells rather than PCM. E.g., if PPM is used for remapping, a PPM + ! reconstruction will also be used within boundary cells. +ALE_COORDINATE_CONFIG = "FILE:ocean_vgrid.nc,dz" !"HYBRID:hycom1_75_800m.nc,sigma2,FNC1:2,4000,4.5,.01" ! default = "UNIFORM" + ! Determines how to specify the coordinate resolution. Valid options are: + ! PARAM - use the vector-parameter ALE_RESOLUTION + ! UNIFORM[:N] - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,dz + ! or FILE:lev.nc,interfaces=zw + ! WOA09[:N] - the WOA09 vertical grid (approximately) + ! FNC1:string - FNC1:dz_min,H_total,power,precision + ! HYBRID:string - read from a file. The string specifies + ! the filename and two variable names, separated + ! by a comma or space, for sigma-2 and dz. e.g. + ! HYBRID:vgrid.nc,sigma2,dz +!ALE_RESOLUTION = 7*2.0, 2*2.01, 2.02, 2.03, 2.05, 2.08, 2.11, 2.15, 2.21, 2.2800000000000002, 2.37, 2.48, 2.61, 2.77, 2.95, 3.17, 3.4299999999999997, 3.74, 4.09, 4.49, 4.95, 5.48, 6.07, 6.74, 7.5, 8.34, 9.280000000000001, 10.33, 11.49, 12.77, 14.19, 15.74, 17.450000000000003, 19.31, 21.35, 23.56, 25.97, 28.580000000000002, 31.41, 34.47, 37.77, 41.32, 45.14, 49.25, 53.65, 58.370000000000005, 63.42, 68.81, 74.56, 80.68, 87.21000000000001, 94.14, 101.51, 109.33, 117.62, 126.4, 135.68, 145.5, 155.87, 166.81, 178.35, 190.51, 203.31, 216.78, 230.93, 245.8, 261.42, 277.83 ! [m] + ! The distribution of vertical resolution for the target + ! grid used for Eulerian-like coordinates. For example, + ! in z-coordinate mode, the parameter is a list of level + ! thicknesses (in m). In sigma-coordinate mode, the list + ! is of non-dimensional fractions of the water column. +!TARGET_DENSITIES = 1010.0, 1014.3034, 1017.8088, 1020.843, 1023.5566, 1025.813, 1027.0275, 1027.9114, 1028.6422, 1029.2795, 1029.852, 1030.3762, 1030.8626, 1031.3183, 1031.7486, 1032.1572, 1032.5471, 1032.9207, 1033.2798, 1033.6261, 1033.9608, 1034.2519, 1034.4817, 1034.6774, 1034.8508, 1035.0082, 1035.1533, 1035.2886, 1035.4159, 1035.5364, 1035.6511, 1035.7608, 1035.8661, 1035.9675, 1036.0645, 1036.1554, 1036.2411, 1036.3223, 1036.3998, 1036.4739, 1036.5451, 1036.6137, 1036.68, 1036.7441, 1036.8062, 1036.8526, 1036.8874, 1036.9164, 1036.9418, 1036.9647, 1036.9857, 1037.0052, 1037.0236, 1037.0409, 1037.0574, 1037.0738, 1037.0902, 1037.1066, 1037.123, 1037.1394, 1037.1558, 1037.1722, 1037.1887, 1037.206, 1037.2241, 1037.2435, 1037.2642, 1037.2866, 1037.3112, 1037.3389, 1037.3713, 1037.4118, 1037.475, 1037.6332, 1037.8104, 1038.0 ! [m] + ! HYBRID target densities for interfaces +REGRID_COMPRESSIBILITY_FRACTION = 0.01 ! [nondim] default = 0.0 + ! When interpolating potential density profiles we can add some artificial + ! compressibility solely to make homogeneous regions appear stratified. +MAXIMUM_INT_DEPTH_CONFIG = "FNC1:5,8000.0,1.0,.01" ! default = "NONE" + ! Determines how to specify the maximum interface depths. + ! Valid options are: + ! NONE - there are no maximum interface depths + ! PARAM - use the vector-parameter MAXIMUM_INTERFACE_DEPTHS + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,Z + ! FNC1:string - FNC1:dz_min,H_total,power,precision +!MAXIMUM_INT_DEPTHS = 0.0, 5.0, 12.75, 23.25, 36.49, 52.480000000000004, 71.22, 92.71000000000001, 116.94000000000001, 143.92000000000002, 173.65, 206.13, 241.36, 279.33000000000004, 320.05000000000007, 363.5200000000001, 409.7400000000001, 458.7000000000001, 510.4100000000001, 564.8700000000001, 622.0800000000002, 682.0300000000002, 744.7300000000002, 810.1800000000003, 878.3800000000003, 949.3300000000004, 1023.0200000000004, 1099.4600000000005, 1178.6500000000005, 1260.5900000000006, 1345.2700000000007, 1432.7000000000007, 1522.8800000000008, 1615.8100000000009, 1711.490000000001, 1809.910000000001, 1911.080000000001, 2015.0000000000011, 2121.670000000001, 2231.080000000001, 2343.2400000000007, 2458.1500000000005, 2575.8100000000004, 2696.2200000000003, 2819.3700000000003, 2945.2700000000004, 3073.9200000000005, 3205.3200000000006, 3339.4600000000005, 3476.3500000000004, 3615.9900000000002, 3758.38, 3903.52, 4051.4, 4202.03, 4355.41, 4511.54, 4670.41, 4832.03, 4996.4, 5163.5199999999995, 5333.379999999999, 5505.989999999999, 5681.3499999999985, 5859.459999999998, 6040.319999999998, 6223.919999999998, 6410.269999999999, 6599.369999999999, 6791.219999999999, 6985.8099999999995, 7183.15, 7383.24, 7586.08, 7791.67, 8000.0 + ! The list of maximum depths for each interface. +MAX_LAYER_THICKNESS_CONFIG = "FNC1:400,31000.0,0.1,.01" ! default = "NONE" + ! Determines how to specify the maximum layer thicknesses. + ! Valid options are: + ! NONE - there are no maximum layer thicknesses + ! PARAM - use the vector-parameter MAX_LAYER_THICKNESS + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,Z + ! FNC1:string - FNC1:dz_min,H_total,power,precision +!MAX_LAYER_THICKNESS = 400.0, 409.63, 410.32, 410.75, 411.07, 411.32, 411.52, 411.7, 411.86, 412.0, 412.13, 412.24, 412.35, 412.45, 412.54, 412.63, 412.71, 412.79, 412.86, 412.93, 413.0, 413.06, 413.12, 413.18, 413.24, 413.29, 413.34, 413.39, 413.44, 413.49, 413.54, 413.58, 413.62, 413.67, 413.71, 413.75, 413.78, 413.82, 413.86, 413.9, 413.93, 413.97, 414.0, 414.03, 414.06, 414.1, 414.13, 414.16, 414.19, 414.22, 414.24, 414.27, 414.3, 414.33, 414.35, 414.38, 414.41, 414.43, 414.46, 414.48, 414.51, 414.53, 414.55, 414.58, 414.6, 414.62, 414.65, 414.67, 414.69, 414.71, 414.73, 414.75, 414.77, 414.79, 414.83 ! [m] + ! The list of maximum thickness for each layer. +REMAPPING_SCHEME = "PPM_H4" ! default = "PLM" + ! This sets the reconstruction scheme used for vertical remapping for all + ! variables. It can be one of the following schemes: PCM (1st-order + ! accurate) + ! PLM (2nd-order accurate) + ! PPM_H4 (3rd-order accurate) + ! PPM_IH4 (3rd-order accurate) + ! PQM_IH4IH3 (4th-order accurate) + ! PQM_IH6IH5 (5th-order accurate) + +! === module MOM_grid === +! Parameters providing information about the lateral grid. + +! === module MOM_state_initialization === +TS_CONFIG = "file" ! + ! A string that determines how the initial tempertures and salinities are + ! specified for a new run: + ! file - read velocities from the file specified + ! by (TS_FILE). + ! fit - find the temperatures that are consistent with + ! the layer densities and salinity S_REF. + ! TS_profile - use temperature and salinity profiles + ! (read from TS_FILE) to set layer densities. + ! benchmark - use the benchmark test case T & S. + ! linear - linear in logical layer space. + ! DOME2D - 2D DOME initialization. + ! ISOMIP - ISOMIP initialization. + ! adjustment2d - 2d lock exchange T/S ICs. + ! sloshing - sloshing mode T/S ICs. + ! seamount - no motion test with seamount ICs. + ! dumbbell - sloshing channel ICs. + ! rossby_front - a mixed layer front in thermal wind balance. + ! SCM_CVMix_tests - used in the SCM CVMix tests. + ! USER - call a user modified routine. +TS_FILE = "ocean_ts_ic.nc" ! + ! The initial condition file for temperature. + +INIT_LAYERS_FROM_Z_FILE = True ! [Boolean] default = False + ! If true, initialize the layer thicknesses, temperatures, and salinities from a + ! Z-space file on a latitude-longitude grid. + + +! === module MOM_initialize_layers_from_Z === +TEMP_SALT_Z_INIT_FILE = "ocean_ts_ic.nc" ! default = "temp_salt_z.nc" + ! The name of the z-space input file used to initialize temperatures (T) and + ! salinities (S). If T and S are not in the same file, TEMP_Z_INIT_FILE and + ! SALT_Z_INIT_FILE must be set. +!TEMP_Z_INIT_FILE = "" ! default = "" + ! The name of the z-space input file used to initialize temperatures, only. +!SALT_Z_INIT_FILE = "" ! default = "" + ! The name of the z-space input file used to initialize temperatures, only. +Z_INIT_FILE_PTEMP_VAR = "Temp" ! default = "ptemp" + ! The name of the potential temperature variable in TEMP_Z_INIT_FILE. +Z_INIT_FILE_SALT_VAR = "Salt" ! default = "salt" + ! The name of the salinity variable in SALT_Z_INIT_FILE. +Z_INIT_ALE_REMAPPING = True ! [Boolean] default = False + ! If True, then remap straight to model coordinate from file. +Z_INIT_REMAP_OLD_ALG = True ! [Boolean] default = True + ! If false, uses the preferred remapping algorithm for initialization. If true, + ! use an older, less robust algorithm for remapping. +Z_INIT_REMAP_GENERAL = True ! [Boolean] default = False + ! If false, only initializes to z* coordinates. + ! If true, allows initialization directly to general coordinates. +Z_INIT_REMAP_FULL_COLUMN = True ! [Boolean] default = True + ! If false, only reconstructs profiles for valid data points. + ! If true, inserts vanished layers below the valid data. +DEPRESS_INITIAL_SURFACE = True ! [Boolean] default = False + ! If true, depress the initial surface to avoid huge tsunamis when a large + ! surface pressure is applied. +SURFACE_HEIGHT_IC_FILE = "ocean_ssh_ic.nc" ! + ! The initial condition file for the surface height. +SURFACE_HEIGHT_IC_VAR = "ave_ssh" ! default = "SSH" + ! The initial condition variable for the surface height +VELOCITY_CONFIG = "file" +VELOCITY_FILE = "ocean_uv_ic.nc" + +! === module MOM_diag_mediator === +NUM_DIAG_COORDS = 2 ! default = 1 + ! The number of diagnostic vertical coordinates to use. For each coordinate, an + ! entry in DIAG_COORDS must be provided. +DIAG_COORDS = "z Z ZSTAR", "rho2 RHO2 RHO" ! + ! A list of string tuples associating diag_table modules to a coordinate + ! definition used for diagnostics. Each string is of the form + ! "MODULE_SUFFIX,PARAMETER_SUFFIX,COORDINATE_NAME". +DIAG_COORD_DEF_RHO2 = "RFNC1:35,999.5,1028,1028.5,8.,1038.,0.0078125" ! default = "WOA09" + ! Determines how to specify the coordinate resolution. Valid options are: + ! PARAM - use the vector-parameter DIAG_COORD_RES_RHO2 + ! UNIFORM[:N] - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,dz + ! or FILE:lev.nc,interfaces=zw + ! WOA09[:N] - the WOA09 vertical grid (approximately) + ! FNC1:string - FNC1:dz_min,H_total,power,precision + ! HYBRID:string - read from a file. The string specifies + ! the filename and two variable names, separated + ! by a comma or space, for sigma-2 and dz. e.g. + ! HYBRID:vgrid.nc,sigma2,dz +DIAG_COORD_DEF_Z = "FILE:ocean_vgrid.nc,interfaces=zw" ! default = "WOA09" + ! Determines how to specify the coordinate + ! resolution. Valid options are: + ! PARAM - use the vector-parameter DIAG_COORD_RES_RHO2 + ! UNIFORM[:N] - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,dz + ! or FILE:lev.nc,interfaces=zw + ! WOA09[:N] - the WOA09 vertical grid (approximately) + ! FNC1:string - FNC1:dz_min,H_total,power,precision + ! HYBRID:string - read from a file. The string specifies + ! the filename and two variable names, separated + ! by a comma or space, for sigma-2 and dz. e.g. + ! HYBRID:vgrid.nc,sigma2,dz + +! === module MOM_MEKE === +USE_MEKE = True ! [Boolean] default = False + ! If true, turns on the MEKE scheme which calculates a sub-grid mesoscale eddy + ! kinetic energy budget. +MEKE_GMCOEFF = 1.0 ! [nondim] default = -1.0 + ! The efficiency of the conversion of potential energy into MEKE by the + ! thickness mixing parameterization. If MEKE_GMCOEFF is negative, this + ! conversion is not used or calculated. +MEKE_BGSRC = 1.0E-13 ! [W kg-1] default = 0.0 + ! A background energy source for MEKE. +MEKE_KHMEKE_FAC = 1.0 ! [nondim] default = 0.0 + ! A factor that maps MEKE%Kh to Kh for MEKE itself. +MEKE_ALPHA_RHINES = 0.15 ! [nondim] default = 0.05 + ! If positive, is a coefficient weighting the Rhines scale in the expression for + ! mixing length used in MEKE-derived diffusivity. +MEKE_ALPHA_EADY = 0.15 ! [nondim] default = 0.05 + ! If positive, is a coefficient weighting the Eady length scale in the + ! expression for mixing length used in MEKE-derived diffusivity. + +! === module MOM_lateral_mixing_coeffs === +USE_VARIABLE_MIXING = True ! [Boolean] default = False + ! If true, the variable mixing code will be called. This allows diagnostics to + ! be created even if the scheme is not used. If KHTR_SLOPE_CFF>0 or + ! KhTh_Slope_Cff>0, this is set to true regardless of what is in the parameter + ! file. +RESOLN_SCALED_KH = True ! [Boolean] default = False + ! If true, the Laplacian lateral viscosity is scaled away when the first + ! baroclinic deformation radius is well resolved. +RESOLN_SCALED_KHTH = True ! [Boolean] default = False + ! If true, the interface depth diffusivity is scaled away when the first + ! baroclinic deformation radius is well resolved. +KHTR_SLOPE_CFF = 0.25 ! [nondim] default = 0.0 + ! The nondimensional coefficient in the Visbeck formula for the epipycnal tracer + ! diffusivity +USE_STORED_SLOPES = True ! [Boolean] default = False + ! If true, the isopycnal slopes are calculated once and stored for re-use. This + ! uses more memory but avoids calling the equation of state more times than + ! should be necessary. +INTERPOLATE_RES_FN = False ! [Boolean] default = True + ! If true, interpolate the resolution function to the velocity points from the + ! thickness points; otherwise interpolate the wave speed and calculate the + ! resolution function independently at each point. +GILL_EQUATORIAL_LD = True ! [Boolean] default = False + ! If true, uses Gill's definition of the baroclinic equatorial deformation + ! radius, otherwise, if false, use Pedlosky's definition. These definitions + ! differ by a factor of 2 in front of the beta term in the denominator. Gill's + ! is the more appropriate definition. + +! === module MOM_set_visc === +CHANNEL_DRAG = True ! [Boolean] default = False + ! If true, the bottom drag is exerted directly on each layer proportional to the + ! fraction of the bottom it overlies. +PRANDTL_TURB = 1.25 ! [nondim] default = 1.0 + ! The turbulent Prandtl number applied to shear instability. +HBBL = 10.0 ! [m] + ! The thickness of a bottom boundary layer with a viscosity of KVBBL if + ! BOTTOMDRAGLAW is not defined, or the thickness over which near-bottom + ! velocities are averaged for the drag law if BOTTOMDRAGLAW is defined but + ! LINEAR_DRAG is not. +DRAG_BG_VEL = 0.01 ! [m s-1] default = 0.0 + ! DRAG_BG_VEL is either the assumed bottom velocity (with LINEAR_DRAG) or an + ! unresolved velocity that is combined with the resolved velocity to estimate + ! the velocity magnitude. DRAG_BG_VEL is only used when BOTTOMDRAGLAW is + ! defined. +BBL_USE_EOS = True ! [Boolean] default = False + ! If true, use the equation of state in determining the properties of the bottom + ! boundary layer. Otherwise use the layer target potential densities. +BBL_THICK_MIN = 0.1 ! [m] default = 0.0 + ! The minimum bottom boundary layer thickness that can be used with + ! BOTTOMDRAGLAW. This might be Kv/(cdrag*drag_bg_vel) to give Kv as the minimum + ! near-bottom viscosity. +KV = 1.0E-06 ! [m2 s-1] + ! The background kinematic viscosity in the interior. The molecular value, ~1e-6 + ! m2 s-1, may be used. +KV_BBL_MIN = 0.0 ! [m2 s-1] default = 1.0E-04 + ! The minimum viscosities in the bottom boundary layer. +KV_TBL_MIN = 0.0 ! [m2 s-1] default = 1.0E-04 + ! The minimum viscosities in the top boundary layer. + +! === module MOM_thickness_diffuse === +KHTH_MAX_CFL = 0.1 ! [nondimensional] default = 0.8 + ! The maximum value of the local diffusive CFL ratio that is permitted for the + ! thickness diffusivity. 1.0 is the marginally unstable value in a pure layered + ! model, but much smaller numbers (e.g. 0.1) seem to work better for ALE-based + ! models. +USE_GM_WORK_BUG = True ! [Boolean] default = True + ! If true, compute the top-layer work tendency on the u-grid with the incorrect + ! sign, for legacy reproducibility. + +! === module MOM_continuity === + +! === module MOM_continuity_PPM === +ETA_TOLERANCE = 1.0E-06 ! [m] default = 3.75E-09 + ! The tolerance for the differences between the barotropic and baroclinic + ! estimates of the sea surface height due to the fluxes through each face. The + ! total tolerance for SSH is 4 times this value. The default is + ! 0.5*NK*ANGSTROM, and this should not be set less than about + ! 10^-15*MAXIMUM_DEPTH. +ETA_TOLERANCE_AUX = 0.001 ! [m] default = 1.0E-06 + ! The tolerance for free-surface height discrepancies between the barotropic + ! solution and the sum of the layer thicknesses when calculating the auxiliary + ! corrected velocities. By default, this is the same as ETA_TOLERANCE, but can + ! be made larger for efficiency. + +! === module MOM_CoriolisAdv === +CORIOLIS_SCHEME = "SADOURNY75_ENSTRO" ! default = "SADOURNY75_ENERGY" + ! CORIOLIS_SCHEME selects the discretization for the Coriolis terms. Valid + ! values are: + ! SADOURNY75_ENERGY - Sadourny, 1975; energy cons. + ! ARAKAWA_HSU90 - Arakawa & Hsu, 1990 + ! SADOURNY75_ENSTRO - Sadourny, 1975; enstrophy cons. + ! ARAKAWA_LAMB81 - Arakawa & Lamb, 1981; En. + Enst. + ! ARAKAWA_LAMB_BLEND - A blend of Arakawa & Lamb with + ! Arakawa & Hsu and Sadourny energy +BOUND_CORIOLIS = True ! [Boolean] default = False + ! If true, the Coriolis terms at u-points are bounded by the four estimates of + ! (f+rv)v from the four neighboring v-points, and similarly at v-points. This + ! option would have no effect on the SADOURNY Coriolis scheme if it were + ! possible to use centered difference thickness fluxes. + +! === module MOM_PressureForce === + +! === module MOM_PressureForce_AFV === +MASS_WEIGHT_IN_PRESSURE_GRADIENT = True ! [Boolean] default = False + ! If true, use mass weighting when interpolating T/S for integrals near the + ! bathymetry in AFV pressure gradient calculations. + +! === module MOM_hor_visc === +LAPLACIAN = True ! [Boolean] default = False + ! If true, use a Laplacian horizontal viscosity. +AH_VEL_SCALE = 0.005 ! [m s-1] default = 0.0 + ! The velocity scale which is multiplied by the cube of the grid spacing to + ! calculate the biharmonic viscosity. The final viscosity is the largest of this + ! scaled viscosity, the Smagorinsky and Leith viscosities, and AH. +SMAGORINSKY_AH = False ! [Boolean] default = False + ! If true, use a biharmonic Smagorinsky nonlinear eddy viscosity. +SMAG_BI_CONST = 0.06 ! [nondim] default = 0.0 + ! The nondimensional biharmonic Smagorinsky constant, typically 0.015 - 0.06. +USE_LAND_MASK_FOR_HVISC = False ! [Boolean] default = False + ! If true, use Use the land mask for the computation of thicknesses at velocity + ! locations. This eliminates the dependence on arbitrary values over land or + ! outside of the domain. Default is False in order to maintain answers with + ! legacy experiments but should be changed to True for new experiments. + +! === module MOM_vert_friction === +HMIX_FIXED = 0.5 ! [m] + ! The prescribed depth over which the near-surface viscosity and diffusivity are + ! elevated when the bulk mixed layer is not used. +! khs_testMAXVEL = 6.0 ! [m s-1] default = 3.0E+08 +MAXVEL = 3.0E+08 ! [m s-1] default = 3.0E+08 + ! The maximum velocity allowed before the velocity components are truncated. + +! === module MOM_PointAccel === +U_TRUNC_FILE = "U_velocity_truncations" ! default = "" + ! The absolute path to a file into which the accelerations leading to zonal + ! velocity truncations are written. Undefine this for efficiency if this + ! diagnostic is not needed. +V_TRUNC_FILE = "V_velocity_truncations" ! default = "" + ! The absolute path to a file into which the accelerations leading to meridional + ! velocity truncations are written. Undefine this for efficiency if this + ! diagnostic is not needed. + +! === module MOM_barotropic === +BOUND_BT_CORRECTION = True ! [Boolean] default = False + ! If true, the corrective pseudo mass-fluxes into the barotropic solver are + ! limited to values that require less than maxCFL_BT_cont to be accommodated. +BT_PROJECT_VELOCITY = True ! [Boolean] default = False + ! If true, step the barotropic velocity first and project out the velocity + ! tendency by 1+BEBT when calculating the transport. The default (false) is to + ! use a predictor continuity step to find the pressure field, and then to do a + ! corrector continuity step using a weighted average of the old and new + ! velocities, with weights of (1-BEBT) and BEBT. +DYNAMIC_SURFACE_PRESSURE = True ! [Boolean] default = False + ! If true, add a dynamic pressure due to a viscous ice shelf, for instance. +DT_BT_FILTER = 360 ! [sec or nondim] default = -0.25 + ! A time-scale over which the barotropic mode solutions are filtered, in seconds + ! if positive, or as a fraction of DT if negative. When used this can never be + ! take to be longer than 2*dt. Set this to 0 to apply no filtering. +BEBT = 0.2 ! [nondim] default = 0.1 + ! BEBT determines whether the barotropic time stepping uses the forward-backward + ! time-stepping scheme or a backward Euler scheme. BEBT is valid in the range + ! from 0 (for a forward-backward treatment of nonrotating gravity waves) to 1 + ! (for a backward Euler treatment). In practice, BEBT must be greater than about + ! 0.05. +DTBT = -0.9 ! [s or nondim] default = -0.98 + ! The barotropic time step, in s. DTBT is only used with the split explicit time + ! stepping. To set the time step automatically based the maximum stable value + ! use 0, or a negative value gives the fraction of the stable value. Setting + ! DTBT to 0 is the same as setting it to -0.98. The value of DTBT that will + ! actually be used is an integer fraction of DT, rounding down. +BT_USE_OLD_CORIOLIS_BRACKET_BUG = True ! [Boolean] default = False + ! If True, use an order of operations that is not bitwise rotationally symmetric + ! in the meridional Coriolis term of the barotropic solver. + +! === module MOM_mixed_layer_restrat === +MIXEDLAYER_RESTRAT = True ! [Boolean] default = False + ! If true, a density-gradient dependent re-stratifying flow is imposed in the + ! mixed layer. Can be used in ALE mode without restriction but in layer mode can + ! only be used if BULKMIXEDLAYER is true. +FOX_KEMPER_ML_RESTRAT_COEF = 1.0 ! [nondim] default = 0.0 + ! A nondimensional coefficient that is proportional to the ratio of the + ! deformation radius to the dominant lengthscale of the submesoscale mixed layer + ! instabilities, times the minimum of the ratio of the mesoscale eddy kinetic + ! energy to the large-scale geostrophic kinetic energy or 1 plus the square of + ! the grid spacing over the deformation radius, as detailed by Fox-Kemper et al. + ! (2010) +MLE_FRONT_LENGTH = 500.0 ! [m] default = 0.0 + ! If non-zero, is the frontal-length scale used to calculate the upscaling of + ! buoyancy gradients that is otherwise represented by the parameter + ! FOX_KEMPER_ML_RESTRAT_COEF. If MLE_FRONT_LENGTH is non-zero, it is recommended + ! to set FOX_KEMPER_ML_RESTRAT_COEF=1.0. +MLE_USE_PBL_MLD = True ! [Boolean] default = False + ! If true, the MLE parameterization will use the mixed-layer depth provided by + ! the active PBL parameterization. If false, MLE will estimate a MLD based on a + ! density difference with the surface using the parameter MLE_DENSITY_DIFF. +MLE_MLD_DECAY_TIME = 2.592E+06 ! [s] default = 0.0 + ! The time-scale for a running-mean filter applied to the mixed-layer depth used + ! in the MLE restratification parameterization. When the MLD deepens below the + ! current running-mean the running-mean is instantaneously set to the current + ! MLD. + +! === module MOM_diabatic_driver === +! The following parameters are used for diabatic processes. +ENERGETICS_SFC_PBL = True ! [Boolean] default = False + ! If true, use an implied energetics planetary boundary layer scheme to + ! determine the diffusivity and viscosity in the surface boundary layer. +EPBL_IS_ADDITIVE = True ! [Boolean] default = True + ! If true, the diffusivity from ePBL is added to all other diffusivities. + ! Otherwise, the larger of kappa-shear and ePBL diffusivities are used. + +! === module MOM_CVMix_KPP === +! This is the MOM wrapper to CVMix:KPP +! See http://cvmix.github.io/ + +! === module MOM_tidal_mixing === +! Vertical Tidal Mixing Parameterization +INT_TIDE_DISSIPATION = True ! [Boolean] default = False + ! If true, use an internal tidal dissipation scheme to drive diapycnal mixing, + ! along the lines of St. Laurent et al. (2002) and Simmons et al. (2004). +INT_TIDE_PROFILE = "POLZIN_09" ! default = "STLAURENT_02" + ! INT_TIDE_PROFILE selects the vertical profile of energy dissipation with + ! INT_TIDE_DISSIPATION. Valid values are: + ! STLAURENT_02 - Use the St. Laurent et al exponential + ! decay profile. + ! POLZIN_09 - Use the Polzin WKB-stretched algebraic + ! decay profile. +INT_TIDE_DECAY_SCALE = 300.3003003003003 ! [m] default = 500.0 + ! The decay scale away from the bottom for tidal TKE with the new coding when + ! INT_TIDE_DISSIPATION is used. +KAPPA_ITIDES = 6.28319E-04 ! [m-1] default = 6.283185307179586E-04 + ! A topographic wavenumber used with INT_TIDE_DISSIPATION. The default is 2pi/10 + ! km, as in St.Laurent et al. 2002. +KAPPA_H2_FACTOR = 0.84 ! [nondim] default = 1.0 + ! A scaling factor for the roughness amplitude with INT_TIDE_DISSIPATION. +TKE_ITIDE_MAX = 0.1 ! [W m-2] default = 1000.0 + ! The maximum internal tide energy source available to mix above the bottom + ! boundary layer with INT_TIDE_DISSIPATION. +READ_TIDEAMP = True ! [Boolean] default = False + ! If true, read a file (given by TIDEAMP_FILE) containing the tidal amplitude + ! with INT_TIDE_DISSIPATION. +TIDEAMP_FILE = "ocean_tidal_amplitude.nc" ! default = "tideamp.nc" + ! The path to the file containing the spatially varying tidal amplitudes with + ! INT_TIDE_DISSIPATION. +H2_FILE = "ocean_topog.nc" ! + ! The path to the file containing the sub-grid-scale topographic roughness + ! amplitude with INT_TIDE_DISSIPATION. + +! === module MOM_CVMix_conv === +! Parameterization of enhanced mixing due to convection via CVMix + +! === module MOM_geothermal === +GEOTHERMAL_SCALE = 1.0 ! [W m-2 or various] default = 0.0 + ! The constant geothermal heat flux, a rescaling factor for the heat flux read + ! from GEOTHERMAL_FILE, or 0 to disable the geothermal heating. +GEOTHERMAL_FILE = "ocean_geothermal.nc" ! default = "" + ! The file from which the geothermal heating is to be read, or blank to use a + ! constant heating rate. +GEOTHERMAL_VARNAME = "geothermal_hf" ! default = "geo_heat" + ! The name of the geothermal heating variable in GEOTHERMAL_FILE. + +! === module MOM_set_diffusivity === +BBL_MIXING_AS_MAX = False ! [Boolean] default = True + ! If true, take the maximum of the diffusivity from the BBL mixing and the other + ! diffusivities. Otherwise, diffusivity from the BBL_mixing is simply added. +USE_LOTW_BBL_DIFFUSIVITY = True ! [Boolean] default = False + ! If true, uses a simple, imprecise but non-coordinate dependent, model of BBL + ! mixing diffusivity based on Law of the Wall. Otherwise, uses the original BBL + ! scheme. +SIMPLE_TKE_TO_KD = True ! [Boolean] default = False + ! If true, uses a simple estimate of Kd/TKE that will work for arbitrary + ! vertical coordinates. If false, calculates Kd/TKE and bounds based on exact + ! energetics for an isopycnal layer-formulation. + +! === module MOM_bkgnd_mixing === +! Adding static vertical background mixing coefficients +KD = 1.5E-05 ! [m2 s-1] + ! The background diapycnal diffusivity of density in the interior. Zero or the + ! molecular value, ~1e-7 m2 s-1, may be used. +KD_MIN = 2.0E-06 ! [m2 s-1] default = 1.5E-07 + ! The minimum diapycnal diffusivity. +HENYEY_IGW_BACKGROUND = True ! [Boolean] default = False + ! If true, use a latitude-dependent scaling for the near surface background + ! diffusivity, as described in Harrison & Hallberg, JPO 2008. +KD_MAX = 0.1 ! [m2 s-1] default = -1.0 + ! The maximum permitted increment for the diapycnal diffusivity from TKE-based + ! parameterizations, or a negative value for no limit. + +! === module MOM_kappa_shear === +! Parameterization of shear-driven turbulence following Jackson, Hallberg and Legg, JPO 2008 +USE_JACKSON_PARAM = True ! [Boolean] default = False + ! If true, use the Jackson-Hallberg-Legg (JPO 2008) shear mixing + ! parameterization. +MAX_RINO_IT = 25 ! [nondim] default = 50 + ! The maximum number of iterations that may be used to estimate the Richardson + ! number driven mixing. +KAPPA_SHEAR_ITER_BUG = False ! [Boolean] default = True + ! If true, use an older, dimensionally inconsistent estimate of the derivative + ! of diffusivity with energy in the Newton's method iteration. The bug causes + ! undercorrections when dz > 1 m. +KAPPA_SHEAR_ALL_LAYER_TKE_BUG = True ! [Boolean] default = True + ! If true, report back the latest estimate of TKE instead of the time average + ! TKE when there is mass in all layers. Otherwise always report the time + ! averaged TKE, as is currently done when there are some massless layers. + +! === module MOM_CVMix_shear === +! Parameterization of shear-driven turbulence via CVMix (various options) + +! === module MOM_CVMix_ddiff === +! Parameterization of mixing due to double diffusion processes via CVMix + +! === module MOM_diabatic_aux === +! The following parameters are used for auxiliary diabatic processes. +PRESSURE_DEPENDENT_FRAZIL = True ! [Boolean] default = False + ! If true, use a pressure dependent freezing temperature when making frazil. The + ! default is false, which will be faster but is inappropriate with ice-shelf + ! cavities. +VAR_PEN_SW = True ! [Boolean] default = False + ! If true, use one of the CHL_A schemes specified by OPACITY_SCHEME to determine + ! the e-folding depth of incoming short wave radiation. +CHL_FILE = "ocean_chla.nc" ! + ! CHL_FILE is the file containing chl_a concentrations in the variable CHL_A. It + ! is used when VAR_PEN_SW and CHL_FROM_FILE are true. + +EPBL_VEL_SCALE_FACTOR = 0.5 ! [nondim] default = 1.0 + ! An overall nondimensional scaling factor for wT. Making this larger increases + ! the PBL diffusivity. + +! === module MOM_CVMix_KPP === +! This is the MOM wrapper to CVMix:KPP +! See http://cvmix.github.io/ +USE_KPP = True ! [Boolean] default = False + ! If true, turns on the [CVMix] KPP scheme of Large et al., 1994, to calculate + ! diffusivities and non-local transport in the OBL. +KPP% +RI_CRIT = 0.20 ! [nondim] default = 0.3 + ! Critical bulk Richardson number used to define depth of the surface Ocean + ! Boundary Layer (OBL). +USE_KPP_LT_K = False ! [Boolean] default = False + ! Flag for Langmuir turbulence enhancement of turbulentmixing coefficient. +STOKES_MIXING = False ! [Boolean] default = False + ! Flag for Langmuir turbulence enhancement of turbulentmixing coefficient. +USE_KPP_LT_VT2 = False ! [Boolean] default = False + ! Flag for Langmuir turbulence enhancement of Vt2in Bulk Richardson Number. +%KPP + +! === module MOM_regularize_layers === + +! === module MOM_opacity === +PEN_SW_NBANDS = 3 ! default = 1 + ! The number of bands of penetrating shortwave radiation. + +! === module MOM_tracer_advect === +TRACER_ADVECTION_SCHEME = "PPM:H3" ! default = "PLM" + ! The horizontal transport scheme for tracers: + ! PLM - Piecewise Linear Method + ! PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order) + ! PPM - Piecewise Parabolic Method (Colella-Woodward) + +! === module MOM_tracer_hor_diff === +CHECK_DIFFUSIVE_CFL = True ! [Boolean] default = False + ! If true, use enough iterations the diffusion to ensure that the diffusive + ! equivalent of the CFL limit is not violated. If false, always use the greater + ! of 1 or MAX_TR_DIFFUSION_CFL iteration. + +! === module MOM_neutral_diffusion === +! This module implements neutral diffusion of tracers + +! === module MOM_lateral_boundary_diffusion === +! This module implements lateral diffusion of tracers near boundaries + +! === module MOM_sum_output === +MAXTRUNC = 100000 ! [truncations save_interval-1] default = 0 + ! The run will be stopped, and the day set to a very large value if the velocity + ! is truncated more than MAXTRUNC times between energy saves. Set MAXTRUNC to 0 + ! to stop if there is any truncation of velocities. +ENERGYSAVEDAYS = 0.25 ! [days] default = 1.0 + ! The interval in units of TIMEUNIT between saves of the energies of the run and + ! other globally summed diagnostics. + +! === module ocean_model_init === + +! === module MOM_surface_forcing === +BUOY_CONFIG = "data_override" ! default = "zero" + ! The character string that indicates how buoyancy forcing is specified. Valid + ! options include (file), (zero), (linear), (USER), (BFB) and (NONE). +ARCHAIC_OMIP_FORCING_FILE = False ! [Boolean] default = True + ! If true, use the forcing variable decomposition from the old German OMIP + ! prescription that predated CORE. If false, use the variable groupings + ! available from MOM output diagnostics of forcing variables. +MAX_P_SURF = 0.0 ! [Pa] default = -1.0 + ! The maximum surface pressure that can be exerted by the atmosphere and + ! floating sea-ice or ice shelves. This is needed because the FMS coupling + ! structure does not limit the water that can be frozen out of the ocean and the + ! ice-ocean heat fluxes are treated explicitly. No limit is applied if a + ! negative value is used. +CD_TIDES = 0.0018 ! [nondim] default = 1.0E-04 + ! The drag coefficient that applies to the tides. +WIND_CONFIG = "data_override" ! default = "zero" + ! The character string that indicates how wind forcing is specified. Valid + ! options include (file), (2gyre), (1gyre), (gyres), (zero), and (USER). +RESTOREBUOY = True ! [Boolean] default = False + ! If true, the buoyancy fluxes drive the model back toward some specified + ! surface state with a rate given by FLUXCONST. +LATENT_HEAT_FUSION = 3.34E+05 ! [J/kg] default = 3.34E+05 + ! The latent heat of fusion. +LATENT_HEAT_VAPORIZATION = 2.5E+06 ! [J/kg] default = 2.5E+06 + ! The latent heat of fusion. +!FLUXCONST = 0.5 ! [m day-1] default = 0.0 + ! The constant that relates the restoring surface fluxes to the relative surface + ! anomalies (akin to a piston velocity). Note the non-MKS units. +!FLUXCONST_T = 0.5 ! [m day-1] default = 0.5 + ! The constant that relates the restoring surface temperature flux to the + ! relative surface anomaly (akin to a piston velocity). Note the non-MKS units. +!FLUXCONST_S = 0.5 ! [m day-1] default = 0.5 + ! The constant that relates the restoring surface salinity flux to the relative + ! surface anomaly (akin to a piston velocity). Note the non-MKS units. +GUST_CONST = 0.0 ! [Pa] default = 0.0 + ! The background gustiness in the winds. +FIX_USTAR_GUSTLESS_BUG = True ! [Boolean] default = True + ! If true correct a bug in the time-averaging of the gustless wind friction + ! velocity + +! These parameters are used in CORE mode but should not be used in +! the coupled model (CM4). +RESTORE_SALINITY = False ! [Boolean] default = False + ! If true, the coupled driver will add a globally-balanced + ! fresh-water flux that drives sea-surface salinity + ! toward specified values. +ADJUST_NET_FRESH_WATER_TO_ZERO = True ! [Boolean] default = False + ! If true, adjusts the net fresh-water forcing seen + ! by the ocean (including restoring) to zero. +FLUXCONST = 0.1667 !0.500 !0.1667 ! [m day-1] + ! The constant that relates the restoring surface fluxes + ! to the relative surface anomalies (akin to a piston + ! velocity). Note the non-MKS units. +SALT_RESTORE_FILE = "ocean_salt_restore.nc" !"salt_restore_correct.nc" ! default = "salt_restore.nc" + ! A file in which to find the surface salinity to use for restoring. +SALT_RESTORE_VARIABLE = "SALT" +SRESTORE_AS_SFLUX = True ! [Boolean] default = False + ! If true, the restoring of salinity is applied as a salt + ! flux instead of as a freshwater flux. +MAX_DELTA_SRESTORE = 5.0 ! [PSU or g kg-1] default = 999.0 + ! The maximum salinity difference used in restoring terms. +USE_NET_FW_ADJUSTMENT_SIGN_BUG = False ! [Boolean] default = True + ! If true, use the wrong sign for the adjustment to + ! the net fresh-water. + +! === module MOM_restart === + +! === module MOM_file_parser === diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_3d_ic.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_3d_ic.in new file mode 120000 index 000000000..f1907dc10 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_3d_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_hat10.rtofs_ocean_3d_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_3d_obc.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_3d_obc.in new file mode 120000 index 000000000..a3e9291a8 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_3d_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_hat10.rtofs_ocean_3d_obc.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_ssh_ic.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_ssh_ic.in new file mode 120000 index 000000000..9546a2826 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_ssh_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_hat10.rtofs_ocean_ssh_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_ssh_obc.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_ssh_obc.in new file mode 120000 index 000000000..89575cbb8 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_hat10.rtofs_ocean_ssh_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_hat10.rtofs_ocean_ssh_obc.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_3d_ic.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_3d_ic.in new file mode 120000 index 000000000..1a6fba9d8 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_3d_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtnh.rtofs_ocean_3d_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_3d_obc.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_3d_obc.in new file mode 120000 index 000000000..0ed3afe1e --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_3d_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtnh.rtofs_ocean_3d_obc.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_ssh_ic.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_ssh_ic.in new file mode 120000 index 000000000..1886a6212 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_ssh_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtnh.rtofs_ocean_ssh_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_ssh_obc.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_ssh_obc.in new file mode 120000 index 000000000..51fd3e1cf --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtnh.rtofs_ocean_ssh_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtnh.rtofs_ocean_ssh_obc.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_3d_ic.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_3d_ic.in new file mode 120000 index 000000000..cd4945c23 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_3d_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtsh.rtofs_ocean_3d_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_3d_obc.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_3d_obc.in new file mode 120000 index 000000000..192a33a72 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_3d_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtsh.rtofs_ocean_3d_obc.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_ssh_ic.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_ssh_ic.in new file mode 120000 index 000000000..ee978bce2 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_ssh_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtsh.rtofs_ocean_ssh_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_ssh_obc.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_ssh_obc.in new file mode 120000 index 000000000..8d912503a --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_jtsh.rtofs_ocean_ssh_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_jtsh.rtofs_ocean_ssh_obc.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_3d_ic.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_3d_ic.in new file mode 120000 index 000000000..461376107 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_3d_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_nhc.rtofs_ocean_3d_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_3d_obc.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_3d_obc.in new file mode 120000 index 000000000..e0ea53c5c --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_3d_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_nhc.rtofs_ocean_3d_obc.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_ssh_ic.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_ssh_ic.in new file mode 120000 index 000000000..2460c15c9 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_ssh_ic.in @@ -0,0 +1 @@ +../regional/hafs_mom6_nhc.rtofs_ocean_ssh_ic.in \ No newline at end of file diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_ssh_obc.in b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_ssh_obc.in new file mode 120000 index 000000000..2c2c19101 --- /dev/null +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6_nhc.rtofs_ocean_ssh_obc.in @@ -0,0 +1 @@ +../regional/hafs_mom6_nhc.rtofs_ocean_ssh_obc.in \ No newline at end of file diff --git a/scripts/exhafs_forecast.sh b/scripts/exhafs_forecast.sh index dbbc4f657..83bf6e528 100755 --- a/scripts/exhafs_forecast.sh +++ b/scripts/exhafs_forecast.sh @@ -17,6 +17,7 @@ hh=$(echo ${CDATE} | cut -c9-10) PARMforecast=${PARMforecast:-${PARMhafs}/forecast/regional} PARMhycom=${PARMhycom:-${PARMhafs}/hycom/regional} +PARMmom6=${PARMmom6:-${PARMhafs}/mom6/regional} PARMww3=${PARMww3:-${PARMhafs}/ww3/regional} FIXam=${FIXam:-${FIXhafs}/fix_am} FIXcrtm=${FIXcrtm:-${CRTM_FIX:?}} @@ -1336,7 +1337,7 @@ if [ ${run_ocean} = yes ] && [ ${ocean_model} = mom6 ]; then atparse < ./stream.config.IN > ./stream.config # MOM_input - ${NCP} ${PARMhafs}/mom6/regional/hafs_mom6.input.IN ./hafs_mom6.input.IN + ${NCP} ${PARMmom6}/hafs_mom6.input.IN ./hafs_mom6.input.IN NIGLOBAL=$(ncks --trd -m INPUT/ocean_ts_ic.nc | grep -E -i ": lonh, size =" | cut -f 7 -d ' ' | uniq) NJGLOBAL=$(ncks --trd -m INPUT/ocean_ts_ic.nc | grep -E -i ": lath, size =" | cut -f 7 -d ' ' | uniq) atparse < ./hafs_mom6.input.IN > ./MOM_input diff --git a/scripts/exhafs_ocn_prep.sh b/scripts/exhafs_ocn_prep.sh index fa4b4c12b..8e3f5a1ea 100755 --- a/scripts/exhafs_ocn_prep.sh +++ b/scripts/exhafs_ocn_prep.sh @@ -100,11 +100,11 @@ export CDF034=rtofs_${outnc_ts} export CDF033=rtofs_${outnc_uv} # run HYCOM-tools executables to produce IC netcdf files -${NCP} ${PARMhafs}/mom6/regional/hafs_mom6_${ocean_domain}.rtofs_ocean_ssh_ic.in ./rtofs_ocean_ssh_ic.in +${NCP} ${PARMmom6}/hafs_mom6_${ocean_domain}.rtofs_ocean_ssh_ic.in ./rtofs_ocean_ssh_ic.in ${APRUNS} ${EXEChafs}/hafs_hycom_utils_archv2ncdf2d.x < ./rtofs_ocean_ssh_ic.in 2>&1 | tee ./archv2ncdf2d_ssh_ic.log export err=$?; err_chk -${NCP} ${PARMhafs}/mom6/regional/hafs_mom6_${ocean_domain}.rtofs_ocean_3d_ic.in ./rtofs_ocean_3d_ic.in +${NCP} ${PARMmom6}/hafs_mom6_${ocean_domain}.rtofs_ocean_3d_ic.in ./rtofs_ocean_3d_ic.in ${APRUNS} ${EXEChafs}/hafs_hycom_utils_archv2ncdf3z.x < ./rtofs_ocean_3d_ic.in 2>&1 | tee archv2ncdf3z_3d_ic.log export err=$?; err_chk @@ -220,12 +220,12 @@ export CDF034=rtofs.${type}${hour}_${outnc_ts} export CDF033=rtofs.${type}${hour}_${outnc_uv} # run HYCOM-tools executables to produce IC netcdf files -${NCP} ${PARMhafs}/mom6/regional/hafs_mom6_${ocean_domain}.rtofs_ocean_ssh_obc.in ./rtofs_ocean_ssh_obc.in +${NCP} ${PARMmom6}/hafs_mom6_${ocean_domain}.rtofs_ocean_ssh_obc.in ./rtofs_ocean_ssh_obc.in ${APRUNS} ${EXEChafs}/hafs_hycom_utils_archv2ncdf2d.x < ./rtofs_ocean_ssh_obc.in 2>&1 | tee ./archv2ncdf2d_ssh_obc.log export err=$?; err_chk -${NCP} ${PARMhafs}/mom6/regional/hafs_mom6_${ocean_domain}.rtofs_ocean_3d_obc.in ./rtofs_ocean_3d_obc.in +${NCP} ${PARMmom6}/hafs_mom6_${ocean_domain}.rtofs_ocean_3d_obc.in ./rtofs_ocean_3d_obc.in ${APRUNS} ${EXEChafs}/hafs_hycom_utils_archv2ncdf3z.x < ./rtofs_ocean_3d_obc.in 2>&1 | tee ./archv2ncdf3z_3d_obc.log export err=$?; err_chk From 172175e68917082513b068ed25797d729c74a1d3 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Fri, 12 Jul 2024 17:21:49 +0000 Subject: [PATCH 15/52] Set pass_full_omega_to_physics_in_non_hydrostatic_mode = .true. and update parm/forecast/globnest/input*.nml.tmp according to its regional counterpart. --- parm/forecast/globnest/input.nml.tmp | 5 +++-- parm/forecast/globnest/input_nest.nml.tmp | 5 +++-- parm/forecast/regional/input.nml.tmp | 1 + parm/forecast/regional/input_nest.nml.tmp | 1 + 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/parm/forecast/globnest/input.nml.tmp b/parm/forecast/globnest/input.nml.tmp index afd884585..dc72b7737 100644 --- a/parm/forecast/globnest/input.nml.tmp +++ b/parm/forecast/globnest/input.nml.tmp @@ -125,6 +125,7 @@ full_zs_filter = @[full_zs_filter_nml] n_zs_filter = @[n_zs_filter_nml] nord_zs_filter = 4 + pass_full_omega_to_physics_in_non_hydrostatic_mode = .true. / &fv_nest_nml @@ -215,8 +216,8 @@ cnvcld = .true. shal_cnv = @[shal_cnv_nml] !Shallow convection do_deep = @[do_deep_nml] - imfshalcnv = 2 - imfdeepcnv = 2 + imfshalcnv = @[imfshalcnv] + imfdeepcnv = @[imfdeepcnv] clam_deep = @[clam_deep] betal_deep = 0.05 betas_deep = 0.05 diff --git a/parm/forecast/globnest/input_nest.nml.tmp b/parm/forecast/globnest/input_nest.nml.tmp index 7091b91fd..489f0d93e 100644 --- a/parm/forecast/globnest/input_nest.nml.tmp +++ b/parm/forecast/globnest/input_nest.nml.tmp @@ -124,6 +124,7 @@ full_zs_filter = @[full_zs_filter_nml] n_zs_filter = @[n_zs_filter_nml] nord_zs_filter = 4 + pass_full_omega_to_physics_in_non_hydrostatic_mode = .true. / &surf_map_nml @@ -195,8 +196,8 @@ cnvcld = .true. shal_cnv = @[shal_cnv_nml] !Shallow convection do_deep = @[do_deep_nml] - imfshalcnv = 2 - imfdeepcnv = 2 + imfshalcnv = @[imfshalcnv] + imfdeepcnv = @[imfdeepcnv] clam_deep = @[clam_deep] betal_deep = 0.05 betas_deep = 0.05 diff --git a/parm/forecast/regional/input.nml.tmp b/parm/forecast/regional/input.nml.tmp index 0b7bc3ae4..6bc6682d0 100644 --- a/parm/forecast/regional/input.nml.tmp +++ b/parm/forecast/regional/input.nml.tmp @@ -129,6 +129,7 @@ full_zs_filter = @[full_zs_filter_nml] n_zs_filter = @[n_zs_filter_nml] nord_zs_filter = 4 + pass_full_omega_to_physics_in_non_hydrostatic_mode = .true. / &fv_nest_nml diff --git a/parm/forecast/regional/input_nest.nml.tmp b/parm/forecast/regional/input_nest.nml.tmp index 57427e6eb..92f911d9f 100644 --- a/parm/forecast/regional/input_nest.nml.tmp +++ b/parm/forecast/regional/input_nest.nml.tmp @@ -124,6 +124,7 @@ full_zs_filter = @[full_zs_filter_nml] n_zs_filter = @[n_zs_filter_nml] nord_zs_filter = 4 + pass_full_omega_to_physics_in_non_hydrostatic_mode = .true. / &surf_map_nml From 419ae9c038a3b1d3f90253f40345bc421a150308 Mon Sep 17 00:00:00 2001 From: XuLu-NOAA Date: Fri, 12 Jul 2024 23:27:09 +0000 Subject: [PATCH 16/52] Add 3DIAU related capabilities for HAFS regional DA. --- parm/forecast/globnest/input.nml.tmp | 8 +++++--- parm/forecast/globnest/input_nest.nml.tmp | 8 +++++--- parm/forecast/regional/input.nml.tmp | 8 +++++--- parm/forecast/regional/input_nest.nml.tmp | 8 +++++--- parm/forecast/regional/model_configure.tmp | 1 + parm/hafs.conf | 5 +++++ parm/hafs_holdvars.conf | 4 ++++ parm/hafs_holdvars.txt | 5 ++++- scripts/exhafs_forecast.sh | 15 ++++++++++++++- scripts/exhafs_merge.sh | 19 +++++++++++++++++++ .../sorc/hafs_datool/CMakeLists.txt | 1 + .../sorc/hafs_datool/build_hafs_datool.sh | 1 + .../sorc/hafs_datool/hafs_datool.f90 | 18 +++++++++++++++++- ush/hafs/launcher.py | 13 +++++++++++++ 14 files changed, 99 insertions(+), 15 deletions(-) diff --git a/parm/forecast/globnest/input.nml.tmp b/parm/forecast/globnest/input.nml.tmp index dc72b7737..1a26a3657 100644 --- a/parm/forecast/globnest/input.nml.tmp +++ b/parm/forecast/globnest/input.nml.tmp @@ -262,9 +262,11 @@ cpl_imp_mrg = @[merge_import] psautco = 0.0008, 0.0005 prautco = 0.00015, 0.00015 - iau_delthrs = 6 - iaufhrs = 30 - iau_inc_files = '' + iau_delthrs = @[iau_delthrs] + iaufhrs = @[iaufhrs] + iau_inc_files = @[iau_inc_files] + iau_regional = @[iau_regional] + iau_inc_scale = @[iau_inc_scale] iau_drymassfixer = .false. lgfdlmprad = @[lgfdlmprad] effr_in = .true. diff --git a/parm/forecast/globnest/input_nest.nml.tmp b/parm/forecast/globnest/input_nest.nml.tmp index 489f0d93e..720e80fe4 100644 --- a/parm/forecast/globnest/input_nest.nml.tmp +++ b/parm/forecast/globnest/input_nest.nml.tmp @@ -242,9 +242,11 @@ cpl_imp_mrg = @[merge_import] psautco = 0.0008, 0.0005 prautco = 0.00015, 0.00015 - iau_delthrs = 6 - iaufhrs = 30 - iau_inc_files = '' + iau_delthrs = @[iau_delthrs] + iaufhrs = @[iaufhrs] + iau_inc_files = @[iau_inc_files] + iau_regional = @[iau_regional] + iau_inc_scale = @[iau_inc_scale] iau_drymassfixer = .false. lgfdlmprad = @[lgfdlmprad] effr_in = .true. diff --git a/parm/forecast/regional/input.nml.tmp b/parm/forecast/regional/input.nml.tmp index 6bc6682d0..1025cd17b 100644 --- a/parm/forecast/regional/input.nml.tmp +++ b/parm/forecast/regional/input.nml.tmp @@ -266,9 +266,11 @@ cpl_imp_mrg = @[merge_import] psautco = 0.0008, 0.0005 prautco = 0.00015, 0.00015 - iau_delthrs = 6 - iaufhrs = 30 - iau_inc_files = '' + iau_delthrs = @[iau_delthrs] + iaufhrs = @[iaufhrs] + iau_inc_files = @[iau_inc_files] + iau_regional = @[iau_regional] + iau_inc_scale = @[iau_inc_scale] iau_drymassfixer = .false. lgfdlmprad = @[lgfdlmprad] effr_in = .true. diff --git a/parm/forecast/regional/input_nest.nml.tmp b/parm/forecast/regional/input_nest.nml.tmp index 92f911d9f..c02ac8f5b 100644 --- a/parm/forecast/regional/input_nest.nml.tmp +++ b/parm/forecast/regional/input_nest.nml.tmp @@ -242,9 +242,11 @@ cpl_imp_mrg = @[merge_import] psautco = 0.0008, 0.0005 prautco = 0.00015, 0.00015 - iau_delthrs = 6 - iaufhrs = 30 - iau_inc_files = '' + iau_delthrs = @[iau_delthrs] + iaufhrs = @[iaufhrs] + iau_inc_files = @[iau_inc_files] + iau_regional = @[iau_regional] + iau_inc_scale = @[iau_inc_scale] iau_drymassfixer = .false. lgfdlmprad = @[lgfdlmprad] effr_in = .true. diff --git a/parm/forecast/regional/model_configure.tmp b/parm/forecast/regional/model_configure.tmp index fccc8432f..553449e0b 100644 --- a/parm/forecast/regional/model_configure.tmp +++ b/parm/forecast/regional/model_configure.tmp @@ -46,6 +46,7 @@ nx: @[NX] # number of grid cells along x/y-axi ny: @[NY] # needed for lambert_conformal dx: @[DX] # grid cell size in x/y direction (meters) dy: @[DY] # needed for lambert_conformal +iau_offset: 0 # IAU offset hours output_grid: @[OUTPUT_GRID_2] diff --git a/parm/hafs.conf b/parm/hafs.conf index 1c300ac4d..6e3e16be3 100644 --- a/parm/hafs.conf +++ b/parm/hafs.conf @@ -427,6 +427,7 @@ glob_sfc_rlm=1 glob_tc_pbl=0 glob_shal_cnv=.true. glob_do_deep=.true. + # For the nested or regional standalone domain npx=1441,661 npy=1321,661 @@ -510,6 +511,10 @@ move_cd_y=0,0 restart_interval="3 6 9" +# IAU related options +iau_regional=.false. +iau_inc_scale=-999 + # The write_grid_component related options quilting=.true. write_groups=2 diff --git a/parm/hafs_holdvars.conf b/parm/hafs_holdvars.conf index 522ed4cbb..276112f6d 100644 --- a/parm/hafs_holdvars.conf +++ b/parm/hafs_holdvars.conf @@ -335,6 +335,10 @@ do_shum_ens={forecast_ens/do_shum_ens} do_skeb_ens={forecast_ens/do_skeb_ens} npz_ens={forecast_ens/npz_ens} +#IAU related options +iau_regional={forecast/iau_regional} +iau_inc_scale={forecast/iau_inc_scale} + output_grid_dlon_ens={forecast_ens/output_grid_dlon_ens} output_grid_dlat_ens={forecast_ens/output_grid_dlat_ens} post_gridspecs_ens={atm_post_ens/post_gridspecs_ens} diff --git a/parm/hafs_holdvars.txt b/parm/hafs_holdvars.txt index 4df44970e..320e19fd1 100644 --- a/parm/hafs_holdvars.txt +++ b/parm/hafs_holdvars.txt @@ -426,6 +426,10 @@ export trak_gridspecs_ens={trak_gridspecs_ens} export satpost_ens={satpost_ens} export nhcpost_ens={nhcpost_ens} +#IAU related options +export iau_regional={iau_regional} +export iau_inc_scale={iau_inc_scale} + export run_ocean={run_ocean} export ocean_model={ocean_model} export ocean_domain={ocean_domain} @@ -452,4 +456,3 @@ if [[ "$RUN_ENVIR" != "NCO" && "$RUN_ENVIR" != "nco" ]] ; then export CDSCRUB={CDSCRUB} export RUNhafs={RUNhafs} fi - diff --git a/scripts/exhafs_forecast.sh b/scripts/exhafs_forecast.sh index 83bf6e528..a8d7bc2e1 100755 --- a/scripts/exhafs_forecast.sh +++ b/scripts/exhafs_forecast.sh @@ -170,9 +170,13 @@ if [ ${warm_start_opt} -eq 0 ]; then RESTARTinp="UNNEEDED" fi +# Set default options for IAU +iau_inc_files="," +iau_delthrs=6 +iaufhrs=0 + # Sepcial settings if this is an atm_init forecast run if [ ${RUN_INIT:-NO} = YES ]; then - if [ "${ENSDA}" = YES ]; then FIXgrid=${FIXgrid:-${WORKhafs}/intercom/grid_ens} INPdir=${INPdir:-${WORKhafs}/intercom/chgres_ens/mem${ENSID}} @@ -1076,6 +1080,12 @@ if [ ! ${FORECAST_RESTART} = YES ] && [ ${warmstart_from_restart} = yes ]; then done fi +# Linking increment files for IAU +if [ ${RUN_INIT:-NO} = NO ] && [ ${iau_regional:-.false.} = ".true." ] ; then + echo "Xu $PWD" + ${RLN} ${RESTARTinp}/diff* ./ +fi + if [ ${FORECAST_RESTART} = YES ] && [[ ${FORECAST_RESTART_HR} -gt 0 ]]; then RESTARTymdh=$(${NDATE} +${FORECAST_RESTART_HR} ${CDATE}) RESTARTymd=$(echo ${RESTARTymdh} | cut -c1-8) @@ -1279,6 +1289,9 @@ for n in $(seq 2 ${nest_grids}); do shal_cnv_nml=$( echo ${shal_cnv} | cut -d , -f ${n} ) do_deep_nml=$( echo ${do_deep} | cut -d , -f ${n} ) blocksize=$(( ${npy_nml}/${layouty_nml} )) + if [ ${RUN_INIT:-NO} = NO ] && [ ${iau_regional:-.false.} = ".true." ] ; then + iau_inc_files="diff06_nest0${inest}" + fi atparse < input_nest.nml.tmp > input_nest0${inest}.nml done diff --git a/scripts/exhafs_merge.sh b/scripts/exhafs_merge.sh index b00dedbf5..d48a4a160 100755 --- a/scripts/exhafs_merge.sh +++ b/scripts/exhafs_merge.sh @@ -29,6 +29,12 @@ if [ "${ENSDA}" = YES ]; then echo "FATAL ERROR: RESTARTsrc does not exist" exit 1 fi + RESTARTanl=${RESTARTsrc} + if [ ${iau_regional:-.false.} = ".true." ] ; then + RESTARTsrc=${WORKhafs}/intercom/RESTART_vi_fgat06_ens/mem${ENSID} + echo "FATAL ERROR: Currently IAU does not support ensemble" + exit 1 + fi RESTARTdst=${WORKhafs}/intercom/RESTART_init_ens/mem${ENSID} RESTARTmrg=${WORKhafs}/intercom/RESTART_analysis_merge_ens/mem${ENSID} else @@ -40,6 +46,10 @@ else echo "FATAL ERROR: RESTARTsrc does not exist" exit 1 fi + RESTARTanl=${RESTARTsrc} + if [ ${iau_regional:-.false.} = ".true." ] ; then + RESTARTsrc=${WORKhafs}/intercom/RESTART_vi_fgat06 + fi RESTARTdst=${WORKhafs}/intercom/RESTART_init RESTARTmrg=${WORKhafs}/intercom/RESTART_analysis_merge fi @@ -231,6 +241,15 @@ for var in fv_core.res fv_tracer.res fv_srf_wnd.res sfc_data; do export err=$?; err_chk done +# Step 4: Increments for IAU +if [ ${iau_regional:-.false.} = ".true." ]; then + ${APRUNC} ${DATOOL} hafs_diff \ + --in_dir=${RESTARTanl} --in_dir2=${RESTARTmrg} \ + --infile_date=${ymd}.${hh}0000 --out_file="diff06" \ + --nestdoms=$((${nest_grids:-1}-1)) --vi_cloud=${vi_cloud} + ${NCP} ./diff* ${RESTARTmrg}/ +fi + else echo "FATAL ERROR: only support nest_grids = 1 or 2" echo "FATAL ERROR: nest_grids = $nest_grids" diff --git a/sorc/hafs_tools.fd/sorc/hafs_datool/CMakeLists.txt b/sorc/hafs_tools.fd/sorc/hafs_datool/CMakeLists.txt index 6b3a2e6e8..ddf0c557f 100644 --- a/sorc/hafs_tools.fd/sorc/hafs_datool/CMakeLists.txt +++ b/sorc/hafs_tools.fd/sorc/hafs_datool/CMakeLists.txt @@ -32,6 +32,7 @@ set(fortran_srcs sub_wind_process.f90 sub_hafs_remap.f90 sub_hafsvi_proc.f90 + sub_hafs_diff.f90 hafs_datool.f90) set(exe_name hafs_datool.x) diff --git a/sorc/hafs_tools.fd/sorc/hafs_datool/build_hafs_datool.sh b/sorc/hafs_tools.fd/sorc/hafs_datool/build_hafs_datool.sh index 1c0ccbe13..56ab7a0a6 100755 --- a/sorc/hafs_tools.fd/sorc/hafs_datool/build_hafs_datool.sh +++ b/sorc/hafs_tools.fd/sorc/hafs_datool/build_hafs_datool.sh @@ -31,6 +31,7 @@ mpif90 -f90=ifort -c ${FFLAGS} sub_grids.f90 mpif90 -f90=ifort -c ${FFLAGS} sub_wind_process.f90 mpif90 -f90=ifort -c ${FFLAGS} -I${NETCDF}/include sub_hafs_remap.f90 mpif90 -f90=ifort -c ${FFLAGS} -I${NETCDF}/include sub_hafsvi_proc.f90 +mpif90 -f90=ifort -c ${FFLAGS} -I${NETCDF}/include sub_hafs_diff.f90 mpif90 -f90=ifort -c ${FFLAGS} hafs_datool.f90 #mpif90 -f90=ifort -o hafs_datool.exe ${LDFLAGS} module_mpi.o module_structure.o sub_tcinfo.o sub_netcdf.o sub_tools.o sub_grids.o sub_hafs_remap.o sub_hafsvi_preproc.o hafs_datool.o -L${NETCDF}/lib -lnetcdff -lnetcdf -L${HDF5_LIBRARIES} -lhdf5_hl -lhdf5 -lz diff --git a/sorc/hafs_tools.fd/sorc/hafs_datool/hafs_datool.f90 b/sorc/hafs_tools.fd/sorc/hafs_datool/hafs_datool.f90 index 87ef7a6c2..8bfe029fa 100644 --- a/sorc/hafs_tools.fd/sorc/hafs_datool/hafs_datool.f90 +++ b/sorc/hafs_tools.fd/sorc/hafs_datool/hafs_datool.f90 @@ -7,6 +7,7 @@ program hafs_datool ! -- 202112, added HAVSVI pre- and post-processing by Yonghui Weng ! -- 202206, added MPI and openMP by Yonghui Weng ! -- 202306, added vi_cloud by JungHoon Shin +! -- 202407, added hafs_diff for IAU increment calculation by Xu Lu !------------------------------------------------------------------------------ ! June 2023: New input argument "vi_cloud" is introduced for vi_preproc & vi_postproc @@ -74,6 +75,11 @@ program hafs_datool ! --out_dir=[hafs-restart subfolder] \ ! --vi_cloud=vi_cloud \ ! --infile_date=20200825.180000 +! 3.5) hafs_diff: Calculate Increment (difference) between the analysis and +! background ready for IAU. +! * hafs_datool.x hafs_diff --in_dir=${analysis dir} --in_dir2=${background dir} \ +! --infile_date=20200825.180000 --out_file="diff06" \ +! --nestdoms=nestdoms --vi_cloud=vi_cloud !========================================================================= use module_mpi use var_type @@ -86,7 +92,8 @@ program hafs_datool character (len=2500) :: actions, arg, arg1 character (len=2500) :: in_dir='w', in_file='w', in_grid='w', & vortex_position_file='w', tcvital_file='w', besttrackfile='w', & - out_dir='w', out_grid='w', out_data='w', out_file='w', infile_date='w' + out_dir='w', out_grid='w', out_data='w', out_file='w', infile_date='w', & + in_dir2='w' character (len=50 ) :: vortexradius='w' ! for vortexreplace, vortexradius=600:900 km ! for hafsvi_preproc, vortexradius=30 deg or 45 deg character (len=50 ) :: relaxzone='' ! @@ -119,6 +126,7 @@ program hafs_datool n=len_trim(arg) select case (arg(1:j-1)) case ('--in_dir'); in_dir=arg(j+1:n) + case ('--in_dir2'); in_dir2=arg(j+1:n) case ('-i', '--in_file'); in_file=arg(j+1:n) case ('--in_grid'); in_grid=arg(j+1:n) case ('--out_dir'); out_dir=arg(j+1:n) @@ -224,6 +232,14 @@ program hafs_datool call hafsvi_postproc(trim(in_file), trim(infile_date), trim(out_dir), nestdoms, trim(vi_cloud)) endif +!---------------------------------------------------------------- +! 5.0 --- IAU_DIFF + if ( trim(actions) == "hafs_diff" ) then + write(*,'(a)')' --- call hafsvi_preproc/hafs_datool for '//trim(in_grid) + call hafs_diff(trim(in_dir),trim(in_dir2),trim(infile_date), & + trim(out_file),nestdoms,trim(vi_cloud)) + endif + !---------------------------------------------------------------- call parallel_finish() diff --git a/ush/hafs/launcher.py b/ush/hafs/launcher.py index 5aa5141c3..c8a4e717e 100644 --- a/ush/hafs/launcher.py +++ b/ush/hafs/launcher.py @@ -1595,6 +1595,19 @@ def make_holdvars(self,part1='{PARMhafs}/hafs_holdvars.txt',part2=None): logger.info(f'Updated output_grid_cen_lon={output_grid_cen_lon}') logger.info(f'Updated output_grid_cen_lat={output_grid_cen_lat}') + # For IAU, configure the weight scale based on the storm strength + iau_inc_scale=self.getstr('forecast','iau_inc_scale','auto').split(',') + if "-999" in iau_inc_scale: + logger.info(f'Original iau_inc_scale={iau_inc_scale}') + logger.info(f'Current wmax={syndat.wmax}') + iau_inc_scale=self.getstr('forecast','iau_inc_scale').split(',') + if syndat.wmax > 33: + iau_inc_scale=str(1.) + else: + iau_inc_scale=str(2.) + self.set('holdvars','iau_inc_scale',''.join(iau_inc_scale)) + logger.info(f'Updated iau_inc_scale={iau_inc_scale}') + run_ocean=self.getbool('config','run_ocean') # Set ocean_start_dtg if needed From ec0b02dab4efdc57cc21ad9ab042789a5f162b35 Mon Sep 17 00:00:00 2001 From: XuLu-NOAA Date: Fri, 12 Jul 2024 23:36:31 +0000 Subject: [PATCH 17/52] Add the increment calculation hafsdatool subroutine for 3DIAU in HAFS regional DA. --- .../sorc/hafs_datool/sub_hafs_diff.f90 | 754 ++++++++++++++++++ 1 file changed, 754 insertions(+) create mode 100644 sorc/hafs_tools.fd/sorc/hafs_datool/sub_hafs_diff.f90 diff --git a/sorc/hafs_tools.fd/sorc/hafs_datool/sub_hafs_diff.f90 b/sorc/hafs_tools.fd/sorc/hafs_datool/sub_hafs_diff.f90 new file mode 100644 index 000000000..b2df64552 --- /dev/null +++ b/sorc/hafs_tools.fd/sorc/hafs_datool/sub_hafs_diff.f90 @@ -0,0 +1,754 @@ +!======================================================================================== + subroutine hafs_diff(in_dir,in_dir2,in_date,out_file,nestdoms,vi_cloud) + +!----------------------------------------------------------------------------- +! HAFS DA tool - hafs_diff +! Xu Lu -- 01/31/2024 Added to do increments for IAU +! Modified from sub_hafsvi_proc.f90 +! +! Big Change/Update by JungHoon: Feb~July, 2023 +! New input argument "vi_cloud" is introduced +! If input argument "vi_cloud" is 0, it will handle 17 variables +! If input argument "vi_cloud" is 1, it will handle 22 variables +! If input argument "vi_cloud" is 2, it will handle 24 variables +! +! 0: NO cloud changes in VI and handles only 17 variables as same as original +! sub_hafsvi_proc.f90 +! 1: (GFDL microphysics) handles 5 more variables cloud water, rain water, ice, +! snow, graupel (22 variables) +! 2: Thompson microphysics: Need to handle two more additional variables (below) +! on the top of option 1 +! ice water number concentration and rain number concentration (24 variables) +! +! This subroutine read hafs restart files and output hafsvi needed input. +! Variables needed: +! WRITE(IUNIT) NX,NY,NZ +! WRITE(IUNIT) lon1,lat1,lon2,lat2,cen_lon,cen_lat +! WRITE(IUNIT) (((pf1(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) ! 3D, NZ +! WRITE(IUNIT) (((tmp(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) +! WRITE(IUNIT) (((spfh(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) +! WRITE(IUNIT) (((ugrd(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) +! WRITE(IUNIT) (((vgrd(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) +! WRITE(IUNIT) (((dzdt(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) +!! WRITE(IUNIT) hgtsfc ! 2D +! WRITE(IUNIT) (((z1(i,j,k),i=1,nx),j=1,ny),k=nz1,1,-1) +! WRITE(IUNIT) glon,glat,glon,glat ! 2D +! WRITE(IUNIT) (((ph1(i,j,k),i=1,nx),j=1,ny),k=nz1,1,-1) ! 3D, NZ+1 +! WRITE(IUNIT) pressfc1 ! 2D +! WRITE(IUNIT) ak +! WRITE(IUNIT) bk +! WRITE(IUNIT) land ! =A101 = land sea mask, B101 = ZNT +! WRITE(IUNIT) sfcr ! =B101 = Z0 +! WRITE(IUNIT) C101 ! =C101 = (10m wind speed)/(level 1 wind speed) +! 5 new variables added for GFDL microphysics: Feb, 2023 (below) +! WRITE(IUNIT) (((qc(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) +! WRITE(IUNIT) (((qr(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) +! WRITE(IUNIT) (((qi(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) +! WRITE(IUNIT) (((qs(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) +! WRITE(IUNIT) (((qg(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) +! 2 new addiontal variables added for Thompson microphysics: Jul, 2023 (below) +! WRITE(IUNIT) (((NCI(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) +! WRITE(IUNIT) (((NCR(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) + +!----------------------------------------------------------------------------- + + use constants + use netcdf + use module_mpi + use var_type + + implicit none + + character (len=*),intent(in) :: in_dir,in_date,in_dir2,out_file,vi_cloud + integer, intent(in) :: nestdoms +!--- in_dir, HAFS_restart_folder, which holds grid_spec.nc, fv_core.res.tile1.nc, +! fv_srf_wnd.res.tile1.nc, fv_tracer.res.tile1.nc, phy_data.nc, sfc_data.nc +!--- in_date, HAFS_restart file date, like 20200825.120000 +!--- radius, to cut a square, default value is 40, which means a 40deg x 40deg square. +!--- out_file: output file, default is bin format, if the file name is *.nc, then output nc format. + character (len=2500) :: indir,indir2, infile,filename + character (len=2500) :: infile_fvcore, infile_core, infile_tracer, infile_phy, & + infile_sfc, infile_grid, infile_grid2, infile_atmos, infile_oro + character (len=2500) :: infile_core2, infile_tracer2 + type(grid2d_info) :: dstgrid ! rot-ll grid for output + type(grid2d_info) :: ingrid ! hafs restart grid + real :: radiusf + logical :: file_exist + +!----for hafs restart + integer :: ix, iy, iz, kz, ndom, nd + integer :: itotal_var ! Total number of variables handled in this + ! subrotine: option 2:24, option 1:22, option 0:17 + character (len=50) :: nestfl, tilefl, tempfl + ! grid_spec.nc : grid_spec.nest02.tile2.nc + ! fv_core.res.tile1.nc : fv_core.res.nest02.tile2.nc + ! phy_data.nc : phy_data.nest02.tile2.nc + character (len=2500):: fl_in, fl_out + +!----for hafsvi + integer :: nx, ny, nz, filetype ! filetype: 1=bin, 2=nc + real :: lon1,lat1,lon2,lat2,cen_lat,cen_lon,dlat,dlon + real, allocatable, dimension(:,:) :: glon,glat + + integer :: i, j, k, n, flid_in, flid_out, ncid, ndims, nrecord + real :: rot_lon, rot_lat, ptop + integer, dimension(nf90_max_var_dims) :: dims + real, allocatable, dimension(:,:,:,:) :: dat4, dat41, dat42, dat43, u,v,dat4u,dat4v + real, allocatable, dimension(:,:,:,:) :: dat4b, dat41b, dat42b, dat43b, ub, vb + real, allocatable, dimension(:,:,:,:) :: dat41u,dat41v,dat42u,dat42v,dat43u,dat43v + real, allocatable, dimension(:,:,:) :: dat3, dat31 + real, allocatable, dimension(:,:) :: dat2, dat21, sfcp + real, allocatable, dimension(:) :: dat1 + + !real, allocatable, dimension(:) :: pfull, phalf + real, allocatable, dimension(:,:) :: cangu, sangu, cangv, sangv + real :: cputime1, cputime2, cputime3 + integer :: io_proc, nm, ks, ke, nv + character (len=50) :: varname, varname_long, units, nzc + +! If input argument is 0, only handle 17 variables. + if (trim(vi_cloud) == '0') itotal_var=17 +! If input argument is 1, handle 22 variables for GFDL microphysics. + if (trim(vi_cloud) == '1') itotal_var=22 +! If input argument is 2, handle 24 variables for Thompson microphysics. + if (trim(vi_cloud) == '2') itotal_var=24 + +!------------------------------------------------------------------------------ +! 1 --- arg process + io_proc=nprocs-1 + !io_proc=0 +! +! 1.1 --- ndom + ndom=nestdoms+1 + +! 1.2 --- input_dir + if (len_trim(in_dir) < 2 .or. trim(in_dir) == 'w' .or. trim(in_dir) == 'null') then + indir='.' + else + indir=trim(in_dir) + endif + + if (len_trim(in_dir2) < 2 .or. trim(in_dir2) == 'w' .or. trim(in_dir2) == 'null')then + indir2='.' + else + indir2=trim(in_dir2) + endif + +! 4 --- input grid info +! read from grid file grid_spec.nc: +! nestfl, tilefl: infile_core, infile_tracer, infile_grid, infile_atmos, infile_oro + do_nestdom_loop: do nd = 2, ndom + + write(nestfl,'(a4,i2.2)')'nest',nd + write(tilefl,'(a4,i0)')'tile',nd + if ( nd == 1 ) then + infile_grid=trim(indir)//'/grid_spec.nc' + infile_grid2=trim(indir)//'/grid_mspec_'//in_date(1:4)//'_'//in_date(5:6)//'_'//in_date(7:8)//'_'//in_date(10:11)//'.nc' + infile_core=trim(indir)//'/'//trim(in_date)//'.fv_core.res.tile1.nc' + infile_tracer=trim(indir)//'/'//trim(in_date)//'.fv_tracer.res.tile1.nc' + infile_core2=trim(indir2)//'/'//trim(in_date)//'.fv_core.res.tile1.nc' + infile_tracer2=trim(indir2)//'/'//trim(in_date)//'.fv_tracer.res.tile1.nc' + infile_atmos=trim(indir)//'/atmos_static.nc' + else + infile_grid=trim(indir)//'/grid_spec.'//trim(nestfl)//'.'//trim(tilefl)//'.nc' + infile_grid2=trim(indir)//'/grid_mspec.'//trim(nestfl)//'_'//in_date(1:4)//'_'//in_date(5:6)//'_'//in_date(7:8)//'_'//in_date(10:11)//'.'//trim(tilefl)//'.nc' + infile_core=trim(indir)//'/'//trim(in_date)//'.fv_core.res.'//trim(nestfl)//'.'//trim(tilefl)//'.nc' + infile_tracer=trim(indir)//'/'//trim(in_date)//'.fv_tracer.res.'//trim(nestfl)//'.'//trim(tilefl)//'.nc' + infile_core2=trim(indir2)//'/'//trim(in_date)//'.fv_core.res.'//trim(nestfl)//'.'//trim(tilefl)//'.nc' + infile_tracer2=trim(indir2)//'/'//trim(in_date)//'.fv_tracer.res.'//trim(nestfl)//'.'//trim(tilefl)//'.nc' + infile_atmos=trim(indir)//'/atmos_static.'//trim(nestfl)//'.'//trim(tilefl)//'.nc' + endif + + inquire(file=infile_grid2, exist=file_exist) + if ( file_exist ) infile_grid = infile_grid2 + + if ( debug_level > 10 .and. my_proc_id == 0 ) write(*,'(a)')' --- read grid info from '//trim(infile_grid) + call rd_grid_spec_data(trim(infile_grid), ingrid) + ix=ingrid%grid_xt + iy=ingrid%grid_yt + if ( debug_level > 10 .and. my_proc_id == 0 ) then + write(*,'(a,i,1x,i,1x,f,1x,f,1x,f,1x,f)')' --- ingrid info: ', ix, iy, & + ingrid%grid_lon(int(ix/2), int(iy/2)), ingrid%grid_lat(int(ix/2), int(iy/2)), & + ingrid%grid_lont(int(ix/2), int(iy/2)), ingrid%grid_latt(int(ix/2), int(iy/2)) + endif + call get_var_dim(trim(infile_atmos), 'pfull', ndims, dims) + nz=dims(1) + + + !---to add the test if the tc was inside of the domain + + + !----------------------------- + !---4.2 call FV3-grid cos and sin + ! call FV3-grid cos and sin + allocate( cangu(ix,iy+1),sangu(ix,iy+1),cangv(ix+1,iy),sangv(ix+1,iy) ) + call cal_uv_coeff_fv3(ix, iy, ingrid%grid_lat, ingrid%grid_lon, cangu, sangu, cangv, sangv) + + !----------------------------- + !---4.3 calculate output-grid in input-grid's positions (xin, yin), and + !each grid's weight to dst + call cal_src_dst_grid_weight(ingrid, ingrid) + + !------------------------------------------------------------------------- + call mpi_barrier(comm,ierr) + + ! 6 --- dst files + if ( nd == 1 ) then + fl_out=trim(out_file) !current domain rot-ll file + else if ( nd == 2 ) then + fl_out=trim(out_file)//'_'//trim(nestfl) + else + write(tempfl,'(a4,i2.2)')'nest',nd-1 + fl_out=trim(out_file)//'_'//trim(nestfl) + endif + + if ( my_proc_id == io_proc ) then + call write_nc_dim(trim(fl_out), 'nx', ix) + call write_nc_dim(trim(fl_out), 'ny', iy) + call write_nc_dim(trim(fl_out), 'nz', nz) + endif + nx=ix + ny=iy + ! 7.2 --- remapp-needed variables: + do_out_var_loop: do nrecord = 4, itotal_var + if ( (nrecord > 11 .and. nrecord < 18) ) cycle do_out_var_loop + + iz=nz !same vertical levels + if ( nrecord == 12 .or. nrecord == 15 .or. nrecord == 16 .or. nrecord ==17 ) cycle do_out_var_loop + +! if ( nrecord == 9 .or. nrecord == 11 ) iz=nz+1 + if ( nrecord == 4 ) then + varname='T' + units='K' + varname_long='T_inc' + elseif ( nrecord == 5 ) then + varname='sphum' + units='kg/kg' + varname_long='sphum_inc' + elseif ( nrecord == 8 ) then + varname='dzdt' + units='m/s' + varname_long='dzdt_inc' + elseif ( nrecord == 9 ) then + varname='delp' + units='pa' + varname_long='delp_inc' + elseif ( nrecord == 11 ) then + varname='DZ' + units='gpm' + varname_long='delz_inc' + elseif ( nrecord == 18 ) then + varname='liq_wat' + units='kg/kg' + varname_long='liq_wat_inc' + elseif ( nrecord == 19 ) then + varname='rainwat' + units='kg/kg' + varname_long='rainwat_inc' + elseif ( nrecord == 20 ) then + varname='ice_wat' + units='kg/kg' + varname_long='ice_wat_inc' + elseif ( nrecord == 21 ) then + varname='snowwat' + units='kg/kg' + varname_long='snowwat_inc' + elseif ( nrecord == 22 ) then + varname='graupel' + units='kg/kg' + varname_long='graupel_inc' + ! For Thompson microphysics nrecord ==23 & 24 + elseif ( nrecord == 23 ) then + varname='ice_nc' + units='/kg' + varname_long='ice_nc_inc' + elseif ( nrecord == 24 ) then + varname='rain_nc' + units='/kg' + varname_long='rain_nc_inc' + !----------------------------- + endif + nzc='nz' + if ( iz == nz+1 ) nzc='nz1' + if ( iz == 1 ) nzc='-' + + !----------------------------- + !---7.1 record 1: nx, ny, nz + !---nx, ny, nz, & lon1,lat1,lon2,lat2,cen_lon,cen_lat + + !----------------------------- + !---7.2 record 2: lon1,lat1,lon2,lat2,cen_lon,cen_lat + + !----------------------------- + !---7.3 record 3: (((pf1(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) + !--- hafs-VI/read_hafs_out.f90 pf: + !--- ph(k) = ak(k) + bk(k)*p_s --> half level pressure + !--- pf(k) = (ph(k+1) - ph(k)) / log(ph(k+1)/ph(k)) --> full level pressure + !--- + !---seem pf1 is pressure on full level, use + !--- pf1(k) = phalf(1) + sum(delp(1:k)) + if ( nrecord == 3 ) then + if ( nrecord == 3 ) then + allocate(dat4(iz+1,1,1,1)) + call get_var_data(trim(infile_atmos), 'phalf', iz+1, 1, 1, 1, dat4) + ptop=dat4(1,1,1,1)*100. !phalf:units = "mb" ; + deallocate(dat4) + endif + + if ( my_proc_id == io_proc ) then + if ( nrecord == 3 ) then + allocate(dat4(ix, iy, iz,1)) + allocate(dat41(ix, iy, iz,1)) + allocate(dat2(ix, iy)) + !write(*,'(a,3i5)')'delp: ',ix, iy, iz + call get_var_data(trim(infile_core), 'delp', ix, iy, iz,1, dat4) + dat2(:,:)=ptop + do k = 1, iz + dat41(:,:,k,1)=dat2(:,:)+dat4(:,:,k,1)/2.0 + dat2(:,:)=dat2(:,:)+dat4(:,:,k,1) + enddo + allocate(sfcp(ix, iy)) + sfcp=dat41(:,:,iz,1) + deallocate(dat2, dat4) + else if ( nrecord == 9 ) then + allocate(dat4(ix, iy, 1,1)) + call get_var_data(trim(infile_core), 'phis', ix, iy, 1, 1, dat4) + allocate(dat41(ix, iy, iz, 1)) + dat41(:,:,iz,1)=dat4(:,:,1,1)/g + deallocate(dat4) + allocate(dat4(ix, iy, iz-1, 1)) + call get_var_data(trim(infile_core), 'DZ', ix, iy, iz-1, 1, dat4) + do k = iz-1, 1, -1 + dat41(:,:,k,1)=dat41(:,:,k+1,1)-dat4(:,:,k,1) + enddo + deallocate(dat4) + else if ( nrecord == 11 ) then + allocate(dat4(ix, iy, iz-1, 1), dat41(ix, iy, iz, 1)) + call get_var_data(trim(infile_core), 'delp', ix, iy, iz-1, 1, dat4) + dat41(:,:,1,1)=ptop + do k = 2, iz + dat41(:,:,k,1)=dat41(:,:,k-1,1)+dat4(:,:,k-1,1) + enddo + deallocate(dat4) + endif !if ( nrecord == 3 ) then + + !---broadcast dat41 to each computing-core + if ( nprocs > 1 ) then + nm=max(1,int((iz+nprocs-1)/nprocs)) !devide iz to each processor + do k = 0, nprocs-1 + ks=k*nm+1 !k-start + ke=k*nm+nm !k-end + if ( ke > iz ) ke=iz + if ( ks >= 1 .and. ks <= iz .and. ke >= 1 .and. ke <= iz ) then + allocate(dat42(ix, iy, ke-ks+1,1)) + dat42(:,:,:,1)=dat41(:,:,ks:ke,1) + if ( k /= io_proc ) then + call mpi_send(dat42(1,1,1,1), size(dat42), mpi_real, k, 3000+ks, comm, ierr) + else + allocate(dat43(ix, iy, ke-ks+1,1)) + dat43=dat42 + endif + deallocate(dat42) + endif + enddo + else !if ( nprocs > 1 ) then + allocate(dat43(ix, iy, iz,1)) + dat43=dat41 + endif + deallocate(dat41) + else ! if ( my_proc_id == io_proc ) then + !---receive dat43 + nm=max(1,int((iz+nprocs-1)/nprocs)) + ks=min(iz,my_proc_id*nm+1) + ke=min(iz,my_proc_id*nm+nm) + if ( ks >= 1 .and. ks <= iz .and. ke >= 1 .and. ke <= iz ) then + allocate(dat43(ix, iy, ke-ks+1,1)) + !call mpi_recv(dat43(1,1,1,1), size(dat43), mpi_real, io_proc, mpi_any_tag, comm, status, ierr) + call mpi_recv(dat43(1,1,1,1), size(dat43), mpi_real, io_proc, 3000+ks, comm, status, ierr) + endif + endif + endif + + !----------------------------- + !---7.4 record 4: (((tmp(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) + !---7.5 record 5: (((spfh(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) + !---7.8 record 8: (((dzdt(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) + !---7.18 record 18: (((qc(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) + !---7.19 record 19: (((qr(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) + !---7.20 record 20: (((qi(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) + !---7.21 record 21: (((qs(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) + !---7.22 record 22: (((qg(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) + !---Below two variables are needed for Thompson microphysics + !---7.23 record 23: (((nnqi(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) + !---7.24 record 24: (((nnqr(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) + if ( nrecord == 4 .or. nrecord == 5 .or. nrecord == 8 & + .or. nrecord == 9 .or. nrecord == 11 )then !XL & +! .or. nrecord ==18 .or. nrecord ==19 .or. nrecord ==20 & +! .or. nrecord ==21 .or. nrecord ==22 .or. nrecord ==23 & +! .or. nrecord ==24 ) then + if ( my_proc_id == io_proc ) then + !---read in + allocate(dat4(ix, iy, iz,1),dat4b(ix, iy, iz,1)) + if ( nrecord == 4 ) call get_var_data(trim(infile_core), 'T', ix, iy, iz,1, dat4) + if ( nrecord == 5 ) call get_var_data(trim(infile_tracer), 'sphum', ix, iy, iz,1, dat4) + if ( nrecord == 8 ) call get_var_data(trim(infile_core), 'W', ix, iy, iz,1, dat4) + if ( nrecord == 9 ) call get_var_data(trim(infile_core), 'delp', ix, iy, iz,1, dat4) + if ( nrecord == 11 ) call get_var_data(trim(infile_core), 'DZ', ix, iy, iz,1, dat4) + if ( nrecord == 18 ) call get_var_data(trim(infile_tracer), 'liq_wat', ix, iy, iz,1, dat4) + if ( nrecord == 19 ) call get_var_data(trim(infile_tracer), 'rainwat', ix, iy, iz,1, dat4) + if ( nrecord == 20 ) call get_var_data(trim(infile_tracer), 'ice_wat', ix, iy, iz,1, dat4) + if ( nrecord == 21 ) call get_var_data(trim(infile_tracer), 'snowwat', ix, iy, iz,1, dat4) + if ( nrecord == 22 ) call get_var_data(trim(infile_tracer), 'graupel', ix, iy, iz,1, dat4) + ! For Thompson microphysics nrecord ==23 & 24 + if ( nrecord == 23 ) call get_var_data(trim(infile_tracer), 'ice_nc', ix, iy, iz,1, dat4) + if ( nrecord == 24 ) call get_var_data(trim(infile_tracer), 'rain_nc', ix, iy, iz,1, dat4) + !!!!! Read in second file + if ( nrecord == 4 ) call get_var_data(trim(infile_core2), 'T', ix, iy, iz,1, dat4b) + if ( nrecord == 5 ) call get_var_data(trim(infile_tracer2), 'sphum', ix, iy, iz,1, dat4b) + if ( nrecord == 8 ) call get_var_data(trim(infile_core2), 'W', ix, iy, iz,1, dat4b) + if ( nrecord == 9 ) call get_var_data(trim(infile_core2), 'delp', ix, iy, iz,1, dat4b) + if ( nrecord == 11 ) call get_var_data(trim(infile_core2), 'DZ', ix, iy, iz,1, dat4b) + if ( nrecord == 18 ) call get_var_data(trim(infile_tracer2),'liq_wat', ix, iy, iz,1, dat4b) + if ( nrecord == 19 ) call get_var_data(trim(infile_tracer2),'rainwat', ix, iy, iz,1, dat4b) + if ( nrecord == 20 ) call get_var_data(trim(infile_tracer2),'ice_wat', ix, iy, iz,1, dat4b) + if ( nrecord == 21 ) call get_var_data(trim(infile_tracer2),'snowwat', ix, iy, iz,1, dat4b) + if ( nrecord == 22 ) call get_var_data(trim(infile_tracer2),'graupel', ix, iy, iz,1, dat4b) + ! For Thompson microphysics nrecord ==23 & 24 + if ( nrecord == 23 ) call get_var_data(trim(infile_tracer2),'ice_nc', ix, iy, iz,1, dat4b) + if ( nrecord == 24 ) call get_var_data(trim(infile_tracer2),'rain_nc', ix, iy, iz,1, dat4b) + + !---send to other core + if ( nprocs > 1 ) then + nm=max(1,int((iz+nprocs-1)/nprocs)) + do k = 0, nprocs-1 + ks=k*nm+1 + ke=k*nm+nm !k-end + if ( ke > iz ) ke=iz + if ( ks >= 1 .and. ks <= iz .and. ke >= 1 .and. ke <= iz ) then + allocate(dat42(ix, iy, ke-ks+1,1)) + dat42(:,:,:,1)=dat4(:,:,ks:ke,1)-dat4b(:,:,ks:ke,1) + if ( k /= io_proc ) then + call mpi_send(dat42(1,1,1,1), size(dat42), mpi_real, k, 4000+ks, comm, ierr) + else + allocate(dat43(ix, iy, ke-ks+1,1)) + dat43=dat42 + endif + deallocate(dat42) + endif + enddo + else + allocate(dat43(ix, iy, iz,1)) + dat43=dat4-dat4b + endif + deallocate(dat4,dat4b) + else !if ( my_proc_id == io_proc ) then + !---receive dat43 + nm=max(1,int((iz+nprocs-1)/nprocs)) + ks=min(iz,my_proc_id*nm+1) + ke=min(iz,my_proc_id*nm+nm) + if ( ks >= 1 .and. ks <= iz .and. ke >= 1 .and. ke <= iz ) then + allocate(dat43(ix, iy, ke-ks+1,1)) + call mpi_recv(dat43(1,1,1,1), size(dat43), mpi_real, io_proc, 4000+ks, comm, status, ierr) + endif + endif !if ( my_proc_id == io_proc ) then + endif + + !----------------------------- + !---7.6 record 6: (((ugrd(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) + !---7.7 record 7: (((vgrd(i,j,k),i=1,nx),j=1,ny),k=nz,1,-1) + if ( nrecord == 6 ) then + !---get u,v from restart + if ( my_proc_id == io_proc ) then + do nv = 1, 2 + if (nv==1) allocate(dat4(ix, iy+1, iz,1)) + if (nv==1) call get_var_data(trim(infile_core), 'u', ix, iy+1, iz, 1, dat4) + if (nv==2) allocate(dat4(ix+1, iy, iz,1)) + if (nv==2) call get_var_data(trim(infile_core), 'v', ix+1, iy, iz, 1, dat4) + if (nv==1) allocate(dat4b(ix, iy+1, iz,1)) + if (nv==1) call get_var_data(trim(infile_core2), 'u', ix, iy+1, iz, 1, dat4b) + if (nv==2) allocate(dat4b(ix+1, iy, iz,1)) + if (nv==2) call get_var_data(trim(infile_core2), 'v', ix+1, iy, iz, 1, dat4b) + !---send to other core + if ( nprocs > 1 ) then + nm=max(1,int((iz+nprocs-1)/nprocs)) + do k = 0, nprocs-1 + ks=k*nm+1 + ke=k*nm+nm !k-end + if ( ke > iz ) ke=iz + if ( ks >= 1 .and. ks <= iz .and. ke >= 1 .and. ke <= iz ) then + if (nv==1) allocate(dat41(ix, iy+1, ke-ks+1,1)) + if (nv==2) allocate(dat41(ix+1, iy, ke-ks+1,1)) + dat41(:,:,:,1)=dat4(:,:,ks:ke,1)-dat4b(:,:,ks:ke,1) + if ( k /= io_proc ) then + call mpi_send(dat41(1,1,1,1), size(dat41), mpi_real, k, 200*nv+ks, comm, ierr) + else + if (nv==1) allocate(dat43u(ix, iy+1, ke-ks+1,1)) + if (nv==1) dat43u=dat41 + if (nv==2) allocate(dat43v(ix+1, iy, ke-ks+1,1)) + if (nv==2) dat43v=dat41 + endif + deallocate(dat41) + endif + enddo + else !if ( nprocs > 1 ) then + if (nv==1) allocate(dat43u(ix, iy+1, iz,1)) + if (nv==1) dat43u=dat4-dat4b !XL + if (nv==2) allocate(dat43v(ix+1, iy, iz,1)) + if (nv==2) dat43v=dat4-dat4b + endif + deallocate(dat4,dat4b) + enddo !do nv = 1, 2 + else !if ( my_proc_id == io_proc ) then + !---receive dat43u dat43v + nm=max(1,int((iz+nprocs-1)/nprocs)) + ks=min(iz,my_proc_id*nm+1) + ke=min(iz,my_proc_id*nm+nm) + if ( ks >= 1 .and. ks <= iz .and. ke >= 1 .and. ke <= iz ) then + allocate(dat43u(ix, iy+1, ke-ks+1,1), dat43v(ix+1, iy, ke-ks+1,1)) + call mpi_recv(dat43u(1,1,1,1), size(dat43u), mpi_real, io_proc, 200*1+ks, comm, status, ierr) + call mpi_recv(dat43v(1,1,1,1), size(dat43v), mpi_real, io_proc, 200*2+ks, comm, status, ierr) + endif + endif !if ( my_proc_id == io_proc ) then + endif + + !!----------------------------- + !!---7.9 record 9: (((z1(i,j,k),i=1,nx),j=1,ny),k=nz1,1,-1) + !!--- hafs-VI/read_hafs_out.f90 z1: + !!--- z1(I,J,K)=z1(I,J,K+1)+rdgas1*tmp(i,j,k)*(1.+0.608*spfh(i,j,k))*ALOG(ph1(i,j,k+1)/ph1(i,j,k)) + !!--- hgt: phis/g-sum(DZ) + + !----------------------------- + !---7.10 record 10: glon,glat,glon,glat ! 2D + !--- glat=grid_yt*180./pi, grid_yt=1:2160, what is this? + + !!----------------------------- + !!---7.11 record 11: (((ph1(i,j,k),i=1,nx),j=1,ny),k=nz1,1,-1) + !!--- hafs-VI/read_hafs_out.f90 ph: + !!--- ph(k) = ak(k) + bk(k)*p_s --> pressure in pa + !!--- 64.270-->100570 + !!---seem ph1 is pressure on half level, use + !!--- pf1(k) = phalf(1) + sum(delp(1:k)) + + !----------------------------- + !---7.12 record 12: pressfc1 ! 2D + !--- use lowest-level pressure? + if ( nrecord == 12 ) then + if ( my_proc_id == io_proc ) then + allocate(dat43(ix, iy, 1, 1)) + dat43(:,:,1,1)=sfcp(:,:) + deallocate(sfcp) + endif + endif + + !----------------------------- + !---7.13 record 13: ak + + !----------------------------- + !---7.14 record 14: bk + + !----------------------------- + !---7.15 record 15: land ! =A101 = land sea mask, B101 = ZNT + !--- hafs-VI/read_hafs_out.f90 land:long_name = "sea-land-ice mask (0-sea, 1-land, 2-ice)" ; + !--- sfc_data.nc: slmsk + if ( nrecord == 15 ) then + if ( my_proc_id == io_proc ) then + allocate(dat43(ix, iy, 1,1)) + call get_var_data(trim(infile_sfc), 'slmsk', ix, iy, 1, 1, dat43) + endif + endif + + !----------------------------- + !---7.16 record 16: sfcr ! =B101 = Z0 + !---surface roughness + if ( nrecord == 16 ) then + if ( my_proc_id == io_proc ) then + allocate(dat43(ix, iy, 1,1)) + call get_var_data(trim(infile_sfc), 'zorl', ix, iy, 1, 1, dat43) + ! convert from cm to m + dat43=dat43/100. + endif + endif + + !----------------------------- + !---7.17 record 17: C101 ! =C101 = (10m wind speed)/(level 1 wind speed) + !--- ! =C101 = f10m (in the sfc_data.nc) + if ( nrecord == 17 ) then + if ( my_proc_id == io_proc ) then + allocate(dat43(ix, iy, 1, 1)) + call get_var_data(trim(infile_sfc), 'f10m', ix, iy, 1, 1, dat43) + endif + endif + + !----------------------------- + !---7.18 output 3d + if ( nrecord == 3 .or. nrecord == 4 .or. nrecord == 5 .or. & + nrecord == 8 .or. nrecord == 9 .or. nrecord ==11)then !XL .or. & +! nrecord ==18 .or. nrecord ==19 .or. nrecord ==20 .or. & +! nrecord ==21 .or. nrecord ==22 .or. nrecord ==23 .or. & +! nrecord ==24 )then + call mpi_barrier(comm,ierr) + kz=nz + !--- map fv3 grid to rot-ll grid: ingrid-->dstgrid + !call cpu_time(cputime2) + !write(*,'(a,i3,f)')' --- read rot-ll grid for 1 record ', nrecord, cputime2 + + if ( nprocs == 1 ) then !--no mpi + !----only 1-core + allocate(dat42(nx,ny,kz,1)) + dat42=dat43 +! call combine_grids_for_remap(ix,iy,kz,1,dat43,nx,ny,kz,1,dat43,gwt%gwt_t,dat42) + !--- output + !write(*,'(a,i2.2,a,200f)')'=== record',nrecord,': ', dat42(int(nx/2),int(ny/2),:,1) + !write(flid_out) (((dat42(i,j,k,1),i=1,nx),j=1,ny),k=kz,1,-1) +! write(filename,*) 'dat_',trim(varname_long),'.txt' +! open (111,file=trim(filename),form='formatted',status='unknown') +! write(111,*)dat42(:,:,1,1) + call write_nc_real(trim(fl_out), trim(varname_long), nx, ny, kz, -1, 'nx', 'ny', trim(nzc), '-', dat42, trim(units), trim(varname_long)) +! close(111) + deallocate(dat42, dat43) + else + !----mpi: 0 is for IO, >0 is for computing + !---put dat41 --> dat42 + !call mpi_barrier(comm,ierr) + nm=max(1,int((kz+nprocs-1)/nprocs)) + ks=my_proc_id*nm+1 + ke=my_proc_id*nm+nm + if ( ke > kz ) ke=kz + if ( ks >= 1 .and. ks <= kz .and. ke >= 1 .and. ke <= kz ) then + allocate(dat42(nx, ny, ke-ks+1,1)) + dat42=dat43 + if ( my_proc_id /= io_proc ) then + call mpi_send(dat42(1,1,1,1),size(dat42),mpi_real, io_proc, 5000+ks, comm, ierr) + deallocate(dat42) + endif + deallocate(dat43) + endif + + !---collect dat43 to io_proc, and output + !call mpi_barrier(comm,ierr) + if ( my_proc_id == io_proc ) then + allocate(dat43(nx,ny,kz,1)) + nm=max(1,int((kz+nprocs-1)/nprocs)) + do k = 0, nprocs-1 + ks=k*nm+1 + ke=k*nm+nm + if ( ke > kz ) ke=kz + if ( ks >= 1 .and. ks <= kz .and. ke >= 1 .and. ke <= kz ) then + if ( k /= io_proc ) then + allocate(dat41(nx, ny, ke-ks+1,1)) + call mpi_recv(dat41(1,1,1,1), size(dat41), mpi_real, k, 5000+ks, comm, status, ierr) + dat43(:,:,ks:ke,1)=dat41(:,:,1:ke-ks+1,1) + deallocate(dat41) + else + dat43(:,:,ks:ke,1)=dat42(:,:,1:ke-ks+1,1) + deallocate(dat42) + endif + endif + enddo + !write(*,'(a,3i5,100f12.3)')'===w34 ', nx, ny, kz, (dat43(10,10,k,1),k=kz,1,-1) + !write(flid_out) (((dat43(i,j,k,1),i=1,nx),j=1,ny),k=kz,1,-1) + call write_nc_real(trim(fl_out), trim(varname_long), nx, ny, kz, -1, 'nx', 'ny', trim(nzc), '-', dat43, trim(units), trim(varname_long)) + deallocate(dat43) + endif !if ( my_proc_id == io_proc ) then + endif ! if ( nprocs == 1 ) then !--no mpi + else if ( nrecord == 6 ) then !---u,v + allocate(u(nx,ny,kz,1), v(nx,ny,kz,1)) + if ( nprocs == 1 ) then !--no mpi + allocate(dat4u(nx,ny+1,kz,1),dat4v(nx+1,ny,kz,1)) + dat4u=dat43u + dat4v=dat43v + allocate(dat2(ix, iy+1), dat21(ix+1, iy)) + do k=1,kz + call fv3uv2earth(ix, iy, dat4u(:,:,k,1), dat4v(:,:,k,1), cangu, sangu, cangv, sangv, dat2, dat21) + u(:,:,k,1)=(dat2 (:,1:iy)+dat2 (:,2:iy+1))/2.0 + v(:,:,k,1)=(dat21(1:ix,:)+dat21(2:ix+1,:))/2.0 + end do + call write_nc_real(trim(fl_out), 'u_inc', nx, ny, kz, -1, 'nx', 'ny', trim(nzc), '-', u, 'm/s', 'u-component') + call write_nc_real(trim(fl_out), 'v_inc', nx, ny, kz, -1, 'nx', 'ny', trim(nzc), '-', v, 'm/s', 'u-component') + deallocate(dat4u,dat4v,dat2,dat21,dat43u,dat43v,cangu,sangu,cangv,sangv,u,v) + else + !---collect dat43 to io_proc, and output + call mpi_barrier(comm,ierr) + nm=max(1,int((kz+nprocs-1)/nprocs)) + ks=my_proc_id*nm+1 + ke=my_proc_id*nm+nm + if ( ke > kz ) ke=kz + if ( ks >= 1 .and. ks <= kz .and. ke >= 1 .and. ke <= kz ) then + allocate(dat42u(nx, ny, ke-ks+1,1),dat42v(nx, ny, ke-ks+1,1)) + dat42u=dat43u + dat42v=dat43v + if ( my_proc_id /= io_proc ) then + call mpi_send(dat42u(1,1,1,1),size(dat42u),mpi_real, io_proc, 5000+ks, comm, ierr) + call mpi_send(dat42v(1,1,1,1),size(dat42v),mpi_real, io_proc, 9000+ks, comm, ierr) + deallocate(dat42u,dat42v) + endif + deallocate(dat43u,dat43v) + endif + + if ( my_proc_id == io_proc ) then + allocate(dat43u(nx,ny+1,kz,1),dat43v(nx+1,ny,kz,1)) + nm=max(1,int((kz+nprocs-1)/nprocs)) + do k = 0, nprocs-1 + ks=k*nm+1 + ke=k*nm+nm + if ( ke > kz ) ke=kz + if ( ks >= 1 .and. ks <= kz .and. ke >= 1 .and. ke <= kz ) then + if ( k /= io_proc ) then + allocate(dat41u(nx,ny+1,ke-ks+1,1),dat41v(nx+1,ny,ke-ks+1,1)) + call mpi_recv(dat41u(1,1,1,1),size(dat41u),mpi_real,k,5000+ks,comm,status,ierr) + call mpi_recv(dat41v(1,1,1,1),size(dat41v),mpi_real,k,9000+ks,comm,status,ierr) + dat43u(:,:,ks:ke,1)=dat41u(:,:,1:ke-ks+1,1) + dat43v(:,:,ks:ke,1)=dat41v(:,:,1:ke-ks+1,1) + deallocate(dat41u,dat41v) + else + dat43u(:,:,ks:ke,1)=dat42u(:,:,1:ke-ks+1,1) + dat43v(:,:,ks:ke,1)=dat42v(:,:,1:ke-ks+1,1) + deallocate(dat42u,dat42v) + endif + endif + enddo + allocate(dat4u(nx,ny+1,kz,1),dat4v(nx+1,ny,kz,1)) + dat4u=dat43u + dat4v=dat43v + allocate(dat2(ix, iy+1), dat21(ix+1, iy)) + do k=1,kz + call fv3uv2earth(ix, iy, dat43u(:,:,k,1), dat43v(:,:,k,1), cangu,sangu, cangv, sangv, dat2, dat21) + u(:,:,k,1)=(dat2 (:,1:iy)+dat2 (:,2:iy+1))/2.0 + v(:,:,k,1)=(dat21(1:ix,:)+dat21(2:ix+1,:))/2.0 + end do + call write_nc_real(trim(fl_out), 'u_inc', nx, ny, kz, -1, 'nx', 'ny', trim(nzc), '-', u, 'm/s', 'u-component') + call write_nc_real(trim(fl_out), 'v_inc', nx, ny, kz, -1, 'nx', 'ny', trim(nzc), '-', v, 'm/s', 'u-component') + deallocate(dat43u,dat43v) + deallocate(dat2,dat21,cangu,sangu,cangv,sangv,u,v) + endif !if ( my_proc_id == io_proc ) then + endif + else if ( nrecord ==12 .or. nrecord ==15 .or. nrecord ==16 .or. nrecord ==17 ) then + kz=1 + if ( my_proc_id == io_proc ) then + allocate(dat41(nx,ny,kz,1), dat42(nx,ny,kz,1)) + if ( nd > 1 ) then + !read(flid_in)dat42 + call get_var_data(trim(fl_in), trim(varname), nx, ny, kz, 1, dat42) + do k = 1, kz + dat41(:,:,k,1)=dat42(:,:,kz-k+1,1) + enddo + else + dat41=-999999. + endif + !write(flid_out) (((dat42(i,j,k,1),i=1,nx),j=1,ny),k=kz,1,-1) + call write_nc_real(trim(fl_out), trim(varname_long), nx, ny, -1, -1, 'nx', 'ny', '-', '-', dat41, trim(units), trim(varname_long)) + deallocate(dat41, dat42, dat43) + endif !if ( my_proc_id == io_proc ) then + endif + + enddo do_out_var_loop !: for nrecord = 1, itotal_var !We have 17 or 22 or 24 variables now + + !------------------------------------------------------------------------- + deallocate( ingrid%grid_lon, ingrid%grid_lat, ingrid%grid_lont, ingrid%grid_latt) + + enddo do_nestdom_loop !: do nd = 1, ndom + write(*,*)' === finished hafs_diff ===' + + return + end subroutine hafs_diff + From 8edbe3dd90a9da7fcde2e94f4c40f8f741698562 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Sat, 13 Jul 2024 23:33:24 +0000 Subject: [PATCH 18/52] * Update submodule sorc/hafs_forecast.fd with wave-ocean coupling capability enabled. * Update parm/ww3/regional/ww3_grid_?.inp by adding &OUTS USSP =1, IUSSP = 3, STK_WN = 0.04, 0.110, 0.3305 / * Update parm/mom6/regional_hafs.v2.0.1a/hafs_mom6.input.IN with USE_WAVES = True --- .../regional_hafs.v2.0.1a/hafs_mom6.input.IN | 23 +++++++++++++++++++ parm/ww3/regional/ww3_grid_a.inp | 1 + parm/ww3/regional/ww3_grid_b.inp | 1 + parm/ww3/regional/ww3_grid_c.inp | 1 + parm/ww3/regional/ww3_grid_e.inp | 1 + parm/ww3/regional/ww3_grid_l.inp | 1 + parm/ww3/regional/ww3_grid_p.inp | 1 + parm/ww3/regional/ww3_grid_s.inp | 1 + parm/ww3/regional/ww3_grid_w.inp | 1 + scripts/exhafs_forecast.sh | 7 +++++- sorc/hafs_forecast.fd | 2 +- 11 files changed, 38 insertions(+), 2 deletions(-) diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6.input.IN b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6.input.IN index da932e976..f6f541a7c 100644 --- a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6.input.IN +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6.input.IN @@ -841,6 +841,29 @@ MIX_LEN_EXPONENT = 1.0 ! [nondim] default = 2.0 USE_LA_LI2016 = True ! [nondim] default = False ! A logical to use the Li et al. 2016 (submitted) formula to determine the ! Langmuir number. +USE_WAVES = True ! [Boolean] default = False + ! If true, enables surface wave modules. +WAVE_METHOD = "SURFACE_BANDS" ! default = "EMPTY" + ! Choice of wave method, valid options include: + ! TEST_PROFILE - Prescribed from surface Stokes drift + ! and a decay wavelength. + ! SURFACE_BANDS - Computed from multiple surface values + ! and decay wavelengths. + ! DHH85 - Uses Donelan et al. 1985 empirical + ! wave spectrum with prescribed values. + ! LF17 - Infers Stokes drift profile from wind + ! speed following Li and Fox-Kemper 2017. +SURFBAND_SOURCE = "COUPLER" ! default = "EMPTY" + ! Choice of SURFACE_BANDS data mode, valid options include: + ! DATAOVERRIDE - Read from NetCDF using FMS DataOverride. + ! COUPLER - Look for variables from coupler pass + ! INPUT - Testing with fixed values. +STK_BAND_COUPLER = 3 ! default = 1 + ! STK_BAND_COUPLER is the number of Stokes drift bands in the coupler. This has + ! to be consistent with the number of Stokes drift bands in WW3, or the model + ! will fail. +SURFBAND_WAVENUMBERS = 0.04, 0.11, 0.3305 ! [rad/m] default = 0.12566 + ! Central wavenumbers for surface Stokes drift bands. EPBL_LANGMUIR_SCHEME = "NONE" ! default = "NONE" ! EPBL_LANGMUIR_SCHEME selects the method for including Langmuir turbulence. ! Valid values are: diff --git a/parm/ww3/regional/ww3_grid_a.inp b/parm/ww3/regional/ww3_grid_a.inp index c8bc61660..7e05bfd9c 100644 --- a/parm/ww3/regional/ww3_grid_a.inp +++ b/parm/ww3/regional/ww3_grid_a.inp @@ -10,6 +10,7 @@ $ $ 360. 360. 360. 15. $ + &OUTS USSP =1, IUSSP = 3, STK_WN = 0.04, 0.110, 0.3305 / &SIN4 BETAMAX = 1.33 / &SBT1 GAMMA = -0.019 / &PRO3 WDTHCG = 12.00, WDTHTH = 12.00 / diff --git a/parm/ww3/regional/ww3_grid_b.inp b/parm/ww3/regional/ww3_grid_b.inp index b64828d59..23ad45a67 100644 --- a/parm/ww3/regional/ww3_grid_b.inp +++ b/parm/ww3/regional/ww3_grid_b.inp @@ -10,6 +10,7 @@ $ $ 360. 360. 360. 15. $ + &OUTS USSP =1, IUSSP = 3, STK_WN = 0.04, 0.110, 0.3305 / &SIN4 BETAMAX = 1.33 / &SBT1 GAMMA = -0.019 / &PRO3 WDTHCG = 12.00, WDTHTH = 12.00 / diff --git a/parm/ww3/regional/ww3_grid_c.inp b/parm/ww3/regional/ww3_grid_c.inp index 83600adc5..720b240c1 100644 --- a/parm/ww3/regional/ww3_grid_c.inp +++ b/parm/ww3/regional/ww3_grid_c.inp @@ -10,6 +10,7 @@ $ $ 360. 360. 360. 15. $ + &OUTS USSP =1, IUSSP = 3, STK_WN = 0.04, 0.110, 0.3305 / &SIN4 BETAMAX = 1.33 / &SBT1 GAMMA = -0.019 / &PRO3 WDTHCG = 12.00, WDTHTH = 12.00 / diff --git a/parm/ww3/regional/ww3_grid_e.inp b/parm/ww3/regional/ww3_grid_e.inp index e2d416317..b5a099d91 100644 --- a/parm/ww3/regional/ww3_grid_e.inp +++ b/parm/ww3/regional/ww3_grid_e.inp @@ -10,6 +10,7 @@ $ $ 360. 360. 360. 15. $ + &OUTS USSP =1, IUSSP = 3, STK_WN = 0.04, 0.110, 0.3305 / &SIN4 BETAMAX = 1.33 / &SBT1 GAMMA = -0.019 / &PRO3 WDTHCG = 12.00, WDTHTH = 12.00 / diff --git a/parm/ww3/regional/ww3_grid_l.inp b/parm/ww3/regional/ww3_grid_l.inp index 4ce615c4b..292a9e9a7 100644 --- a/parm/ww3/regional/ww3_grid_l.inp +++ b/parm/ww3/regional/ww3_grid_l.inp @@ -10,6 +10,7 @@ $ $ 360. 360. 360. 15. $ + &OUTS USSP =1, IUSSP = 3, STK_WN = 0.04, 0.110, 0.3305 / &SIN4 BETAMAX = 1.33 / &SBT1 GAMMA = -0.019 / &PRO3 WDTHCG = 12.00, WDTHTH = 12.00 / diff --git a/parm/ww3/regional/ww3_grid_p.inp b/parm/ww3/regional/ww3_grid_p.inp index e2f47d610..bafc09641 100644 --- a/parm/ww3/regional/ww3_grid_p.inp +++ b/parm/ww3/regional/ww3_grid_p.inp @@ -10,6 +10,7 @@ $ $ 360. 360. 360. 15. $ + &OUTS USSP =1, IUSSP = 3, STK_WN = 0.04, 0.110, 0.3305 / &SIN4 BETAMAX = 1.33 / &SBT1 GAMMA = -0.019 / &PRO3 WDTHCG = 12.00, WDTHTH = 12.00 / diff --git a/parm/ww3/regional/ww3_grid_s.inp b/parm/ww3/regional/ww3_grid_s.inp index 909151073..c0e2bb0fd 100644 --- a/parm/ww3/regional/ww3_grid_s.inp +++ b/parm/ww3/regional/ww3_grid_s.inp @@ -10,6 +10,7 @@ $ $ 360. 360. 360. 15. $ + &OUTS USSP =1, IUSSP = 3, STK_WN = 0.04, 0.110, 0.3305 / &SIN4 BETAMAX = 1.33 / &SBT1 GAMMA = -0.019 / &PRO3 WDTHCG = 12.00, WDTHTH = 12.00 / diff --git a/parm/ww3/regional/ww3_grid_w.inp b/parm/ww3/regional/ww3_grid_w.inp index 9a265ef10..0ab1b3b6a 100644 --- a/parm/ww3/regional/ww3_grid_w.inp +++ b/parm/ww3/regional/ww3_grid_w.inp @@ -10,6 +10,7 @@ $ $ 360. 360. 360. 15. $ + &OUTS USSP =1, IUSSP = 3, STK_WN = 0.04, 0.110, 0.3305 / &SIN4 BETAMAX = 1.33 / &SBT1 GAMMA = -0.019 / &PRO3 WDTHCG = 12.00, WDTHTH = 12.00 / diff --git a/scripts/exhafs_forecast.sh b/scripts/exhafs_forecast.sh index a8d7bc2e1..72c59fbd4 100755 --- a/scripts/exhafs_forecast.sh +++ b/scripts/exhafs_forecast.sh @@ -343,6 +343,7 @@ icplocn2atm=${icplocn2atm:-0} cplwav=${cplwav:-.false.} cplwav2atm=${cplwav2atm:-.false.} INPUT_WNDFLD=${INPUT_WNDFLD:-"C F"} +INPUT_CURFLD=${INPUT_CURFLD:-"F F"} cpl_dt=${cpl_dt:-360} ocean_start_dtg=${ocean_start_dtg:-43340.00000} base_dtg=${CDATE:-2019082900} @@ -685,6 +686,7 @@ if [ $cpl_atm_ocn = cmeps_2way ] && [ $cpl_atm_wav = cmeps_2way ]; then cplwav=.true. cplwav2atm=.true. INPUT_WNDFLD="C F" + INPUT_CURFLD="C F" # CMEPS based two-way atm-ocn coupling and one-way atm-wav coupling from atm to wav only elif [ $cpl_atm_ocn = cmeps_2way ] && [ $cpl_atm_wav = cmeps_1way_1to2 ]; then cplflx=.true. @@ -692,6 +694,7 @@ elif [ $cpl_atm_ocn = cmeps_2way ] && [ $cpl_atm_wav = cmeps_1way_1to2 ]; then cplwav=.true. cplwav2atm=.false. INPUT_WNDFLD="C F" + INPUT_CURFLD="C F" # CMEPS based one-way atm-ocn coupling from atm to ocn only and two-way atm-wav coupling elif [ $cpl_atm_ocn = cmeps_1way_1to2 ] && [ $cpl_atm_wav = cmeps_2way ]; then cplflx=.true. @@ -699,6 +702,7 @@ elif [ $cpl_atm_ocn = cmeps_1way_1to2 ] && [ $cpl_atm_wav = cmeps_2way ]; then cplwav=.true. cplwav2atm=.true. INPUT_WNDFLD="C F" + INPUT_CURFLD="C F" # CMEPS based one-way atm-ocn coupling from atm to ocn only and one-way atm-wav coupling from atm to wav only elif [ $cpl_atm_ocn = cmeps_1way_1to2 ] && [ $cpl_atm_wav = cmeps_1way_1to2 ]; then cplflx=.true. @@ -706,6 +710,7 @@ elif [ $cpl_atm_ocn = cmeps_1way_1to2 ] && [ $cpl_atm_wav = cmeps_1way_1to2 ]; t cplwav=.true. cplwav2atm=.false. INPUT_WNDFLD="C F" + INPUT_CURFLD="C F" # Currently unsupported coupling option combinations else echo "FATAL ERROR: Unsupported coupling options: cpl_atm_ocn=${cpl_atm_ocn}; cpl_atm_wav=${cpl_atm_wav}" @@ -1409,7 +1414,7 @@ if [ ${run_wave} = yes ]; then # copy parms ${NCP} ${PARMww3}/ww3_shel.inp_tmpl ./ww3_shel.inp_tmpl # generate ww3_shel.inp - INPUT_CURFLD="F F" + INPUT_CURFLD=${INPUT_CURFLD:-"F F"} INPUT_WNDFLD=${INPUT_WNDFLD:-"C F"} INPUT_ICEFLD="F F" EDATE=$($NDATE +${NHRSint} ${CDATE}) diff --git a/sorc/hafs_forecast.fd b/sorc/hafs_forecast.fd index 7705a69b7..cbda17fe5 160000 --- a/sorc/hafs_forecast.fd +++ b/sorc/hafs_forecast.fd @@ -1 +1 @@ -Subproject commit 7705a69b7f631e7acae2ed9d05c8e2eb3b896848 +Subproject commit cbda17fe5818d1a2dab3c5c83d00f1c42112039b From 11cb456521569d7b3971316ff68ba2a2c1466a1b Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Sun, 14 Jul 2024 03:00:14 +0000 Subject: [PATCH 19/52] Add config and cronjob files for HAFSv2.0.1A and B. --- parm/hafs.v2.0.1a.conf | 31 ++++++ parm/hafs.v2.0.1b.conf | 82 ++++++++++++++ rocoto/cronjob_hafs.v2.0.1a.sh | 189 +++++++++++++++++++++++++++++++++ rocoto/cronjob_hafs.v2.0.1b.sh | 118 ++++++++++++++++++++ 4 files changed, 420 insertions(+) create mode 100644 parm/hafs.v2.0.1a.conf create mode 100644 parm/hafs.v2.0.1b.conf create mode 100755 rocoto/cronjob_hafs.v2.0.1a.sh create mode 100755 rocoto/cronjob_hafs.v2.0.1b.sh diff --git a/parm/hafs.v2.0.1a.conf b/parm/hafs.v2.0.1a.conf new file mode 100644 index 000000000..dbdee611c --- /dev/null +++ b/parm/hafs.v2.0.1a.conf @@ -0,0 +1,31 @@ +[config] +RUN=hfsa +run_wave=yes + +[prelaunch] +basin_overrides=no +basin_conf=none.conf +no_basin_conf=none.conf + +[dir] +PARMmom6={PARMhafs}/mom6/regional_hafs.v2.0.1a + +[vi] +vi_slp_adjust=1 + +[forecast] +all_tasks=1140 +atm_tasks=1020 +ocn_tasks=60 +wav_tasks=60 +layoutx=30,20 +layouty=20,18 + +cpl_wav_ocn=cmeps_2way ; Currently no impact, default is two-way wave-ocean coupling when ww3 and mom6 are both active. +iau_regional=.true. +lim_fac=3.0,3.0 +progsigma=.true. +iovr=5 + +write_groups=3 +write_tasks_per_group=20 diff --git a/parm/hafs.v2.0.1b.conf b/parm/hafs.v2.0.1b.conf new file mode 100644 index 000000000..02626e4cd --- /dev/null +++ b/parm/hafs.v2.0.1b.conf @@ -0,0 +1,82 @@ +[config] +RUN=hfsb +run_wave=no +run_ocean=yes +ocean_model=mom6 + +[prelaunch] +basin_overrides=no +basin_conf=none.conf +no_basin_conf=none.conf + +[dir] +PARMmom6={PARMhafs}/mom6/regional_hafs.v2.0.1b + +[grid] +istart_nest=113,-999 +jstart_nest=113,-999 +iend_nest=912,-999 +jend_nest=912,-999 +idim_nest=1200,600 +jdim_nest=1200,600 +delx_nest=0.03,0.01 +dely_nest=0.03,0.01 + +[grid_mvnest1res] +istart_nest_mvnest1res=113 +jstart_nest_mvnest1res=113 +iend_nest_mvnest1res=912 +jend_nest_mvnest1res=912 +idim_nest_mvnest1res=3600 +jdim_nest_mvnest1res=3600 +delx_nest_mvnest1res=0.01 +dely_nest_mvnest1res=0.01 + +[atm_init] +# ccpp suites +ccpp_suite_regional_init=FV3_HAFS_v1_thompson_tiedtke +ccpp_suite_glob_init=FV3_HAFS_v1_thompson_tiedtke +ccpp_suite_nest_init=FV3_HAFS_v1_thompson_tiedtke + +[vi] +vi_warm_start_vmax_threshold=20 +vi_slp_adjust=1 + +[forecast] +ccpp_suite_regional=FV3_HAFS_v1_thompson_tiedtke_nonsst +ccpp_suite_glob=FV3_HAFS_v1_thompson_tiedtke_nonsst +ccpp_suite_nest=FV3_HAFS_v1_thompson_tiedtke_nonsst + +all_tasks=1080 +atm_tasks=1020 +ocn_tasks=60 + +icplocn2atm=0 + +dt_atmos=72 + +npx=1201,601 +npy=1201,601 +k_split=2,4 +n_split=4,8 +layoutx=30,20 +layouty=20,18 + +iau_regional=.true. +imfshalcnv=4 +imfdeepcnv=4 +lim_fac=2.6,2.6 +rlmx=300.,60. +elmx=300.,60. +sfc_rlm=0,0 +tc_pbl=1,1 +fhswr=720. +fhlwr=720. +clam_deep=0.1 + +dt_inner=36 + +ntrack=0,5 + +write_groups=3 +write_tasks_per_group=20 diff --git a/rocoto/cronjob_hafs.v2.0.1a.sh b/rocoto/cronjob_hafs.v2.0.1a.sh new file mode 100755 index 000000000..7f0beecf4 --- /dev/null +++ b/rocoto/cronjob_hafs.v2.0.1a.sh @@ -0,0 +1,189 @@ +#!/bin/sh +set -x +date + +HOMEhafs=${HOMEhafs:-/lfs/h2/emc/hur/noscrub/${USER}/save/HAFS} +source ${HOMEhafs}/ush/hafs_pre_job.sh.inc + +cd ${HOMEhafs}/rocoto +EXPT=$(basename ${HOMEhafs}) +#opts="-t -s sites/${WHERE_AM_I:-wcoss2}.ent -f" +opts="-t -f" +#=============================================================================== + + # HAFSv2.0.1A configuration + confopts="config.EXPT=${EXPT} config.SUBEXPT=${EXPT}_v2p0p1a \ + dir.COMrtofs=/lfs/h2/emc/hur/noscrub/hafs-input/COMRTOFSv2.5 ../parm/hafs.v2.0.1a.conf" + +#=============================================================================== + # 2023 NATL Storms +#./run_hafs.py ${opts} 2023060218-2023060312 02L HISTORY ${confopts} # Arlene +#./run_hafs.py ${opts} 2023061918-2023062412 03L HISTORY ${confopts} # Bret +#./run_hafs.py ${opts} 2023062206-2023062600 04L HISTORY ${confopts} # Cindy +#./run_hafs.py ${opts} 2023071406-2023071606 05L HISTORY ${confopts} # Don part 1 +#./run_hafs.py ${opts} 2023071618-2023072406 05L HISTORY ${confopts} # Don part 2 +#./run_hafs.py ${opts} 2023081918-2023082212 06L HISTORY ${confopts} # Gert part 1 +#./run_hafs.py ${opts} 2023083106-2023090412 06L HISTORY ${confopts} # Gert part 2 +#./run_hafs.py ${opts} 2023082012-2023082112 07L HISTORY ${confopts} # Emily part 1 +#./run_hafs.py ${opts} 2023082300-2023082512 07L HISTORY ${confopts} # Emily part 2 +#./run_hafs.py ${opts} 2023082018-2023082312 08L HISTORY ${confopts} # Franklin part 1 +#./run_hafs.py ${opts} 2023082318-2023090112 08L HISTORY ${confopts} # Franklin part 2 +#./run_hafs.py ${opts} 2023082112-2023082212 09L HISTORY ${confopts} # Harold +#./run_hafs.py ${opts} 2023082618-2023090218 10L HISTORY ${confopts} # Idalia +#./run_hafs.py ${opts} 2023082912-2023090118 11L HISTORY ${confopts} # Jose +#./run_hafs.py ${opts} 2023090112-2023090412 12L HISTORY ${confopts} # Katia +#./run_hafs.py ${opts} 2023090512-2023091606 13L HISTORY ${confopts} # Lee part 1 +#./run_hafs.py ${opts} 2023091618-2023091712 13L HISTORY ${confopts} # Lee part 2 +#./run_hafs.py ${opts} 2023090712-2023091712 14L HISTORY ${confopts} # Margot +#./run_hafs.py ${opts} 2023091512-2023092206 15L HISTORY ${confopts} # Nigel +#./run_hafs.py ${opts} 2023092112-2023092318 16L HISTORY ${confopts} # Ophelia +#./run_hafs.py ${opts} 2023092312-2023100612 17L HISTORY ${confopts} # Philippe +#./run_hafs.py ${opts} 2023092818-2023100200 18L HISTORY ${confopts} # Rina +#./run_hafs.py ${opts} 2023101100-2023101518 19L HISTORY ${confopts} # Sean +#./run_hafs.py ${opts} 2023101818-2023102900 20L HISTORY ${confopts} # Tammy +#./run_hafs.py ${opts} 2023102318-2023102406 21L HISTORY ${confopts} # Twenty-on +#./run_hafs.py ${opts} 2023111618-2023111718 22L HISTORY ${confopts} # Twenty-tw + + # 2022 NATL Storms +#./run_hafs.py ${opts} 2022060506-2022060618 01L HISTORY ${confopts} # Alex +#./run_hafs.py ${opts} 2022062718-2022070206 02L HISTORY ${confopts} # Bonnie +#./run_hafs.py ${opts} 2022070206-2022070300 03L HISTORY ${confopts} # Colin +#./run_hafs.py ${opts} 2022082000-2022082006 04L HISTORY ${confopts} # Four +#./run_hafs.py ${opts} 2022090112-2022090812 05L HISTORY ${confopts} # Danielle +#./run_hafs.py ${opts} 2022090300-2022091018 06L HISTORY ${confopts} # Earl +#./run_hafs.py ${opts} 2022091412-2022092418 07L HISTORY ${confopts} # Fiona +#./run_hafs.py ${opts} 2022092012-2022092518 08L HISTORY ${confopts} # Gaston +#./run_hafs.py ${opts} 2022092306-2022100106 09L HISTORY ${confopts} # Ian +#./run_hafs.py ${opts} 2022092312-2022092500 10L HISTORY ${confopts} # Hermine +#./run_hafs.py ${opts} 2022092812-2022092912 11L HISTORY ${confopts} # Eleven +#./run_hafs.py ${opts} 2022100418-2022100618 12L HISTORY ${confopts} # Twelve +#./run_hafs.py ${opts} 2022100612-2022100912 13L HISTORY ${confopts} # Julia +#./run_hafs.py ${opts} 2022101118-2022101506 14L HISTORY ${confopts} # Karl +#./run_hafs.py ${opts} 2022103018-2022110506 15L HISTORY ${confopts} # Lisa +#./run_hafs.py ${opts} 2022110106-2022110312 16L HISTORY ${confopts} # Martin +#./run_hafs.py ${opts} 2022110706-2022111100 17L HISTORY ${confopts} # Nicole + +#=============================================================================== + # 2023 EPAC storms +#./run_hafs.py ${opts} 2023062718-2023070212 01E HISTORY ${confopts} # Adrian +#./run_hafs.py ${opts} 2023062900-2023070112 02E HISTORY ${confopts} # Beatriz +#./run_hafs.py ${opts} 2023071118-2023071912 03E HISTORY ${confopts} # Calvin +#./run_hafs.py ${opts} 2023072106-2023072206 04E HISTORY ${confopts} # Four +#./run_hafs.py ${opts} 2023073118-2023081300 05E HISTORY ${confopts} # Dora +#./run_hafs.py ${opts} 2023080512-2023080712 06E HISTORY ${confopts} # Eugene +#./run_hafs.py ${opts} 2023081218-2023081706 07E HISTORY ${confopts} # Fernanda +#./run_hafs.py ${opts} 2023081400-2023081718 08E HISTORY ${confopts} # Greg +#./run_hafs.py ${opts} 2023081612-2023082018 09E HISTORY ${confopts} # Hilary +#./run_hafs.py ${opts} 2023082700-2023082912 10E HISTORY ${confopts} # Irwin +#./run_hafs.py ${opts} 2023090418-2023091018 11E HISTORY ${confopts} # Jova +#./run_hafs.py ${opts} 2023091518-2023091618 12E HISTORY ${confopts} # Twelve +#./run_hafs.py ${opts} 2023091912-2023092212 13E HISTORY ${confopts} # Kenneth +#./run_hafs.py ${opts} 2023092318-2023092418 14E HISTORY ${confopts} # Fourteen +#./run_hafs.py ${opts} 2023100306-2023101100 15E HISTORY ${confopts} # Lidia +#./run_hafs.py ${opts} 2023100800-2023101000 16E HISTORY ${confopts} # Max +#./run_hafs.py ${opts} 2023101718-2023102306 17E HISTORY ${confopts} # Norma +#./run_hafs.py ${opts} 2023102212-2023102512 18E HISTORY ${confopts} # Otis +#./run_hafs.py ${opts} 2023102818-2023110600 19E HISTORY ${confopts} # Pilar +#./run_hafs.py ${opts} 2023112312-2023112612 20E HISTORY ${confopts} # Ramon + + # 2022 EPAC storms +#./run_hafs.py ${opts} 2022052800-2022053106 01E HISTORY ${confopts} # Agatha +#./run_hafs.py ${opts} 2022061412-2022062012 02E HISTORY ${confopts} # Blas +#./run_hafs.py ${opts} 2022061618-2022062812 03E HISTORY ${confopts} # Celia +#./run_hafs.py ${opts} 2022071212-2022071912 04E HISTORY ${confopts} # Bonnie +#./run_hafs.py ${opts} 2022070918-2022071618 05E HISTORY ${confopts} # Darby +#./run_hafs.py ${opts} 2022071512-2022072112 06E HISTORY ${confopts} # Estelle +#./run_hafs.py ${opts} 2022072606-2022080212 07E HISTORY ${confopts} # Frank +#./run_hafs.py ${opts} 2022072712-2022080318 08E HISTORY ${confopts} # Georgette +#./run_hafs.py ${opts} 2022080612-2022081018 09E HISTORY ${confopts} # Howard +#./run_hafs.py ${opts} 2022081318-2022081618 10E HISTORY ${confopts} # Ivette p1 +#./run_hafs.py ${opts} 2022082012-2022082100 10E HISTORY ${confopts} # Ivette p2 +#./run_hafs.py ${opts} 2022082112-2022082118 10E HISTORY ${confopts} # Ivette p3 +#./run_hafs.py ${opts} 2022090118-2022090400 11E HISTORY ${confopts} # Javier +#./run_hafs.py ${opts} 2022090412-2022090918 12E HISTORY ${confopts} # Kay +#./run_hafs.py ${opts} 2022091518-2022091712 13E HISTORY ${confopts} # Lester +#./run_hafs.py ${opts} 2022091718-2022092012 14E HISTORY ${confopts} # Madeline +#./run_hafs.py ${opts} 2022092118-2022092518 15E HISTORY ${confopts} # Newton p1 +#./run_hafs.py ${opts} 2022092718-2022092818 15E HISTORY ${confopts} # Newton p2 +#./run_hafs.py ${opts} 2022092900-2022100318 16E HISTORY ${confopts} # Orlene +#./run_hafs.py ${opts} 2022100318-2022100512 17E HISTORY ${confopts} # Paine +#./run_hafs.py ${opts} 2022100918-2022101012 18E HISTORY ${confopts} # Julia +#./run_hafs.py ${opts} 2022102000-2022102318 19E HISTORY ${confopts} # Roslyn + +#=============================================================================== + # 2023 WPAC Storms +#./run_hafs.py ${opts} 2023042012-2023042206 01W HISTORY ${confopts} # Sanvu +#./run_hafs.py ${opts} 2023052012-2023060306 02W HISTORY ${confopts} # Mawar +#./run_hafs.py ${opts} 2023060600-2023061206 03W HISTORY ${confopts} # Guchol +#./run_hafs.py ${opts} 2023071500-2023071806 04W HISTORY ${confopts} # Talim +#./run_hafs.py ${opts} 2023072112-2023072806 05W HISTORY ${confopts} # Doksuri +#./run_hafs.py ${opts} 2023072706-2023081018 06W HISTORY ${confopts} # Khanun +#./run_hafs.py ${opts} 2023080718-2023081712 07W HISTORY ${confopts} # Lan +#./run_hafs.py ${opts} 2023082306-2023082806 08W HISTORY ${confopts} # Damrey +#./run_hafs.py ${opts} 2023082318-2023090312 09W HISTORY ${confopts} # Saola +#./run_hafs.py ${opts} 2023082812-2023090418 10W HISTORY ${confopts} # Haikui +#./run_hafs.py ${opts} 2023083000-2023090400 11W HISTORY ${confopts} # Kirogi +#./run_hafs.py ${opts} 2023090518-2023090818 12W HISTORY ${confopts} # Yun-Yeung +#./run_hafs.py ${opts} 2023092506-2023092518 13W HISTORY ${confopts} # Thirteen +#./run_hafs.py ${opts} 2023092912-2023101000 14W HISTORY ${confopts} # Koinu +#./run_hafs.py ${opts} 2023100700-2023101412 15W HISTORY ${confopts} # Bolaven +#./run_hafs.py ${opts} 2023101800-2023102100 16W HISTORY ${confopts} # Sanba +#./run_hafs.py ${opts} 2023111212-2023111512 17W HISTORY ${confopts} # Seventeen +#./run_hafs.py ${opts} 2023121718-2023121812 18W HISTORY ${confopts} # Jelawat + + # 2022 WPAC Storms +#./run_hafs.py ${opts} 2022033018-2022033100 01W HISTORY ${confopts} # One +#./run_hafs.py ${opts} 2022040700-2022041506 02W HISTORY ${confopts} # Malakas +#./run_hafs.py ${opts} 2022040906-2022041218 03W HISTORY ${confopts} # Megi +#./run_hafs.py ${opts} 2022062918-2022070212 04W HISTORY ${confopts} # Chaba +#./run_hafs.py ${opts} 2022063018-2022070900 05W HISTORY ${confopts} # Aere +#./run_hafs.py ${opts} 2022072900-2022080100 06W HISTORY ${confopts} # Songda +#./run_hafs.py ${opts} 2022080100-2022080106 07W HISTORY ${confopts} # Trases +#./run_hafs.py ${opts} 2022080400-2022080406 08W HISTORY ${confopts} # Eight +#./run_hafs.py ${opts} 2022081106-2022081412 09W HISTORY ${confopts} # Meari +#./run_hafs.py ${opts} 2022082206-2022082512 10W HISTORY ${confopts} # Ma-on +#./run_hafs.py ${opts} 2022082206-2022082512 11W HISTORY ${confopts} # Tokage +#./run_hafs.py ${opts} 2022082806-2022090606 12W HISTORY ${confopts} # Hinnamnor +#./run_hafs.py ${opts} 2022083018-2022090100 13W HISTORY ${confopts} # Thirteen +#./run_hafs.py ${opts} 2022090618-2022091600 14W HISTORY ${confopts} # Muifa +#./run_hafs.py ${opts} 2022091018-2022091500 15W HISTORY ${confopts} # Merbok +#./run_hafs.py ${opts} 2022091218-2022091918 16W HISTORY ${confopts} # Nanmado +#./run_hafs.py ${opts} 2022092118-2022092400 17W HISTORY ${confopts} # Talas +#./run_hafs.py ${opts} 2022092200-2022092806 18W HISTORY ${confopts} # Noru +#./run_hafs.py ${opts} 2022092518-2022092900 19W HISTORY ${confopts} # Kulap +#./run_hafs.py ${opts} 2022092806-2022100500 20W HISTORY ${confopts} # Roke +#./run_hafs.py ${opts} 2022101212-2022101506 21W HISTORY ${confopts} # Twenty-on +#./run_hafs.py ${opts} 2022101400-2022101500 22W HISTORY ${confopts} # Sonca +#./run_hafs.py ${opts} 2022101418-2022102012 23W HISTORY ${confopts} # Nesat +#./run_hafs.py ${opts} 2022101800-2022101906 24W HISTORY ${confopts} # Haitang +#./run_hafs.py ${opts} 2022102000-2022102300 25W HISTORY ${confopts} # Twenty-fi +#./run_hafs.py ${opts} 2022102700-2022110312 26W HISTORY ${confopts} # Nalgae +#./run_hafs.py ${opts} 2022103018-2022103118 27W HISTORY ${confopts} # Banyan +#./run_hafs.py ${opts} 2022111212-2022111418 28W HISTORY ${confopts} # Yamaneko +#./run_hafs.py ${opts} 2022121018-2022121218 29W HISTORY ${confopts} # Pakhar + +#=============================================================================== + # 2023 NIO storms +#./run_hafs.py ${opts} 2023051018-2023051418 01B HISTORY ${confopts} # Mocha +#./run_hafs.py ${opts} 2023060600-2023061612 02A HISTORY ${confopts} # Biparjoy +#./run_hafs.py ${opts} 2023060912-2023061000 03B HISTORY ${confopts} # Three +#./run_hafs.py ${opts} 2023073112-2023080112 04B HISTORY ${confopts} # Four +#./run_hafs.py ${opts} 2023102006-2023102406 05A HISTORY ${confopts} # Tej +#./run_hafs.py ${opts} 2023102306-2023102500 06B HISTORY ${confopts} # Hamoon +#./run_hafs.py ${opts} 2023111618-2023111712 07B HISTORY ${confopts} # Midhili +#./run_hafs.py ${opts} 2023120300-2023120418 08B HISTORY ${confopts} # Michaung + + # 2022 NIO storms +#./run_hafs.py ${opts} 2022030418-2022030612 01B HISTORY ${confopts} # One +#./run_hafs.py ${opts} 2022050706-2022051112 02B HISTORY ${confopts} # Asani +#./run_hafs.py ${opts} 2022081206-2022081312 03A HISTORY ${confopts} # Three +#./run_hafs.py ${opts} 2022081818-2022082000 04B HISTORY ${confopts} # Four +#./run_hafs.py ${opts} 2022102312-2022102418 05B HISTORY ${confopts} # Sitrang +#./run_hafs.py ${opts} 2022120800-2022121000 06B HISTORY ${confopts} # Mandous +#./run_hafs.py ${opts} 2022121500-2022121718 07A HISTORY ${confopts} # Seven + +#=============================================================================== + +date + +echo 'cronjob done' diff --git a/rocoto/cronjob_hafs.v2.0.1b.sh b/rocoto/cronjob_hafs.v2.0.1b.sh new file mode 100755 index 000000000..7426bc03a --- /dev/null +++ b/rocoto/cronjob_hafs.v2.0.1b.sh @@ -0,0 +1,118 @@ +#!/bin/sh +set -x +date + +HOMEhafs=${HOMEhafs:-/lfs/h2/emc/hur/noscrub/${USER}/save/hafsv2p0p1} +source ${HOMEhafs}/ush/hafs_pre_job.sh.inc + +cd ${HOMEhafs}/rocoto +EXPT=$(basename ${HOMEhafs}) +#opts="-t -s sites/${WHERE_AM_I:-wcoss2}.ent -f" +opts="-t -f" +#=============================================================================== + + # HAFSv2.0.1B configuration + confopts="config.EXPT=${EXPT} config.SUBEXPT=${EXPT}_v2p0p1b \ + dir.COMrtofs=/lfs/h2/emc/hur/noscrub/hafs-input/COMRTOFSv2.5 \ + ../parm/hafs.v2.0.1b.conf" + +#=============================================================================== + # 2023 NATL Storms +#./run_hafs.py ${opts} 2023060218-2023060312 02L HISTORY ${confopts} # Arlene +#./run_hafs.py ${opts} 2023061918-2023062412 03L HISTORY ${confopts} # Bret +#./run_hafs.py ${opts} 2023062206-2023062600 04L HISTORY ${confopts} # Cindy +#./run_hafs.py ${opts} 2023071406-2023071606 05L HISTORY ${confopts} # Don part 1 +#./run_hafs.py ${opts} 2023071618-2023072406 05L HISTORY ${confopts} # Don part 2 +#./run_hafs.py ${opts} 2023081918-2023082212 06L HISTORY ${confopts} # Gert part 1 +#./run_hafs.py ${opts} 2023083106-2023090412 06L HISTORY ${confopts} # Gert part 2 +#./run_hafs.py ${opts} 2023082012-2023082112 07L HISTORY ${confopts} # Emily part 1 +#./run_hafs.py ${opts} 2023082300-2023082512 07L HISTORY ${confopts} # Emily part 2 +#./run_hafs.py ${opts} 2023082018-2023082312 08L HISTORY ${confopts} # Franklin part 1 +#./run_hafs.py ${opts} 2023082318-2023090112 08L HISTORY ${confopts} # Franklin part 2 +#./run_hafs.py ${opts} 2023082112-2023082212 09L HISTORY ${confopts} # Harold +#./run_hafs.py ${opts} 2023082618-2023090218 10L HISTORY ${confopts} # Idalia +#./run_hafs.py ${opts} 2023082912-2023090118 11L HISTORY ${confopts} # Jose +#./run_hafs.py ${opts} 2023090112-2023090412 12L HISTORY ${confopts} # Katia +#./run_hafs.py ${opts} 2023090512-2023091606 13L HISTORY ${confopts} # Lee part 1 +#./run_hafs.py ${opts} 2023091618-2023091712 13L HISTORY ${confopts} # Lee part 2 +#./run_hafs.py ${opts} 2023090712-2023091712 14L HISTORY ${confopts} # Margot +#./run_hafs.py ${opts} 2023091512-2023092206 15L HISTORY ${confopts} # Nigel +#./run_hafs.py ${opts} 2023092112-2023092318 16L HISTORY ${confopts} # Ophelia +#./run_hafs.py ${opts} 2023092312-2023100612 17L HISTORY ${confopts} # Philippe +#./run_hafs.py ${opts} 2023092818-2023100200 18L HISTORY ${confopts} # Rina +#./run_hafs.py ${opts} 2023101100-2023101518 19L HISTORY ${confopts} # Sean +#./run_hafs.py ${opts} 2023101818-2023102900 20L HISTORY ${confopts} # Tammy +#./run_hafs.py ${opts} 2023102318-2023102406 21L HISTORY ${confopts} # Twenty-on +#./run_hafs.py ${opts} 2023111618-2023111718 22L HISTORY ${confopts} # Twenty-tw + + # 2022 NATL Storms +#./run_hafs.py ${opts} 2022060506-2022060618 01L HISTORY ${confopts} # Alex +#./run_hafs.py ${opts} 2022062718-2022070206 02L HISTORY ${confopts} # Bonnie +#./run_hafs.py ${opts} 2022070206-2022070300 03L HISTORY ${confopts} # Colin +#./run_hafs.py ${opts} 2022082000-2022082006 04L HISTORY ${confopts} # Four +#./run_hafs.py ${opts} 2022090112-2022090812 05L HISTORY ${confopts} # Danielle +#./run_hafs.py ${opts} 2022090300-2022091018 06L HISTORY ${confopts} # Earl +#./run_hafs.py ${opts} 2022091412-2022092418 07L HISTORY ${confopts} # Fiona +#./run_hafs.py ${opts} 2022092012-2022092518 08L HISTORY ${confopts} # Gaston +#./run_hafs.py ${opts} 2022092306-2022100106 09L HISTORY ${confopts} # Ian +#./run_hafs.py ${opts} 2022092312-2022092500 10L HISTORY ${confopts} # Hermine +#./run_hafs.py ${opts} 2022092812-2022092912 11L HISTORY ${confopts} # Eleven +#./run_hafs.py ${opts} 2022100418-2022100618 12L HISTORY ${confopts} # Twelve +#./run_hafs.py ${opts} 2022100612-2022100912 13L HISTORY ${confopts} # Julia +#./run_hafs.py ${opts} 2022101118-2022101506 14L HISTORY ${confopts} # Karl +#./run_hafs.py ${opts} 2022103018-2022110506 15L HISTORY ${confopts} # Lisa +#./run_hafs.py ${opts} 2022110106-2022110312 16L HISTORY ${confopts} # Martin +#./run_hafs.py ${opts} 2022110706-2022111100 17L HISTORY ${confopts} # Nicole + +#=============================================================================== + # 2023 EPAC storms +#./run_hafs.py ${opts} 2023062718-2023070212 01E HISTORY ${confopts} # Adrian +#./run_hafs.py ${opts} 2023062900-2023070112 02E HISTORY ${confopts} # Beatriz +#./run_hafs.py ${opts} 2023071118-2023071912 03E HISTORY ${confopts} # Calvin +#./run_hafs.py ${opts} 2023072106-2023072206 04E HISTORY ${confopts} # Four +#./run_hafs.py ${opts} 2023073118-2023081300 05E HISTORY ${confopts} # Dora +#./run_hafs.py ${opts} 2023080512-2023080712 06E HISTORY ${confopts} # Eugene +#./run_hafs.py ${opts} 2023081218-2023081706 07E HISTORY ${confopts} # Fernanda +#./run_hafs.py ${opts} 2023081400-2023081718 08E HISTORY ${confopts} # Greg +#./run_hafs.py ${opts} 2023081612-2023082018 09E HISTORY ${confopts} # Hilary +#./run_hafs.py ${opts} 2023082700-2023082912 10E HISTORY ${confopts} # Irwin +#./run_hafs.py ${opts} 2023090418-2023091018 11E HISTORY ${confopts} # Jova +#./run_hafs.py ${opts} 2023091518-2023091618 12E HISTORY ${confopts} # Twelve +#./run_hafs.py ${opts} 2023091912-2023092212 13E HISTORY ${confopts} # Kenneth +#./run_hafs.py ${opts} 2023092318-2023092418 14E HISTORY ${confopts} # Fourteen +#./run_hafs.py ${opts} 2023100306-2023101100 15E HISTORY ${confopts} # Lidia +#./run_hafs.py ${opts} 2023100800-2023101000 16E HISTORY ${confopts} # Max +#./run_hafs.py ${opts} 2023101718-2023102306 17E HISTORY ${confopts} # Norma +#./run_hafs.py ${opts} 2023102212-2023102512 18E HISTORY ${confopts} # Otis +#./run_hafs.py ${opts} 2023102818-2023110600 19E HISTORY ${confopts} # Pilar +#./run_hafs.py ${opts} 2023112312-2023112612 20E HISTORY ${confopts} # Ramon + + # 2022 EPAC storms +#./run_hafs.py ${opts} 2022052800-2022053106 01E HISTORY ${confopts} # Agatha +#./run_hafs.py ${opts} 2022061412-2022062012 02E HISTORY ${confopts} # Blas +#./run_hafs.py ${opts} 2022061618-2022062812 03E HISTORY ${confopts} # Celia +#./run_hafs.py ${opts} 2022071212-2022071912 04E HISTORY ${confopts} # Bonnie +#./run_hafs.py ${opts} 2022070918-2022071618 05E HISTORY ${confopts} # Darby +#./run_hafs.py ${opts} 2022071512-2022072112 06E HISTORY ${confopts} # Estelle +#./run_hafs.py ${opts} 2022072606-2022080212 07E HISTORY ${confopts} # Frank +#./run_hafs.py ${opts} 2022072712-2022080318 08E HISTORY ${confopts} # Georgette +#./run_hafs.py ${opts} 2022080612-2022081018 09E HISTORY ${confopts} # Howard +#./run_hafs.py ${opts} 2022081318-2022081618 10E HISTORY ${confopts} # Ivette p1 +#./run_hafs.py ${opts} 2022082012-2022082100 10E HISTORY ${confopts} # Ivette p2 +#./run_hafs.py ${opts} 2022082112-2022082118 10E HISTORY ${confopts} # Ivette p3 +#./run_hafs.py ${opts} 2022090118-2022090400 11E HISTORY ${confopts} # Javier +#./run_hafs.py ${opts} 2022090412-2022090918 12E HISTORY ${confopts} # Kay +#./run_hafs.py ${opts} 2022091518-2022091712 13E HISTORY ${confopts} # Lester +#./run_hafs.py ${opts} 2022091718-2022092012 14E HISTORY ${confopts} # Madeline +#./run_hafs.py ${opts} 2022092118-2022092518 15E HISTORY ${confopts} # Newton p1 +#./run_hafs.py ${opts} 2022092718-2022092818 15E HISTORY ${confopts} # Newton p2 +#./run_hafs.py ${opts} 2022092900-2022100318 16E HISTORY ${confopts} # Orlene +#./run_hafs.py ${opts} 2022100318-2022100512 17E HISTORY ${confopts} # Paine +#./run_hafs.py ${opts} 2022100918-2022101012 18E HISTORY ${confopts} # Julia +#./run_hafs.py ${opts} 2022102000-2022102318 19E HISTORY ${confopts} # Roslyn + +#=============================================================================== + +date + +echo 'cronjob done' From e07bf41e96d6e9867573e8d388999a870fbf03bf Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Sun, 14 Jul 2024 17:52:43 +0000 Subject: [PATCH 20/52] Update the 3DIAU analysis increment file naming convention. --- scripts/exhafs_forecast.sh | 10 +++------- scripts/exhafs_merge.sh | 9 +++++---- sorc/hafs_tools.fd/sorc/hafs_datool/sub_hafs_diff.f90 | 6 +++--- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/scripts/exhafs_forecast.sh b/scripts/exhafs_forecast.sh index 72c59fbd4..d9f368ae9 100755 --- a/scripts/exhafs_forecast.sh +++ b/scripts/exhafs_forecast.sh @@ -1085,12 +1085,6 @@ if [ ! ${FORECAST_RESTART} = YES ] && [ ${warmstart_from_restart} = yes ]; then done fi -# Linking increment files for IAU -if [ ${RUN_INIT:-NO} = NO ] && [ ${iau_regional:-.false.} = ".true." ] ; then - echo "Xu $PWD" - ${RLN} ${RESTARTinp}/diff* ./ -fi - if [ ${FORECAST_RESTART} = YES ] && [[ ${FORECAST_RESTART_HR} -gt 0 ]]; then RESTARTymdh=$(${NDATE} +${FORECAST_RESTART_HR} ${CDATE}) RESTARTymd=$(echo ${RESTARTymdh} | cut -c1-8) @@ -1295,7 +1289,9 @@ for n in $(seq 2 ${nest_grids}); do do_deep_nml=$( echo ${do_deep} | cut -d , -f ${n} ) blocksize=$(( ${npy_nml}/${layouty_nml} )) if [ ${RUN_INIT:-NO} = NO ] && [ ${iau_regional:-.false.} = ".true." ] ; then - iau_inc_files="diff06_nest0${inest}" + iau_inc_files="analysis_inc_nest0${inest}.nc" + # Linking increment file + ${NLN} ${RESTARTinp}/analysis_inc_nest0${inest}.nc INPUT/ fi atparse < input_nest.nml.tmp > input_nest0${inest}.nml done diff --git a/scripts/exhafs_merge.sh b/scripts/exhafs_merge.sh index d48a4a160..a3b40c1e5 100755 --- a/scripts/exhafs_merge.sh +++ b/scripts/exhafs_merge.sh @@ -241,13 +241,14 @@ for var in fv_core.res fv_tracer.res fv_srf_wnd.res sfc_data; do export err=$?; err_chk done -# Step 4: Increments for IAU +# Step 4: Calculate d02 increments for IAU if [ ${iau_regional:-.false.} = ".true." ]; then ${APRUNC} ${DATOOL} hafs_diff \ --in_dir=${RESTARTanl} --in_dir2=${RESTARTmrg} \ - --infile_date=${ymd}.${hh}0000 --out_file="diff06" \ - --nestdoms=$((${nest_grids:-1}-1)) --vi_cloud=${vi_cloud} - ${NCP} ./diff* ${RESTARTmrg}/ + --infile_date=${ymd}.${hh}0000 --out_file="analysis_inc" \ + --nestdoms=$((${nest_grids:-1}-1)) --vi_cloud=${vi_cloud} 2>&1 | tee ./analysis_diff.log + export err=$?; err_chk + ${NCP} -rp ./analysis_inc_nest02.nc ${RESTARTmrg}/ fi else diff --git a/sorc/hafs_tools.fd/sorc/hafs_datool/sub_hafs_diff.f90 b/sorc/hafs_tools.fd/sorc/hafs_datool/sub_hafs_diff.f90 index b2df64552..b4a35db77 100644 --- a/sorc/hafs_tools.fd/sorc/hafs_datool/sub_hafs_diff.f90 +++ b/sorc/hafs_tools.fd/sorc/hafs_datool/sub_hafs_diff.f90 @@ -194,12 +194,12 @@ subroutine hafs_diff(in_dir,in_dir2,in_date,out_file,nestdoms,vi_cloud) ! 6 --- dst files if ( nd == 1 ) then - fl_out=trim(out_file) !current domain rot-ll file + fl_out=trim(out_file)//'.nc' !current domain rot-ll file else if ( nd == 2 ) then - fl_out=trim(out_file)//'_'//trim(nestfl) + fl_out=trim(out_file)//'_'//trim(nestfl)//'.nc' else write(tempfl,'(a4,i2.2)')'nest',nd-1 - fl_out=trim(out_file)//'_'//trim(nestfl) + fl_out=trim(out_file)//'_'//trim(nestfl)//'.nc' endif if ( my_proc_id == io_proc ) then From 707d2e3401d338e09f031521b3bc82425385bd2d Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Sun, 14 Jul 2024 23:30:52 +0000 Subject: [PATCH 21/52] Update the approach to calculate the analysis increments for 3DIAU and also set the moving nest d02 increments along the domain boundaries (within 10 grid points) as zeros. (From @XuLu-NOAA and @BinLiu-NOAA) --- scripts/exhafs_merge.sh | 19 ++++++++----------- .../sorc/hafs_datool/sub_hafs_diff.f90 | 7 +++++++ 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/scripts/exhafs_merge.sh b/scripts/exhafs_merge.sh index a3b40c1e5..eec0b5817 100755 --- a/scripts/exhafs_merge.sh +++ b/scripts/exhafs_merge.sh @@ -29,12 +29,6 @@ if [ "${ENSDA}" = YES ]; then echo "FATAL ERROR: RESTARTsrc does not exist" exit 1 fi - RESTARTanl=${RESTARTsrc} - if [ ${iau_regional:-.false.} = ".true." ] ; then - RESTARTsrc=${WORKhafs}/intercom/RESTART_vi_fgat06_ens/mem${ENSID} - echo "FATAL ERROR: Currently IAU does not support ensemble" - exit 1 - fi RESTARTdst=${WORKhafs}/intercom/RESTART_init_ens/mem${ENSID} RESTARTmrg=${WORKhafs}/intercom/RESTART_analysis_merge_ens/mem${ENSID} else @@ -46,10 +40,6 @@ else echo "FATAL ERROR: RESTARTsrc does not exist" exit 1 fi - RESTARTanl=${RESTARTsrc} - if [ ${iau_regional:-.false.} = ".true." ] ; then - RESTARTsrc=${WORKhafs}/intercom/RESTART_vi_fgat06 - fi RESTARTdst=${WORKhafs}/intercom/RESTART_init RESTARTmrg=${WORKhafs}/intercom/RESTART_analysis_merge fi @@ -243,12 +233,19 @@ done # Step 4: Calculate d02 increments for IAU if [ ${iau_regional:-.false.} = ".true." ]; then + RESTARTbkg=${WORKhafs}/intercom/RESTART_vi ${APRUNC} ${DATOOL} hafs_diff \ - --in_dir=${RESTARTanl} --in_dir2=${RESTARTmrg} \ + --in_dir=${RESTARTmrg} --in_dir2=${RESTARTbkg} \ --infile_date=${ymd}.${hh}0000 --out_file="analysis_inc" \ --nestdoms=$((${nest_grids:-1}-1)) --vi_cloud=${vi_cloud} 2>&1 | tee ./analysis_diff.log export err=$?; err_chk ${NCP} -rp ./analysis_inc_nest02.nc ${RESTARTmrg}/ + # Replace d02 restart files + for var in fv_core.res fv_tracer.res fv_srf_wnd.res sfc_data; do + in_file=${RESTARTbkg}/${ymd}.${hh}0000.${var}.nest02.tile2.nc + out_file=${RESTARTmrg}/${ymd}.${hh}0000.${var}.nest02.tile2.nc + ${NCP} -rp ${in_file} ${out_file} + done fi else diff --git a/sorc/hafs_tools.fd/sorc/hafs_datool/sub_hafs_diff.f90 b/sorc/hafs_tools.fd/sorc/hafs_datool/sub_hafs_diff.f90 index b4a35db77..935698c11 100644 --- a/sorc/hafs_tools.fd/sorc/hafs_datool/sub_hafs_diff.f90 +++ b/sorc/hafs_tools.fd/sorc/hafs_datool/sub_hafs_diff.f90 @@ -603,6 +603,7 @@ subroutine hafs_diff(in_dir,in_dir2,in_date,out_file,nestdoms,vi_cloud) ! write(filename,*) 'dat_',trim(varname_long),'.txt' ! open (111,file=trim(filename),form='formatted',status='unknown') ! write(111,*)dat42(:,:,1,1) + dat42(1:10,:,:,1)=0.; dat42(:,1:10,:,1)=0.; dat42(ix-10:ix,:,:,1)=0.; dat42(:,iy-10:iy,:,1)=0. call write_nc_real(trim(fl_out), trim(varname_long), nx, ny, kz, -1, 'nx', 'ny', trim(nzc), '-', dat42, trim(units), trim(varname_long)) ! close(111) deallocate(dat42, dat43) @@ -647,6 +648,7 @@ subroutine hafs_diff(in_dir,in_dir2,in_date,out_file,nestdoms,vi_cloud) enddo !write(*,'(a,3i5,100f12.3)')'===w34 ', nx, ny, kz, (dat43(10,10,k,1),k=kz,1,-1) !write(flid_out) (((dat43(i,j,k,1),i=1,nx),j=1,ny),k=kz,1,-1) + dat43(1:10,:,:,1)=0.; dat43(:,1:10,:,1)=0.; dat43(ix-10:ix,:,:,1)=0.; dat43(:,iy-10:iy,:,1)=0. call write_nc_real(trim(fl_out), trim(varname_long), nx, ny, kz, -1, 'nx', 'ny', trim(nzc), '-', dat43, trim(units), trim(varname_long)) deallocate(dat43) endif !if ( my_proc_id == io_proc ) then @@ -663,6 +665,8 @@ subroutine hafs_diff(in_dir,in_dir2,in_date,out_file,nestdoms,vi_cloud) u(:,:,k,1)=(dat2 (:,1:iy)+dat2 (:,2:iy+1))/2.0 v(:,:,k,1)=(dat21(1:ix,:)+dat21(2:ix+1,:))/2.0 end do + u(1:10,:,:,1)=0.; u(:,1:10,:,1)=0.; u(ix-10:ix,:,:,1)=0.; u(:,iy-10:iy,:,1)=0. + v(1:10,:,:,1)=0.; v(:,1:10,:,1)=0.; v(ix-10:ix,:,:,1)=0.; v(:,iy-10:iy,:,1)=0. call write_nc_real(trim(fl_out), 'u_inc', nx, ny, kz, -1, 'nx', 'ny', trim(nzc), '-', u, 'm/s', 'u-component') call write_nc_real(trim(fl_out), 'v_inc', nx, ny, kz, -1, 'nx', 'ny', trim(nzc), '-', v, 'm/s', 'u-component') deallocate(dat4u,dat4v,dat2,dat21,dat43u,dat43v,cangu,sangu,cangv,sangv,u,v) @@ -716,6 +720,8 @@ subroutine hafs_diff(in_dir,in_dir2,in_date,out_file,nestdoms,vi_cloud) u(:,:,k,1)=(dat2 (:,1:iy)+dat2 (:,2:iy+1))/2.0 v(:,:,k,1)=(dat21(1:ix,:)+dat21(2:ix+1,:))/2.0 end do + u(1:10,:,:,1)=0.; u(:,1:10,:,1)=0.; u(ix-10:ix,:,:,1)=0.; u(:,iy-10:iy,:,1)=0. + v(1:10,:,:,1)=0.; v(:,1:10,:,1)=0.; v(ix-10:ix,:,:,1)=0.; v(:,iy-10:iy,:,1)=0. call write_nc_real(trim(fl_out), 'u_inc', nx, ny, kz, -1, 'nx', 'ny', trim(nzc), '-', u, 'm/s', 'u-component') call write_nc_real(trim(fl_out), 'v_inc', nx, ny, kz, -1, 'nx', 'ny', trim(nzc), '-', v, 'm/s', 'u-component') deallocate(dat43u,dat43v) @@ -732,6 +738,7 @@ subroutine hafs_diff(in_dir,in_dir2,in_date,out_file,nestdoms,vi_cloud) do k = 1, kz dat41(:,:,k,1)=dat42(:,:,kz-k+1,1) enddo + dat41(1:10,:,:,1)=0.; dat41(:,1:10,:,1)=0.; dat41(ix-10:ix,:,:,1)=0.; dat41(:,iy-10:iy,:,1)=0. else dat41=-999999. endif From 441ac3ddd76d8ecb53eb5ca03c49d42f200beed5 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Mon, 15 Jul 2024 21:40:45 +0000 Subject: [PATCH 22/52] Update submodule sorc/hafs_forecast.fd, reverting the TTE-based EDMF PBL changes. --- sorc/hafs_forecast.fd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/hafs_forecast.fd b/sorc/hafs_forecast.fd index cbda17fe5..97947bdc7 160000 --- a/sorc/hafs_forecast.fd +++ b/sorc/hafs_forecast.fd @@ -1 +1 @@ -Subproject commit cbda17fe5818d1a2dab3c5c83d00f1c42112039b +Subproject commit 97947bdc7c56b9e1bd3be314b88d318f1e61f88e From 745ae9131def28020a55f794bcb6b1deea88f5e8 Mon Sep 17 00:00:00 2001 From: Biju Thomas Date: Tue, 16 Jul 2024 08:38:31 -0500 Subject: [PATCH 23/52] Update modulefiles and pointing correct modulefile names for GSI on RDHPCS --- jobs/JHAFS_ANALYSIS | 7 +------ sorc/hafs_gsi.fd | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/jobs/JHAFS_ANALYSIS b/jobs/JHAFS_ANALYSIS index 3c69a7459..dc04effe6 100755 --- a/jobs/JHAFS_ANALYSIS +++ b/jobs/JHAFS_ANALYSIS @@ -40,16 +40,11 @@ if [ "${RUN_ENVIR^^}" != "NCO" ]; then module load cray-pals/1.2.2 module load cfp/2.0.4 fi - if [ ${machine} = "hera" ]; then + if [[ ${machine} = "jet" ]] || [[ ${machine} = "orion" ]] || [[ ${machine} = "hercules" ]] || [[ ${machine} = "hera" ]]; then module purge module use $HOMEhafs/sorc/hafs_gsi.fd/modulefiles module load gsi_${machine}.intel fi - if [[ ${machine} = "jet" ]] || [[ ${machine} = "orion" ]] || [[ ${machine} = "hercules" ]]; then - module purge - module use $HOMEhafs/sorc/hafs_gsi.fd/modulefiles - module load gsi_${machine} - fi module list else # Run by NCO on WCOSS2 diff --git a/sorc/hafs_gsi.fd b/sorc/hafs_gsi.fd index 7a56a8f69..6f2aedb1c 160000 --- a/sorc/hafs_gsi.fd +++ b/sorc/hafs_gsi.fd @@ -1 +1 @@ -Subproject commit 7a56a8f69f1dcc9aebe9b8e57dcd3280c015249a +Subproject commit 6f2aedb1c46a5e9f9423dcd1fbe4f606434be6c3 From ab36beadb8ba18cdac827ef4d57c2615f37d846f Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Tue, 16 Jul 2024 17:39:21 +0000 Subject: [PATCH 24/52] Update submodule sorc/hafs_forecast.fd. --- sorc/hafs_forecast.fd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/hafs_forecast.fd b/sorc/hafs_forecast.fd index 97947bdc7..6aefd17d2 160000 --- a/sorc/hafs_forecast.fd +++ b/sorc/hafs_forecast.fd @@ -1 +1 @@ -Subproject commit 97947bdc7c56b9e1bd3be314b88d318f1e61f88e +Subproject commit 6aefd17d23a6832466bd3f906e97e3f77230682a From dd1c5390fd7135eac1a08f098edc4baa48f4e8c5 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Wed, 17 Jul 2024 17:54:21 +0000 Subject: [PATCH 25/52] Update parm/hafs.v2.0.1b.conf. --- parm/hafs.v2.0.1b.conf | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/parm/hafs.v2.0.1b.conf b/parm/hafs.v2.0.1b.conf index 02626e4cd..c20295b88 100644 --- a/parm/hafs.v2.0.1b.conf +++ b/parm/hafs.v2.0.1b.conf @@ -39,7 +39,6 @@ ccpp_suite_glob_init=FV3_HAFS_v1_thompson_tiedtke ccpp_suite_nest_init=FV3_HAFS_v1_thompson_tiedtke [vi] -vi_warm_start_vmax_threshold=20 vi_slp_adjust=1 [forecast] @@ -62,12 +61,11 @@ n_split=4,8 layoutx=30,20 layouty=20,18 -iau_regional=.true. imfshalcnv=4 imfdeepcnv=4 -lim_fac=2.6,2.6 -rlmx=300.,60. -elmx=300.,60. +lim_fac=2.8,2.8 +rlmx=300.,75. +elmx=300.,75. sfc_rlm=0,0 tc_pbl=1,1 fhswr=720. From 1625167cfccf1d4f7c60b5ea9b9f64144c4fbaa7 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Wed, 17 Jul 2024 18:11:50 +0000 Subject: [PATCH 26/52] Update submodule sorc/hafs_graphics.fd/emc_graphics. --- .gitmodules | 2 +- sorc/hafs_graphics.fd/emc_graphics | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index bce9cbf06..673bb6ef3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -21,4 +21,4 @@ [submodule "hafs_graphics"] path = sorc/hafs_graphics.fd/emc_graphics url = https://github.com/hafs-community/hafs_graphics.git - branch = support/HAFS + branch = feature/hafs.v2.0.1 diff --git a/sorc/hafs_graphics.fd/emc_graphics b/sorc/hafs_graphics.fd/emc_graphics index 7db736c07..885ff9c57 160000 --- a/sorc/hafs_graphics.fd/emc_graphics +++ b/sorc/hafs_graphics.fd/emc_graphics @@ -1 +1 @@ -Subproject commit 7db736c07636807ea2a98c7170d29f94069d20f7 +Subproject commit 885ff9c57a58995f796c3690969f4e2c472b1bf3 From baf71b931783106bbcacb8182c3ad59117709ad6 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Thu, 18 Jul 2024 01:10:44 +0000 Subject: [PATCH 27/52] Update parm/mom6/regional_hafs.v2.0.1b/hafs_mom6.input.IN with changes from Hyun-Sook Kim (AOML). --- .../regional_hafs.v2.0.1b/hafs_mom6.input.IN | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6.input.IN b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6.input.IN index fc4f26c8b..5d05e800e 100644 --- a/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6.input.IN +++ b/parm/mom6/regional_hafs.v2.0.1b/hafs_mom6.input.IN @@ -60,7 +60,7 @@ THERMO_SPANS_COUPLING = True ! [Boolean] default = False ! longer than the coupling timestep. The actual thermodynamic timestep that is ! used in this case is the largest integer multiple of the coupling timestep ! that is less than or equal to DT_THERM. -USE_PSURF_IN_EOS = False ! [Boolean] default = False +USE_PSURF_IN_EOS = True ! [Boolean] default = False ! If true, always include the surface pressure contributions in equation of ! state calculations. FRAZIL = True ! [Boolean] default = False @@ -689,7 +689,7 @@ MLE_MLD_DECAY_TIME = 2.592E+06 ! [s] default = 0.0 ENERGETICS_SFC_PBL = True ! [Boolean] default = False ! If true, use an implied energetics planetary boundary layer scheme to ! determine the diffusivity and viscosity in the surface boundary layer. -EPBL_IS_ADDITIVE = True ! [Boolean] default = True +EPBL_IS_ADDITIVE = False ! [Boolean] default = True ! If true, the diffusivity from ePBL is added to all other diffusivities. ! Otherwise, the larger of kappa-shear and ePBL diffusivities are used. @@ -813,20 +813,20 @@ EPBL_VEL_SCALE_FACTOR = 0.5 ! [nondim] default = 1.0 ! === module MOM_CVMix_KPP === ! This is the MOM wrapper to CVMix:KPP ! See http://cvmix.github.io/ -USE_KPP = True ! [Boolean] default = False +USE_KPP = False ! [Boolean] default = False ! If true, turns on the [CVMix] KPP scheme of Large et al., 1994, to calculate ! diffusivities and non-local transport in the OBL. -KPP% -RI_CRIT = 0.20 ! [nondim] default = 0.3 - ! Critical bulk Richardson number used to define depth of the surface Ocean - ! Boundary Layer (OBL). -USE_KPP_LT_K = False ! [Boolean] default = False - ! Flag for Langmuir turbulence enhancement of turbulentmixing coefficient. -STOKES_MIXING = False ! [Boolean] default = False - ! Flag for Langmuir turbulence enhancement of turbulentmixing coefficient. -USE_KPP_LT_VT2 = False ! [Boolean] default = False - ! Flag for Langmuir turbulence enhancement of Vt2in Bulk Richardson Number. -%KPP +!KPP% +!RI_CRIT = 0.20 ! [nondim] default = 0.3 +! ! Critical bulk Richardson number used to define depth of the surface Ocean +! ! Boundary Layer (OBL). +!USE_KPP_LT_K = False ! [Boolean] default = False +! ! Flag for Langmuir turbulence enhancement of turbulentmixing coefficient. +!STOKES_MIXING = False ! [Boolean] default = False +! ! Flag for Langmuir turbulence enhancement of turbulentmixing coefficient. +!USE_KPP_LT_VT2 = False ! [Boolean] default = False +! ! Flag for Langmuir turbulence enhancement of Vt2in Bulk Richardson Number. +!%KPP ! === module MOM_regularize_layers === From 049ca8a024de4b4dbd547b8680bca152bfdce40d Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Thu, 18 Jul 2024 20:08:09 +0000 Subject: [PATCH 28/52] Set pass_full_omega_to_physics_in_non_hydrostatic_mode=.false. Update parm/hafs.v2.0.1a.conf with lim_fac=2.7 --- parm/forecast/globnest/input.nml.tmp | 2 +- parm/forecast/globnest/input_nest.nml.tmp | 2 +- parm/forecast/regional/input.nml.tmp | 2 +- parm/forecast/regional/input_nest.nml.tmp | 2 +- parm/hafs.v2.0.1a.conf | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/parm/forecast/globnest/input.nml.tmp b/parm/forecast/globnest/input.nml.tmp index 1a26a3657..cbf1a2d3d 100644 --- a/parm/forecast/globnest/input.nml.tmp +++ b/parm/forecast/globnest/input.nml.tmp @@ -125,7 +125,7 @@ full_zs_filter = @[full_zs_filter_nml] n_zs_filter = @[n_zs_filter_nml] nord_zs_filter = 4 - pass_full_omega_to_physics_in_non_hydrostatic_mode = .true. + pass_full_omega_to_physics_in_non_hydrostatic_mode = .false. / &fv_nest_nml diff --git a/parm/forecast/globnest/input_nest.nml.tmp b/parm/forecast/globnest/input_nest.nml.tmp index 720e80fe4..a633b5b94 100644 --- a/parm/forecast/globnest/input_nest.nml.tmp +++ b/parm/forecast/globnest/input_nest.nml.tmp @@ -124,7 +124,7 @@ full_zs_filter = @[full_zs_filter_nml] n_zs_filter = @[n_zs_filter_nml] nord_zs_filter = 4 - pass_full_omega_to_physics_in_non_hydrostatic_mode = .true. + pass_full_omega_to_physics_in_non_hydrostatic_mode = .false. / &surf_map_nml diff --git a/parm/forecast/regional/input.nml.tmp b/parm/forecast/regional/input.nml.tmp index 1025cd17b..5b53fd0bc 100644 --- a/parm/forecast/regional/input.nml.tmp +++ b/parm/forecast/regional/input.nml.tmp @@ -129,7 +129,7 @@ full_zs_filter = @[full_zs_filter_nml] n_zs_filter = @[n_zs_filter_nml] nord_zs_filter = 4 - pass_full_omega_to_physics_in_non_hydrostatic_mode = .true. + pass_full_omega_to_physics_in_non_hydrostatic_mode = .false. / &fv_nest_nml diff --git a/parm/forecast/regional/input_nest.nml.tmp b/parm/forecast/regional/input_nest.nml.tmp index c02ac8f5b..8e28461f5 100644 --- a/parm/forecast/regional/input_nest.nml.tmp +++ b/parm/forecast/regional/input_nest.nml.tmp @@ -124,7 +124,7 @@ full_zs_filter = @[full_zs_filter_nml] n_zs_filter = @[n_zs_filter_nml] nord_zs_filter = 4 - pass_full_omega_to_physics_in_non_hydrostatic_mode = .true. + pass_full_omega_to_physics_in_non_hydrostatic_mode = .false. / &surf_map_nml diff --git a/parm/hafs.v2.0.1a.conf b/parm/hafs.v2.0.1a.conf index dbdee611c..7aea79601 100644 --- a/parm/hafs.v2.0.1a.conf +++ b/parm/hafs.v2.0.1a.conf @@ -23,7 +23,7 @@ layouty=20,18 cpl_wav_ocn=cmeps_2way ; Currently no impact, default is two-way wave-ocean coupling when ww3 and mom6 are both active. iau_regional=.true. -lim_fac=3.0,3.0 +lim_fac=2.7,2.7 progsigma=.true. iovr=5 From f1058e1b611795ea9dc66fb66a75d2675bb1c91a Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Fri, 19 Jul 2024 00:51:31 +0000 Subject: [PATCH 29/52] Update scripts/exhafs_merge.sh to save RESTART_analysis_merge in COMhafs. --- scripts/exhafs_merge.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scripts/exhafs_merge.sh b/scripts/exhafs_merge.sh index eec0b5817..6588884c9 100755 --- a/scripts/exhafs_merge.sh +++ b/scripts/exhafs_merge.sh @@ -14,6 +14,7 @@ FGAT_HR=${FGAT_HR:-00} MPISERIAL=${MPISERIAL:-${EXEChafs}/hafs_tools_mpiserial.x} DATOOL=${DATOOL:-${EXEChafs}/hafs_tools_datool.x} +SENDCOM=${SENDCOM:-YES} # Merge analysis or init if [ ${MERGE_TYPE} = analysis ]; then @@ -31,6 +32,7 @@ if [ "${ENSDA}" = YES ]; then fi RESTARTdst=${WORKhafs}/intercom/RESTART_init_ens/mem${ENSID} RESTARTmrg=${WORKhafs}/intercom/RESTART_analysis_merge_ens/mem${ENSID} + RESTARTcom=${COMhafs}/${out_prefix}.RESTART_analysis_merge_ens/mem${ENSID} else if [ -e ${WORKhafs}/intercom/RESTART_analysis ]; then RESTARTsrc=${WORKhafs}/intercom/RESTART_analysis @@ -42,6 +44,7 @@ else fi RESTARTdst=${WORKhafs}/intercom/RESTART_init RESTARTmrg=${WORKhafs}/intercom/RESTART_analysis_merge + RESTARTcom=${COMhafs}/${out_prefix}.RESTART_analysis_merge fi elif [ ${MERGE_TYPE} = init ]; then @@ -248,6 +251,11 @@ if [ ${iau_regional:-.false.} = ".true." ]; then done fi +if [ ${MERGE_TYPE} = analysis ] && [ $SENDCOM = YES ] ; then + mkdir -p ${RESTARTcom} + ${NCP} -rp ${RESTARTmrg}/* ${RESTARTcom}/ +fi + else echo "FATAL ERROR: only support nest_grids = 1 or 2" echo "FATAL ERROR: nest_grids = $nest_grids" From 284acf24fbc7f029d93532e3881bbac98fb8a7e0 Mon Sep 17 00:00:00 2001 From: "Maria.Aristizabal" Date: Fri, 26 Jul 2024 14:46:15 +0000 Subject: [PATCH 30/52] Update the name of the cross section ocean figures in exhafs_emcgraphics.sh --- scripts/exhafs_emcgraphics.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/exhafs_emcgraphics.sh b/scripts/exhafs_emcgraphics.sh index 755a704dd..6d7c4a4f4 100755 --- a/scripts/exhafs_emcgraphics.sh +++ b/scripts/exhafs_emcgraphics.sh @@ -509,8 +509,9 @@ figScriptAll=( \ plot_storm_wvelz40m.py \ plot_storm_wvelz70m.py \ plot_storm_wvelz100m.py \ - plot_storm_forec_track_tran_temp.py \ - plot_storm_lat_tran_temp.py \ + plot_storm_crs_sn_temp.py \ + plot_storm_crs_trk_temp.py \ + plot_storm_crs_we_temp.py \ ) nscripts=${#figScriptAll[*]} From 91cb1541ac73db068971570c96133d7bdc407e5b Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Fri, 26 Jul 2024 14:59:47 +0000 Subject: [PATCH 31/52] Update scripts/exhafs_merge.sh to also save merged domain 2 analysis in intercom and com when IAU is turned on. --- scripts/exhafs_merge.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/exhafs_merge.sh b/scripts/exhafs_merge.sh index 6588884c9..831ba244b 100755 --- a/scripts/exhafs_merge.sh +++ b/scripts/exhafs_merge.sh @@ -247,6 +247,8 @@ if [ ${iau_regional:-.false.} = ".true." ]; then for var in fv_core.res fv_tracer.res fv_srf_wnd.res sfc_data; do in_file=${RESTARTbkg}/${ymd}.${hh}0000.${var}.nest02.tile2.nc out_file=${RESTARTmrg}/${ymd}.${hh}0000.${var}.nest02.tile2.nc + mrg_file=${RESTARTmrg}/${ymd}.${hh}0000.${var}.nest02.tile2.merge.nc + ${NCP} -rp ${out_file} ${mrg_file} ${NCP} -rp ${in_file} ${out_file} done fi From d53d0e9ba71404bc6ffba9e00bf4f916bdb56ab1 Mon Sep 17 00:00:00 2001 From: JungHoon Shin Date: Mon, 29 Jul 2024 16:49:39 +0000 Subject: [PATCH 32/52] Updating the submodule for sorc/hafs_forecast.fd: Increasing the absolute value of entrainment/detrainment coefficients. Simply changed 1.75e-3 to 2.50e-3 in line 2303 (entrainment part) and -1.75e-3 to -2.50e-3 in line 2179 (detrainment part) of the code --- sorc/hafs_forecast.fd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/hafs_forecast.fd b/sorc/hafs_forecast.fd index 6aefd17d2..45e3c4a8f 160000 --- a/sorc/hafs_forecast.fd +++ b/sorc/hafs_forecast.fd @@ -1 +1 @@ -Subproject commit 6aefd17d23a6832466bd3f906e97e3f77230682a +Subproject commit 45e3c4a8fd7af6831e7633ee4a20c37cd95e4c85 From 6ed67cacedeb6f8109f3e7b5f1a854acd6149144 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Thu, 1 Aug 2024 14:19:53 +0000 Subject: [PATCH 33/52] Update and finalize parm/hafs.v2.0.1b.conf for the HAFSv2.0.1B real-time parallel experiment. --- parm/hafs.v2.0.1b.conf | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/parm/hafs.v2.0.1b.conf b/parm/hafs.v2.0.1b.conf index c20295b88..e7e2b6410 100644 --- a/parm/hafs.v2.0.1b.conf +++ b/parm/hafs.v2.0.1b.conf @@ -61,11 +61,13 @@ n_split=4,8 layoutx=30,20 layouty=20,18 +iau_regional=.true. + imfshalcnv=4 imfdeepcnv=4 -lim_fac=2.8,2.8 -rlmx=300.,75. -elmx=300.,75. +lim_fac=2.6,2.6 +rlmx=300.,60. +elmx=300.,60. sfc_rlm=0,0 tc_pbl=1,1 fhswr=720. From 24a08e153af7118da01989dac0f011a4cb35213a Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Thu, 1 Aug 2024 19:51:53 +0000 Subject: [PATCH 34/52] Finalizing HAFSv2.0.1A configuration. *Update parm/hafs.v2.0.1a.conf to use lim_fac of 3.0 *Use MOM6 ePBL OM4 option --- parm/hafs.v2.0.1a.conf | 2 +- parm/mom6/regional_hafs.v2.0.1a/hafs_mom6.input.IN | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/parm/hafs.v2.0.1a.conf b/parm/hafs.v2.0.1a.conf index 7aea79601..dbdee611c 100644 --- a/parm/hafs.v2.0.1a.conf +++ b/parm/hafs.v2.0.1a.conf @@ -23,7 +23,7 @@ layouty=20,18 cpl_wav_ocn=cmeps_2way ; Currently no impact, default is two-way wave-ocean coupling when ww3 and mom6 are both active. iau_regional=.true. -lim_fac=2.7,2.7 +lim_fac=3.0,3.0 progsigma=.true. iovr=5 diff --git a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6.input.IN b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6.input.IN index f6f541a7c..ba599c633 100644 --- a/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6.input.IN +++ b/parm/mom6/regional_hafs.v2.0.1a/hafs_mom6.input.IN @@ -813,7 +813,7 @@ ML_OMEGA_FRAC = 0.001 ! [nondim] default = 0.0 TKE_DECAY = 0.001 ! [nondim] default = 2.5 ! TKE_DECAY relates the vertical rate of decay of the TKE available for ! mechanical entrainment to the natural Ekman depth. -EPBL_MSTAR_SCHEME = "CONSTANT" ! default = "CONSTANT" +EPBL_MSTAR_SCHEME = "OM4" ! default = "CONSTANT" ! EPBL_MSTAR_SCHEME selects the method for setting mstar. Valid values are: ! CONSTANT - Use a fixed mstar given by MSTAR ! OM4 - Use L_Ekman/L_Obukhov in the sabilizing limit, as in OM4 @@ -821,11 +821,17 @@ EPBL_MSTAR_SCHEME = "CONSTANT" ! default = "CONSTANT" MSTAR_CAP = 10.0 ! [nondim] default = -1.0 ! If this value is positive, it sets the maximum value of mstar allowed in ePBL. ! (This is not used if EPBL_MSTAR_SCHEME = CONSTANT). +MSTAR2_COEF1 = 0.29 ! [nondim] default = 0.3 + ! Coefficient in computing mstar when rotation and stabilizing effects are both + ! important (used if EPBL_MSTAR_SCHEME = OM4). +MSTAR2_COEF2 = 0.152 ! [nondim] default = 0.085 + ! Coefficient in computing mstar when only rotation limits the total mixing + ! (used if EPBL_MSTAR_SCHEME = OM4) NSTAR = 0.06 ! [nondim] default = 0.2 ! The portion of the buoyant potential energy imparted by surface fluxes that is ! available to drive entrainment at the base of mixed layer when that energy is ! positive. -MSTAR_CONV_ADJ = 0.66 ! [nondim] default = 0.0 +MSTAR_CONV_ADJ = 0.667 ! [nondim] default = 0.0 ! Coefficient used for reducing mstar during convection due to reduction of ! stable density gradient. USE_MLD_ITERATION = True ! [Boolean] default = False From 223042cfca8c89876f0f6540fc429e417da6ea69 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Thu, 1 Aug 2024 21:02:18 +0000 Subject: [PATCH 35/52] Add parm/hafs.v2.0.1a_jtwc.conf for JTWC storms. --- parm/hafs.v2.0.1a_jtwc.conf | 42 +++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 parm/hafs.v2.0.1a_jtwc.conf diff --git a/parm/hafs.v2.0.1a_jtwc.conf b/parm/hafs.v2.0.1a_jtwc.conf new file mode 100644 index 000000000..aa66bda8c --- /dev/null +++ b/parm/hafs.v2.0.1a_jtwc.conf @@ -0,0 +1,42 @@ +[config] +RUN=hfsa +run_wave=no + +run_atm_init=yes +run_atm_init_fgat=no +run_atm_vi=yes +run_atm_vi_fgat=no +run_gsi=no +run_fgat=no +run_envar=no +gsi_d01=no +gsi_d02=no +run_analysis_merge=yes + +[prelaunch] +basin_overrides=no +basin_conf=none.conf +no_basin_conf=none.conf + +[dir] +PARMmom6={PARMhafs}/mom6/regional_hafs.v2.0.1a + +[vi] +vi_slp_adjust=1 + +[forecast] +all_tasks=1080 +atm_tasks=1020 +ocn_tasks=60 +wav_tasks=60 +layoutx=30,20 +layouty=20,18 + +cpl_wav_ocn=cmeps_2way ; Currently no impact, default is two-way wave-ocean coupling when ww3 and mom6 are both active. +#iau_regional=.true. +lim_fac=3.0,3.0 +progsigma=.true. +iovr=5 + +write_groups=3 +write_tasks_per_group=20 From ff93114995daa330ba4c4e61b2f7273920d70538 Mon Sep 17 00:00:00 2001 From: Biju Date: Fri, 30 Aug 2024 14:20:00 +0000 Subject: [PATCH 36/52] Changes related to /lfs5 migration on Jet --- modulefiles/hafs.jet.lua | 6 +++--- modulefiles/hafs_mom6_obc.jet.lua | 8 +++++--- parm/system.conf.jet | 22 +++++++++++----------- parm/system.conf.kjet | 22 +++++++++++----------- sorc/hafs_forecast.fd | 2 +- sorc/hafs_graphics.fd/emc_graphics | 2 +- sorc/hafs_gsi.fd | 2 +- sorc/hafs_tracker.fd | 2 +- sorc/hafs_utils.fd | 2 +- sorc/link_fix.sh | 2 +- ush/hafs/input.py | 2 +- ush/hafs_pre_job.sh.inc | 2 +- 12 files changed, 38 insertions(+), 36 deletions(-) diff --git a/modulefiles/hafs.jet.lua b/modulefiles/hafs.jet.lua index aa3b02c68..2ac067592 100644 --- a/modulefiles/hafs.jet.lua +++ b/modulefiles/hafs.jet.lua @@ -6,7 +6,7 @@ prepend_path("MODULEPATH", "/contrib/sutils/modulefiles") load("sutils") load("hpss") -prepend_path("MODULEPATH", "/mnt/lfs4/HFIP/hfv3gfs/role.epic/spack-stack/spack-stack-1.6.0/envs/unified-env-rocky8/install/modulefiles/Core") +prepend_path("MODULEPATH", "/contrib/spack-stack/spack-stack-1.6.0/envs/unified-env-rocky8/install/modulefiles/Core") stack_intel_ver=os.getenv("stack_intel_ver") or "2021.5.0" load(pathJoin("stack-intel", stack_intel_ver)) @@ -114,8 +114,8 @@ load(pathJoin("cdo", cdo_ver)) rocoto_ver=os.getenv("rocoto_ver") or "1.3.7" load("rocoto") -prepend_path("MODULEPATH", "/mnt/lfs4/HFIP/hwrfv3/local/modulefiles") -load(pathJoin("python", "wcoss2_env")) +xarray_ver=os.getenv("xarray_ver") or "2023.7.0" +load(pathJoin("py-xarray", xarray_ver)) setenv("CMAKE_C_COMPILER", "mpiicc") setenv("CMAKE_CXX_COMPILER", "mpiicpc") diff --git a/modulefiles/hafs_mom6_obc.jet.lua b/modulefiles/hafs_mom6_obc.jet.lua index 0aa32c680..b746f17b5 100644 --- a/modulefiles/hafs_mom6_obc.jet.lua +++ b/modulefiles/hafs_mom6_obc.jet.lua @@ -2,8 +2,10 @@ help([[ loads HAFS/MOM6 OBC modulefile on Jet ]]) unload("esmf") -prepend_path("MODULEPATH", "/mnt/lfs4/HFIP/hwrfv3/Maria.Aristizabal/modulefiles") -load("modulefile.OBC.run.jet") -setenv("ESMFMKFILE", "/mnt/lfs4/HFIP/hwrfv3/Maria.Aristizabal/miniconda3/envs/OBC_env/lib/esmf.mk") +unload("py-numpy") +unload("py-xarray") +prepend_path("PATH", "/lfs5/HFIP/hwrfv3/Maria.Aristizabal/miniconda3/envs/OBC_env/bin") +prepend_path("PYTHONPATH", "/lfs5/HFIP/hwrfv3/Maria.Aristizabal/miniconda3/envs/OBC_env") +setenv("ESMFMKFILE", "/lfs5/HFIP/hwrfv3/Maria.Aristizabal/miniconda3/envs/OBC_env/lib/esmf.mk") whatis("Description: HAFS/MOM6 OBC environment") diff --git a/parm/system.conf.jet b/parm/system.conf.jet index 0803da5eb..08261a795 100644 --- a/parm/system.conf.jet +++ b/parm/system.conf.jet @@ -11,36 +11,36 @@ archive=hpss:/NCEPDEV/{tape_project}/5year/{ENV[USER]}/{SUBEXPT}/{out_prefix}.ta [dir] ## Save directory. Make sure you edit this. -CDSAVE=/lfs4/HFIP/{disk_project}/{ENV[USER]} +CDSAVE=/lfs5/HFIP/{disk_project}/{ENV[USER]} ## Non-scrubbed directory for track files, etc. Make sure you edit this. -CDNOSCRUB=/lfs4/HFIP/{disk_project}/{ENV[USER]}/noscrub/hafstrak +CDNOSCRUB=/lfs5/HFIP/{disk_project}/{ENV[USER]}/noscrub/hafstrak ## Scrubbed directory for large work files. Make sure you edit this. -CDSCRUB=/lfs4/HFIP/{disk_project}/{ENV[USER]}/hafstmp +CDSCRUB=/lfs5/HFIP/{disk_project}/{ENV[USER]}/hafstmp ## Syndat directory for finding which cycles to run -syndat=/lfs4/HFIP/hwrf-data/hwrf-input/SYNDAT-PLUS +syndat=/lfs5/HFIP/hwrf-data/hwrf-input/SYNDAT-PLUS #oldcom={ENV[COMOLD]} COMOLD={oldcom} COMIN={COMhafs} COMOUT={COMhafs} COMINnhc={ENV[DCOMROOT|-/dcom]}/nhc/atcf/ncep COMINjtwc={ENV[DCOMROOT|-/dcom]}/{ENV[PDY]}/wtxtbul/storm_data -COMgfs=/lfs4/HFIP/hwrf-data/hafs-input/COMGFSv16 +COMgfs=/lfs5/HFIP/hwrf-data/hafs-input/COMGFSv16 COMINobs={COMgfs} COMINgfs={COMgfs} COMINgdas={COMgfs} COMINarch={COMgfs}/syndat -COMrtofs=/lfs4/HFIP/hwrf-data/hafs-input/COMRTOFSv2 +COMrtofs=/lfs5/HFIP/hwrf-data/hafs-input/COMRTOFSv2 COMINrtofs={COMrtofs} COMINmsg={COMINgfs} COMINhafs={COMINgfs} -DATMdir=/lfs4/HFIP/{disk_project}/{ENV[USER]}/noscrub/DATM -DOCNdir=/lfs4/HFIP/{disk_project}/{ENV[USER]}/noscrub/DOCN +DATMdir=/lfs5/HFIP/{disk_project}/{ENV[USER]}/noscrub/DATM +DOCNdir=/lfs5/HFIP/{disk_project}/{ENV[USER]}/noscrub/DOCN ## A-Deck directory for graphics -ADECKhafs=/lfs4/HFIP/hwrf-data/hwrf-input/abdeck/aid +ADECKhafs=/lfs5/HFIP/hwrf-data/hwrf-input/abdeck/aid ## B-Deck directory for graphics -BDECKhafs=/lfs4/HFIP/hwrf-data/hwrf-input/abdeck/btk +BDECKhafs=/lfs5/HFIP/hwrf-data/hwrf-input/abdeck/btk ## cartopyDataDir directory for graphics -cartopyDataDir=/mnt/lfs4/HFIP/hwrfv3/local/share/cartopy +cartopyDataDir=/mnt/lfs5/HFIP/hwrfv3/local/share/cartopy [forecast] quilting_restart=.false. diff --git a/parm/system.conf.kjet b/parm/system.conf.kjet index 81a766e83..dc358a7db 100644 --- a/parm/system.conf.kjet +++ b/parm/system.conf.kjet @@ -11,36 +11,36 @@ archive=hpss:/NCEPDEV/{tape_project}/5year/{ENV[USER]}/{SUBEXPT}/{out_prefix}.ta [dir] ## Save directory. Make sure you edit this. -CDSAVE=/lfs4/HFIP/{disk_project}/{ENV[USER]} +CDSAVE=/lfs5/HFIP/{disk_project}/{ENV[USER]} ## Non-scrubbed directory for track files, etc. Make sure you edit this. -CDNOSCRUB=/lfs4/HFIP/{disk_project}/{ENV[USER]}/noscrub/hafstrak +CDNOSCRUB=/lfs5/HFIP/{disk_project}/{ENV[USER]}/noscrub/hafstrak ## Scrubbed directory for large work files. Make sure you edit this. -CDSCRUB=/lfs4/HFIP/{disk_project}/{ENV[USER]}/hafstmp +CDSCRUB=/lfs5/HFIP/{disk_project}/{ENV[USER]}/hafstmp ## Syndat directory for finding which cycles to run -syndat=/lfs4/HFIP/hwrf-data/hwrf-input/SYNDAT-PLUS +syndat=/lfs5/HFIP/hwrf-data/hwrf-input/SYNDAT-PLUS #oldcom={ENV[COMOLD]} COMOLD={oldcom} COMIN={COMhafs} COMOUT={COMhafs} COMINnhc={ENV[DCOMROOT|-/dcom]}/nhc/atcf/ncep COMINjtwc={ENV[DCOMROOT|-/dcom]}/{ENV[PDY]}/wtxtbul/storm_data -COMgfs=/lfs4/HFIP/hwrf-data/hafs-input/COMGFSv16 +COMgfs=/lfs5/HFIP/hwrf-data/hafs-input/COMGFSv16 COMINobs={COMgfs} COMINgfs={COMgfs} COMINgdas={COMgfs} COMINarch={COMgfs}/syndat -COMrtofs=/lfs4/HFIP/hwrf-data/hafs-input/COMRTOFSv2 +COMrtofs=/lfs5/HFIP/hwrf-data/hafs-input/COMRTOFSv2 COMINrtofs={COMrtofs} COMINmsg={COMINgfs} COMINhafs={COMINgfs} -DATMdir=/lfs4/HFIP/{disk_project}/{ENV[USER]}/noscrub/DATM -DOCNdir=/lfs4/HFIP/{disk_project}/{ENV[USER]}/noscrub/DOCN +DATMdir=/lfs5/HFIP/{disk_project}/{ENV[USER]}/noscrub/DATM +DOCNdir=/lfs5/HFIP/{disk_project}/{ENV[USER]}/noscrub/DOCN ## A-Deck directory for graphics -ADECKhafs=/lfs4/HFIP/hwrf-data/hwrf-input/abdeck/aid +ADECKhafs=/lfs5/HFIP/hwrf-data/hwrf-input/abdeck/aid ## B-Deck directory for graphics -BDECKhafs=/lfs4/HFIP/hwrf-data/hwrf-input/abdeck/btk +BDECKhafs=/lfs5/HFIP/hwrf-data/hwrf-input/abdeck/btk ## cartopyDataDir directory for graphics -cartopyDataDir=/mnt/lfs4/HFIP/hwrfv3/local/share/cartopy +cartopyDataDir=/mnt/lfs5/HFIP/hwrfv3/local/share/cartopy [holdvars] WHERE_AM_I=jet diff --git a/sorc/hafs_forecast.fd b/sorc/hafs_forecast.fd index 45e3c4a8f..4cebc64f1 160000 --- a/sorc/hafs_forecast.fd +++ b/sorc/hafs_forecast.fd @@ -1 +1 @@ -Subproject commit 45e3c4a8fd7af6831e7633ee4a20c37cd95e4c85 +Subproject commit 4cebc64f1c186715c172fee8f80bef8e17255df5 diff --git a/sorc/hafs_graphics.fd/emc_graphics b/sorc/hafs_graphics.fd/emc_graphics index 885ff9c57..7fb002448 160000 --- a/sorc/hafs_graphics.fd/emc_graphics +++ b/sorc/hafs_graphics.fd/emc_graphics @@ -1 +1 @@ -Subproject commit 885ff9c57a58995f796c3690969f4e2c472b1bf3 +Subproject commit 7fb002448eec90e437e043fa2bf8e821369352dc diff --git a/sorc/hafs_gsi.fd b/sorc/hafs_gsi.fd index 6f2aedb1c..823ee3ed2 160000 --- a/sorc/hafs_gsi.fd +++ b/sorc/hafs_gsi.fd @@ -1 +1 @@ -Subproject commit 6f2aedb1c46a5e9f9423dcd1fbe4f606434be6c3 +Subproject commit 823ee3ed277de8a79ed5f5a42182cf73a4a69f28 diff --git a/sorc/hafs_tracker.fd b/sorc/hafs_tracker.fd index 781cc6ab0..88661d0d3 160000 --- a/sorc/hafs_tracker.fd +++ b/sorc/hafs_tracker.fd @@ -1 +1 @@ -Subproject commit 781cc6ab03554a5855e07c89a3fa4a9bfc0924cf +Subproject commit 88661d0d39234e30ffafb24676cd52b4c77a800d diff --git a/sorc/hafs_utils.fd b/sorc/hafs_utils.fd index d6673683a..17975f70a 160000 --- a/sorc/hafs_utils.fd +++ b/sorc/hafs_utils.fd @@ -1 +1 @@ -Subproject commit d6673683a63fe9459140568203423cc7d306ac99 +Subproject commit 17975f70a9a23e04ee7b7175464c7630bf38d9aa diff --git a/sorc/link_fix.sh b/sorc/link_fix.sh index 2f5b61a4b..843596536 100755 --- a/sorc/link_fix.sh +++ b/sorc/link_fix.sh @@ -20,7 +20,7 @@ elif [ ${target} == "hera" ]; then elif [ ${target} == "orion" ] || [ ${target} == "hercules" ]; then FIXROOT=/work/noaa/hwrf/noscrub/hafs-fix-files/hafs-${FIXversion}-fix/fix elif [ ${target} == "jet" ]; then - FIXROOT=/lfs4/HFIP/hwrf-data/hafs-fix-files/hafs-${FIXversion}-fix/fix + FIXROOT=/lfs5/HFIP/hwrf-data/hafs-fix-files/hafs-${FIXversion}-fix/fix else echo "FATAL ERROR: Unknown site " ${target} exit 1 diff --git a/ush/hafs/input.py b/ush/hafs/input.py index 1e2a8afe8..00de56f01 100644 --- a/ush/hafs/input.py +++ b/ush/hafs/input.py @@ -467,7 +467,7 @@ def add(self,dc,location,fcstprio=None,histprio=None,dates=None): The location parameter is a URL from file, sftp, ftp or htar. Examples: - * local files: file:///lfs4/HFIP/hwrf-data/hafs-input/ + * local files: file:///lfs5/HFIP/hwrf-data/hafs-input/ * scp: sftp://Some.Username@dtn-zeus.rdhpcs.noaa.gov/ * ftp: ftp://anonymous@ftpprd.ncep.noaa.gov/ * htar: htar:///NCEPPROD/1year/hpssprod/runhistory/rh2012/201204/20120418/ diff --git a/ush/hafs_pre_job.sh.inc b/ush/hafs_pre_job.sh.inc index 7a794357f..00da030d3 100644 --- a/ush/hafs_pre_job.sh.inc +++ b/ush/hafs_pre_job.sh.inc @@ -26,7 +26,7 @@ fi target="" USERNAME=$(echo $LOGNAME | awk '{ print tolower($0)'}) -if [[ -d /lfs4 ]] ; then +if [[ -d /lfs5 ]] ; then # We are on NOAA Jet if ( ! eval module help > /dev/null 2>&1 ) ; then echo load the module command 1>&2 From f85b40c874216d87e5e24658522305022b8657b8 Mon Sep 17 00:00:00 2001 From: Biju Date: Fri, 30 Aug 2024 16:34:42 +0000 Subject: [PATCH 37/52] Changes for Jet modulefiles for /lfs5 migration --- sorc/hafs_graphics.fd/emc_graphics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/hafs_graphics.fd/emc_graphics b/sorc/hafs_graphics.fd/emc_graphics index 7fb002448..6de396bf5 160000 --- a/sorc/hafs_graphics.fd/emc_graphics +++ b/sorc/hafs_graphics.fd/emc_graphics @@ -1 +1 @@ -Subproject commit 7fb002448eec90e437e043fa2bf8e821369352dc +Subproject commit 6de396bf593c65717dae351cced3740bfd59689a From 077a9d9818545f84701640efafbe08bd0995d75d Mon Sep 17 00:00:00 2001 From: Biju Date: Fri, 30 Aug 2024 23:56:52 +0000 Subject: [PATCH 38/52] Adding scipy and netcdf4 in the application level modulefile --- modulefiles/hafs.jet.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modulefiles/hafs.jet.lua b/modulefiles/hafs.jet.lua index 2ac067592..a7238901b 100644 --- a/modulefiles/hafs.jet.lua +++ b/modulefiles/hafs.jet.lua @@ -117,6 +117,12 @@ load("rocoto") xarray_ver=os.getenv("xarray_ver") or "2023.7.0" load(pathJoin("py-xarray", xarray_ver)) +netcdf4_ver=os.getenv("netcdf4_ver") or "1.5.8" +load(pathJoin("py-netcdf4", netcdf4_ver)) + +scipy_ver=os.getenv("scipy_ver") or "1.11.3" +load(pathJoin("py-scipy", scipy_ver)) + setenv("CMAKE_C_COMPILER", "mpiicc") setenv("CMAKE_CXX_COMPILER", "mpiicpc") setenv("CMAKE_Fortran_COMPILER", "mpiifort") From 7fdbf133e83ebaf964af6cb8b36e4b7115d0b914 Mon Sep 17 00:00:00 2001 From: Biju Date: Sat, 31 Aug 2024 10:46:16 +0000 Subject: [PATCH 39/52] Updating modulefiles for OCN_OBC while using miniconda package --- modulefiles/hafs_mom6_obc.jet.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modulefiles/hafs_mom6_obc.jet.lua b/modulefiles/hafs_mom6_obc.jet.lua index b746f17b5..10a231d65 100644 --- a/modulefiles/hafs_mom6_obc.jet.lua +++ b/modulefiles/hafs_mom6_obc.jet.lua @@ -4,6 +4,8 @@ loads HAFS/MOM6 OBC modulefile on Jet unload("esmf") unload("py-numpy") unload("py-xarray") +unload("py-scipy") +unload("py-netcdf4") prepend_path("PATH", "/lfs5/HFIP/hwrfv3/Maria.Aristizabal/miniconda3/envs/OBC_env/bin") prepend_path("PYTHONPATH", "/lfs5/HFIP/hwrfv3/Maria.Aristizabal/miniconda3/envs/OBC_env") setenv("ESMFMKFILE", "/lfs5/HFIP/hwrfv3/Maria.Aristizabal/miniconda3/envs/OBC_env/lib/esmf.mk") From 65a592934eebbaec86ffd9d1e8f70279c441dae0 Mon Sep 17 00:00:00 2001 From: Biju Date: Sun, 1 Sep 2024 11:49:13 +0000 Subject: [PATCH 40/52] Update modulefiles for emc_graphics --- sorc/hafs_graphics.fd/emc_graphics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/hafs_graphics.fd/emc_graphics b/sorc/hafs_graphics.fd/emc_graphics index 6de396bf5..597415f16 160000 --- a/sorc/hafs_graphics.fd/emc_graphics +++ b/sorc/hafs_graphics.fd/emc_graphics @@ -1 +1 @@ -Subproject commit 6de396bf593c65717dae351cced3740bfd59689a +Subproject commit 597415f16685b3f59005f11c42039b7e06fc7e0b From c10bc134bfd2b95bdce26e6e6337d1e5d3a2ecf8 Mon Sep 17 00:00:00 2001 From: Biju Date: Mon, 9 Sep 2024 18:58:36 +0000 Subject: [PATCH 41/52] Updating new impi version, impi/2024.2.1 on Jet --- modulefiles/hafs.jet.lua | 7 +++++-- sorc/hafs_forecast.fd | 2 +- sorc/hafs_graphics.fd/emc_graphics | 2 +- sorc/hafs_gsi.fd | 2 +- sorc/hafs_tracker.fd | 2 +- sorc/hafs_utils.fd | 2 +- 6 files changed, 10 insertions(+), 7 deletions(-) diff --git a/modulefiles/hafs.jet.lua b/modulefiles/hafs.jet.lua index a7238901b..10c584fbe 100644 --- a/modulefiles/hafs.jet.lua +++ b/modulefiles/hafs.jet.lua @@ -10,8 +10,11 @@ prepend_path("MODULEPATH", "/contrib/spack-stack/spack-stack-1.6.0/envs/unified- stack_intel_ver=os.getenv("stack_intel_ver") or "2021.5.0" load(pathJoin("stack-intel", stack_intel_ver)) -stack_impi_ver=os.getenv("stack_impi_ver") or "2021.5.1" -load(pathJoin("stack-intel-oneapi-mpi", stack_impi_ver)) +stack_mpi_ver=os.getenv("stack_mpi_ver") or "2021.5.1" +load(pathJoin("stack-intel-oneapi-mpi", stack_mpi_ver)) + +impi_ver=os.getenv("impi_ver") or "2024.2.1" +load(pathJoin("impi", impi_ver)) cmake_ver=os.getenv("cmake_ver") or "3.23.1" load(pathJoin("cmake", cmake_ver)) diff --git a/sorc/hafs_forecast.fd b/sorc/hafs_forecast.fd index 4cebc64f1..e4e4ad202 160000 --- a/sorc/hafs_forecast.fd +++ b/sorc/hafs_forecast.fd @@ -1 +1 @@ -Subproject commit 4cebc64f1c186715c172fee8f80bef8e17255df5 +Subproject commit e4e4ad202937b7a792fa0a2ce754075cad5b4050 diff --git a/sorc/hafs_graphics.fd/emc_graphics b/sorc/hafs_graphics.fd/emc_graphics index 597415f16..e0f7fedb2 160000 --- a/sorc/hafs_graphics.fd/emc_graphics +++ b/sorc/hafs_graphics.fd/emc_graphics @@ -1 +1 @@ -Subproject commit 597415f16685b3f59005f11c42039b7e06fc7e0b +Subproject commit e0f7fedb25cc678879e2988182381d93130e3b73 diff --git a/sorc/hafs_gsi.fd b/sorc/hafs_gsi.fd index 823ee3ed2..7cbe413c0 160000 --- a/sorc/hafs_gsi.fd +++ b/sorc/hafs_gsi.fd @@ -1 +1 @@ -Subproject commit 823ee3ed277de8a79ed5f5a42182cf73a4a69f28 +Subproject commit 7cbe413c08b65988c61841a9b7f4d8139e4bf81b diff --git a/sorc/hafs_tracker.fd b/sorc/hafs_tracker.fd index 88661d0d3..be2b07af4 160000 --- a/sorc/hafs_tracker.fd +++ b/sorc/hafs_tracker.fd @@ -1 +1 @@ -Subproject commit 88661d0d39234e30ffafb24676cd52b4c77a800d +Subproject commit be2b07af410d724d11d5f5c9dbb6815044de942e diff --git a/sorc/hafs_utils.fd b/sorc/hafs_utils.fd index 17975f70a..8cc01bb96 160000 --- a/sorc/hafs_utils.fd +++ b/sorc/hafs_utils.fd @@ -1 +1 @@ -Subproject commit 17975f70a9a23e04ee7b7175464c7630bf38d9aa +Subproject commit 8cc01bb96724a3185fe0f86cf9e9483b049a8966 From 4d926ec097a40716010d2b0478130dd497d292a3 Mon Sep 17 00:00:00 2001 From: Biju Date: Mon, 9 Sep 2024 19:38:02 +0000 Subject: [PATCH 42/52] Updating new impi version, impi/2024.2.1 on Jet --- sorc/hafs_forecast.fd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/hafs_forecast.fd b/sorc/hafs_forecast.fd index e4e4ad202..26c01973d 160000 --- a/sorc/hafs_forecast.fd +++ b/sorc/hafs_forecast.fd @@ -1 +1 @@ -Subproject commit e4e4ad202937b7a792fa0a2ce754075cad5b4050 +Subproject commit 26c01973d1e70c12a802041bb24b4e9c7c3f96d0 From 506124fe4e9a18db8947c0db3f0432a7fbfe9eba Mon Sep 17 00:00:00 2001 From: Biju Date: Tue, 10 Sep 2024 13:01:51 +0000 Subject: [PATCH 43/52] Updating new impi version, impi/2024.2.1 on Jet --- sorc/hafs_gsi.fd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/hafs_gsi.fd b/sorc/hafs_gsi.fd index 7cbe413c0..e2601cbda 160000 --- a/sorc/hafs_gsi.fd +++ b/sorc/hafs_gsi.fd @@ -1 +1 @@ -Subproject commit 7cbe413c08b65988c61841a9b7f4d8139e4bf81b +Subproject commit e2601cbda4a51b3b71afab3bcc56e8987398d0b9 From a726a5aa55bf1f4772a08f2d42a4da86542382bb Mon Sep 17 00:00:00 2001 From: Biju Thomas Date: Thu, 12 Sep 2024 14:35:42 -0500 Subject: [PATCH 44/52] Update Orion/Hercules application level modulefiles to minimize conflict between spack-stack and conda --- modulefiles/hafs.hercules.lua | 10 +++++++--- modulefiles/hafs.orion.lua | 12 ++++++++---- modulefiles/hafs_mom6_obc.hercules.lua | 10 +++++++--- modulefiles/hafs_mom6_obc.orion.lua | 10 +++++++--- 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/modulefiles/hafs.hercules.lua b/modulefiles/hafs.hercules.lua index c8415468d..5157aace9 100644 --- a/modulefiles/hafs.hercules.lua +++ b/modulefiles/hafs.hercules.lua @@ -118,10 +118,14 @@ load(pathJoin("tar", tar_ver)) rocoto_ver=os.getenv("rocoto_ver") or "default" load(pathJoin("rocoto", rocoto_ver)) -unload("py-numpy/1.22.3") +xarray_ver=os.getenv("xarray_ver") or "2023.7.0" +load(pathJoin("py-xarray", xarray_ver)) -prepend_path("MODULEPATH", "/work/noaa/hwrf/noscrub/local/modulefiles") -load(pathJoin("python", "wcoss2_env")) +netcdf4_ver=os.getenv("netcdf4_ver") or "1.5.8" +load(pathJoin("py-netcdf4", netcdf4_ver)) + +scipy_ver=os.getenv("scipy_ver") or "1.11.3" +load(pathJoin("py-scipy", scipy_ver)) setenv("CMAKE_C_COMPILER", "mpiicc") setenv("CMAKE_CXX_COMPILER", "mpiicpc") diff --git a/modulefiles/hafs.orion.lua b/modulefiles/hafs.orion.lua index 5dd358415..451d98476 100644 --- a/modulefiles/hafs.orion.lua +++ b/modulefiles/hafs.orion.lua @@ -112,12 +112,16 @@ load(pathJoin("intel-oneapi-mkl", mkl_ver)) tar_ver=os.getenv("tar_ver") or "1.34" load(pathJoin("tar", tar_ver)) -prepend_path("PATH", "/apps/contrib/rocoto/1.3.7/bin") +xarray_ver=os.getenv("xarray_ver") or "2023.7.0" +load(pathJoin("py-xarray", xarray_ver)) + +netcdf4_ver=os.getenv("netcdf4_ver") or "1.5.8" +load(pathJoin("py-netcdf4", netcdf4_ver)) -unload("py-numpy/1.22.3") +scipy_ver=os.getenv("scipy_ver") or "1.11.3" +load(pathJoin("py-scipy", scipy_ver)) -prepend_path("MODULEPATH", "/work/noaa/hwrf/noscrub/local/modulefiles") -load(pathJoin("python", "wcoss2_env")) +prepend_path("PATH", "/apps/contrib/rocoto/1.3.7/bin") setenv("CMAKE_C_COMPILER", "mpiicc") setenv("CMAKE_CXX_COMPILER", "mpiicpc") diff --git a/modulefiles/hafs_mom6_obc.hercules.lua b/modulefiles/hafs_mom6_obc.hercules.lua index 6b8348502..b0361a916 100644 --- a/modulefiles/hafs_mom6_obc.hercules.lua +++ b/modulefiles/hafs_mom6_obc.hercules.lua @@ -2,8 +2,12 @@ help([[ loads HAFS/MOM6 OBC modulefile on Hercules ]]) unload("esmf") -prepend_path("MODULEPATH", "/work/noaa/hwrf/save/maristiz/modulefiles") -load("modulefile.OBC.run.orion") -setenv("ESMFMKFILE", "/work/noaa/hwrf/save/maristiz/miniconda3/envs/OBC_env/lib/esmf.mk") +unload("py-numpy") +unload("py-xarray") +unload("py-scipy") +unload("py-netcdf4") +prepend_path("PATH", "/work2/noaa/hwrf/maristiz/miniconda3/envs/OBC_env/bin") +prepend_path("PYTHONPATH", "/work2/noaa/hwrf/maristiz/miniconda3/envs/OBC_env") +setenv("ESMFMKFILE", "/work2/noaa/hwrf/maristiz/miniconda3/envs/OBC_env/lib/esmf.mk") whatis("Description: HAFS/MOM6 OBC environment") diff --git a/modulefiles/hafs_mom6_obc.orion.lua b/modulefiles/hafs_mom6_obc.orion.lua index d2d120255..6ad2e756f 100644 --- a/modulefiles/hafs_mom6_obc.orion.lua +++ b/modulefiles/hafs_mom6_obc.orion.lua @@ -2,8 +2,12 @@ help([[ loads HAFS/MOM6 OBC modulefile on Orion ]]) unload("esmf") -prepend_path("MODULEPATH", "/work/noaa/hwrf/save/maristiz/modulefiles") -load("modulefile.OBC.run.orion") -setenv("ESMFMKFILE", "/work/noaa/hwrf/save/maristiz/miniconda3/envs/OBC_env/lib/esmf.mk") +unload("py-numpy") +unload("py-xarray") +unload("py-scipy") +unload("py-netcdf4") +prepend_path("PATH", "/work2/noaa/hwrf/maristiz/miniconda3/envs/OBC_env/bin") +prepend_path("PYTHONPATH", "/work2/noaa/hwrf/maristiz/miniconda3/envs/OBC_env") +setenv("ESMFMKFILE", "/work2/noaa/hwrf/maristiz/miniconda3/envs/OBC_env/lib/esmf.mk") whatis("Description: HAFS/MOM6 OBC environment") From 7b65c5d323fad43396365a3c2a9230cf131c9d59 Mon Sep 17 00:00:00 2001 From: Biju Thomas Date: Thu, 12 Sep 2024 14:46:24 -0500 Subject: [PATCH 45/52] Updating modulefile(Orion/Hercules) for emc-graphics --- sorc/hafs_graphics.fd/emc_graphics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/hafs_graphics.fd/emc_graphics b/sorc/hafs_graphics.fd/emc_graphics index e0f7fedb2..9991f8be4 160000 --- a/sorc/hafs_graphics.fd/emc_graphics +++ b/sorc/hafs_graphics.fd/emc_graphics @@ -1 +1 @@ -Subproject commit e0f7fedb25cc678879e2988182381d93130e3b73 +Subproject commit 9991f8be437fba3b3cda6989a4cde42dcc4771bc From fa486b778528966fcd2794bba5b8dfc0fba38075 Mon Sep 17 00:00:00 2001 From: Biju Thomas Date: Fri, 13 Sep 2024 20:36:17 +0000 Subject: [PATCH 46/52] Updating modulefiles(Hera) in connection with new miniconda installation --- modulefiles/hafs.hera.lua | 3 --- modulefiles/hafs_mom6_obc.hera.lua | 10 +++++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/modulefiles/hafs.hera.lua b/modulefiles/hafs.hera.lua index e0a6dfb25..5dc774699 100644 --- a/modulefiles/hafs.hera.lua +++ b/modulefiles/hafs.hera.lua @@ -127,9 +127,6 @@ load(pathJoin("py-xarray", xarray_ver)) scipy_ver=os.getenv("scipy_ver") or "1.11.3" load(pathJoin("py-scipy", scipy_ver)) -prepend_path("MODULEPATH", "/scratch1/NCEPDEV/hwrf/noscrub/local/modulefiles") ---load(pathJoin("python", "wcoss2_env")) - setenv("CMAKE_C_COMPILER", "mpiicc") setenv("CMAKE_CXX_COMPILER", "mpiicpc") setenv("CMAKE_Fortran_COMPILER", "mpiifort") diff --git a/modulefiles/hafs_mom6_obc.hera.lua b/modulefiles/hafs_mom6_obc.hera.lua index 439adddb6..fbe749067 100644 --- a/modulefiles/hafs_mom6_obc.hera.lua +++ b/modulefiles/hafs_mom6_obc.hera.lua @@ -2,8 +2,12 @@ help([[ loads HAFS/MOM6 OBC modulefile on Hera ]]) unload("esmf") -prepend_path("MODULEPATH", "/scratch1/NCEPDEV/hwrf/save/Maria.Aristizabal/modulefiles") -load("modulefile.OBC.run.hera") -setenv("ESMFMKFILE", "/scratch1/NCEPDEV/hwrf/save/Maria.Aristizabal/miniconda3/envs/OBC_env/lib/esmf.mk") +unload("py-numpy") +unload("py-xarray") +unload("py-scipy") +unload("py-netcdf4") +prepend_path("PATH", "/scratch2/NCEPDEV/hwrf/save/Maria.Aristizabal/miniconda3/envs/OBC_env/bin") +prepend_path("PYTHONPATH", "/scratch2/NCEPDEV/hwrf/save/Maria.Aristizabal/miniconda3/envs/OBC_env") +setenv("ESMFMKFILE", "/scratch2/NCEPDEV/hwrf/save/Maria.Aristizabal/miniconda3/envs/OBC_env/lib/esmf.mk") whatis("Description: HAFS/MOM6 OBC environment") From e8af04ee764f46936e950b6dc8f74e898d961e8a Mon Sep 17 00:00:00 2001 From: Biju Thomas Date: Mon, 16 Sep 2024 20:22:18 +0000 Subject: [PATCH 47/52] Update modulefiles for Graphics on Hera consistent with the conda update --- jobs/JHAFS_GRAPHICS | 3 +++ sorc/hafs_graphics.fd/emc_graphics | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/jobs/JHAFS_GRAPHICS b/jobs/JHAFS_GRAPHICS index 288f957e5..df653b17a 100755 --- a/jobs/JHAFS_GRAPHICS +++ b/jobs/JHAFS_GRAPHICS @@ -34,6 +34,9 @@ if [ "${RUN_ENVIR^^}" != "NCO" ]; then source ${USHhafs}/hafs_pre_job.sh.inc export machine=${WHERE_AM_I:-wcoss2} if [ "${GRAPH}" = "EMC" ]; then + if [ ${machine} = hera ]; then + module purge + fi module use ${HOMEhafs}/sorc/hafs_graphics.fd/emc_graphics/modulefiles module load graphics.run.${machine} elif [ "${GRAPH}" = "HRD" ]; then diff --git a/sorc/hafs_graphics.fd/emc_graphics b/sorc/hafs_graphics.fd/emc_graphics index 9991f8be4..e65af8e50 160000 --- a/sorc/hafs_graphics.fd/emc_graphics +++ b/sorc/hafs_graphics.fd/emc_graphics @@ -1 +1 @@ -Subproject commit 9991f8be437fba3b3cda6989a4cde42dcc4771bc +Subproject commit e65af8e505afcae783605665335ce1d0f9bb00f4 From f1d5ad07427a350c5c36c1ce2f69cb41228a5462 Mon Sep 17 00:00:00 2001 From: Biju Thomas Date: Thu, 19 Sep 2024 15:08:10 +0000 Subject: [PATCH 48/52] Load hafs_mom6_obc.${machine} only when the ocean model is mom6 to avoid module conflicts --- jobs/JHAFS_OCN_PREP | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jobs/JHAFS_OCN_PREP b/jobs/JHAFS_OCN_PREP index 812836c23..c69993ec2 100755 --- a/jobs/JHAFS_OCN_PREP +++ b/jobs/JHAFS_OCN_PREP @@ -33,11 +33,11 @@ if [ "${RUN_ENVIR^^}" != "NCO" ]; then # Detect platform and load modules if not run by NCO source ${USHhafs}/hafs_pre_job.sh.inc export machine=${WHERE_AM_I:-wcoss2} - if [ "${machine}" != "wcoss2" ] ; then + if [[ "${machine}" != "wcoss2" ]] && [[ "${ocean_model}" == mom6 ]]; then module use ${HOMEhafs}/modulefile module load hafs_mom6_obc.${machine} + module list fi - module list else # Run by NCO on WCOSS2 export machine=${WHERE_AM_I:-wcoss2} From d6a7449399b44806262bcdd755feef787d5d5b69 Mon Sep 17 00:00:00 2001 From: Biju Thomas Date: Thu, 19 Sep 2024 20:40:59 +0000 Subject: [PATCH 49/52] Load hafs_mom6_obc.${machine} only when the ocean model is mom6 to avoid module conflicts --- jobs/JHAFS_OCN_PREP | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/jobs/JHAFS_OCN_PREP b/jobs/JHAFS_OCN_PREP index c69993ec2..33eefff23 100755 --- a/jobs/JHAFS_OCN_PREP +++ b/jobs/JHAFS_OCN_PREP @@ -29,6 +29,12 @@ export FIXhafs=$HOMEhafs/fix export WORKhafs=${WORKhafs:-${DATAROOT:?}/${RUN:?}${storm_num:?}_${cyc:?}_${envir:?}_${hafs_ver:?}} +export COMhafs=${COMhafs:-$(compath.py ${envir}/${NET}/${hafs_ver})/${RUN}.${PDY}/${cyc}} +export CONFhafs=$COMhafs/$stormlabel.conf +export HOLDVARS=${HOLDVARS:-$COMhafs/$stormlabel.holdvars.txt} + +source ${HOLDVARS} + if [ "${RUN_ENVIR^^}" != "NCO" ]; then # Detect platform and load modules if not run by NCO source ${USHhafs}/hafs_pre_job.sh.inc @@ -53,12 +59,6 @@ source ${USHhafs}/hafs_runcmd.sh.inc env -export COMhafs=${COMhafs:-$(compath.py ${envir}/${NET}/${hafs_ver})/${RUN}.${PDY}/${cyc}} -export CONFhafs=$COMhafs/$stormlabel.conf -export HOLDVARS=${HOLDVARS:-$COMhafs/$stormlabel.holdvars.txt} - -source ${HOLDVARS} - export PYTHONPATH=$PYTHONPATH:${HOMEhafs}/ush/mom6_obc export DATA=${WORKhafs}/ocn_prep From 02e01b5b04adbf0e101551e6f1f7840523a07b26 Mon Sep 17 00:00:00 2001 From: Biju Date: Thu, 17 Oct 2024 20:02:14 +0000 Subject: [PATCH 50/52] Reverting to old impi version(2022.1.2) on Jet --- modulefiles/hafs.jet.lua | 3 --- sorc/hafs_forecast.fd | 2 +- sorc/hafs_gsi.fd | 2 +- sorc/hafs_tracker.fd | 2 +- sorc/hafs_utils.fd | 2 +- 5 files changed, 4 insertions(+), 7 deletions(-) diff --git a/modulefiles/hafs.jet.lua b/modulefiles/hafs.jet.lua index 10c584fbe..4d27c0213 100644 --- a/modulefiles/hafs.jet.lua +++ b/modulefiles/hafs.jet.lua @@ -13,9 +13,6 @@ load(pathJoin("stack-intel", stack_intel_ver)) stack_mpi_ver=os.getenv("stack_mpi_ver") or "2021.5.1" load(pathJoin("stack-intel-oneapi-mpi", stack_mpi_ver)) -impi_ver=os.getenv("impi_ver") or "2024.2.1" -load(pathJoin("impi", impi_ver)) - cmake_ver=os.getenv("cmake_ver") or "3.23.1" load(pathJoin("cmake", cmake_ver)) diff --git a/sorc/hafs_forecast.fd b/sorc/hafs_forecast.fd index 26c01973d..787c91601 160000 --- a/sorc/hafs_forecast.fd +++ b/sorc/hafs_forecast.fd @@ -1 +1 @@ -Subproject commit 26c01973d1e70c12a802041bb24b4e9c7c3f96d0 +Subproject commit 787c916019251020ad22e880f971fb5e48e0ac30 diff --git a/sorc/hafs_gsi.fd b/sorc/hafs_gsi.fd index e2601cbda..3c4a034d5 160000 --- a/sorc/hafs_gsi.fd +++ b/sorc/hafs_gsi.fd @@ -1 +1 @@ -Subproject commit e2601cbda4a51b3b71afab3bcc56e8987398d0b9 +Subproject commit 3c4a034d594d58790903517e908a8cb3e5014e09 diff --git a/sorc/hafs_tracker.fd b/sorc/hafs_tracker.fd index be2b07af4..644a397c3 160000 --- a/sorc/hafs_tracker.fd +++ b/sorc/hafs_tracker.fd @@ -1 +1 @@ -Subproject commit be2b07af410d724d11d5f5c9dbb6815044de942e +Subproject commit 644a397c37f4a945bdea6dc81720ab56cd646c71 diff --git a/sorc/hafs_utils.fd b/sorc/hafs_utils.fd index 8cc01bb96..453a67d24 160000 --- a/sorc/hafs_utils.fd +++ b/sorc/hafs_utils.fd @@ -1 +1 @@ -Subproject commit 8cc01bb96724a3185fe0f86cf9e9483b049a8966 +Subproject commit 453a67d244836deaa27a34e7f03bd4c7907e9667 From affdfde5da510f9737f54eec5dab3341e8bf5537 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Fri, 1 Nov 2024 16:55:29 +0000 Subject: [PATCH 51/52] Update submodule sorc/hafs_forecast.fd and .gitmodules. --- .gitmodules | 8 ++++---- sorc/hafs_forecast.fd | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index bce9cbf06..da502fb73 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,19 +1,19 @@ [submodule "ufs-weather-model"] path = sorc/hafs_forecast.fd url = https://github.com/hafs-community/ufs-weather-model.git - branch = feature/hafs.v2.0.1 + branch = support/HAFS [submodule "UFS_UTILS"] path = sorc/hafs_utils.fd url = https://github.com/hafs-community/UFS_UTILS.git - branch = feature/hafs.v2.0.1 + branch = support/HAFS [submodule "gfdl-tracker"] path = sorc/hafs_tracker.fd url = https://github.com/hafs-community/gfdl-tracker.git - branch = feature/hafs.v2.0.1 + branch = support/HAFS [submodule "sorc/hafs_gsi.fd"] path = sorc/hafs_gsi.fd url = https://github.com/hafs-community/GSI.git - branch = feature/hafs.v2.0.1 + branch = support/HAFS [submodule "GPLOT"] path = sorc/hafs_graphics.fd/hrd_gplot url = https://github.com/hafs-community/GPLOT.git diff --git a/sorc/hafs_forecast.fd b/sorc/hafs_forecast.fd index 787c91601..7bcb0afa7 160000 --- a/sorc/hafs_forecast.fd +++ b/sorc/hafs_forecast.fd @@ -1 +1 @@ -Subproject commit 787c916019251020ad22e880f971fb5e48e0ac30 +Subproject commit 7bcb0afa717333bd433236cd288c235b00d9a8e1 From 6bae309488db9d2285372a9f741680685e7c7d16 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Sat, 9 Nov 2024 16:59:53 +0000 Subject: [PATCH 52/52] Sync with latest NCO production version of hafs.v2.0.6. - Updating run.ver for hafs and RTOFS versions. - Update scripts/exhafs_obs_prep.sh, which properly handles tempdrop obs processing errors/warnings. --- scripts/exhafs_obs_prep.sh | 6 +++++- versions/run.ver | 8 ++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/scripts/exhafs_obs_prep.sh b/scripts/exhafs_obs_prep.sh index 900d17a3b..3009544f3 100755 --- a/scripts/exhafs_obs_prep.sh +++ b/scripts/exhafs_obs_prep.sh @@ -340,7 +340,11 @@ sed -e "s/_analdate_/${analdate}/g" \ OBSPREPROCEXEC=${OBSPREPROCEXEC:-${EXEChafs}/hafs_tools_obs_preproc.x} ${NCP} -p ${OBSPREPROCEXEC} ./hafs_tools_obs_preproc.x ${APRUNS} ./hafs_tools_obs_preproc.x 2>&1 | tee ./obs_preproc.out -export err=$?; err_chk +status=$? +if [[ $status -ne 0 ]]; then + echo "WARNING: hafs_tools_obs_preproc.x encountered issue when processing tempdrop observations with exit code of $status. Continue ..." +fi + if [ -s ./tempdrop.prepbufr ]; then # Deliver to intercom ${NCP} -p ./tempdrop.prepbufr ${intercom}/${NFtempdrop} diff --git a/versions/run.ver b/versions/run.ver index 598daa0dd..7e0077431 100644 --- a/versions/run.ver +++ b/versions/run.ver @@ -1,8 +1,8 @@ #! /bin/sh -export hafs_ver=v2.0.3 +export hafs_ver=v2.0.6 export gfs_ver=v16.3 -export rtofs_ver=v2.3 +export rtofs_ver=v2.4 export obsproc_ver=v1.2 export envvar_ver=1.0 @@ -56,7 +56,7 @@ export ncdiag_ver=1.1.2 #export COMPATH=/lfs/h1/ops/prod/com/gfs:/lfs/h1/ops/prod/com/rtofs:/lfs/h1/ops/prod/com/obsproc #export COMINarch=/lfs/h1/ops/prod/com/gfs/v16.3/syndat #export COMINmsg=/lfs/h1/ops/prod/com/hafs/v1.0/inphfsa -#export MAILTO="wei.wei@noaa.gov" -#export MAILFROM="wei.wei@noaa.gov" +#export MAILTO="floyd.fayton@noaa.gov" +#export MAILFROM="floyd.fayton@noaa.gov" #export EMAIL_SDM=NO