Attending: Cecelia, Erik, Mariana, Don
(The EClock has a pointer to the restart alarm in it, added here so the object can reference the alarm directly without having to go through the clock)
(later we will also have alarms for each component model: lnd, ice, ocn, and atm)
type shr_timemgr_clockType private ! This is an opaque type ! ------------------------------------------------------------------------ ! ----------- Information saved on restart ------------------------------- ! ------------------------------------------------------------------------ {color:red}type(ESMF_Clock) :: EClock ! Time information type(ESMF_Alarm) :: restart ! Restart alarm {color} type(shr_timemgr_clockInfoType) :: info ! Misc. Info: perpetual mode, orbit ! ------------------------------------------------------------------------ ! Variables that are written out to restart file from above ! ------------------------------------------------------------------------ type(shr_ncio_descripType) :: var(NClockVars) end type shr_timemgr_clockType |
(Contains perpetual date, misc info, as well as orbital information. Orbital information is included so that the orbit can potentially be kept up to date with the clock).
type shr_timemgr_clockInfoType ! CCSM time information: perpetual mode info and orbital information private ! This is an opaque type ! ------------------------------------------------------------------------ ! ----------- Information saved on restart ------------------------------- ! ------------------------------------------------------------------------ ! Description of this clock character(len=SHR_KIND_CL) :: desc ! If this is a master synchronization clock or not logical :: MasterSyncClock ! Calendar type character(len=SHR_KIND_CS) :: calendar ! Perpetual date information logical :: perpetual_run = .false. ! If running in perpetual mode {color:red}type(ESMF_Time) :: perpetual_time ! Time/date of perpetual mode{color} ! Orbital information to set: either year or all of rest integer(SHR_KIND_IN) :: orb_mode = SHR_ORB_UNDEF_INT ! Orbit mode integer(SHR_KIND_IN) :: orb_iyear_AD = SHR_ORB_UNDEF_INT ! year for orbit real(SHR_KIND_R8) :: orb_obliq = SHR_ORB_UNDEF_REAL ! Obliquity of orbit real(SHR_KIND_R8) :: orb_eccen = SHR_ORB_UNDEF_REAL ! Eccentricity of orbit real(SHR_KIND_R8) :: orb_mvelp = SHR_ORB_UNDEF_REAL ! Locatn of vernal equinox ! ------------------------------------------------------------------------ ! ----------- Information not saved on restart --------------------------- ! ------------------------------------------------------------------------ ! If wish to turn restarts off logical :: NoRestarts = .false. ! Orbital information derived from above real(SHR_KIND_R8) :: orb_obliqr = SHR_ORB_UNDEF_REAL real(SHR_KIND_R8) :: orb_lambm0 = SHR_ORB_UNDEF_REAL real(SHR_KIND_R8) :: orb_mvelpp = SHR_ORB_UNDEF_REAL !------------------------------------------------------------------------ ! Variables that are written out to restart file from above !------------------------------------------------------------------------- type(shr_ncio_descripType) :: var(NInfoVars) end type shr_timemgr_clockInfoType |
type shr_inputInfo_initType private ! This type is opaque !----------------------------------------------------------------------------- ! Information shared by all model components !----------------------------------------------------------------------------- ! ----------- Information not saved on restart -------------------- ! Start type: startup, branch or continue character(SHR_KIND_CL) :: start_type ! Type of startup ! ----------- Information saved on restart ------------------------ ! Case description and name (save these on restart) character(SHR_KIND_CL) :: case_desc ! Long description of this case character(SHR_KIND_CS) :: case_name ! Short case identification ! Special configurations (save these on restart) logical :: atm_adiabatic ! No surface models and atm adiabatic mode logical :: atm_ideal_phys ! No surface models and atm ideal-physics logical :: aqua_planet ! No ice/lnd, analytic ocn, perpetual time ! MSS information needed for CAM now, but not in the future? (save these on restart) integer :: mss_irt ! MSS retention period character(SHR_KIND_CL) :: mss_wpass ! MSS write password ! Information ONLY used by the top level application driver. ! ----------- Information not saved on restart -------------------- ! Restart file info character(SHR_KIND_CL) :: restart_pfile ! Restart pointer file character(SHR_KIND_CL) :: restart_file ! Full archive path to restart file character(SHR_KIND_CL) :: archive_dir ! Directory to archive to... character(SHR_KIND_CL) :: restart_file_override ! List to override on restart file logical :: brnch_retain_casename ! If branch and can use same casename !----------------------------------------------------------------------------- ! Variables that are written out to restart file from above !----------------------------------------------------------------------------- type(shr_ncio_descripType) :: var(NVars) end type shr_inputInfo_InitType |
type(InitInfo_t) :: InitInfo ! CCSM initialization information ! note -the set of fields in the following states are determined in the prefix ! and can be obtained from cpl_fields_mod.F90 ! note- the suffix (_a etc.) determines the grid and decomp of the fields and is ! defined in the gc that contains those grids type(ESMF_State) :: cs_a ! nested states: l2x_a, i2x_a, o2x_a type(ESMF_State) :: a2x_a ! Atm export, atm grid and decomp - defined in atm gc type(ESMF_State) :: a2x_l ! Atm export, lnd grid and decomp - defined at top level type(ESMF_State) :: a2x_i ! Atm export, ice grid and decomp - defined at top level type(ESMF_State) :: a2x_o ! Atm export, ocn grid and decomp - defined at top level type(ESMF_State) :: l2x_a ! Lnd export, atm grid and decomp - defined at top level type(ESMF_State) :: o2x_a ! Ocn export, atm grid and decomp - defined at top level type(ESMF_State) :: i2x_a ! Ice export, atm grid and decomp - defined at top level type(ESMF_State) :: x2a_a ! Atm import, atm grid and decomp - defined in atm gc type(ESMF_GridComp) :: gc_atm ! Atmosphere gridded component type(ESMF_GridComp) :: gc_mrg_x2a ! Atmosphere import state merge/preparer gridded component type(shr_timemgr_ClockType) :: SyncClock ! CCSM clock type(shr_timemgr_ClockInfoType):: TimeMgrInfo ! CCSM time-management information type(shr_timemgr_ClockSetupType):: ClockSetup ! CCSM time-management . . . ! Add ccsm_init_data to import state as state on each import state call eshr_inputinfo_Info2EState( InitInfo, x2a_a ) . . . ! Each component is given it s coupling frequency by querying the alarms setup for each component ! Each component will create it s own internal clock, using ESyncClock to set start, ! stop, calendar and ref time, as well as using the restart alarm call eshr_timemgr_Info2EState( TimeMgrInfo, x2a_a ) . . . if ( shr_inputinfo_RunModel( InitInfo, atm ) ) & call ESMF_GridCompInitialize( gc_atm, import=x2a_a, export=a2x_a, phase=1, clock=ESyncClock, rc=rc ) . . . |
do while ( .not. ESMF_IsStopTime( EClock ) ) if ( shr_inputinfo_RunModel( InitInfo, atm ) .and. ESMF_AlarmIsRinging( atm_alarm ) )then call ESMF_GridCompRun( gc_atm, import=x2a_a, export=a2x_a, ESyncClock, phase=1 ) call ESMF_CplCompRun ( cc_map_a2l, import=a2x_a, export=a2x_l, rc=rc ) call ESMF_CplCompRun ( cc_map_a2i, import=a2x_a, export=a2x_i, rc=rc ) call ESMF_CplCompRun ( cc_map_a2o, import=a2x_a, export=a2x_o, rc=rc ) end if ! Similarily call the surface components... . . . if ( shr_inputinfo_RunModel( InitInfo, atm ) .and. ESMF_AlarmIsRinging( atm_alarm ) )then ! Note: cs_a is the composite state pointing to: l2x_a, i2x_a, and o2x_a call ESMF_GridCompRun( gc_mrg_x2a, import=cs_a, export=x2a_a, rc=rc ) call ESMF_GridCompRun( gc_atm, import=x2a_a, phase=2 ) call ESMF_AlarmRingerOff( atm_alarm ) end if call ESMF_ClockAdvance( EClock ) end do |