CTSM icon indicating copy to clipboard operation
CTSM copied to clipboard

Example, user_nl_datm_streams file for anomaly forcing for NUOPC coupler

Open ekluzek opened this issue 3 years ago • 21 comments

We need an example user_nl_datm_streams file for anomaly forcing for the NUOPC coupler. @wwieder has a test case to base this off of here:

/glade/work/wwieder/ctsm/ctsm5.1.dev054/cime/scripts/NEON_NIWO54_mm_zbed1.3_LowGDD_anom

There he edited the datm.stream.xml, we need an example that just changes user_nl_datm and user_nl_datm_streams.

Definition of Done:

  • [ ] A working example in discussions
  • [ ] In the User's Guide
  • [ ] https://github.com/ESCOMP/CDEPS/issues/186

ekluzek avatar Apr 29 '22 21:04 ekluzek

OK I think I've reproduced the above case with the following changes:

user_nl_datm:
anomaly_forcing = 'Anomaly.Forcing.Precip','Anomaly.Forcing.Temperature','Anomaly.Forcing.Pressure','Anomaly.Forcing.Humidity','Anomaly.Forcing.Uwind','Anomaly.Forcing.Vwind','Anomaly.Forcing.Shortwave','Anomaly.Forcing.Longwave'
user_nl_datm_streams:
Anomaly.Forcing.Temperature:year_first=2020
Anomaly.Forcing.Temperature:year_last=2100
Anomaly.Forcing.Temperature:year_align=2020
Anomaly.Forcing.Temperature:tintalgo = linear
Anomaly.Forcing.Temperature:meshfile=$DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc
Anomaly.Forcing.Temperature:datafiles = /glade/p/cgd/tss/people/oleson/anomaly_forcing/af.tas.CESM.SSP370.2015-2100.nc

Anomaly.Forcing.Precip:year_first=2020
Anomaly.Forcing.Precip:year_last=2100
Anomaly.Forcing.Precip:year_align=2020
Anomaly.Forcing.Precip:tintalgo = nearest
Anomaly.Forcing.Precip:meshfile=$DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc
Anomaly.Forcing.Precip:datafiles = /glade/p/cgd/tss/people/oleson/anomaly_forcing/af.pr.CESM.SSP370.2015-2100.nc

Anomaly.Forcing.Humidity:year_first=2020
Anomaly.Forcing.Humidity:year_last=2100
Anomaly.Forcing.Humidity:year_align=2020
Anomaly.Forcing.Humidity:tintalgo = linear
Anomaly.Forcing.Humidity:meshfile=$DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc
Anomaly.Forcing.Humidity:datafiles = /glade/p/cgd/tss/people/oleson/anomaly_forcing/af.huss.CESM.SSP370.2015-2100.nc

Anomaly.Forcing.Pressure:year_first=2020
Anomaly.Forcing.Pressure:year_last=2100
Anomaly.Forcing.Pressure:year_align=2020
Anomaly.Forcing.Pressure:tintalgo = linear
Anomaly.Forcing.Pressure:meshfile=$DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc
Anomaly.Forcing.Pressure:datafiles = /glade/p/cgd/tss/people/oleson/anomaly_forcing/af.ps.CESM.SSP370.2015-2100.nc

Anomaly.Forcing.Longwave:year_first=2020
Anomaly.Forcing.Longwave:year_last=2100
Anomaly.Forcing.Longwave:year_align=2020
Anomaly.Forcing.Longwave:tintalgo = linear
Anomaly.Forcing.Longwave:meshfile=$DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc
Anomaly.Forcing.Longwave:datafiles = /glade/p/cgd/tss/people/oleson/anomaly_forcing/af.rlds.CESM.SSP370.2015-2100.nc

Anomaly.Forcing.Shortwave:year_first=2020
Anomaly.Forcing.Shortwave:year_last=2100
Anomaly.Forcing.Shortwave:year_align=2020
Anomaly.Forcing.Shortwave:tintalgo = linear
Anomaly.Forcing.Shortwave:meshfile=$DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc
Anomaly.Forcing.Shortwave:datafiles = /glade/p/cgd/tss/people/oleson/anomaly_forcing/af.rsds.CESM.SSP370.2015-2100.nc

Anomaly.Forcing.Uwind:year_first=2020
Anomaly.Forcing.Uwind:year_last=2100
Anomaly.Forcing.Uwind:year_align=2020
Anomaly.Forcing.Uwind:tintalgo = linear
Anomaly.Forcing.Uwind:meshfile=$DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc
Anomaly.Forcing.Uwind:datafiles = /glade/p/cgd/tss/people/oleson/anomaly_forcing/af.uas.CESM.SSP370.2015-2100.nc

