This module represents a major subsystem of cpl6. It contains data type definitions and associated methods used for controlling a coupled integration. Here ``controlling" refers to issues such as:
REVISION HISTORY:
2002-Sep-18 - B. Kauffman -- reworked using shr_alarm_mod
2001-May-27 - T. Bettge -- initial prototype
INTERFACE:
module cpl_control_modUSES:
use shr_sys_mod ! wrappers around system calls
use shr_cal_mod ! calendar module
use shr_date_mod ! date data-type & methods
use shr_alarm_mod ! alarm data-type & methods
use cpl_kind_mod ! access to F90 kind declarations
implicit none
private ! except
PUBLIC TYPES:
! none
PUBLIC MEMBER FUNCTIONS:
public :: cpl_control_readNList ! read & parse namelist input
public :: cpl_control_init ! initialize alarms, etc.
public :: cpl_control_update ! update control flags
PUBLIC DATA MEMBERS:
!----- rest, stop, hist, diag control/alarm flags -----
logical ,public :: cpl_control_stopNow ! T => stop model now
logical ,public :: cpl_control_stopEOD ! T => stop model at end of day
logical ,public :: cpl_control_restNow ! T => create restart data now
logical ,public :: cpl_control_restEOD ! T => create restart data at EOD
logical ,public :: cpl_control_histNow ! T => create history data now
logical ,public :: cpl_control_histEOD ! T => create history data at EOD
logical ,public :: cpl_control_histSave ! T => archive history data now
logical ,public :: cpl_control_hist64bit ! T => use 64 bit netCDFfiles
logical ,public :: cpl_control_avhistNow ! T => create history data now
logical ,public :: cpl_control_avhistEOD ! T => create history data at EOD
logical ,public :: cpl_control_diagNow ! T => print diagnostic data now
logical ,public :: cpl_control_diagEOD ! T => print diagnostic data at EOD
logical ,public :: cpl_control_avDiagNow ! T => print tavg diag data now
logical ,public :: cpl_control_avDiagEOD ! T => print tavg diag data at EOD
logical ,public :: cpl_control_bfbflag ! T => bfb with different pes
!----- case name & descriptive string -----
character(CL),public :: cpl_control_caseName ! case name
character(CL),public :: cpl_control_caseDesc ! case description
!----- restart control -----
character(16),public :: cpl_control_restType ! restart type: init,cont,branch
integer(IN) ,public :: cpl_control_restCDate ! restart cDate from namelist
integer(IN) ,public :: cpl_control_restDate ! restart date
character(CL),public :: cpl_control_restPFn ! restart pointer file name
character(CL),public :: cpl_control_restBFn ! restart branch file name
logical ,public :: cpl_control_lagOcn ! T => lag the ocn at startup
logical ,public :: cpl_control_sendAtmAlb ! T => send albedo ICs to atm
logical ,public :: cpl_control_sendLndDom ! T => send lnd domain to lnd
logical ,public :: cpl_control_icData_a ! T => use IC data provided by atm
logical ,public :: cpl_control_icData_i ! T => use IC data provided by ice
logical ,public :: cpl_control_icData_l ! T => use IC data provided by lnd
logical ,public :: cpl_control_icData_o ! T => use IC data provided by ocn
logical ,public :: cpl_control_icData_r ! T => use IC data provided by roff
character(16),public :: cpl_control_avhistType ! tavg history file type
!----- mapping file names -----
character(CL),public :: cpl_control_mapFn_a2oF ! map data file: a->o fluxes
character(CL),public :: cpl_control_mapFn_a2oS ! map data file: a->o states
character(CL),public :: cpl_control_mapFn_o2aF ! map data file: o->a fluxes
character(CL),public :: cpl_control_mapFn_o2aS ! map data file: o->a states
character(CL),public :: cpl_control_mapFn_r2o ! map data file: r->o runoff
!----- flux & orbital options -----
logical ,public :: cpl_control_fluxAlbAv ! T => NO diurnal cycle in albedos
character(16),public :: cpl_control_fluxEPbal ! selects E,P,R adjustment technique
real(R8) ,public :: cpl_control_fluxEPfac ! E,P,R adjust factor recv'd from ocn
integer(IN) ,public :: cpl_control_fluxAShift ! albedo calc time-shift (seconds)
real(R8) ,public :: cpl_control_orbEccen ! eccen of earth orbit (unitless)
real(R8) ,public :: cpl_control_orbObliqr ! earth's obliquity (rad)
real(R8) ,public :: cpl_control_orbLambm0 ! mean lon perihelion @ vernal eq (rad)
real(R8) ,public :: cpl_control_orbMvelpp ! moving vernal equinox longitude
! of perihelion plus pi (rad)
!----- info about which specific component models are in use -----
logical ,public :: cpl_control_dead_a ! T => atm component is dead comp
logical ,public :: cpl_control_dead_i ! T => ice component is dead comp
logical ,public :: cpl_control_dead_l ! T => lnd component is dead comp
logical ,public :: cpl_control_dead_o ! T => ocn component is dead comp
logical ,public :: cpl_control_dead_ao ! T => atm and/or ocn are dead comp
!----- date/time & timestep info -----
integer(IN) ,public :: cpl_control_nCpl_a ! atm/cpl communications per day
integer(IN) ,public :: cpl_control_nCpl_i ! ice/cpl communications per day
integer(IN) ,public :: cpl_control_nCpl_l ! lnd/cpl communications per day
integer(IN) ,public :: cpl_control_nCpl_o ! ocn/cpl communications per day
integer(IN) ,public :: cpl_control_nCpl_r ! rof/cpl communications per day
integer(IN) ,public :: cpl_control_cDate_a ! atm coded date
integer(IN) ,public :: cpl_control_cDate_i ! ice coded date
integer(IN) ,public :: cpl_control_cDate_l ! lnd coded date
integer(IN) ,public :: cpl_control_cDate_o ! ocn coded date
integer(IN) ,public :: cpl_control_sec_a ! atm secs on date
integer(IN) ,public :: cpl_control_sec_i ! ice secs on date
integer(IN) ,public :: cpl_control_sec_l ! lnd secs on date
integer(IN) ,public :: cpl_control_sec_o ! ocn secs on date
!----- decomposition settings -----
integer(IN) ,public :: cpl_control_decomp_a ! atm decomposition type
integer(IN) ,public :: cpl_control_decomp_l ! lnd decomposition type
integer(IN) ,public :: cpl_control_decomp_o ! ocn decomposition type
integer(IN) ,public :: cpl_control_decomp_i ! ice decomposition type
integer(IN) ,public :: cpl_control_decomp_r ! rof decomposition type
!----- other flags -----
integer(IN) ,public :: cpl_control_infoDBug=1 ! user specified dbug level
logical ,public :: cpl_control_infoBcheck ! T => do bit-check now
Initialize and read namelist values.
REVISION HISTORY:
2002-Sep-18 - B. Kauffman -- 1st versionINTERFACE:
subroutine cpl_control_readNList()USES:
use shr_orb_mod
implicit none
INPUT/OUTPUT PARAMETERS:
! modifies private module data for later use (the namelist variables)
Set the module variable startDate to the input argument date. Also set the module variables stopAlarm, restAlarm, histAlarm, avhistAlarm, diagAlarm and avdiagAlarm. If any of rest_date, stop_date, etc. are unset or negative, set them to the input date.
REVISION HISTORY:
2002-Sep-18 - B. Kauffman -- 1st versionINTERFACE:
subroutine cpl_control_init(date)USES:
implicit none
INPUT/OUTPUT PARAMETERS:
!output: modifies data declared in this module's header type(shr_date),intent(in) :: date ! model start date
Update all the module cpl_control_*Now and cpl_control_*EOD flags using input argument currentDate.
Also set cpl_control_infoBCheck.
REVISION HISTORY:
2002-Sep-18 - B. Kauffman -- 1st version using shr_alarm_modINTERFACE:
subroutine cpl_control_update(currentDate)USES:
implicit none
INPUT/OUTPUT PARAMETERS:
type(shr_date),intent(in) :: currentDate ! current model date
!OUTPUT: modifies public cpl_control_mod data