Agenda for Feb 10th, CCSM/ESMF Stage-1 meeting
Oceanography Conference room, 2:30pm MST
- Some more questions on details.
- Some questions about ESMF specific behavior.
- Look at NetCDF restart file ncdump again.
- Look at namelists again – table of what can and can change on continue and branch.
- Look at top level picture again.
Questions on details:
- Restart_monthly set to true by default? No – make restart_yearly the default
- Have to change restart_monthly to .false., and restart_none to .true. for no-restarts? no
- Go back to restart_option and restart_n.
- If restart_none set – overrides other restart settings, which are then ignored.
- Ok to let case_name be 256 characters long – or should it be restricted? Restrict to 80 char CS
- Can perpetual_run be turned off – if aqua_planet turned on? NO
- Turn save of files to MSS by setting archive directory to null:? NO, use mss_irt set to 0, so have same option as before (actually either one would work)
- If restart_file set on namelist for continue case – use it rather than restart pointer file? – no, always use restart pointer file for continue case
- For branch case use restart_file, don't read in rest_pfile, only use the rest_pfile for the output restart pointer file? Yes
- Default restart pointer filename is: drv.$case_name.rpointer? Yes
- Can we change: mss_irt, mss_wpass and restart frequency on continue case? yes
- Restart filenames are: $case_name.drv.r.yyyy-mm-dd.sssss.nc? Yes (note that the specific name is allowed in here)
- By default save driver restart filenames to mss:/$HOME/csm/$case/drv/ directory? Yes
- Naming convention for hubs? seq_esmf_mrg_x2*
- Directory name for driver code: models/drv/seq_esmf, models/drv/seq_mct/
- Files in driver code directorys start with directory name: seq_esmf_*.F90 or seq_mct_.F90
- Driver names: seq_esmf_drv.F90, seq_mct_drv.F90
- Hub is too overloaded and not really relevent in the sequential case (it doesn't define a different processor set). Remove all the "h" or hub and use "x" as a wildcard.
- Use mrg for hubs, and map for couplers: seq_esmf_mrg_x2a, and seq_esmf_map for example.
- I think we can build a generic coupler – seq_esmf_map_ – sound good? Yes (Assumes just mapping between states where all fields are on one grid one decomp to another state with the same field names where all fields are on one grid one decomp (that may be different than the first grid or decomp). Look at this later.
- Do the following sound good (and names sound ok?)
- eshr_inputinfo_mod: to take shr_inputinfoType and either extract or add data to an ESMF_State (eshr_inputInfo_Info2EState and eshr_inputInfo_EState2Info)
- eshr_timemgr_mod: same as above to shr_timemgr_ClockInfoType
- Introduce: eshr_EState_mod for doing operations on states such as eshr_EState_Create to put the same field names on a new state with a different grid and decomp.
Questions on ESMF specific behavior
- ESMF stop-time vs CAM stop-time – didn't really resolve this, but no one thought important
- (ESMF: curr_time >= stop_time)
- (CAM: curr_time+time_step > stop_time)
- shared clock rings on time-step before stop-time? – NO, components check the stop-time themselves
NetCDF dump
_FillValue on the following vars:
Also set missing_value to the same thing. - restart_interval_secs
- restart_interval_months
- restart_next_alarm_ymd
- restart_next_alarm_tod
- perpetual_ymd
- orb_iyear_AD
- orb_obliq
- orb_mvelp
- orb_eccen
Also set an attribute to orb_ values to designate which mode it's in (using year or hard-coded values). Mode (constant, or constant_base_on_year)
Other values are either string or logical variables (fill value doesn't make sense) or required to be set – hence should never equal the missing value.\[spot1:models/csm_share/unit_testers\] erik% ncdump csmruntest.ccsm.r.0099-05-03-42000.nc netcdf csmruntest.ccsm.r.0099-05-03-42000 { dimensions: shr_character = 256 ; variables: int shr_inputinfo_atm_adiabatic ; shr_inputinfo_atm_adiabatic:long_name = "Atmosphere runs in adiabatic mode" ; shr_inputinfo_atm_adiabatic:units = "logical flag (0=false)" ; int shr_inputinfo_atm_ideal_phys ; shr_inputinfo_atm_ideal_phys:long_name = "Atmosphere runs in idealized physics mode" ; shr_inputinfo_atm_ideal_phys:units = "logical flag (0=false)" ; int shr_inputinfo_aqua_planet ; shr_inputinfo_aqua_planet:long_name = "Aqua_planet mode (no-land/ice, perpetual-date, and analytic SST)" ; shr_inputinfo_aqua_planet:units = "logical flag (0=false)" ; int shr_inputinfo_mss_irt ; shr_inputinfo_mss_irt:long_name = "Mass Store Retention period" ; shr_inputinfo_mss_irt:units = "days" ; char shr_inputinfo_case_desc(shr_character) ; shr_inputinfo_case_desc:long_name = "Case description" ; shr_inputinfo_case_desc:units = "string" ; shr_inputinfo_case_desc:nchars = 0 ; char shr_inputinfo_case_name(shr_character) ; shr_inputinfo_case_name:long_name = "Case identification name" ; shr_inputinfo_case_name:units = "string" ; shr_inputinfo_case_name:nchars = 10 ; char shr_inputinfo_mss_wpass(shr_character) ; shr_inputinfo_mss_wpass:long_name = "Mass Store write password" ; shr_inputinfo_mss_wpass:units = "string" ; shr_inputinfo_mss_wpass:nchars = 0 ; int shr_timemgr_clock_start_ymd ; shr_timemgr_clock_start_ymd:long_name = "Clock start date" ; shr_timemgr_clock_start_ymd:units = "date \[YYYYMMDD\]" ; int shr_timemgr_clock_start_tod ; shr_timemgr_clock_start_tod:long_name = "Clock start time of day" ; shr_timemgr_clock_start_tod:units = "seconds" ; int shr_timemgr_clock_ref_ymd ; shr_timemgr_clock_ref_ymd:long_name = "Clock reference date" ; shr_timemgr_clock_ref_ymd:units = "date \[YYYYMMDD\]" ; int shr_timemgr_clock_ref_tod ; shr_timemgr_clock_ref_tod:long_name = "Clock reference time of day" ; shr_timemgr_clock_ref_tod:units = "seconds" ; int shr_timemgr_clock_curr_ymd ; shr_timemgr_clock_curr_ymd:long_name = "Clock current date" ; shr_timemgr_clock_curr_ymd:units = "date \[YYYYMMDD\]" ; int shr_timemgr_clock_curr_tod ; shr_timemgr_clock_curr_tod:long_name = "Clock current time of day" ; shr_timemgr_clock_curr_tod:units = "seconds" ; int shr_timemgr_clock_dtime ; shr_timemgr_clock_dtime:long_name = "Clock time-step" ; shr_timemgr_clock_dtime:units = "seconds" ; int shr_timemgr_clock_restart_interval_sec ; shr_timemgr_clock_restart_interval_sec:long_name = "Clock restart alarm interval" ; shr_timemgr_clock_restart_interval_sec:units = "seconds" ; shr_timemgr_clock_restart_interval_sec:_FillValue = 0 ; shr_timemgr_clock_restart_interval_sec:missing_value = 0 ; int shr_timemgr_clock_restart_interval_months ; shr_timemgr_clock_restart_interval_months:long_name = "Clock restart alarm interval" ; shr_timemgr_clock_restart_interval_months:units = "months" ; shr_timemgr_clock_restart_interval_months:_FillValue = 0 ; shr_timemgr_clock_restart_interval_months:missing_value = 0 ; int shr_timemgr_clock_restart_next_alarm_ymd ; shr_timemgr_clock_restart_next_alarm_ymd:long_name = "Restart alarm next alarm date" ; shr_timemgr_clock_restart_next_alarm_ymd:units = "date \[YYYYMMDD\]" ; shr_timemgr_clock_restart_next_alarm_ymd:_FillValue = 0 ; shr_timemgr_clock_restart_next_alarm_ymd:missing_value = 0 ; int shr_timemgr_clock_restart_next_alarm_tod ; shr_timemgr_clock_restart_next_alarm_tod:long_name = "Restart alarm next alarm time of day" ; shr_timemgr_clock_restart_next_alarm_tod:units = "seconds" ; shr_timemgr_clock_restart_next_alarm_tod:_FillValue = -1 ; shr_timemgr_clock_restart_next_alarm_tod:missing_value = -1 ; char shr_timemgr_clock_info_desc(shr_character) ; shr_timemgr_clock_info_desc:long_name = "Description of this clock" ; shr_timemgr_clock_info_desc:units = "string" ; shr_timemgr_clock_info_desc:nchars = 17 ; char shr_timemgr_clock_info_calendar(shr_character) ; shr_timemgr_clock_info_calendar:long_name = "Type of calendar used" ; shr_timemgr_clock_info_calendar:units = "NO_LEAP or GREGORIAN" ; shr_timemgr_clock_info_calendar:nchars = 7 ; int shr_timemgr_clock_info_perpetual_run ; shr_timemgr_clock_info_perpetual_run:long_name = "Clock info flag for perpetual run mode" ; shr_timemgr_clock_info_perpetual_run:units = "logical flag (0=false)" ; int shr_timemgr_clock_info_perpetual_ymd ; shr_timemgr_clock_info_perpetual_ymd:long_name = "Clock info perpetual date" ; shr_timemgr_clock_info_perpetual_ymd:units = "date_\[YYYYMMDD\]" ; shr_timemgr_clock_info_perpetual_ymd:_FillValue = 0 ; shr_timemgr_clock_info_perpetual_ymd:missing_value = 0 ; int shr_timemgr_clock_info_orb_iyear_AD ; shr_timemgr_clock_info_orb_iyear_AD:long_name = "Clock info orbital year" ; shr_timemgr_clock_info_orb_iyear_AD:units = "Gregorian_year" ; shr_timemgr_clock_info_orb_iyear_AD:_FillValue = 2000000000 ; shr_timemgr_clock_info_orb_iyear_AD:missing_value = 2000000000 ; double shr_timemgr_clock_info_orb_obliq ; shr_timemgr_clock_info_orb_obliq:long_name = "Clock info orbital obliquity" ; shr_timemgr_clock_info_orb_obliq:units = "degrees" ; shr_timemgr_clock_info_orb_obliq:_FillValue = 1.e+36 ; shr_timemgr_clock_info_orb_obliq:missing_value = 1.e+36 ; double shr_timemgr_clock_info_orb_eccen ; shr_timemgr_clock_info_orb_eccen:long_name = "Clock info orbital eccentricity" ; shr_timemgr_clock_info_orb_eccen:units = "ratio\[0-.1\]" ; shr_timemgr_clock_info_orb_eccen:_FillValue = 1.e+36 ; shr_timemgr_clock_info_orb_eccen:missing_value = 1.e+36 ; int shr_timemgr_clock_info_orb_mode ; shr_timemgr_clock_info_orb_mode:long_name = "Clock info orbital mode" ; shr_timemgr_clock_info_orb_mode:units = "list" ; shr_timemgr_clock_info_orb_mode:_FillValue = 2000000000 ; shr_timemgr_clock_info_orb_mode:missing_value = 2000000000 ; shr_timemgr_clock_info_orb_mode:Orb_mode_calculated_based_on_fixed_year = 1 ; shr_timemgr_clock_info_orb_mode:Orb_mode_fixed_by_orbit_parameters = 2 ; shr_timemgr_clock_info_orb_mode:type = "Integer list" double shr_timemgr_clock_info_orb_mvelp ; shr_timemgr_clock_info_orb_mvelp:long_name = "Clock info orbital moving vernal equinox at perihelion" ; shr_timemgr_clock_info_orb_mvelp:units = "degrees" ; shr_timemgr_clock_info_orb_mvelp:_FillValue = 1.e+36 ; shr_timemgr_clock_info_orb_mvelp:missing_value = 1.e+36 ; data: shr_inputinfo_atm_adiabatic = 0 ; shr_inputinfo_atm_ideal_phys = 0 ; shr_inputinfo_aqua_planet = 0 ; shr_inputinfo_mss_irt = 365 ; shr_inputinfo_case_desc = "" ; shr_inputinfo_case_name = "csmruntest" ; shr_inputinfo_mss_wpass = "" ; shr_timemgr_clock_start_ymd = 990415 ; shr_timemgr_clock_start_tod = 42000 ; shr_timemgr_clock_ref_ymd = 990415 ; shr_timemgr_clock_ref_tod = 42000 ; shr_timemgr_clock_curr_ymd = 990503 ; shr_timemgr_clock_curr_tod = 42000 ; shr_timemgr_clock_dtime = 1200 ; shr_timemgr_clock_restart_interval_sec = 86400 ; shr_timemgr_clock_restart_interval_months = _ ; shr_timemgr_clock_restart_next_alarm_ymd = 990504 ; shr_timemgr_clock_restart_next_alarm_tod = 42000 ; shr_timemgr_clock_info_desc = "master test clock" ; shr_timemgr_clock_info_calendar = "NO_LEAP" ; shr_timemgr_clock_info_perpetual_run = 0 ; shr_timemgr_clock_info_perpetual_ymd = _ ; shr_timemgr_clock_info_orb_iyear_AD = 1950 ; shr_timemgr_clock_info_orb_obliq = 23.4462712893979 ; shr_timemgr_clock_info_orb_eccen = 0.0167239329967327 ; shr_timemgr_clock_info_orb_mvelp = 102.039049517636 ; shr_timemgr_clock_info_orb_mode = 1 }
Namelist behavior:
ccsm_inparm namelist
Behavior:item
default value
Valid settings
archive_dir
mss:/$USER/csm/$case_name/drv/
Valid shr_file pathname (mss:, cp:, null: or blank prefixes)
atm_adiabatic
.false.
logical
atm_ideal_phys
.false.
logical
aqua_planet
.false.
logical
brnch_retain_casename
.false.
logical
case_desc
blank
string up to 256 characters long
case_name
REQUIRED
string 1 to 80 characters long
start_type
REQUIRED
startup,continue,branch
mss_irt
365
>=0 (if 0 don't write files to MSS)
mss_wpass
blank
valid string
restart_pfile
$HOME/drv.$case_name.rpointer
any valid disk filename
restart_file
built on write restart based on filename ($archive_dir/$case_name.drv.r.yyyy-mm-dd.sssss.nc)
Valid driver restart filename
restart_file_override
"case_name" (if branch and not brnch_retain_casename)
Colen delimited list of values to override on restart_file from namelist ("case_desc:case_name:mss_irt:mss_wpass")
type
Required
Optional
Changable
Unsetable
startup
case_name,start_type
all – but restart_file
all
restart_file
continue
case_name,start_type
all
mss_irt,mss_wpass,restart_pfile,case_name,case_desc
restart_file
branch
case_name,start_type,restart_file
all
case_name,case_desc,mss_irt,wpass,restart_pfile,case_name can only be the same iff brnch_retain_casename
none
- mss_irt, mss_wpass only used if archive dir has a mss: prefix. Otherwise, files are not written to Mass Store. To prevent copying files anywhere prepend archive_dir with null: or if archive_dir has mss:, set mss_irt to 0.
- On continue restart_file found in restart pointer file is used – restart_file on namelist, if provided is ignored.
- On startup setting restart_file – causes program to abort.
- On continue can provide entire namelist (or not).
- On continue or branch, values from restart_file WILL be used – namelist values are ignored (unless restart_file_override is set, then the values from namelist [or default] will be used).
Items saved to restart_file
- atm_adiabatic
- atm_ideal_phys
- aqua_planet
- case_desc
- case_name
- mss_irt
- mss_wpass
timemgr_inparm namelist
item
default
valid settings
calendar
NO_LEAP
GREGORIAN or NO_LEAP
stop_option
blank
'nsteps','ndays','nmonths','nyears','date'
stop_n
0
>=0
stop_ymd
0
Valid date: YYYYMMDD
stop_tod
0
86400>s>=0
stop_final_ymd
99991231
Valid date: YYYYMMDD
restart_option
'yearly'
'none','nsteps','ndays','nmonths','nyears','monthly','yearly', or 'end'
restart_n
1
>0
restart_file_override
blank
Colen delimted list of options to overide from restart_file ("restart_option:restart_n")
start_ymd
REQUIRED
Valid date: YYYYMMDD
start_tod
0
86400>s>=0
ref_ymd
start_ymd
Valid date: YYYYMMDD
ref_tod
0
86400>s>=0
perpetual_run
.false.(.true. if aqua_planet set)
logical (can't be .false. if default is .true.)
perpetual_ymd
Required if perpetual_run set, else can not set(321 if aqua_planet set)
Valid date: YYYYMMDD
atm_cpl_dt
Required
>0
orb_obliq
Required if orb_iyear_AD not set
[-90,90]
orb_eccen
Required if orb_iyear_AD not set
[0,.1]
orb_mvelp
Required if orb_iyear_AD not set
[0,360]
orb_iyear_AD
Required if orb_obliq/orb_eccen and orb_mvelp not set
valid year +-1M years from 1950
type |
Required |
Optional |
Changable |
Unsetable |
startup |
start_ymd,orb_,atm_cpl_dt,stop_ |
all |
all |
perpetual_run, if default is already true |
continue or branch |
stop_ |
all |
stop_,restart_ |
none |
Behavior:
- Have to set one but only one of stop_nsteps, stop_ndays, stop_nmonths, stop_nyears, or (stop_ymd and stop_tod). Otherwise program aborts.
- If restart_option="none" set, other restart_ options ignored.
- Have to set either orb_iyear_AD or all of orb_eccen, orb_obliq, and orb_mvelp – otherwise aborts.
- Can only set perpetual_ymd if perpetual_run is set to .true. (setting aqua_planet to .true. also sets perpetual_run to .true. and perpetual_ymd to 321 by default).
- If perpetual_run is set to true – HAVE to set perpetual_ymd or else aborts with error (unless perpetual_run is set to true, because aqua_planet was turned on).
- If aqua_planet turned on – perpetual_run can not be set to false. (if default of perpetual_run is true – can not set to false)
- Start_ymd required – if not set program aborts. ref_ymd and ref_tod are set to start_ymd and start_tod if not set.
- stop date will always be less than or equal to stop_final_date.
- If current date or start date (for startup case) is greater than or equal to stop_final_ymd (with stop_final_tod implicitly 0) – then abort with an error.
- atm_cpl_dt HAS to be provided – or else abort with an error. Later at Stage-2 other coupling frequecies will have to be provided – and if they are incompatible program should abort with an error.
- restart and continue behave the same way – can provide namelist information for data on restart files – but values from restart_file is used.
- For restart or continue can change restart_ options if set restart_file_override to list of options you want to change "restart_option:restart_n".
- The information provided on the restart file includes everything – but the stop time. The stop time HAS to be provided on the namelist.
Items saved to restart_file
- calendar
- restart_interval_sec
- restart_interval_months
- restart_interval_years
- restart_next_alarm_ymd
- restart_next_alarm_tod
- start_ymd
- start_tod
- curr_ymd
- curr_tod
- ref_ymd
- ref_tod
- perpetual_run
- perpetual_ymd
- atm_cpl_dt
- dtime
- orb_obliq
- orb_mvelp
- orb_iyear_AD
- orb_mode
Look at top level picture again
Pages 9-24 of Design document