Anomaly.Forcing.Vwind:year_first=2020
Anomaly.Forcing.Vwind:year_last=2100
Anomaly.Forcing.Vwind:year_align=2020
Anomaly.Forcing.Vwind:tintalgo = linear
Anomaly.Forcing.Vwind:meshfile=$DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc
Anomaly.Forcing.Vwind:datafiles = /glade/p/cgd/tss/people/oleson/anomaly_forcing/af.vas.CESM.SSP370.2015-2100.nc

ekluzek avatar Jun 03 '22 08:06 ekluzek

Since the Anomaly Forcing (AF) data are all monthly and normally you want the different variables to be coordinated together, this could be changed so that all variables were on one file and you only use two streams to manage the data. That would cut down on the number of changes you have to add to the user_nl_datm_streams file.

ekluzek avatar Jun 03 '22 17:06 ekluzek

Thank you @ekluzek I will try your changes in #1654

slevis-lmwg avatar Jun 06 '22 17:06 slevis-lmwg

@ekluzek if we're running with GSWP3 should year_first and year_align=2015?

wwieder avatar Jun 06 '22 18:06 wwieder

@wwieder the gswp3 data ranges 1901-2014, so I think that year_first=2015 won't work and that you just pick the range of years that you want to cycle for the rest of the run (eg 1991-2010).

slevis-lmwg avatar Jun 06 '22 18:06 slevis-lmwg

The SSP370 compset defaults to DATM_YR_START=2001 (in env_run.xml), and cycles over data from 2001-2014 (in CaseDocs/datm_streams)

But I think we want the year_first and year_align in user_nl_datm_streams (above) to be 2015? e.g.

user_nl_datm_streams:
Anomaly.Forcing.Temperature:year_first=2015
Anomaly.Forcing.Temperature:year_last=2100
Anomaly.Forcing.Temperature:year_align=2015
Anomaly.Forcing.Temperature:tintalgo = linear
...

Again, this would be specific for GSWP3 runs.

wwieder avatar Jun 06 '22 18:06 wwieder

Now that I"m looking more carefully at datm_streams...

Does this for the year first and year align look right for presaero in a simulation starting in 2015 that's using anomaly forcing @ekluzek?

  <stream_info name="presaero.SSP3-7.0">
   <taxmode>cycle</taxmode>
   <tintalgo>linear</tintalgo>
   <readmode>single</readmode>
   <mapalgo>bilinear</mapalgo>
   <dtlimit>1.5</dtlimit>
   <year_first>2014</year_first>
   <year_last>2101</year_last>
   <year_align>2014</year_align>

my case is here /glade/work/wwieder/ctsm/flexLeafCN/cime/scripts/ctsm51d074_2deg_GSWP3V1_ssp370_cnSlope0

wwieder avatar Jun 06 '22 18:06 wwieder

The SSP370 compset defaults to DATM_YR_START=2001 (in env_run.xml), and cycles over data from 2001-2014 (in CaseDocs/datm_streams)

But I think we want the year_first and year_align in user_nl_datm_streams (above) to be 2015? e.g.

user_nl_datm_streams:
Anomaly.Forcing.Temperature:year_first=2015
Anomaly.Forcing.Temperature:year_last=2100
Anomaly.Forcing.Temperature:year_align=2015
Anomaly.Forcing.Temperature:tintalgo = linear
...

Again, this would be specific for GSWP3 runs.

I see what you mean, and I think you're right.

slevis-lmwg avatar Jun 06 '22 18:06 slevis-lmwg

We have this example working, so I'm closing.

ekluzek avatar Jun 23 '22 05:06 ekluzek

Thanks @ekluzek are there any changes to the information above that need to be made? Specifically,

  • are the data files in a different location?
  • do the Anomaly.Forcing year_first and year_align need to be modified?

I'd like to try this out as well and then discuss the best way to facilitate others using this feature (e.g. tutorial, user_mod_dirs, etc.)

wwieder avatar Jun 23 '22 14:06 wwieder

OK Erik's modifications seem to work. I think this issue is resolved, but need to work on documenting this for users now. Should this go into another issue?

user_nl_datm_streams needs the following

Anomaly.Forcing.Temperature:year_first=2015
Anomaly.Forcing.Temperature:year_last=2100
Anomaly.Forcing.Temperature:year_align=2015
Anomaly.Forcing.Temperature:meshfile =$DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc
! List of Data types to use
! Remove the variables you do NOT want to include in the Anomaly forcing:
!     pr is preciptiation
!     tas is temperature
!     huss is humidity
!     uas and vas are U and V winds
!     rsds is solare
!     rlds is LW down
Anomaly.Forcing.Temperature:datavars = pr    Faxa_prec_af, \
                                       tas   Sa_tbot_af, \
                                       ps    Sa_pbot_af, \
                                       huss  Sa_shum_af, \
                                       uas   Sa_u_af, \
                                       vas Sa_v_af, \
                                       rsds  Faxa_swdn_af, \
                                       rlds  Faxa_lwdn_af
