diff --git a/CHANGELOG.md b/CHANGELOG.md index f7ed8477..d23b485d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Cleaned up ldas_setup. Split out ldas.py and setup_utils.py. - Added reader for surface meteorological forcing from S2S-3. -- Update `GEOSlandassim_GridComp/io_hdf5.F90` to allow for use with HDF5 1.14 +- Update `GEOSlandassim_GridComp/io_hdf5.F90` to allow for use with HDF5 1.14. +- Changed default format of tile-space HISTORY output to nc4. ### Fixed diff --git a/GEOSldas_App/CMakeLists.txt b/GEOSldas_App/CMakeLists.txt index ee748da0..a2cf7c34 100644 --- a/GEOSldas_App/CMakeLists.txt +++ b/GEOSldas_App/CMakeLists.txt @@ -9,11 +9,6 @@ ecbuild_add_executable ( SOURCES preprocess_ldas.F90 preprocess_ldas_routines.F90 LIBS GEOSldas_GridComp MAPL) -ecbuild_add_executable ( - TARGET tile_bin2nc4.x - SOURCES tile_bin2nc4.F90 - LIBS MAPL) - ecbuild_add_executable ( TARGET mwrtm_bin2nc4.x SOURCES util/inputs/mwRTM_params/mwrtm_bin2nc4.F90 diff --git a/GEOSldas_App/GEOSldas_HIST.rc b/GEOSldas_App/GEOSldas_HIST.rc index 37ce4b59..3063e13d 100644 --- a/GEOSldas_App/GEOSldas_HIST.rc +++ b/GEOSldas_App/GEOSldas_HIST.rc @@ -13,7 +13,6 @@ EXPID: GEOSldas_expid # pre-defined Collections COLLECTIONS: -#OUT1d 'tavg24_1d_lfs_Nt' #OUT2d 'tavg24_2d_lfs_Nx' #OUT1d 'tavg24_1d_lnd_Nt' #OUT2d 'tavg24_2d_lnd_Nx' @@ -68,32 +67,14 @@ EASEv2_M36.LM: 1 # with "gzip"; nc4 files can be compressed using the "compress_bit-shaved_nc4.sh" # utility script. - tavg24_1d_lfs_Nt.descr: 'Tile-space,Daily,Time-Averaged,Single-Level,Assimilation,Land Surface Forcings and States', - tavg24_1d_lfs_Nt.nbits: 12, - tavg24_1d_lfs_Nt.template: '%y4%m2%d2_%h2%n2z.bin', - tavg24_1d_lfs_Nt.archive: '%c/Y%y4', - tavg24_1d_lfs_Nt.mode: 'time-averaged', - tavg24_1d_lfs_Nt.frequency: 240000, - tavg24_1d_lfs_Nt.ref_time: 000000, - tavg24_1d_lfs_Nt.fields:'Tair' , 'METFORCE' , - 'Qair' , 'METFORCE' , - 'LWdown' , 'METFORCE' , - 'SWdown' , 'METFORCE' , - 'Wind' , 'METFORCE' , - 'Psurf' , 'METFORCE' , - 'Rainf_C' , 'METFORCE' , - 'Rainf' , 'METFORCE' , - 'Snowf' , 'METFORCE' , - 'RainfSnowf' , 'METFORCE' , - 'RefH' , 'METFORCE' , - 'CATDEF' , 'GridComp' , - 'RZEXC' , 'GridComp' , - 'SRFEXC' , 'GridComp' , - 'WESNN1' , 'GridComp' , - 'WESNN2' , 'GridComp' , - 'WESNN3' , 'GridComp' , - 'HLWUP' , 'GridComp' , - :: +# NOTE (Nov 2025): +# Changes for *1d* output with recent introduction of land+landice simulations: +# - Direct *1d* output to nc4 via MAPL. +# - Removed tile_bin2nc4.F90; no longer works for land-only collections in land+landice +# simulations because it uses tilecoord.bin, which contains info for all tiles. +# - Removed *1d* lfs collection; no longer works in land+landice simulations because of +# different tile spaces for CATCH and METFORCE. +# tavg24_2d_lfs_Nx.descr: '2d,Daily,Time-Averaged,Single-Level,Assimilation,Land Surface Forcings and States', tavg24_2d_lfs_Nx.nbits: 12, @@ -129,8 +110,9 @@ EASEv2_M36.LM: 1 tavg24_1d_lnd_Nt.descr: 'Tile-space,Daily,Time-Averaged,Single-Level,Assimilation,Land Surface Diagnostics', tavg24_1d_lnd_Nt.nbits: 12, - tavg24_1d_lnd_Nt.template: '%y4%m2%d2_%h2%n2z.bin', + tavg24_1d_lnd_Nt.template: '%y4%m2%d2_%h2%n2z.nc4', tavg24_1d_lnd_Nt.mode: 'time-averaged', + tavg24_1d_lnd_Nt.format: 'CFIO', tavg24_1d_lnd_Nt.frequency: 240000, tavg24_1d_lnd_Nt.ref_time: 000000, tavg24_1d_lnd_Nt.fields: 'GRN' , 'VEGDYN' , @@ -334,8 +316,9 @@ EASEv2_M36.LM: 1 const_1d_lnd_Nt.descr: 'Tile-space,Constant,Time-invariant,Single-Level,Assimilation,Land Surface Model Parameters', - const_1d_lnd_Nt.template: '%y4%m2%d2_%h2%n2z.bin', + const_1d_lnd_Nt.template: '%y4%m2%d2_%h2%n2z.nc4', const_1d_lnd_Nt.mode: 'instantaneous', + const_1d_lnd_Nt.format: 'CFIO', const_1d_lnd_Nt.frequency: 240000, const_1d_lnd_Nt.ref_time: 000000, const_1d_lnd_Nt.fields: 'DZGT1' , 'GridComp' , @@ -386,8 +369,9 @@ EASEv2_M36.LM: 1 SMAP_L4_SM_gph.descr: 'Tile-space,3-Hourly,Time-Averaged,Single-Level,Assimilation,SMAP L4_SM Land Geophysical Diagnostics', SMAP_L4_SM_gph.nbits: 12, - SMAP_L4_SM_gph.template: '%y4%m2%d2_%h2%n2z.bin', + SMAP_L4_SM_gph.template: '%y4%m2%d2_%h2%n2z.nc4', SMAP_L4_SM_gph.mode: 'time-averaged', + SMAP_L4_SM_gph.format: 'CFIO', SMAP_L4_SM_gph.frequency: 030000, SMAP_L4_SM_gph.ref_time: 000000, SMAP_L4_SM_gph.fields: 'WCSF' , 'ENSAVG' , 'sm_surface' , @@ -437,8 +421,9 @@ EASEv2_M36.LM: 1 inst1_1d_lnr_Nt.descr: 'Tile-space,1-Hourly,Instantaneous,Single-Level,Assimilation,Land Nature Run Diagnostics', inst1_1d_lnr_Nt.nbits: 12, - inst1_1d_lnr_Nt.template: '%y4%m2%d2_%h2%n2z.bin' , + inst1_1d_lnr_Nt.template: '%y4%m2%d2_%h2%n2z.nc4' , inst1_1d_lnr_Nt.mode: 'instantaneous' , + inst1_1d_lnr_Nt.format: 'CFIO', inst1_1d_lnr_Nt.frequency: 010000 , inst1_1d_lnr_Nt.ref_time: 000000, inst1_1d_lnr_Nt.fields: 'TPSURF' , 'ENSAVG' , 'surface_temp' , @@ -453,8 +438,9 @@ EASEv2_M36.LM: 1 # By default, no bit shaving for increments output. catch_progn_incr.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation,Ensemble-Average Land Prognostics Increments', - catch_progn_incr.template: '%y4%m2%d2_%h2%n2z.bin', + catch_progn_incr.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr.mode: 'instantaneous', + catch_progn_incr.format: 'CFIO', catch_progn_incr.frequency: 030000, catch_progn_incr.ref_time: 000000, catch_progn_incr.fields: 'TCFSAT_INCR' , 'LANDASSIM' , @@ -491,8 +477,9 @@ EASEv2_M36.LM: 1 inst3_1d_lndfcstana_Nt.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation,Ensemble Land Forecast and Analysis Diagnostics', inst3_1d_lndfcstana_Nt.nbits: 12, - inst3_1d_lndfcstana_Nt.template: '%y4%m2%d2_%h2%n2z.bin', + inst3_1d_lndfcstana_Nt.template: '%y4%m2%d2_%h2%n2z.nc4', inst3_1d_lndfcstana_Nt.mode: 'instantaneous', + inst3_1d_lndfcstana_Nt.format: 'CFIO', inst3_1d_lndfcstana_Nt.frequency: 030000, inst3_1d_lndfcstana_Nt.ref_time: 000000, inst3_1d_lndfcstana_Nt.fields: 'WCSF' , 'ENSAVG' , 'SFMC_FCST' , @@ -601,8 +588,9 @@ EASEv2_M36.LM: 1 tavg24_1d_glc_Nt.descr: 'Tile-space,Daily,Time-Averaged,Single-level,Land Ice Diagnostics', tavg24_1d_glc_Nt.nbits: 12, - tavg24_1d_glc_Nt.template: '%y4%m2%d2_%h2%n2z.bin' , + tavg24_1d_glc_Nt.template: '%y4%m2%d2_%h2%n2z.nc4' , tavg24_1d_glc_Nt.mode: 'time-averaged' , + tavg24_1d_glc_Nt.format: 'CFIO', tavg24_1d_glc_Nt.frequency: 240000 , tavg24_1d_glc_Nt.ref_time: 000000 , tavg24_1d_glc_Nt.fields: 'ASNOW_GL' , 'LANDICE' , diff --git a/GEOSldas_App/GEOSldas_HISTdet.rc b/GEOSldas_App/GEOSldas_HISTdet.rc index 55995fc3..93442adb 100644 --- a/GEOSldas_App/GEOSldas_HISTdet.rc +++ b/GEOSldas_App/GEOSldas_HISTdet.rc @@ -37,8 +37,9 @@ PC576x361-DC.LM: 1 catch_progn_incr.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation,Ensemble-Average Land Prognostics Increments', -catch_progn_incr.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr.mode: 'instantaneous', +catch_progn_incr.format: 'CFIO', catch_progn_incr.frequency: 030000, catch_progn_incr.ref_time: 013000, catch_progn_incr.fields: 'TCFSAT_INCR' , 'LANDASSIM' , @@ -70,8 +71,9 @@ catch_progn_incr.fields: 'TCFSAT_INCR' , 'LANDASSIM' , tavg3_1d_lnd_Nt.descr: 'Tile-space,Time-Averaged,Single-Level,Assimilation,Land Surface Diagnostics', tavg3_1d_lnd_Nt.nbits: 12, - tavg3_1d_lnd_Nt.template: '%y4%m2%d2_%h2%n2z.bin', + tavg3_1d_lnd_Nt.template: '%y4%m2%d2_%h2%n2z.nc4', tavg3_1d_lnd_Nt.mode: 'time-averaged', + tavg3_1d_lnd_Nt.format: 'CFIO', tavg3_1d_lnd_Nt.frequency: 030000, tavg3_1d_lnd_Nt.ref_time: 013000, tavg3_1d_lnd_Nt.fields: 'WET3' , 'ENSAVG' , 'GWETPROF' , diff --git a/GEOSldas_App/GEOSldas_HISTens.rc b/GEOSldas_App/GEOSldas_HISTens.rc index 872be4ca..135ca2bd 100644 --- a/GEOSldas_App/GEOSldas_HISTens.rc +++ b/GEOSldas_App/GEOSldas_HISTens.rc @@ -85,8 +85,9 @@ PC360x181-DC.LM: 1 tavg3_1d_lnd_Nt.descr: 'Tile-space,Time-Averaged,Single-Level,Assimilation,Land Surface Diagnostics', tavg3_1d_lnd_Nt.nbits: 12, -tavg3_1d_lnd_Nt.template: '%y4%m2%d2_%h2%n2z.bin', +tavg3_1d_lnd_Nt.template: '%y4%m2%d2_%h2%n2z.nc4', tavg3_1d_lnd_Nt.mode: 'time-averaged', +tavg3_1d_lnd_Nt.format: 'CFIO', tavg3_1d_lnd_Nt.frequency: 030000, tavg3_1d_lnd_Nt.ref_time: 000000, tavg3_1d_lnd_Nt.fields: 'WET3' , 'ENSAVG' , 'GWETPROF' , @@ -181,8 +182,9 @@ inst3_2d_lndfcstana_Nx.fields: 'WCSF' , 'ENSAVG' , 'SFMC_FCS catch_progn_incr0001.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0001.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0001.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0001.mode: 'instantaneous', +catch_progn_incr0001.format: 'CFIO', catch_progn_incr0001.frequency: 030000, catch_progn_incr0001.ref_time: 013000, catch_progn_incr0001.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0001' , @@ -213,8 +215,9 @@ catch_progn_incr0001.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0001' , :: catch_progn_incr0002.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0002.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0002.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0002.mode: 'instantaneous', +catch_progn_incr0002.format: 'CFIO', catch_progn_incr0002.frequency: 030000, catch_progn_incr0002.ref_time: 013000, catch_progn_incr0002.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0002' , @@ -245,8 +248,9 @@ catch_progn_incr0002.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0002' , :: catch_progn_incr0003.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0003.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0003.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0003.mode: 'instantaneous', +catch_progn_incr0003.format: 'CFIO', catch_progn_incr0003.frequency: 030000, catch_progn_incr0003.ref_time: 013000, catch_progn_incr0003.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0003' , @@ -277,8 +281,9 @@ catch_progn_incr0003.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0003' , :: catch_progn_incr0004.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0004.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0004.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0004.mode: 'instantaneous', +catch_progn_incr0004.format: 'CFIO', catch_progn_incr0004.frequency: 030000, catch_progn_incr0004.ref_time: 013000, catch_progn_incr0004.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0004' , @@ -309,8 +314,9 @@ catch_progn_incr0004.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0004' , :: catch_progn_incr0005.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0005.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0005.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0005.mode: 'instantaneous', +catch_progn_incr0005.format: 'CFIO', catch_progn_incr0005.frequency: 030000, catch_progn_incr0005.ref_time: 013000, catch_progn_incr0005.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0005' , @@ -341,8 +347,9 @@ catch_progn_incr0005.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0005' , :: catch_progn_incr0006.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0006.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0006.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0006.mode: 'instantaneous', +catch_progn_incr0006.format: 'CFIO', catch_progn_incr0006.frequency: 030000, catch_progn_incr0006.ref_time: 013000, catch_progn_incr0006.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0006' , @@ -373,8 +380,9 @@ catch_progn_incr0006.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0006' , :: catch_progn_incr0007.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0007.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0007.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0007.mode: 'instantaneous', +catch_progn_incr0007.format: 'CFIO', catch_progn_incr0007.frequency: 030000, catch_progn_incr0007.ref_time: 013000, catch_progn_incr0007.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0007' , @@ -405,8 +413,9 @@ catch_progn_incr0007.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0007' , :: catch_progn_incr0008.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0008.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0008.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0008.mode: 'instantaneous', +catch_progn_incr0008.format: 'CFIO', catch_progn_incr0008.frequency: 030000, catch_progn_incr0008.ref_time: 013000, catch_progn_incr0008.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0008' , @@ -437,8 +446,9 @@ catch_progn_incr0008.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0008' , :: catch_progn_incr0009.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0009.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0009.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0009.mode: 'instantaneous', +catch_progn_incr0009.format: 'CFIO', catch_progn_incr0009.frequency: 030000, catch_progn_incr0009.ref_time: 013000, catch_progn_incr0009.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0009' , @@ -469,8 +479,9 @@ catch_progn_incr0009.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0009' , :: catch_progn_incr0010.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0010.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0010.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0010.mode: 'instantaneous', +catch_progn_incr0010.format: 'CFIO', catch_progn_incr0010.frequency: 030000, catch_progn_incr0010.ref_time: 013000, catch_progn_incr0010.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0010' , @@ -501,8 +512,9 @@ catch_progn_incr0010.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0010' , :: catch_progn_incr0011.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0011.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0011.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0011.mode: 'instantaneous', +catch_progn_incr0011.format: 'CFIO', catch_progn_incr0011.frequency: 030000, catch_progn_incr0011.ref_time: 013000, catch_progn_incr0011.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0011' , @@ -533,8 +545,9 @@ catch_progn_incr0011.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0011' , :: catch_progn_incr0012.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0012.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0012.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0012.mode: 'instantaneous', +catch_progn_incr0012.format: 'CFIO', catch_progn_incr0012.frequency: 030000, catch_progn_incr0012.ref_time: 013000, catch_progn_incr0012.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0012' , @@ -565,8 +578,9 @@ catch_progn_incr0012.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0012' , :: catch_progn_incr0013.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0013.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0013.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0013.mode: 'instantaneous', +catch_progn_incr0013.format: 'CFIO', catch_progn_incr0013.frequency: 030000, catch_progn_incr0013.ref_time: 013000, catch_progn_incr0013.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0013' , @@ -597,8 +611,9 @@ catch_progn_incr0013.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0013' , :: catch_progn_incr0014.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0014.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0014.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0014.mode: 'instantaneous', +catch_progn_incr0014.format: 'CFIO', catch_progn_incr0014.frequency: 030000, catch_progn_incr0014.ref_time: 013000, catch_progn_incr0014.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0014' , @@ -629,8 +644,9 @@ catch_progn_incr0014.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0014' , :: catch_progn_incr0015.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0015.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0015.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0015.mode: 'instantaneous', +catch_progn_incr0015.format: 'CFIO', catch_progn_incr0015.frequency: 030000, catch_progn_incr0015.ref_time: 013000, catch_progn_incr0015.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0015' , @@ -661,8 +677,9 @@ catch_progn_incr0015.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0015' , :: catch_progn_incr0016.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0016.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0016.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0016.mode: 'instantaneous', +catch_progn_incr0016.format: 'CFIO', catch_progn_incr0016.frequency: 030000, catch_progn_incr0016.ref_time: 013000, catch_progn_incr0016.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0016' , @@ -693,8 +710,9 @@ catch_progn_incr0016.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0016' , :: catch_progn_incr0017.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0017.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0017.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0017.mode: 'instantaneous', +catch_progn_incr0017.format: 'CFIO', catch_progn_incr0017.frequency: 030000, catch_progn_incr0017.ref_time: 013000, catch_progn_incr0017.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0017' , @@ -725,8 +743,9 @@ catch_progn_incr0017.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0017' , :: catch_progn_incr0018.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0018.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0018.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0018.mode: 'instantaneous', +catch_progn_incr0018.format: 'CFIO', catch_progn_incr0018.frequency: 030000, catch_progn_incr0018.ref_time: 013000, catch_progn_incr0018.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0018' , @@ -757,8 +776,9 @@ catch_progn_incr0018.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0018' , :: catch_progn_incr0019.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0019.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0019.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0019.mode: 'instantaneous', +catch_progn_incr0019.format: 'CFIO', catch_progn_incr0019.frequency: 030000, catch_progn_incr0019.ref_time: 013000, catch_progn_incr0019.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0019' , @@ -789,8 +809,9 @@ catch_progn_incr0019.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0019' , :: catch_progn_incr0020.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0020.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0020.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0020.mode: 'instantaneous', +catch_progn_incr0020.format: 'CFIO', catch_progn_incr0020.frequency: 030000, catch_progn_incr0020.ref_time: 013000, catch_progn_incr0020.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0020' , @@ -821,8 +842,9 @@ catch_progn_incr0020.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0020' , :: catch_progn_incr0021.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0021.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0021.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0021.mode: 'instantaneous', +catch_progn_incr0021.format: 'CFIO', catch_progn_incr0021.frequency: 030000, catch_progn_incr0021.ref_time: 013000, catch_progn_incr0021.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0021' , @@ -853,8 +875,9 @@ catch_progn_incr0021.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0021' , :: catch_progn_incr0022.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0022.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0022.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0022.mode: 'instantaneous', +catch_progn_incr0022.format: 'CFIO', catch_progn_incr0022.frequency: 030000, catch_progn_incr0022.ref_time: 013000, catch_progn_incr0022.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0022' , @@ -885,8 +908,9 @@ catch_progn_incr0022.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0022' , :: catch_progn_incr0023.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0023.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0023.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0023.mode: 'instantaneous', +catch_progn_incr0023.format: 'CFIO', catch_progn_incr0023.frequency: 030000, catch_progn_incr0023.ref_time: 013000, catch_progn_incr0023.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0023' , @@ -917,8 +941,9 @@ catch_progn_incr0023.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0023' , :: catch_progn_incr0024.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0024.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0024.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0024.mode: 'instantaneous', +catch_progn_incr0024.format: 'CFIO', catch_progn_incr0024.frequency: 030000, catch_progn_incr0024.ref_time: 013000, catch_progn_incr0024.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0024' , @@ -949,8 +974,9 @@ catch_progn_incr0024.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0024' , :: catch_progn_incr0025.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0025.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0025.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0025.mode: 'instantaneous', +catch_progn_incr0025.format: 'CFIO', catch_progn_incr0025.frequency: 030000, catch_progn_incr0025.ref_time: 013000, catch_progn_incr0025.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0025' , @@ -981,8 +1007,9 @@ catch_progn_incr0025.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0025' , :: catch_progn_incr0026.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0026.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0026.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0026.mode: 'instantaneous', +catch_progn_incr0026.format: 'CFIO', catch_progn_incr0026.frequency: 030000, catch_progn_incr0026.ref_time: 013000, catch_progn_incr0026.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0026' , @@ -1013,8 +1040,9 @@ catch_progn_incr0026.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0026' , :: catch_progn_incr0027.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0027.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0027.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0027.mode: 'instantaneous', +catch_progn_incr0027.format: 'CFIO', catch_progn_incr0027.frequency: 030000, catch_progn_incr0027.ref_time: 013000, catch_progn_incr0027.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0027' , @@ -1045,8 +1073,9 @@ catch_progn_incr0027.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0027' , :: catch_progn_incr0028.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0028.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0028.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0028.mode: 'instantaneous', +catch_progn_incr0028.format: 'CFIO', catch_progn_incr0028.frequency: 030000, catch_progn_incr0028.ref_time: 013000, catch_progn_incr0028.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0028' , @@ -1077,8 +1106,9 @@ catch_progn_incr0028.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0028' , :: catch_progn_incr0029.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0029.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0029.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0029.mode: 'instantaneous', +catch_progn_incr0029.format: 'CFIO', catch_progn_incr0029.frequency: 030000, catch_progn_incr0029.ref_time: 013000, catch_progn_incr0029.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0029' , @@ -1109,8 +1139,9 @@ catch_progn_incr0029.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0029' , :: catch_progn_incr0030.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0030.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0030.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0030.mode: 'instantaneous', +catch_progn_incr0030.format: 'CFIO', catch_progn_incr0030.frequency: 030000, catch_progn_incr0030.ref_time: 013000, catch_progn_incr0030.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0030' , @@ -1141,8 +1172,9 @@ catch_progn_incr0030.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0030' , :: catch_progn_incr0031.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0031.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0031.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0031.mode: 'instantaneous', +catch_progn_incr0031.format: 'CFIO', catch_progn_incr0031.frequency: 030000, catch_progn_incr0031.ref_time: 013000, catch_progn_incr0031.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0031' , @@ -1173,8 +1205,9 @@ catch_progn_incr0031.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0031' , :: catch_progn_incr0032.descr: 'Tile-space,3-Hourly,Instantaneous,Single-Level,Assimilation, Land Prognostics Increments', -catch_progn_incr0032.template: '%y4%m2%d2_%h2%n2z.bin', +catch_progn_incr0032.template: '%y4%m2%d2_%h2%n2z.nc4', catch_progn_incr0032.mode: 'instantaneous', +catch_progn_incr0032.format: 'CFIO', catch_progn_incr0032.frequency: 030000, catch_progn_incr0032.ref_time: 013000, catch_progn_incr0032.fields: 'TCFSAT_INCR' , 'CATCHINCR_e0032' , diff --git a/GEOSldas_App/ldas.py b/GEOSldas_App/ldas.py index e49b395a..bdab4f6e 100644 --- a/GEOSldas_App/ldas.py +++ b/GEOSldas_App/ldas.py @@ -92,7 +92,7 @@ def __init__(self, cmdLineArgs): self.nSegments = 1 self.perturb = 0 self.first_ens_id = 0 - self.in_rstfile = None + self.in_rstdir = None self.in_tilefile = None # default string self.ens_id_width = 6 # _eXXXX self.bcs_dir_land = '' @@ -231,6 +231,7 @@ def __init__(self, cmdLineArgs): self.tile_types = self.ExeInputs.get('TILE_TYPES',"100").split() if "100" in self.tile_types : self.with_land = True + assert int(self.ExeInputs['LSM_CHOICE']) <= 2, "\nLSM_CHOICE=3 (Catchment-CN4.5) is no longer supported. Please set LSM_CHOICE to 1 (Catchment) or 2 (Catchment-CN4.0)" if "20" in self.tile_types : self.with_landice = True @@ -268,7 +269,7 @@ def __init__(self, cmdLineArgs): # make sure catchment and vegdyn restart files ( at least one for each) exist if 'CATCH_DEF_FILE' not in self.ExeInputs : self.ExeInputs['CATCH_DEF_FILE']= self.bcs_dir_land + 'clsm/catchment.def' - if (self.with_land) : + if self.with_land : assert os.path.isfile(self.ExeInputs['CATCH_DEF_FILE']),"[%s] file does not exist " % self.ExeInputs['CATCH_DEF_FILE'] # assigning BC files @@ -373,51 +374,44 @@ def __init__(self, cmdLineArgs): in_tilefiles_ = glob.glob(inpdir+'/*.nc4') self.in_tilefile =os.path.realpath(in_tilefiles_[0]) - if self.with_land: - assert int(self.ExeInputs['LSM_CHOICE']) <= 2, "\nLSM_CHOICE=3 (Catchment-CN4.5) is no longer supported. Please set LSM_CHOICE to 1 (Catchment) or 2 (Catchment-CN4.0)" - if RESTART_str in ['1', '2']: - y4m2='Y%4d/M%02d' % (self.begDates[0].year, self.begDates[0].month) - y4m2d2_h2m2='%4d%02d%02d_%02d%02d' % (self.begDates[0].year, self.begDates[0].month, - self.begDates[0].day,self.begDates[0].hour,self.begDates[0].minute) - tmpFile=self.ExeInputs['RESTART_ID']+'.'+self.catch+'_internal_rst.'+y4m2d2_h2m2 - tmpRstDir=self.ExeInputs['RESTART_PATH']+'/'.join([self.ExeInputs['RESTART_ID'],'output', + if RESTART_str in ['1', '2']: + y4m2='Y%4d/M%02d' % (self.begDates[0].year, self.begDates[0].month) + y4m2d2_h2m2='%4d%02d%02d_%02d%02d' % (self.begDates[0].year, self.begDates[0].month, + self.begDates[0].day,self.begDates[0].hour,self.begDates[0].minute) + self.in_rstdir = self.ExeInputs['RESTART_PATH']+'/'.join([self.ExeInputs['RESTART_ID'],'output', self.ExeInputs['RESTART_DOMAIN'],'rs',self.ensdirs[0],y4m2]) - catchRstFile=tmpRstDir+'/'+tmpFile - + if self.with_land: + tmpFile=self.ExeInputs['RESTART_ID']+'.'+self.catch+'_internal_rst.'+y4m2d2_h2m2 + catchRstFile=self.in_rstdir+'/'+tmpFile assert os.path.isfile(catchRstFile), self.catch+'_internal_rst file [%s] does not exist!' %(catchRstFile) - self.in_rstfile = catchRstFile - - if RESTART_str == '1' : - tmpFile=self.ExeInputs['RESTART_ID']+'.vegdyn_internal_rst' - tmpRstDir=self.ExeInputs['RESTART_PATH']+'/'.join([self.ExeInputs['RESTART_ID'],'output', - self.ExeInputs['RESTART_DOMAIN'],'rs',self.ensdirs[0]]) - vegdynRstFile=tmpRstDir+'/'+tmpFile - # if not os.path.isfile(vegdynRstFile): - # assert int(self.ExeInputs['RST_FROM_GLOBAL']) == 1, 'restart from LDASsa should be global' - - tmpFile=self.ExeInputs['RESTART_ID']+'.landpert_internal_rst.'+y4m2d2_h2m2 - tmpRstDir=self.ExeInputs['RESTART_PATH']+'/'.join([self.ExeInputs['RESTART_ID'],'output', - self.ExeInputs['RESTART_DOMAIN'],'rs',self.ensdirs[0],y4m2]) - landpertRstFile=tmpRstDir+'/'+tmpFile - if ( os.path.isfile(landpertRstFile)) : - self.has_geos_pert = True - - if RESTART_str == '0': - if (self.catch == 'catch'): - self.in_rstfile = '/discover/nobackup/projects/gmao/ssd/land/l_data/LandRestarts_for_Regridding' \ - '/Catch/M09/20170101/catch_internal_rst' - self.in_tilefile = '/discover/nobackup/projects/gmao/ssd/land/l_data/geos5/bcs/CLSM_params' \ - '/mkCatchParam_SMAP_L4SM_v002/SMAP_EASEv2_M09/SMAP_EASEv2_M09_3856x1624.til' - elif (self.catch == 'catchcnclm40'): - self.in_rstfile = '/discover/nobackup/projects/gmao/ssd/land/l_data/LandRestarts_for_Regridding' \ - '/CatchCN/M36/20150301_0000/catchcnclm40_internal_dummy' - self.in_tilefile = '/discover/nobackup/projects/gmao/bcs_shared/legacy_bcs/Heracles-NL/SMAP_EASEv2_M36/SMAP_EASEv2_M36_964x406.til' - elif (self.catch == 'catchcnclm45'): - self.in_rstfile = '/discover/nobackup/projects/gmao/ssd/land/l_data/LandRestarts_for_Regridding' \ - '/CatchCN/M36/19800101_0000/catchcnclm45_internal_dummy' - self.in_tilefile = '/discover/nobackup/projects/gmao/bcs_shared/legacy_bcs/Icarus-NLv3/Icarus-NLv3_EASE/SMAP_EASEv2_M36/SMAP_EASEv2_M36_964x406.til' - else: - sys.exit('need to provide at least dummy files') + if RESTART_str == '1': + tmpFile=self.ExeInputs['RESTART_ID']+'.landpert_internal_rst.'+y4m2d2_h2m2 + landpertRstFile=self.in_rstdir+'/'+tmpFile + if ( os.path.isfile(landpertRstFile)) : + self.has_geos_pert = True + + if self.with_landice: + tmpFile=self.ExeInputs['RESTART_ID']+'.landice_internal_rst.'+y4m2d2_h2m2 + landiceRstFile=self.in_rstdir+'/'+tmpFile + assert os.path.isfile(landiceRstFile), 'landice_internal_rst file [%s] does not exist!' %(landiceRstFile) + + if RESTART_str == '0': + assert ( self.with_land and not self.with_landice), "RESTART = 0 is only for land" + if (self.catch == 'catch'): + self.in_rstdir = '/discover/nobackup/projects/gmao/ssd/land/l_data/LandRestarts_for_Regridding' \ + '/Catch/M09/20170101/' #catch_internal_rst + self.in_tilefile = '/discover/nobackup/projects/gmao/ssd/land/l_data/geos5/bcs/CLSM_params' \ + '/mkCatchParam_SMAP_L4SM_v002/SMAP_EASEv2_M09/SMAP_EASEv2_M09_3856x1624.til' + elif (self.catch == 'catchcnclm40'): + self.in_rstdir = '/discover/nobackup/projects/gmao/ssd/land/l_data/LandRestarts_for_Regridding' \ + '/CatchCN/M36/20150301_0000/' #catchcnclm40_internal_dummy + self.in_tilefile = '/discover/nobackup/projects/gmao/bcs_shared/legacy_bcs/Heracles-NL/SMAP_EASEv2_M36/SMAP_EASEv2_M36_964x406.til' + elif (self.catch == 'catchcnclm45'): + self.in_rstdir = '/discover/nobackup/projects/gmao/ssd/land/l_data/LandRestarts_for_Regridding' \ + '/CatchCN/M36/19800101_0000/' #catchcnclm45_internal_dummy + self.in_tilefile = '/discover/nobackup/projects/gmao/bcs_shared/legacy_bcs/Icarus-NLv3/Icarus-NLv3_EASE/SMAP_EASEv2_M36/SMAP_EASEv2_M36_964x406.til' + else: + sys.exit('need to provide at least dummy files') # DEAL WITH mwRTM input from exec self.assim = True if self.ExeInputs.get('LAND_ASSIM', 'NO').upper() == 'YES' and self.with_land else False @@ -851,7 +845,7 @@ def createLnRstBc(self) : config['input']['shared']['expid'] = self.ExeInputs['RESTART_ID'] config['input']['shared']['yyyymmddhh'] = YYYYMMDDHH if RESTART_str != 'M': - config['input']['shared']['rst_dir'] = os.path.dirname(self.in_rstfile)+'/' + config['input']['shared']['rst_dir'] = self.in_rstdir config['input']['surface']['wemin'] = wemin_in config['input']['surface']['catch_model'] = self.catch @@ -919,83 +913,84 @@ def createLnRstBc(self) : pertRstFile = '' print ("restart: " + self.ExeInputs['RESTART']) - if self.ExeInputs['RESTART'].isdigit() : - - if int(self.ExeInputs['RESTART']) == 0 or int(self.ExeInputs['RESTART']) == 2 : - vegdynRstFile = glob.glob(self.bcs_dir_land + 'vegdyn_*.dat')[0] - catchRstFile = glob.glob(self.exphome+'/'+exp_id+'/mk_restarts/*'+self.catch+'_internal_rst.'+YYYYMMDD+'*')[0] - else : # RESTART == 1 - catchRstFile = rstpath+ensdir +'/'+ y4m2+'/'+self.ExeInputs['RESTART_ID']+'.'+self.catch+'_internal_rst.'+y4m2d2_h2m2 - vegdynRstFile= rstpath+ensdir +'/'+self.ExeInputs['RESTART_ID']+ '.vegdyn_internal_rst' - if not os.path.isfile(vegdynRstFile): # no vegdyn restart from LDASsa - if not os.path.isfile(vegdynRstFile0): - vegdynRstFile = glob.glob(self.bcs_dir_land + 'vegdyn_*.dat')[0] - else : - vegdynRstFile = glob.glob(self.bcs_dir_land + 'vegdyn_*.dat')[0] - if self.with_land: - catchRstFile = glob.glob(self.exphome+'/'+exp_id+'/mk_restarts/*'+self.catch+'_internal_rst.'+YYYYMMDD+'*')[0] - - # catchment restart file - if os.path.isfile(catchRstFile) and self.with_land : - catchLocal = self.rstdir+ensdir +'/'+ y4m2+'/'+self.ExeInputs['EXP_ID']+'.'+self.catch+'_internal_rst.'+y4m2d2_h2m2 - if self.isZoomIn : - print( "Creating local catchment restart file... \n") - cmd=self.bindir +'/preprocess_ldas.x zoomin_catchrst '+ catchRstFile +' ' + catchLocal + ' '+ tmp_f2g_file.name - print ("cmd: "+cmd) - sp.call(shlex.split(cmd)) - else : - shutil.copy(catchRstFile,catchLocal) - - catchRstFile = catchLocal - - if '0000' in ensdir : - catchRstFile0 = catchRstFile - else : # re-use 0000 catch file - catchRstFile = catchRstFile0 - - # vegdyn restart file - if os.path.isfile(vegdynRstFile) and self.with_land : - vegdynLocal = self.rstdir+ensdir +'/'+self.ExeInputs['EXP_ID']+'.vegdyn_internal_rst' - if self.isZoomIn : - print ("Creating the local veg restart file... \n") - cmd=self.bindir + '/preprocess_ldas.x zoomin_vegrst '+ vegdynRstFile +' ' + vegdynLocal + ' '+ tmp_f2g_file.name - print ("cmd: " + cmd) - sp.call(shlex.split(cmd)) - else : - shutil.copy(vegdynRstFile,vegdynLocal) - - vegdynRstFile = vegdynLocal - - if '0000' in ensdir : - vegdynRstFile0 = vegdynRstFile - else : - vegdynRstFile = vegdynRstFile0 + if self.with_land : + if self.ExeInputs['RESTART'].isdigit() : + + if int(self.ExeInputs['RESTART']) == 0 or int(self.ExeInputs['RESTART']) == 2 : + vegdynRstFile = glob.glob(self.bcs_dir_land + 'vegdyn_*.dat')[0] + catchRstFile = glob.glob(self.exphome+'/'+exp_id+'/mk_restarts/*'+self.catch+'_internal_rst.'+YYYYMMDD+'*')[0] + else : # RESTART == 1 + catchRstFile = rstpath+ensdir +'/'+ y4m2+'/'+self.ExeInputs['RESTART_ID']+'.'+self.catch+'_internal_rst.'+y4m2d2_h2m2 + vegdynRstFile= rstpath+ensdir +'/'+self.ExeInputs['RESTART_ID']+ '.vegdyn_internal_rst' + if not os.path.isfile(vegdynRstFile): # no vegdyn restart from LDASsa + if not os.path.isfile(vegdynRstFile0): + vegdynRstFile = glob.glob(self.bcs_dir_land + 'vegdyn_*.dat')[0] + else : + vegdynRstFile = glob.glob(self.bcs_dir_land + 'vegdyn_*.dat')[0] + if self.with_land: + catchRstFile = glob.glob(self.exphome+'/'+exp_id+'/mk_restarts/*'+self.catch+'_internal_rst.'+YYYYMMDD+'*')[0] + + # catchment restart file + if os.path.isfile(catchRstFile) : + catchLocal = self.rstdir+ensdir +'/'+ y4m2+'/'+self.ExeInputs['EXP_ID']+'.'+self.catch+'_internal_rst.'+y4m2d2_h2m2 + if self.isZoomIn : + print( "Creating local catchment restart file... \n") + cmd=self.bindir +'/preprocess_ldas.x zoomin_catchrst '+ catchRstFile +' ' + catchLocal + ' '+ tmp_f2g_file.name + print ("cmd: "+cmd) + sp.call(shlex.split(cmd)) + else : + shutil.copy(catchRstFile,catchLocal) + + catchRstFile = catchLocal + + if '0000' in ensdir : + catchRstFile0 = catchRstFile + else : # re-use 0000 catch file + catchRstFile = catchRstFile0 + + # vegdyn restart file + if os.path.isfile(vegdynRstFile) : + vegdynLocal = self.rstdir+ensdir +'/'+self.ExeInputs['EXP_ID']+'.vegdyn_internal_rst' + if self.isZoomIn : + print ("Creating the local veg restart file... \n") + cmd=self.bindir + '/preprocess_ldas.x zoomin_vegrst '+ vegdynRstFile +' ' + vegdynLocal + ' '+ tmp_f2g_file.name + print ("cmd: " + cmd) + sp.call(shlex.split(cmd)) + else : + shutil.copy(vegdynRstFile,vegdynLocal) + + vegdynRstFile = vegdynLocal + + if '0000' in ensdir : + vegdynRstFile0 = vegdynRstFile + else : + vegdynRstFile = vegdynRstFile0 landiceRstFile = '' if self.with_landice : - if self.ExeInputs['RESTART'].isdigit(): - if int(self.ExeInputs['RESTART']) == 0 or int(self.ExeInputs['RESTART']) == 2 : - print("RESTART=0 and RESTART=2 not supported for landice tiles. Please use RESTART=M (MERRA-2).") + if RESTART_str == '0' : + exit("RESTART=0 not supported for landice tiles. Please use RESTART=M, 1, or 2") + if RESTART_str == '1' : landiceRstFile = rstpath+ensdir +'/'+ y4m2+'/'+self.ExeInputs['RESTART_ID']+'.'+'landice_internal_rst.'+y4m2d2_h2m2 - else: + if RESTART_str == '2' or RESTART_str == 'M': landiceRstFile = glob.glob(self.exphome+'/'+exp_id+'/mk_restarts/*'+'landice_internal_rst.'+YYYYMMDD+'*')[0] - if os.path.isfile(landiceRstFile) : - landiceLocal = self.rstdir+ensdir +'/'+ y4m2+'/'+self.ExeInputs['EXP_ID']+'.landice_internal_rst.'+y4m2d2_h2m2 - if self.isZoomIn : - print ("Creating zoom-in of landice restart file... \n") - cmd=self.bindir + '/preprocess_ldas.x zoomin_landicerst '+ landiceRstFile +' ' + landiceLocal + ' '+ tmp_f2g_file.name - print ("cmd: " + cmd) - sp.call(shlex.split(cmd)) - else : - shutil.copy(landiceRstFile,landiceLocal) + if os.path.isfile(landiceRstFile) : + landiceLocal = self.rstdir+ensdir +'/'+ y4m2+'/'+self.ExeInputs['EXP_ID']+'.landice_internal_rst.'+y4m2d2_h2m2 + if self.isZoomIn : + print ("Creating zoom-in of landice restart file... \n") + cmd=self.bindir + '/preprocess_ldas.x zoomin_landicerst '+ landiceRstFile +' ' + landiceLocal + ' '+ tmp_f2g_file.name + print ("cmd: " + cmd) + sp.call(shlex.split(cmd)) + else : + shutil.copy(landiceRstFile,landiceLocal) - landiceRstFile = landiceLocal + landiceRstFile = landiceLocal - if '0000' in ensdir : - landiceRstFile0 = landiceRstFile - else : - landiceRstFile = landiceRstFile0 + if '0000' in ensdir : + landiceRstFile0 = landiceRstFile + else : + landiceRstFile = landiceRstFile0 if (self.has_geos_pert and self.perturb == 1) : pertRstFile = rstpath+ensdir +'/'+ y4m2+'/'+self.ExeInputs['RESTART_ID']+'.landpert_internal_rst.'+y4m2d2_h2m2 diff --git a/GEOSldas_App/lenkf_j_template.py b/GEOSldas_App/lenkf_j_template.py index d18240fd..60443ff0 100644 --- a/GEOSldas_App/lenkf_j_template.py +++ b/GEOSldas_App/lenkf_j_template.py @@ -518,11 +518,9 @@ if($file_ext == nc4) then /bin/mv $ofile $THISDIR/. else - set binfile = `echo $ofile | rev | cut -d'.' -f2- | rev` - set decr_file = `echo $ofile | rev | cut -d'.' -f3- | rev`.ctl - ($GEOSBIN/tile_bin2nc4.x $binfile $decr_file $TILECOORD ; \\ - /bin/mv ${{binfile}}.nc4 $THISDIR/. ; \\ - /bin/rm ${{binfile}}.bin) & + set rc = -1 + echo "ERROR: detected unexpected binary output file(s), exit without post-processing" + exit $rc endif end wait diff --git a/GEOSldas_App/tile_bin2nc4.F90 b/GEOSldas_App/tile_bin2nc4.F90 deleted file mode 100644 index 890bfd82..00000000 --- a/GEOSldas_App/tile_bin2nc4.F90 +++ /dev/null @@ -1,555 +0,0 @@ -PROGRAM tile_bin2nc4 - - implicit none - INCLUDE 'netcdf.inc' - - integer :: i,k, n, NTILES - integer :: NCFOutID, Vid, STATUS, CellID, TimID, nVars - character(256) :: Usage="tile_bin2nc4.x BINFILE DESCRIPTOR TILECOORD" ! DESCRIPTOR = GrADS ctl file generated by MAPL from HISTORY.rc - character(512) :: BINFILE, TILECOORD, DESCRIPTOR, arg(3) - character(128) :: MYNAME, BUF - - integer, dimension(8) :: date_time_values - character (22) :: time_stamp - real, allocatable, dimension (:) :: lons, lats, var - integer, allocatable, dimension (:) :: tileid, i_index, j_index - - integer :: myunit1, myunit2 - real :: undef - - ! process command line arguments - - I = command_argument_count() - - if( I /=3 ) then - print *, "Wrong Number of arguments: ", i - print *, trim(Usage) - stop - end if - - do n=1,I - call get_command_argument(n,arg(n)) - enddo - - call get_environment_variable ("MYNAME", MYNAME) - - read(arg(1),'(a)') BINFILE - read(arg(2),'(a)') DESCRIPTOR - read(arg(3),'(a)') TILECOORD - -! print *,MYNAME -! print *,trim(BINFILE) -! print *,trim(DESCRIPTOR) -! print *,trim(TILECOORD) - - ! read TILECOORD file - - open (newunit=myunit1, file = trim(TILECOORD), form = 'unformatted', action ='read') - read (myunit1) NTILES - - allocate (lons (1:NTILES)) - allocate (lats (1:NTILES)) - allocate (tileid (1:NTILES)) - allocate (var (1:NTILES)) - allocate (i_index(1:NTILES)) - allocate (j_index(1:NTILES)) - - read (myunit1) tileid - read (myunit1) tileid - read (myunit1) tileid - read (myunit1) lons - read (myunit1) lats - read (myunit1) var - read (myunit1) var - read (myunit1) var - read (myunit1) var - read (myunit1) i_index - read (myunit1) j_index - - close (myunit1,status = 'keep') - - ! read DESCRIPTOR file (=GrADS ctl file generated by MAPL from HISTORY.rc file) - - open (newunit=myunit1, file = trim(DESCRIPTOR), form ='formatted', action = 'read') - nVars = 0 - - undef = 0.100000E+16 - k = 0 - do - read(myunit1, '(a)', iostat=status) buf - if (status /= 0) exit - k = k + 1 - if(buf(1:index(buf,' ') -1) == 'vars') then - i = index(buf,' ') - read (buf(i:),*, IOSTAT = n) nVars - endif - if(buf(1:index(buf,' ') -1) == 'undef') then - i = index(buf,' ') - read (buf(i:),*, IOSTAT = n) undef - endif - if(nVars /= 0) exit - - end do - - ! prep nc4 file - - status = NF_CREATE (trim(BINFILE)//'.nc4', NF_NETCDF4, NCFOutID) - status = NF_DEF_DIM(NCFOutID, 'tile' , NTILES, CellID) - status = NF_DEF_DIM(NCFOutID, 'time' , NF_UNLIMITED, TimID) - - status = NF_DEF_VAR(NCFOutID, 'lon' , NF_FLOAT, 1 ,CellID, vid) - status = NF_PUT_ATT_TEXT(NCFOutID, vid, 'long_name', & - LEN_TRIM('longitude'), 'longitude') - status = NF_DEF_VAR(NCFOutID, 'lat' , NF_FLOAT, 1 ,CellID, vid) - status = NF_PUT_ATT_TEXT(NCFOutID, vid, 'long_name', & - LEN_TRIM('latitude'), 'latitude') - status = NF_DEF_VAR(NCFOutID, 'IG' , NF_INT, 1 ,CellID, vid) - status = NF_PUT_ATT_TEXT(NCFOutID, vid, 'long_name', & - LEN_TRIM('I_INDEX'), 'I_INDEX') - status = NF_DEF_VAR(NCFOutID, 'JG' , NF_INT, 1 ,CellID, vid) - status = NF_PUT_ATT_TEXT(NCFOutID, vid, 'long_name', & - LEN_TRIM('J_INDEX'), 'J_INDEX') - - do n = 1, nVars - read(myunit1, '(a)', iostat=status) buf - status = NF_DEF_VAR(NCFOutID,buf(1:index(buf,' ') -1) , NF_FLOAT, 2 ,(/CellID, TimID/), vid) - status = NF_PUT_ATT_TEXT(NCFOutID, vid, 'long_name', & - LEN_TRIM(getAttribute(buf(1:index(buf,' ') -1), LNAME = 1)), & - getAttribute(buf(1:index(buf,' ') -1), LNAME = 1)) - status = NF_PUT_ATT_TEXT(NCFOutID, vid, 'units', & - LEN_TRIM(getAttribute(buf(1:index(buf,' ') -1), UNT = 1)), & - getAttribute(buf(1:index(buf,' ') -1), UNT = 1)) - status = nf_put_att_real(NCFOutID, vid, '_FillValue',NF_FLOAT, 1, undef) - end do - - call date_and_time(VALUES=date_time_values) - - write (time_stamp,'(i4.4,a1,i2.2,a1,i2.2,1x,a2,1x,i2.2,a1,i2.2,a1,i2.2)') & - date_time_values(1),'-',date_time_values(2),'-',date_time_values(3),'at', & - date_time_values(5),':',date_time_values(6),':',date_time_values(7) - - status = NF_PUT_ATT_TEXT(NCFOutID, NF_GLOBAL, 'CreatedBy', LEN_TRIM(MYNAME), & - trim(MYNAME)) - status = NF_PUT_ATT_TEXT(NCFOutID, NF_GLOBAL, 'Date' , LEN_TRIM(time_stamp),trim(time_stamp)) - - status = NF_ENDDEF(NCFOutID) - - status = NF_PUT_VARA_REAL(NCFOutID,VarID(NCFOutID,'lon' ) ,(/1/),(/NTILES/),lons ) - status = NF_PUT_VARA_REAL(NCFOutID,VarID(NCFOutID,'lat' ) ,(/1/),(/NTILES/),lats ) - status = NF_PUT_VARA_INT (NCFOutID,VarID(NCFOutID,'IG' ) ,(/1/),(/NTILES/),i_index ) - status = NF_PUT_VARA_INT (NCFOutID,VarID(NCFOutID,'JG' ) ,(/1/),(/NTILES/),j_index ) - - ! read data from binary file and write into nc4 file - - open (newunit=myunit2, file = trim(BINFILE)//'.bin', form = 'unformatted', action = 'read') - - rewind (myunit1) - do i = 1, k - read(myunit1, '(a)', iostat=status) buf - end do - - do n = 1, nVars - read (myunit1, '(a)', iostat=status) buf - read (myunit2) var - status = NF_PUT_VARA_REAL(NCFOutID,VarID(NCFOutID,buf(1:index(buf,' ') -1)) ,(/1,1/),(/NTILES,1/),var ) - end do - - STATUS = NF_CLOSE (NCFOutID) - close (myunit1) - close (myunit2) - -contains - - ! ---------------------------------------------------------------------- - - integer function VarID (NCFID, VNAME) - - integer, intent (in) :: NCFID - character(*), intent (in) :: VNAME - integer :: status - - STATUS = NF_INQ_VARID (NCFID, trim(VNAME) ,VarID) - IF (STATUS .NE. NF_NOERR) & - CALL HANDLE_ERR(STATUS, trim(VNAME)) - - end function VarID - - ! ----------------------------------------------------------------------- - - SUBROUTINE HANDLE_ERR(STATUS, Line) - - INTEGER, INTENT (IN) :: STATUS - CHARACTER(*), INTENT (IN) :: Line - - IF (STATUS .NE. NF_NOERR) THEN - PRINT *, trim(Line),': ',NF_STRERROR(STATUS) - STOP 'Stopped' - ENDIF - - END SUBROUTINE HANDLE_ERR - - ! *********************************************************************** - - FUNCTION getAttribute (SHORT_NAME, LNAME, UNT) result (str_atr) - - character(*), intent(in) :: SHORT_NAME - integer, intent (in), optional :: LNAME, UNT - character(128) :: str_atr, LONG_NAME, UNITS - - SELECT case (trim(SHORT_NAME)) - - ! For L4_SM - ! reichle, 20 May 2020: verified SHORT_NAME and corrected UNITS to match SMAP L4_SM Product Specs; LONG_NAME (mostly) from GEOS_CatchGridComp.F90 - ! reichle, 14 Feb 2022: added "WATERTABLED" (now: "PEATCLSM_WATERLEVEL") and "FSWCHANGE" (now: "PEATCLSM_FSWCHANGE") - ! reichle, 21 Feb 2022: added "mwrtm_vegopacity" - - case ('sm_surface'); LONG_NAME = 'water_surface_layer'; UNITS = 'm3 m-3' - case ('sm_rootzone'); LONG_NAME = 'water_root_zone'; UNITS = 'm3 m-3' - case ('sm_profile'); LONG_NAME = 'water_ave_prof'; UNITS = 'm3 m-3' - case ('sm_surface_wetness'); LONG_NAME = 'surface_soil_wetness'; UNITS = '1' - case ('sm_rootzone_wetness'); LONG_NAME = 'root_zone_soil_wetness'; UNITS = '1' - case ('sm_profile_wetness'); LONG_NAME = 'ave_prof_soil_wetness'; UNITS = '1' - case ('surface_temp'); LONG_NAME = 'ave_catchment_temp_incl_snw'; UNITS = 'K' - case ('soil_temp_layer1'); LONG_NAME = 'soil_temperatures_layer_1'; UNITS = 'K' - case ('soil_temp_layer2'); LONG_NAME = 'soil_temperatures_layer_2'; UNITS = 'K' - case ('soil_temp_layer3'); LONG_NAME = 'soil_temperatures_layer_3'; UNITS = 'K' - case ('soil_temp_layer4'); LONG_NAME = 'soil_temperatures_layer_4'; UNITS = 'K' - case ('soil_temp_layer5'); LONG_NAME = 'soil_temperatures_layer_5'; UNITS = 'K' - case ('soil_temp_layer6'); LONG_NAME = 'soil_temperatures_layer_6'; UNITS = 'K' - case ('snow_mass'); LONG_NAME = 'snow_mass'; UNITS = 'kg m-2' - case ('snow_depth'); LONG_NAME = 'snow_depth_in_snow_covered_area'; UNITS = 'm' - case ('land_evapotranspiration_flux'); LONG_NAME = 'Evaporation_land'; UNITS = 'kg m-2 s-1' - case ('overland_runoff_flux'); LONG_NAME = 'runoff_flux'; UNITS = 'kg m-2 s-1' - case ('baseflow_flux'); LONG_NAME = 'baseflow_flux'; UNITS = 'kg m-2 s-1' - case ('snow_melt_flux'); LONG_NAME = 'Snowmelt_flux_land'; UNITS = 'kg m-2 s-1' - case ('soil_water_infiltration_flux'); LONG_NAME = 'rainwater_infiltration_flux'; UNITS = 'kg m-2 s-1' - case ('land_fraction_saturated'); LONG_NAME = 'fractional_area_of_saturated_zone'; UNITS = '1' - case ('land_fraction_unsaturated'); LONG_NAME = 'fractional_area_of_unsaturated_zone'; UNITS = '1' - case ('land_fraction_wilting'); LONG_NAME = 'fractional_area_of_wilting_zone'; UNITS = '1' - case ('land_fraction_snow_covered'); LONG_NAME = 'fractional_area_of_land_snowcover'; UNITS = '1' - case ('heat_flux_sensible'); LONG_NAME = 'Sensible_heat_flux_land'; UNITS = 'W m-2' - case ('heat_flux_latent'); LONG_NAME = 'Latent_heat_flux_land'; UNITS = 'W m-2' - case ('heat_flux_ground'); LONG_NAME = 'Ground_heating_land'; UNITS = 'W m-2' - case ('net_downward_shortwave_flux'); LONG_NAME = 'Net_shortwave_land'; UNITS = 'W m-2' - case ('net_downward_longwave_flux'); LONG_NAME = 'Net_longwave_land'; UNITS = 'W m-2' - case ('radiation_shortwave_downward_flux');LONG_NAME = 'Incident_shortwave_land'; UNITS = 'W m-2' - case ('radiation_longwave_absorbed_flux'); LONG_NAME = 'surface_absorbed_longwave_flux'; UNITS = 'W m-2' - case ('precipitation_total_surface_flux'); LONG_NAME = 'RainfSnowf'; UNITS = 'kg m-2 s-1' - case ('snowfall_surface_flux'); LONG_NAME = 'snowfall'; UNITS = 'kg m-2 s-1' - case ('surface_pressure'); LONG_NAME = 'surface_pressure'; UNITS = 'Pa' - case ('height_lowatmmodlay'); LONG_NAME = 'reference_height_for_Tair_Qair_Wind'; UNITS = 'm' - case ('temp_lowatmmodlay'); LONG_NAME = 'air_temperature_at_RefH'; UNITS = 'K' - case ('specific_humidity_lowatmmodlay'); LONG_NAME = 'specific_humidity_at_RefH'; UNITS = 'kg kg-1' - case ('windspeed_lowatmmodlay'); LONG_NAME = 'wind_speed_at_RefH'; UNITS = 'm s-1' - case ('vegetation_greenness_fraction'); LONG_NAME = 'greeness_fraction'; UNITS = '1' - case ('leaf_area_index'); LONG_NAME = 'leaf_area_index'; UNITS = 'm2 m-2' - case ('depth_to_water_table_from_surface_in_peat'); LONG_NAME = 'depth_to_water_table_from_surface_in_peat'; UNITS = 'm' - case ('free_surface_water_on_peat_flux'); LONG_NAME = 'change_in_free_surface_water_reservoir_on_peat'; UNITS = 'kg m-2 s-1' - case ('mwrtm_vegopacity'); LONG_NAME = 'Lband_microwave_vegopacity_normalized_with_cos_inc_angle'; UNITS = '1' - - ! additional defintions for SMAP Nature Run - reichle, 20 May 2020 - - case ('snow_temp_layer1'); LONG_NAME = 'temperature_top_snow_layer'; UNITS = 'K' - case ('tb_h'); LONG_NAME = 'brightness_temperature_land_1410MHz_40deg_Hpol'; UNITS = 'K' - case ('tb_v'); LONG_NAME = 'brightness_temperature_land_1410MHz_40deg_Vpol'; UNITS = 'K' - case ('TB_LAND_1410MHZ_40DEG_HPOL'); LONG_NAME = 'brightness_temperature_land_1410MHz_40deg_Hpol'; UNITS = 'K' - case ('TB_LAND_1410MHZ_40DEG_VPOL'); LONG_NAME = 'brightness_temperature_land_1410MHz_40deg_Vpol'; UNITS = 'K' - - ! End L4_SM ------------------------------------------------------------------------------------------------------------------------------------------------- - - case ('Tair'); LONG_NAME = 'air_temperature_at_RefH'; UNITS = 'K' - case ('TA'); LONG_NAME = 'air_temperature_at_RefH'; UNITS = 'K' - case ('Qair'); LONG_NAME = 'specific_humidity_at_RefH'; UNITS = 'kg kg-1' - case ('QA'); LONG_NAME = 'specific_humidity_at_RefH'; UNITS = 'kg kg-1' - case ('LWdown'); LONG_NAME = 'surface_absorbed_longwave_flux'; UNITS = 'W m-2' - case ('LWDNSRF'); LONG_NAME = 'surface_absorbed_longwave_flux'; UNITS = 'W m-2' - case ('SWdown'); LONG_NAME = 'downward_shortwave_radiation'; UNITS = 'W m-2' - case ('Wind'); LONG_NAME = 'wind_speed_at_RefH'; UNITS = 'm s-1' - case ('UU'); LONG_NAME = 'wind_speed_at_RefH'; UNITS = 'm s-1' - case ('Psurf'); LONG_NAME = 'surface_pressure'; UNITS = 'Pa' - case ('PS'); LONG_NAME = 'surface_pressure'; UNITS = 'Pa' - case ('Rainf_C'); LONG_NAME = 'convective_rainfall'; UNITS = 'kg m-2 s-1' - case ('Rainf'); LONG_NAME = 'liquid_water_precipitation'; UNITS = 'kg m-2 s-1' - case ('Snowf'); LONG_NAME = 'total_snowfall'; UNITS = 'kg m-2 s-1' - case ('RainfSnowf'); LONG_NAME = 'RainfSnowf'; UNITS = 'kg m-2 s-1' - case ('SWnet'); LONG_NAME = 'downward_net_shortwave_radiation'; UNITS = 'W m-2' - case ('RefH'); LONG_NAME = 'reference_height_for_Tair_Qair_Wind'; UNITS = 'm' - case ('DZ'); LONG_NAME = 'reference_height_for_Tair_Qair_Wind'; UNITS = 'm' - case ('CATDEF'); LONG_NAME = 'catchment_deficit'; UNITS = 'kg m-2' - case ('RZEXC'); LONG_NAME = 'root_zone_excess'; UNITS = 'kg m-2' - case ('SRFEXC'); LONG_NAME = 'surface_excess'; UNITS = 'kg m-2' - case ('CAPAC', 'INTRWATR'); LONG_NAME = 'vegetation_interception_water_storage'; UNITS = 'kg m-2' - case ('WESNN1'); LONG_NAME = 'snow_mass_layer_1'; UNITS = 'kg m-2' - case ('WESNN2'); LONG_NAME = 'snow_mass_layer_2'; UNITS = 'kg m-2' - case ('WESNN3'); LONG_NAME = 'snow_mass_layer_3'; UNITS = 'kg m-2' - case ('HTSNNN1'); LONG_NAME = 'heat_content_snow_layer_1'; UNITS = 'J m-2' - case ('HTSNNN2'); LONG_NAME = 'heat_content_snow_layer_2'; UNITS = 'J m-2' - case ('HTSNNN3'); LONG_NAME = 'heat_content_snow_layer_3'; UNITS = 'J m-2' - case ('SNDZN1'); LONG_NAME = 'snow_depth_layer_1'; UNITS = 'm' - case ('SNDZN2'); LONG_NAME = 'snow_depth_layer_2'; UNITS = 'm' - case ('SNDZN3'); LONG_NAME = 'snow_depth_layer_3'; UNITS = 'm' - case ('FICE1'); LONG_NAME = 'snow_frozen_fraction_layer_1'; UNITS = '1' - case ('FICE2'); LONG_NAME = 'snow_frozen_fraction_layer_2'; UNITS = '1' - case ('FICE3'); LONG_NAME = 'snow_frozen_fraction_layer_3'; UNITS = '1' - case ('ALBVR'); LONG_NAME = 'surface_reflectivity_for_visible_beam'; UNITS = '1' - case ('ALBVF'); LONG_NAME = 'surface_reflectivity_for_visible_diffuse'; UNITS = '1' - case ('ALBNR'); LONG_NAME = 'surface_reflectivity_for_near_infared_beam'; UNITS = '1' - case ('ALBNF'); LONG_NAME = 'surface_reflectivity_for_near_infrared_diffuse'; UNITS = '1' - case ('HLWUP'); LONG_NAME = 'surface_emitted_longwave_flux'; UNITS = 'W m-2' - case ('GWETPROF'); LONG_NAME = 'soil_wetness_profile'; UNITS = '1' - case ('GWETROOT'); LONG_NAME = 'soil_wetness_rootzone'; UNITS = '1' - case ('GWETTOP'); LONG_NAME = 'soil_wetness_surface'; UNITS = '1' - case ('PRMC'); LONG_NAME = 'soil_moisture_profile'; UNITS = 'm3 m-3' - case ('RZMC'); LONG_NAME = 'soil_moisture_rootzone'; UNITS = 'm3 m-3' - case ('SFMC'); LONG_NAME = 'soil_moisture_surface'; UNITS = 'm3 m-3' - case ('TPSNOW', 'TPSNOWLAND'); LONG_NAME = 'surface_temperature_of_snow_on_land'; UNITS = 'K' - case ('TUNST' , 'TUNSTLAND'); LONG_NAME = 'surface_temperature_of_unsaturated_zone'; UNITS = 'K' - case ('TSAT' , 'TSATLAND'); LONG_NAME = 'surface_temperature_of_saturated_zone'; UNITS = 'K' - case ('TWLT' , 'TWLTLAND'); LONG_NAME = 'surface_temperature_of_wilting_zone'; UNITS = 'K' - case ('TSURF', 'TPSURF', 'TSURFLAND'); LONG_NAME = 'surface_temperature_of_land_incl_snow'; UNITS = 'K' - case ('GRN'); LONG_NAME = 'vegetation_greenness_fraction'; UNITS = '1' - case ('LAI'); LONG_NAME = 'leaf_area_index'; UNITS = '1' - case ('TP1', 'TSOIL1'); LONG_NAME = 'soil_temperature_layer_1'; UNITS = 'K' ! units now K, rreichle & borescan, 6 Nov 2020 - case ('TP2', 'TSOIL2'); LONG_NAME = 'soil_temperature_layer_2'; UNITS = 'K' ! units now K, rreichle & borescan, 6 Nov 2020 - case ('TP3', 'TSOIL3'); LONG_NAME = 'soil_temperature_layer_3'; UNITS = 'K' ! units now K, rreichle & borescan, 6 Nov 2020 - case ('TP4', 'TSOIL4'); LONG_NAME = 'soil_temperature_layer_4'; UNITS = 'K' ! units now K, rreichle & borescan, 6 Nov 2020 - case ('TP5', 'TSOIL5'); LONG_NAME = 'soil_temperature_layer_5'; UNITS = 'K' ! units now K, rreichle & borescan, 6 Nov 2020 - case ('TP6', 'TSOIL6'); LONG_NAME = 'soil_temperature_layer_6'; UNITS = 'K' ! units now K, rreichle & borescan, 6 Nov 2020 - case ('PRECTOTLAND', 'PRECTOTCORRLAND'); LONG_NAME = 'Total_precipitation_land'; UNITS = 'kg m-2 s-1' - case ('PRECSNOLAND', 'PRECSNOCORRLAND'); LONG_NAME = 'snowfall_land'; UNITS = 'kg m-2 s-1' - case ('SNOWMASS', 'SNOMAS'); LONG_NAME = 'snow_mass'; UNITS = 'kg m-2' - case ('TSLAND', 'SNOMASLAND'); LONG_NAME = 'Total_snow_storage_land'; UNITS = 'kg m-2' - case ('SNO'); LONG_NAME = 'snowfall'; UNITS = 'kg m-2 s-1' - case ('SNODP'); LONG_NAME = 'snow_depth_within_snow_covered_area_fraction'; UNITS = 'm' - case ('SNODPLAND'); LONG_NAME = 'snow_depth_within_snow_covered_area_fraction_on_land'; UNITS = 'm' - case ('EVPSOIL', 'LHLANDSOIL'); LONG_NAME = 'baresoil_evaporation_latent_heat_flux'; UNITS = 'W m-2' - case ('EVPTRNS', 'LHLANDTRNS'); LONG_NAME = 'transpiration_latent_heat_flux'; UNITS = 'W m-2' - case ('EVPINTR', 'LHLANDINTR'); LONG_NAME = 'interception_loss_latent_heat_flux'; UNITS = 'W m-2' - case ('EVPSBLN', 'LHLANDSBLN'); LONG_NAME = 'snowpack_evaporation_latent_heat_flux_on_land'; UNITS = 'W m-2' - case ('EVPSNO'); LONG_NAME = 'snowpack_evaporation_latent_heat_flux'; UNITS = 'W m-2' ! avg across all tile types - case ('RUNOFF'); LONG_NAME = 'runoff_total_flux'; UNITS = 'kg m-2 s-1' ! avg across all tile types - case ('RUNSURF', 'RUNSURFLAND'); LONG_NAME = 'overland runoff including throughflow'; UNITS = 'kg m-2 s-1' - case ('BASEFLOW'); LONG_NAME = 'baseflow_flux'; UNITS = 'kg m-2 s-1' - case ('BASEFLOWLAND'); LONG_NAME = 'baseflow_flux_land'; UNITS = 'kg m-2 s-1' - case ('SMLAND'); LONG_NAME = 'Snowmelt_flux_land'; UNITS = 'kg m-2 s-1' - case ('QINFIL', 'QINFILLAND'); LONG_NAME = 'Soil_water_infiltration_rate'; UNITS = 'kg m-2 s-1' - case ('FRUNST', 'FRLANDUNST'); LONG_NAME = 'fractional_area_of_unsaturated_zone'; UNITS = '1' - case ('FRSAT' , 'FRLANDSAT' ); LONG_NAME = 'fractional_area_of_saturated_zone'; UNITS = '1' - case ('FRSNO' , 'FRLANDSNO' ); LONG_NAME = 'fractional_area_of_snow_on_land'; UNITS = '1' - case ('FRWLT' , 'FRLANDWLT' ); LONG_NAME = 'fractional_area_of_wilting_zone'; UNITS = '1' - case ('PARDFLAND'); LONG_NAME = 'surface_downwelling_PAR_diffuse_flux'; UNITS = 'W m-2' - case ('PARDRLAND'); LONG_NAME = 'surface_downwelling_PAR_beam_flux'; UNITS = 'W m-2' - case ('SHLAND'); LONG_NAME = 'Sensible_heat_flux_land'; UNITS = 'W m-2' - case ('LHLAND'); LONG_NAME = 'Latent_heat_flux_land'; UNITS = 'W m-2' - case ('EVLAND'); LONG_NAME = 'Total_evaporation_land'; UNITS = 'kg m-2 s-1' - case ('LWLAND'); LONG_NAME = 'Net_longwave_flux_land'; UNITS = 'W m-2' - case ('SWLAND'); LONG_NAME = 'Net_shortwave_flux_land'; UNITS = 'W m-2' - case ('SWDOWNLAND'); LONG_NAME = 'Incident_shortwave_flux_land'; UNITS = 'W m-2' - case ('GHLAND'); LONG_NAME = 'Ground_heating_flux_land'; UNITS = 'W m-2' - case ('TWLAND'); LONG_NAME = 'total_water_storage_land'; UNITS = 'kg m-2' - case ('TELAND'); LONG_NAME = 'Total_energy_storage_land'; UNITS = 'J m-2' - case ('WCHANGE','WCHANGELAND'); LONG_NAME = 'rate_of_change_of_total_land_water'; UNITS = 'kg m-2 s-1' - case ('ECHANGE','ECHANGELAND'); LONG_NAME = 'rate_of_change_of_total_land_energy'; UNITS = 'W m-2' - case ('SPLAND', 'SPSHLAND'); LONG_NAME = 'Spurious_sensible_heat_flux_land'; UNITS = 'W m-2' - case ('SPLH' , 'SPLHLAND'); LONG_NAME = 'Spurious_latent_heat_flux_land'; UNITS = 'W m-2' - case ('SPWATR', 'SPEVLAND'); LONG_NAME = 'Spurious_evapotranspiration_flux_land'; UNITS = 'kg m-2 s-1' - case ('SPSNOW', 'SPSNLAND'); LONG_NAME = 'Spurious_snow_energy_flux_land'; UNITS = 'W m-2' - case ('PEATCLSM_WATERLEVEL'); LONG_NAME = 'depth_to_water_table_from_surface_in_peat'; UNITS = 'm' - case ('PEATCLSM_FSWCHANGE'); LONG_NAME = 'change_in_free_surface_water_reservoir_on_peat'; UNITS = 'kg m-2 s-1' - case ('CNLAI'); LONG_NAME = 'CN_exposed_leaf-area_index'; UNITS = '1' - case ('CNTLAI'); LONG_NAME = 'CN_total_leaf-area_index'; UNITS = '1' - case ('CNSAI'); LONG_NAME = 'CN_exposed_stem-area_index'; UNITS = '1' - case ('CNTOTC'); LONG_NAME = 'CN_total_carbon'; UNITS = 'kg m-2' - case ('CNVEGC'); LONG_NAME = 'CN_total_vegetation_carbon'; UNITS = 'kg m-2' - case ('CNROOT'); LONG_NAME = 'CN_total_root_carbon'; UNITS = 'kg m-2' - case ('CNNPP'); LONG_NAME = 'CN_net_primary_production'; UNITS = 'kg m-2 s-1' - case ('CNGPP'); LONG_NAME = 'CN_gross_primary_production'; UNITS = 'kg m-2 s-1' - case ('CNSR'); LONG_NAME = 'CN_total_soil_respiration'; UNITS = 'kg m-2 s-1' - case ('CNNEE'); LONG_NAME = 'CN_net_ecosystem_exchange'; UNITS = 'kg m-2 s-1' - case ('CNXSMR'); LONG_NAME = 'abstract_C_pool_to_meet_excess_MR_demand'; UNITS = 'kg m-2' - case ('CNADD'); LONG_NAME = 'CN_added_to_maintain_positive_C'; UNITS = 'kg m-2 s-1' - case ('PARABS'); LONG_NAME = 'absorbed_PAR'; UNITS = 'W m-2' - case ('PARINC'); LONG_NAME = 'incident_PAR'; UNITS = 'W m-2' - case ('SCSAT'); LONG_NAME = 'saturated_stomatal_conductance'; UNITS = 'm s-1' - case ('SCUNS'); LONG_NAME = 'unstressed_stomatal_conductance'; UNITS = 'm s-1' - case ('BTRAN'); LONG_NAME = 'transpiration coefficient'; UNITS = '1' - case ('SIF'); LONG_NAME = 'solar induced fluorescence'; UNITS = 'umol m-2 sm s-1' - case ('CLOSS'); LONG_NAME = 'CN_carbon_loss_to_fire'; UNITS = 'kg m-2 s-1' - case ('BURN'); LONG_NAME = 'CN_fractional_area_burn_rate'; UNITS = 's-1' - case ('FSEL'); LONG_NAME = 'fire season length'; UNITS = 'days' - case ('GHTSKIN'); LONG_NAME = 'Ground_heating_flux_for_skin_temp_land'; UNITS = 'W m-2' - case ('WAT10CM'); LONG_NAME = 'soil moisture in Upper 10cm'; UNITS = 'kg m-2' - case ('WATSOI'); LONG_NAME = 'total soil moisture'; UNITS = 'kg m-2' - case ('ICESOI'); LONG_NAME = 'soil frozen water content'; UNITS = 'kg m-2' - case ('RMELTDU001'); LONG_NAME = 'flushed_out_dust_mass_flux_from_the_bottom_layer_bin_1'; UNITS = 'kg m-2 s-1' - case ('RMELTDU002'); LONG_NAME = 'flushed_out_dust_mass_flux_from_the_bottom_layer_bin_2'; UNITS = 'kg m-2 s-1' - case ('RMELTDU003'); LONG_NAME = 'flushed_out_dust_mass_flux_from_the_bottom_layer_bin_3'; UNITS = 'kg m-2 s-1' - case ('RMELTDU004'); LONG_NAME = 'flushed_out_dust_mass_flux_from_the_bottom_layer_bin_4'; UNITS = 'kg m-2 s-1' - case ('RMELTDU005'); LONG_NAME = 'flushed_out_dust_mass_flux_from_the_bottom_layer_bin_5'; UNITS = 'kg m-2 s-1' - case ('RMELTBC001'); LONG_NAME = 'flushed_out_black_carbon_mass_flux_from_the_bottom_layer_bin_1'; UNITS = 'kg m-2 s-1' - case ('RMELTBC002'); LONG_NAME = 'flushed_out_black_carbon_mass_flux_from_the_bottom_layer_bin_2'; UNITS = 'kg m-2 s-1' - case ('RMELTOC001'); LONG_NAME = 'flushed_out_organic_carbon_mass_flux_from_the_bottom_layer_bin_1'; UNITS = 'kg m-2 s-1' - case ('RMELTOC002'); LONG_NAME = 'flushed_out_organic_carbon_mass_flux_from_the_bottom_layer_bin_2'; UNITS = 'kg m-2 s-1' - - ! land constants - - case ('CDCR2'); LONG_NAME = 'maximum soil water content above wilting point'; UNITS = 'kg m-2' - case ('DZGT1'); LONG_NAME = 'thickness_of_soil_layer_associated_with_TSOIL1'; UNITS = 'm' - case ('DZGT2'); LONG_NAME = 'thickness_of_soil_layer_associated_with_TSOIL2'; UNITS = 'm' - case ('DZGT3'); LONG_NAME = 'thickness_of_soil_layer_associated_with_TSOIL3'; UNITS = 'm' - case ('DZGT4'); LONG_NAME = 'thickness_of_soil_layer_associated_with_TSOIL4'; UNITS = 'm' - case ('DZGT5'); LONG_NAME = 'thickness_of_soil_layer_associated_with_TSOIL5'; UNITS = 'm' - case ('DZGT6'); LONG_NAME = 'thickness_of_soil_layer_associated_with_TSOIL6'; UNITS = 'm' - case ('DZPR'); LONG_NAME = 'thickness_of_soil_layer_associated_with_PRMC_and_GWETPROF'; UNITS = 'm' - case ('DZRZ'); LONG_NAME = 'thickness_of_soil_layer_associated_with_RZMC_and_GWETROOT'; UNITS = 'm' - case ('DZSF'); LONG_NAME = 'thickness_of_soil_layer_associated_with_SFMC_and_GWETTOP'; UNITS = 'm' - case ('DZTS'); LONG_NAME = 'thickness_of_soil_layer_associated_with_TSATLAND_TUNSTLAND_and_TWLTLAND'; UNITS = 'm' - case ('POROS'); LONG_NAME = 'soil_porosity'; UNITS = 'm3 m-3' - case ('WPEMW'); LONG_NAME = 'soil_wilting_point_in_equivalent_mass_of_total_profile_water'; UNITS = 'kg m-2' - case ('WPMC'); LONG_NAME = 'soil_wilting_point_in_volumetric_units'; UNITS = 'm3 m-3' - case ('WPWET'); LONG_NAME = 'soil_wilting_point_in_degree_of_saturation_units'; UNITS = '1' - - ! land assimilation increments for Catchment prognostic variables in coupled land-atmosphere DAS (#sqz 2020-01) - - case ('TCFSAT_INCR'); LONG_NAME = 'increment_surface_temperature_of_saturated_zone'; UNITS = 'K' - case ('TCFTRN_INCR'); LONG_NAME = 'increment_surface_temperature_of_transition_zone'; UNITS = 'K' - case ('TCFWLT_INCR'); LONG_NAME = 'increment_surface_temperature_of_wilting_zone'; UNITS = 'K' - case ('QCFSAT_INCR'); LONG_NAME = 'increment_surface_specific_humidity_of_saturated_zone'; UNITS = 'kg kg-1' - case ('QCFTRN_INCR'); LONG_NAME = 'increment_surface_specific_humidity_of_transition_zone'; UNITS = 'kg kg-1' - case ('QCFWLT_INCR'); LONG_NAME = 'increment_surface_specific_humidity_of_wilting_zone'; UNITS = 'kg kg-1' - case ('CAPAC_INCR'); LONG_NAME = 'increment_vegetation_interception_water_storage'; UNITS = 'kg m-2' - case ('CATDEF_INCR'); LONG_NAME = 'increment_catchment_deficit'; UNITS = 'kg m-2' - case ('RZEXC_INCR'); LONG_NAME = 'increment_root_zone_excess'; UNITS = 'kg m-2' - case ('SRFEXC_INCR'); LONG_NAME = 'increment_surface_excess'; UNITS = 'kg m-2' - case ('GHTCNT1_INCR'); LONG_NAME = 'increment_soil_heat_content_layer_1'; UNITS = 'J m-2' - case ('GHTCNT2_INCR'); LONG_NAME = 'increment_soil_heat_content_layer_2'; UNITS = 'J m-2' - case ('GHTCNT3_INCR'); LONG_NAME = 'increment_soil_heat_content_layer_3'; UNITS = 'J m-2' - case ('GHTCNT4_INCR'); LONG_NAME = 'increment_soil_heat_content_layer_4'; UNITS = 'J m-2' - case ('GHTCNT5_INCR'); LONG_NAME = 'increment_soil_heat_content_layer_5'; UNITS = 'J m-2' - case ('GHTCNT6_INCR'); LONG_NAME = 'increment_soil_heat_content_layer_6'; UNITS = 'J m-2' - case ('WESNN1_INCR'); LONG_NAME = 'increment_snow_mass_layer_1'; UNITS = 'kg m-2' - case ('WESNN2_INCR'); LONG_NAME = 'increment_snow_mass_layer_2'; UNITS = 'kg m-2' - case ('WESNN3_INCR'); LONG_NAME = 'increment_snow_mass_layer_3'; UNITS = 'kg m-2' - case ('HTSNNN1_INCR'); LONG_NAME = 'increment_heat_content_snow_layer_1'; UNITS = 'J m-2' - case ('HTSNNN2_INCR'); LONG_NAME = 'increment_heat_content_snow_layer_2'; UNITS = 'J m-2' - case ('HTSNNN3_INCR'); LONG_NAME = 'increment_heat_content_snow_layer_3'; UNITS = 'J m-2' - case ('SNDZN1_INCR'); LONG_NAME = 'increment_snow_depth_layer_1'; UNITS = 'm' - case ('SNDZN2_INCR'); LONG_NAME = 'increment_snow_depth_layer_2'; UNITS = 'm' - case ('SNDZN3_INCR'); LONG_NAME = 'increment_snow_depth_layer_3'; UNITS = 'm' - - ! land assimilation forecast and analysis for Catchment model diagnostics - - case ('SFMC_FCST'); LONG_NAME = 'soil_moisture_surface_forecast'; UNITS = 'm3 m-3' - case ('RZMC_FCST'); LONG_NAME = 'soil_moisture_rootzone_forecast'; UNITS = 'm3 m-3' - case ('PRMC_FCST'); LONG_NAME = 'soil_moisture_profile_forecast'; UNITS = 'm3 m-3' - case ('TSURF_FCST'); LONG_NAME = 'surface_temperature_of_land_incl_snow_forecast'; UNITS = 'K' - case ('TSOIL1_FCST'); LONG_NAME = 'soil_temperature_layer_1_forecast'; UNITS = 'K' - - case ('SFMC_FCST_ENSSTD'); LONG_NAME = 'soil_moisture_surface_forecast_ensstd'; UNITS = 'm3 m-3' - case ('RZMC_FCST_ENSSTD'); LONG_NAME = 'soil_moisture_rootzone_forecast_ensstd'; UNITS = 'm3 m-3' - case ('PRMC_FCST_ENSSTD'); LONG_NAME = 'soil_moisture_profile_forecast_ensstd'; UNITS = 'm3 m-3' - case ('TSURF_FCST_ENSSTD'); LONG_NAME = 'surface_temperature_of_land_incl_snow_forecast_ensstd'; UNITS = 'K' - case ('TSOIL1_FCST_ENSSTD'); LONG_NAME = 'soil_temperature_layer_1_forecast_ensstd'; UNITS = 'K' - - case ('SFMC_ANA'); LONG_NAME = 'soil_moisture_surface_analysis'; UNITS = 'm3 m-3' - case ('RZMC_ANA'); LONG_NAME = 'soil_moisture_rootzone_analysis'; UNITS = 'm3 m-3' - case ('PRMC_ANA'); LONG_NAME = 'soil_moisture_profile_analysis'; UNITS = 'm3 m-3' - case ('TSURF_ANA'); LONG_NAME = 'surface_temperature_of_land_incl_snow_analysis'; UNITS = 'K' - case ('TSOIL1_ANA'); LONG_NAME = 'soil_temperature_layer_1_analysis'; UNITS = 'K' - - case ('SFMC_ANA_ENSSTD'); LONG_NAME = 'soil_moisture_surface_analysis_ensstd'; UNITS = 'm3 m-3' - case ('RZMC_ANA_ENSSTD'); LONG_NAME = 'soil_moisture_rootzone_analysis_ensstd'; UNITS = 'm3 m-3' - case ('PRMC_ANA_ENSSTD'); LONG_NAME = 'soil_moisture_profile_analysis_ensstd'; UNITS = 'm3 m-3' - case ('TSURF_ANA_ENSSTD'); LONG_NAME = 'surface_temperature_of_land_incl_snow_ensstd'; UNITS = 'K' - case ('TSOIL1_ANA_ENSSTD'); LONG_NAME = 'soil_temperature_layer_1_analysis_ensstd'; UNITS = 'K' - - ! other land assimilation fields - - case ('MWRTM_VEGOPACITY'); LONG_NAME = 'Lband_microwave_vegopacity_normalized_with_cos_inc_angle'; UNITS = '1' - - ! land ice fields - - case ('EMIS'); LONG_NAME = 'surface_emissivity'; UNITS = '1' - case ('ALBVR_GL'); LONG_NAME = 'surface_reflectivity_for_visible_beam'; UNITS = '1' - case ('ALBVF_GL'); LONG_NAME = 'surface_reflectivity_for_visible_diffuse'; UNITS = '1' - case ('ALBNR_GL'); LONG_NAME = 'surface_reflectivity_for_near_infrared_beam'; UNITS = '1' - case ('ALBNF_GL'); LONG_NAME = 'surface_reflectivity_for_near_infrared_direct'; UNITS = '1' - case ('TST'); LONG_NAME = 'surface_temperature'; UNITS = 'K' - case ('QST'); LONG_NAME = 'surface_specific_humidity'; UNITS = 'kg kg-1' - case ('TH'); LONG_NAME = 'turbulence_surface_skin_temperature'; UNITS = 'K' - case ('QH'); LONG_NAME = 'turbulence_surface_specific_humidity'; UNITS = 'kg kg-1' - case ('DELTS'); LONG_NAME = 'change_of_surface_skin_temperature'; UNITS = 'K' - case ('DELQS'); LONG_NAME = 'change_of_surface_specific_humidity'; UNITS = 'kg kg-1' - case ('CHT'); LONG_NAME = 'surface_heat_exchange_coefficient'; UNITS = 'kg m-2 s-1' - case ('CMT'); LONG_NAME = 'surface_momentum_exchange_coefficient'; UNITS = 'kg m-2 s-1' - case ('CQT'); LONG_NAME = 'surface_moisture_exchange_coefficient'; UNITS = 'kg m-2 s-1' - case ('CNT'); LONG_NAME = 'neutral_drag_coefficient'; UNITS = '1' - case ('RIT'); LONG_NAME = 'surface_bulk_richardson_number'; UNITS = '1' - case ('ACCUM'); LONG_NAME = 'net_ice_accumulation_rate'; UNITS = 'kg m-2 s-1' - case ('EVPICE_GL'); LONG_NAME = 'snow_ice_evaporation_energy_flux_over_glaciated_surface'; UNITS = 'W m-2' - case ('SUBLIM'); LONG_NAME = 'sublimation'; UNITS = 'kg m-2 s-1' - case ('SNOMAS_GL'); LONG_NAME = 'snow_mass_over_glaciated_surface'; UNITS = 'kg m-2' - case ('SNOWDP_GL'); LONG_NAME = 'snow_depth_over_glaciated_surface'; UNITS = 'm' - case ('ASNOW_GL'); LONG_NAME = 'fractional_snow_covered_area_of_glaciated_surface'; UNITS = '1' - case ('RHOSNOW'); LONG_NAME = 'snow_layer_density'; UNITS = 'kg m-3' - case ('TSNOW'); LONG_NAME = 'snow_layer_temperature'; UNITS = 'K' - case ('TICE0'); LONG_NAME = 'aggregated_ice_layer_temperatured'; UNITS = 'K' - case ('WSNOW'); LONG_NAME = 'snow_laer_water_content'; UNITS = 'kg m-2' - case ('ZSNOW'); LONG_NAME = 'snow_layer_thickness'; UNITS = 'm' - case ('DRHS0'); LONG_NAME = 'snow_layer_density_change_due_to_densification'; UNITS = 'kg m-3' - case ('WESNEX'); LONG_NAME = 'snow_layer_mass_residual_due_to_densification'; UNITS = 'kg_m-2 s-1' - case ('WESNEXT'); LONG_NAME = 'total_snow_mass_residual_due_to_densification'; UNITS = 'kg m-2 s-1' - case ('WESNSC'); LONG_NAME = 'top_snow_layer_change_due_to_sub_con'; UNITS = 'kg m-2 s-1' - case ('SNDZSC'); LONG_NAME = 'top_snow_layer_thickness_change_due_to_sub_con'; UNITS = 'm s-1' - case ('WESNPREC'); LONG_NAME = 'top_snow_layer_mass_change_due_to_precip'; UNITS = 'kg_m-2 s-1' - case ('SNDZPREC'); LONG_NAME = 'top_snow_layer_thickness_change_due_to_precip'; UNITS = 'm s-1' - case ('SNDZ1PERC'); LONG_NAME = 'top_snow_layer_thickness_change_due_to_percolation'; UNITS = 'm s-1' - case ('WESNPERC'); LONG_NAME = 'snow_layer_mass_change_due_to_percolation'; UNITS = 'kg m-2 s-1' - case ('WESNDENS'); LONG_NAME = 'snow_layer_mass_change_due_to_densification'; UNITS = 'kg m-2 s-1' - case ('WESNREPAR'); LONG_NAME = 'snow_layer_mass_change_due_to_repartition'; UNITS = 'kg m-2 s-1' - case ('WESNBOT'); LONG_NAME = 'frozen_runoff_due_to_fixed_max_depth'; UNITS = 'kg m-2 s-1' - case ('RAINRFZ'); LONG_NAME = 'contribution_to_surface_mass_balance_from_rain_frozen_onto_bare_ice'; UNITS = 'kg m-2 s-1' - case ('SMELT'); LONG_NAME = 'snow_melt_flux'; UNITS = 'kg_m-2 s-1' - case ('IMELT'); LONG_NAME = 'ice_melt_flux'; UNITS = 'kg_m-2 s-1' - case ('SNOWALB'); LONG_NAME = 'snow_broadband_reflectivity'; UNITS = '1' - case ('SNICEALB'); LONG_NAME = 'aggregated_snow_ice_broadband_reflectivity'; UNITS = '1' - case ('MELTWTR'); LONG_NAME = 'melt_water_production'; UNITS = 'kg m-2 s-1' - case ('MELTWTRCONT'); LONG_NAME = 'snowpack_meltwater_content'; UNITS = 'kg m-2' - case ('LWC'); LONG_NAME = 'liquid_water_content_in_top_snow_layer'; UNITS = '1' - case ('RUNOFF_GL'); LONG_NAME = 'runoff_total_flux'; UNITS = 'kg m-2 s-1' - case ('GUST'); LONG_NAME = 'gustiness'; UNITS = 'm s-1' - case ('VENT'); LONG_NAME = 'surface_ventilation_velocity'; UNITS = 'm s-1' - case ('Z0'); LONG_NAME = 'surface_roughness'; UNITS = 'm' - case ('Z0H'); LONG_NAME = 'surface_roughness_for_heat'; UNITS = 'm' - case ('MOT2M'); LONG_NAME = 'temperature_2m_wind_from_MO_sfc'; UNITS = 'K' - case ('MOQ2M'); LONG_NAME = 'humidity_2m_wind_from_MO_sfc'; UNITS = 'kg kg-1' - case ('MOU2M'); LONG_NAME = 'zonal_2m_wind_from_MO_sfc'; UNITS = 'm s-1' - case ('MOV2M'); LONG_NAME = 'meridional_2m_wind_from_MO_sfc'; UNITS = 'm s-1' - case ('MOT10M'); LONG_NAME = 'temperature_10m_wind_from_MO_sfc'; UNITS = 'K' - case ('MOQ10M'); LONG_NAME = 'humidity_10m_wind_from_MO_sfc'; UNITS = 'kg kg-1' - case ('MOU10M'); LONG_NAME = 'zonal_10m_wind_from_MO_sfc'; UNITS = 'm s-1' - case ('MOV10M'); LONG_NAME = 'meridional_10m_wind_from_MO_sfc'; UNITS = 'm s-1' - case ('MOU50M'); LONG_NAME = 'zonal_50m_wind_from_MO_sfc'; UNITS = 'm s-1' - case ('MOV50M'); LONG_NAME = 'merodopma;_50m_wind_from_MO_sfc'; UNITS = 'm s-1' - case ('EVAPOUT'); LONG_NAME = 'evaporation'; UNITS = 'kg m-2 s-1' - case ('SHOUT'); LONG_NAME = 'upward_sensible_heat_flux'; UNITS = 'W m-2' - case ('HLWUP_GL'); LONG_NAME = 'surface_emitted_longwave_flux'; UNITS = 'W m-2' - case ('LWNDSRF'); LONG_NAME = 'surface_net_downward_longwave_flux'; UNITS = 'W m-2' - case ('SWNDSRF'); LONG_NAME = 'surface_net_downward_shortwave_flux'; UNITS = 'W m-2' - case ('HLATN'); LONG_NAME = 'total_latent_energy_flux'; UNITS = 'W m-2' - case ('DNICFLX'); LONG_NAME = 'downward_heat_flux_in_ice'; UNITS = 'W m-2' - case ('GHSNOW'); LONG_NAME = 'ground_heating_snow'; UNITS = 'W m-2' - case ('GHTSKIN_GL'); LONG_NAME = 'glacier_ice_heating_flux'; UNITS = 'W m-2' - -! default LONG_NAME and UNITS for nc4 files created by tile_bin2nc4.F90 (used for any SHORT_NAME not listed above): - - case default; LONG_NAME = 'not defined in tile_bin2nc4.F90'; UNITS = 'not defined in tile_bin2nc4.F90'; - - end select - - if (present(LNAME)) str_atr = trim (LONG_NAME) - if (present(UNT)) str_atr = trim (UNITS ) - - END FUNCTION getAttribute - -END PROGRAM tile_bin2nc4