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

    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

    Behavior:
  • 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
  • No labels