Anomaly.Forcing.Temperature:datafiles =$DIN_LOC_ROOT/atm/datm7/anomaly_forcing/CMIP6-SSP1-2.6/af.allvars.CESM.SSP1-2.6.2015-2100_c20220628.nc

user_nl_datm just needs:

anomaly_forcing = 'Anomaly.Forcing.Temperature'

wwieder avatar Jul 14 '22 21:07 wwieder

note, the example above is for SSP1-2.6, but other scenarios are also available for users.

The case I have working is below:

/glade/work/wwieder/ctsm/flexLeafCN/cime/scripts/ctsm51d074_2deg_GSWP3V1_ssp370_cnSlope0

wwieder avatar Jul 14 '22 21:07 wwieder

The example Sean has in the user's guide is for MCT, rather than NUOPC. We need to have the NUOPC example in place.

ekluzek avatar Aug 25 '22 15:08 ekluzek

Here's an example for a tower site simulation that then applies anomaly forcing too.

/glade/work/jayka/ctsm/hillslope_updates/cime/scripts/NEON_NIWO_pheno_saddle_hh2_WMbedrock_anom

I think this simulation has constant CO2, but all the atmospheric forcing cycles over on observed record and applies the anomaly forcing. This example run a 'historic' run 2008-2021 and then uses SSP370 from 2022-2100.

wwieder avatar Aug 25 '22 15:08 wwieder

Here is the important information in user_nl_datm

anomaly_forcing = 'Anomaly.Forcing.Temperature'

and for user_nl_datm_streams, notably the MESH FILE IS REQUIRED (as far as I know).

presaero.trans_1850-2000:datafiles = /glade/p/cesmdata/cseg/inputdata/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP370_b.e21.BWSSP370cmip6.f09_g17.CMIP6-SSP3-7.0-WACCM.001_1849-2101_monthly_0.9x1.25_c201103.nc
presaero.trans_1850-2000:year_first=2022
presaero.trans_1850-2000:year_last=2100
presaero.trans_1850-2000:year_align=2022
presaero.trans_1850-2000:dtlimit=30

Anomaly.Forcing.Temperature:year_first=2022
Anomaly.Forcing.Temperature:year_last=2100
Anomaly.Forcing.Temperature:year_align=2022
Anomaly.Forcing.Temperature:meshfile=$DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc

Anomaly.Forcing.Temperature:datavars = pr    Faxa_prec_af, \
                                       tas   Sa_tbot_af, \
                                       ps    Sa_pbot_af, \
                                       huss  Sa_shum_af, \
                                       uas   Sa_u_af, \
                                       vas Sa_v_af, \
                                       rsds  Faxa_swdn_af, \
                                       rlds  Faxa_lwdn_af
Anomaly.Forcing.Temperature:datafiles =$DIN_LOC_ROOT/atm/datm7/anomaly_forcing/CMIP6-SSP3-7.0/af.allvars.CESM.SSP3-7.0.2015-2100_c20220628.nc


wwieder avatar Aug 25 '22 16:08 wwieder

Hey thanks for these explanations! I just had a chat with @wwieder and @swensosc about this. Could we change the stream name from Anomaly.Forcing.Temperature to something more all-encompassing? I think it might be confusing for naive users, since it does cover more than just temperature.

adrifoster avatar Aug 26 '22 16:08 adrifoster

Yes we can do that with a CDEPS change. I think that's a good idea and I'll file an issue in CDEPS.

ekluzek avatar Aug 26 '22 16:08 ekluzek

It looks on CDEPS like all those individual streams are still there (Temperature still seemingly is just temperature?), perhaps we just want to create a new stream(s) to encompass all of them? Would that then negate the need to do this every time? Then we'd only have to update it if we want to only do individual vars?

adrifoster avatar Aug 26 '22 16:08 adrifoster

Yes I'll remove the specific variable names and only have one generic name for all variables. To change what variables you want you change the datavars list in your user nl datm streams file.

Having individual files for each variable only makes it harder to manage.

ekluzek avatar Aug 26 '22 16:08 ekluzek

Thanks for clearing this up!

wwieder avatar Aug 26 '22 16:08 wwieder

Once the cdeps issue is resolved I suggest we close this issue and move the 'correct' answer to discussion.

wwieder avatar Sep 01 '22 16:09 wwieder