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
|