!=============================================================================== ! SVN $Id: seq_infodata_mod.F90 23400 2010-05-27 16:41:38Z mvertens $ ! SVN $URL: https://svn-ccsm-models.cgd.ucar.edu/drv/seq_mct/branch_tags/cesm1_0_rel_tags/cesm1_0_rel01_drvseq3_1_32/shr/seq_infodata_mod.F90 $ !=============================================================================== !BOP =========================================================================== ! ! !MODULE: seq_infodata_mod --- Module for input data shared between CCSM components ! ! !DESCRIPTION: ! ! A module to get, put, and store some standard scalar data ! ! Typical usage: ! ! ! !REMARKS: ! ! !REVISION HISTORY: ! 2005-Nov-11 - E. Kluzek - creation of shr_inputinfo_mod ! 2007-Nov-15 - T. Craig - refactor for ccsm4 system and move to seq_infodata_mod ! ! !INTERFACE: ------------------------------------------------------------------ MODULE seq_infodata_mod 19,6 ! !USES: use shr_kind_mod, only : SHR_KIND_CS, SHR_KIND_CL, SHR_KIND_IN, & SHR_KIND_R8, SHR_KIND_I8 use shr_sys_mod, only : shr_sys_flush, shr_sys_abort, shr_sys_getenv use shr_ncio_mod, only : shr_ncio_descripType, shr_ncio_open, & shr_ncio_close use seq_comm_mct, only : logunit, loglevel use seq_comm_mct, only : seq_comm_setptrs, seq_comm_iamroot use shr_orb_mod implicit none private ! default private ! !PUBLIC TYPES: public :: seq_infodata_type ! !PUBLIC MEMBER FUNCTIONS public :: seq_infodata_Init ! Initialize public :: seq_infodata_GetData ! Get values from object public :: seq_infodata_PutData ! Change values public :: seq_infodata_Restart ! read/write restart public :: seq_infodata_Print ! print current info public :: seq_infodata_Exchange ! exchange data across pes ! !PUBLIC DATA MEMBERS: !EOP ! Strings of valid start_type options character(len=*), public, parameter :: seq_infodata_start_type_start = "startup" character(len=*), public, parameter :: seq_infodata_start_type_cont = "continue" character(len=*), public, parameter :: seq_infodata_start_type_brnch = "branch" ! InputInfo derived type type seq_infodata_type private ! This type is opaque !--- set via namelist and held fixed ---- character(SHR_KIND_CL) :: start_type ! Type of startup character(SHR_KIND_CS) :: case_name ! Short case identification character(SHR_KIND_CL) :: case_desc ! Long description of this case character(SHR_KIND_CL) :: model_version ! Model version character(SHR_KIND_CS) :: username ! Current user character(SHR_KIND_CS) :: hostname ! Current machine character(SHR_KIND_CL) :: timing_dir ! Dir for timing files character(SHR_KIND_CL) :: tchkpt_dir ! Dir for timing checkpoint files 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 integer(SHR_KIND_IN) :: aqua_planet_sst ! aqua planet analytic sst type logical :: brnch_retain_casename ! If branch and can use same casename logical :: read_restart ! read the restart file, based on start_type character(SHR_KIND_CL) :: restart_pfile ! Restart pointer file character(SHR_KIND_CL) :: restart_file ! Full archive path to restart file logical :: single_column ! single column mode real (SHR_KIND_R8) :: scmlat ! single column lat real (SHR_KIND_R8) :: scmlon ! single column lon character(SHR_KIND_CS) :: logFilePostFix ! postfix for output log files character(SHR_KIND_CL) :: outPathRoot ! root for output log files logical :: perpetual ! perpetual flag integer(SHR_KIND_IN) :: perpetual_ymd ! perpetual date real(SHR_KIND_R8) :: orb_eccen ! See shr_orb_mod, needed for cosz real(SHR_KIND_R8) :: orb_obliqr ! See shr_orb_mod, needed for cosz real(SHR_KIND_R8) :: orb_lambm0 ! See shr_orb_mod, needed for cosz real(SHR_KIND_R8) :: orb_mvelpp ! See shr_orb_mod, needed for cosz character(SHR_KIND_CL) :: flux_epbal ! selects E,P,R adjustment technique logical :: flux_albav ! T => no diurnal cycle in ocn albedos logical :: samegrid_ao ! are atm and ocean grid same logical :: samegrid_ro ! are rof and ocean grid same logical :: samegrid_al ! are atm and lnd grid same logical :: shr_map_dopole ! pole corrections in shr_map_mod logical :: npfix ! pole fix in atm2ocn mapping character(SHR_KIND_CS) :: aoflux_grid ! grid for atm ocn flux calc logical :: ocean_tight_coupling ! are we doing tight ocean coupling logical :: cpl_cdf64 ! use netcdf 64 bit offset, large file support logical :: do_budgets ! do heat/water budgets diagnostics logical :: do_histinit ! write out initial history file integer :: budget_inst ! instantaneous budget level integer :: budget_daily ! daily budget level integer :: budget_month ! monthly budget level integer :: budget_ann ! annual budget level integer :: budget_ltann ! long term budget level written at end of year integer :: budget_ltend ! long term budget level written at end of run logical :: drv_threading ! is threading control in driver turned on logical :: histaux_a2x ! cpl writes aux hist files: a2x every c2a comm logical :: histaux_a2x3hr ! cpl writes aux hist files: a2x 3hr states logical :: histaux_a2x3hrp ! cpl writes aux hist files: a2x 3hr precip logical :: histaux_a2x24hr ! cpl writes aux hist files: a2x daily all logical :: histaux_l2x ! cpl writes aux hist files: l2x every c2l comm logical :: histaux_r2x ! cpl writes aux hist files: r2x every c2o comm real(SHR_KIND_R8) :: eps_frac ! fraction error tolerance real(SHR_KIND_R8) :: eps_amask ! atm mask error tolerance real(SHR_KIND_R8) :: eps_agrid ! atm grid error tolerance real(SHR_KIND_R8) :: eps_aarea ! atm area error tolerance real(SHR_KIND_R8) :: eps_omask ! ocn mask error tolerance real(SHR_KIND_R8) :: eps_ogrid ! ocn grid error tolerance real(SHR_KIND_R8) :: eps_oarea ! ocn area error tolerance !--- set via namelist and may be time varying --- integer(SHR_KIND_IN) :: info_debug ! debug level logical :: bfbflag ! turn on bfb option !--- set via components and held fixed --- logical :: atm_present ! does component model exist logical :: atm_prognostic ! does component model need input data from driver logical :: lnd_present ! does component model exist logical :: lnd_prognostic ! does component model need input data from driver logical :: rof_present ! does rof component exist logical :: ocn_present ! does component model exist logical :: ocn_prognostic ! does component model need input data from driver logical :: ocnrof_prognostic ! does component need rof data logical :: ice_present ! does component model exist logical :: ice_prognostic ! does component model need input data from driver logical :: glc_present ! does component model exist logical :: glc_prognostic ! does component model need input data from driver logical :: sno_present ! does component model exist logical :: sno_prognostic ! does component model need input data from driver logical :: dead_comps ! do we have dead models integer(SHR_KIND_IN) :: atm_nx ! nx, ny of "2d" grid integer(SHR_KIND_IN) :: atm_ny ! nx, ny of "2d" grid integer(SHR_KIND_IN) :: lnd_nx ! nx, ny of "2d" grid integer(SHR_KIND_IN) :: lnd_ny ! nx, ny of "2d" grid integer(SHR_KIND_IN) :: ice_nx ! nx, ny of "2d" grid integer(SHR_KIND_IN) :: ice_ny ! nx, ny of "2d" grid integer(SHR_KIND_IN) :: ocn_nx ! nx, ny of "2d" grid integer(SHR_KIND_IN) :: ocn_ny ! nx, ny of "2d" grid integer(SHR_KIND_IN) :: rof_nx ! nx, ny of "2d" grid integer(SHR_KIND_IN) :: rof_ny ! nx, ny of "2d" grid integer(SHR_KIND_IN) :: glc_nx ! nx, ny of "2d" grid integer(SHR_KIND_IN) :: glc_ny ! nx, ny of "2d" grid integer(SHR_KIND_IN) :: sno_nx ! nx, ny of "2d" grid integer(SHR_KIND_IN) :: sno_ny ! nx, ny of "2d" grid !--- set via components and may be time varying --- real(SHR_KIND_R8) :: nextsw_cday ! calendar of next atm shortwave real(SHR_KIND_R8) :: precip_fact ! precip factor integer(SHR_KIND_IN) :: atm_phase ! atm phase integer(SHR_KIND_IN) :: lnd_phase ! lnd phase integer(SHR_KIND_IN) :: ice_phase ! ice phase integer(SHR_KIND_IN) :: ocn_phase ! ocn phase integer(SHR_KIND_IN) :: glc_phase ! glc phase logical :: atm_aero ! atmosphere aerosols logical :: glcrun_alarm ! glc run alarm logical :: glc_g2supdate ! update glc2sno fields in lnd model !--- set from restart file --- character(SHR_KIND_CS) :: rest_case_name ! Short case identification end type seq_infodata_type ! --- Private local data ------------------------------------------------------- ! Restart fields - ! Many restart parameters are not used to update infodata. for now, ! we write them to the restart file, and they are just place holders. integer, parameter :: nrestvar = 17 character(len=*),parameter :: restname(nrestvar) = & (/'case_name ','case_desc ', & 'atm_adiabatic ','atm_ideal_phys ','aqua_planet ', & 'single_column ','scmlon ','scmlat ', & 'perpetual ','perpetual_ymd ','flux_albav ','flux_epbal ', & 'orb_eccen ','orb_lambm0 ','orb_mvelpp ', & 'nextsw_cday ','precip_fact ' /) character(len=*),parameter :: restlnam(nrestvar) = & (/'case name ','case description', & 'atm adiabatic fl','atm ideal phys f','aqua planet flag', & 'single column fl','scam longitude ','scam latitude ', & 'perpetual flag ','perpetual date ','flux albav flag ','flux epbal opt ', & 'orb eccentricity','lon perh at ve ','mov ve lon perh ', & 'radiat calc time','precip factor ' /) character(len=*),parameter :: restunit(nrestvar) = & (/'name ','name ', & 'logical ','logical ','logical ', & 'logical ','degrees ','degrees ', & 'logical ','date [YYYYMMDD] ','logical ','name ', & 'nondim ','radians ','radians ', & 'calday ','nondim ' /) character(len=*),parameter :: resttype(nrestvar) = & (/'char ','char ', & 'logical ','logical ','logical ', & 'logical ','real8 ','real8 ', & 'logical ','integer ','logical ','char ', & 'real8 ','real8 ','real8 ', & 'real8 ','real8 ' /) character(len=*),parameter :: sp_str = 'str_undefined' !=============================================================================== CONTAINS !=============================================================================== !=============================================================================== !BOP =========================================================================== ! ! !IROUTINE: seq_infodata_Init -- read in CCSM shared namelist ! ! !DESCRIPTION: ! ! Read in input from seq_infodata_inparm namelist, output ccsm derived type for ! miscillaneous info. ! ! !INTERFACE: ------------------------------------------------------------------ SUBROUTINE seq_infodata_Init( infodata, nmlfile, ID) 1,11 ! !USES: use shr_file_mod, only : shr_file_getUnit, shr_file_freeUnit use shr_string_mod, only : shr_string_toUpper, shr_string_listAppend implicit none ! !INPUT/OUTPUT PARAMETERS: type(seq_infodata_type), intent(INOUT) :: infodata ! infodata object character(len=*), intent(IN) :: nmlfile ! Name-list filename integer(SHR_KIND_IN), intent(IN) :: ID ! seq_comm ID !EOP !----- local ----- character(len=*), parameter :: subname = '(seq_infodata_Init) ' integer(SHR_KIND_IN),parameter :: aqua_perpetual_ymd = 321 integer :: mpicom ! MPI communicator integer :: ierr ! I/O error code integer :: unitn ! Namelist unit number to read !------ namelist ----- character(SHR_KIND_CL) :: case_desc ! Case long description character(SHR_KIND_CS) :: case_name ! Case short name character(SHR_KIND_CL) :: model_version ! Model version character(SHR_KIND_CS) :: username ! Current user character(SHR_KIND_CS) :: hostname ! Current machine character(SHR_KIND_CL) :: start_type ! Startup-type: startup, continue, branch character(SHR_KIND_CL) :: timing_dir ! Dir for timing files character(SHR_KIND_CL) :: tchkpt_dir ! Dir for timing checkpoint files logical :: atm_adiabatic ! Atmosphere adiabatic physics mode logical :: atm_ideal_phys ! Atmosphere idealized physics mode logical :: aqua_planet ! Aqua-planet mode (surface is all ocean) integer(SHR_KIND_IN) :: aqua_planet_sst ! analytic sst field logical :: brnch_retain_casename ! If retain casename for branch integer(SHR_KIND_IN) :: info_debug ! debug flag logical :: bfbflag ! bit for bit flag character(SHR_KIND_CL) :: restart_pfile ! Restart pointer filename character(SHR_KIND_CL) :: restart_file ! Restart filename logical :: single_column ! single column mode real (SHR_KIND_R8) :: scmlat ! single column mode latitude real (SHR_KIND_R8) :: scmlon ! single column mode longitude character(SHR_KIND_CS) :: logFilePostFix ! postfix for output log files character(SHR_KIND_CL) :: outPathRoot ! root output files logical :: perpetual ! perpetual mode integer(SHR_KIND_IN) :: perpetual_ymd ! perpetual ymd integer(SHR_KIND_IN) :: orb_iyear_AD ! year for orbit real(SHR_KIND_R8) :: orb_obliq ! Obliquity of orbit real(SHR_KIND_R8) :: orb_eccen ! Eccentricity of orbit real(SHR_KIND_R8) :: orb_mvelp ! Location of vernal equinox real(SHR_KIND_R8) :: orb_obliqr ! Obliquity in radians real(SHR_KIND_R8) :: orb_lambm0 ! lon of per at vernal equ real(SHR_KIND_R8) :: orb_mvelpp ! mvelp plus pi character(SHR_KIND_CL) :: flux_epbal ! selects E,P,R adjustment technique logical :: flux_albav ! T => no diurnal cycle in ocn albedos logical :: samegrid_ao ! are atm and ocean grids same logical :: samegrid_ro ! are rof and ocean grids same logical :: samegrid_al ! are atm and lnd grids same logical :: shr_map_dopole ! pole corrections in shr_map_mod logical :: npfix ! pole fix in atm2ocn mapping character(SHR_KIND_CS) :: aoflux_grid ! grid for atm ocn flux calc logical :: ocean_tight_coupling ! are we doing tight ocean coupling logical :: cpl_cdf64 ! use netcdf 64 bit offset, large file support logical :: do_budgets ! do heat/water budgets diagnostics logical :: do_histinit ! write out initial history file integer :: budget_inst ! instantaneous budget level integer :: budget_daily ! daily budget level integer :: budget_month ! monthly budget level integer :: budget_ann ! annual budget level integer :: budget_ltann ! long term budget level written at end of year integer :: budget_ltend ! long term budget level written at end of run logical :: histaux_a2x ! cpl writes aux hist files: a2x every c2a comm logical :: histaux_a2x3hr ! cpl writes aux hist files: a2x 3hr states logical :: histaux_a2x3hrp ! cpl writes aux hist files: a2x 2hr precip logical :: histaux_a2x24hr ! cpl writes aux hist files: a2x daily all logical :: histaux_l2x ! cpl writes aux hist files: l2x every c2l comm logical :: histaux_r2x ! cpl writes aux hist files: r2x every c2o comm logical :: drv_threading ! is threading control in driver turned on real(SHR_KIND_R8) :: eps_frac ! fraction error tolerance real(SHR_KIND_R8) :: eps_amask ! atm mask error tolerance real(SHR_KIND_R8) :: eps_agrid ! atm grid error tolerance real(SHR_KIND_R8) :: eps_aarea ! atm area error tolerance real(SHR_KIND_R8) :: eps_omask ! ocn mask error tolerance real(SHR_KIND_R8) :: eps_ogrid ! ocn grid error tolerance real(SHR_KIND_R8) :: eps_oarea ! ocn area error tolerance namelist /seq_infodata_inparm/ & case_desc, case_name, start_type, tchkpt_dir, & model_version, username, hostname, timing_dir, & atm_adiabatic, atm_ideal_phys, aqua_planet,aqua_planet_sst, & brnch_retain_casename, info_debug, bfbflag, & restart_pfile, restart_file, & single_column, scmlat, & scmlon, logFilePostFix, outPathRoot, & perpetual, perpetual_ymd, flux_epbal, flux_albav, & orb_iyear_AD, orb_obliq, orb_eccen, orb_mvelp, & samegrid_ao, samegrid_ro, samegrid_al, & shr_map_dopole, npfix, aoflux_grid, do_histinit, & ocean_tight_coupling, do_budgets, drv_threading, & budget_inst, budget_daily, budget_month, & budget_ann, budget_ltann, budget_ltend, & histaux_a2x ,histaux_a2x3hr,histaux_a2x3hrp, & histaux_a2x24hr,histaux_l2x ,histaux_r2x, & cpl_cdf64, eps_frac, eps_amask, & eps_agrid, eps_aarea, eps_omask, eps_ogrid, & eps_oarea !------------------------------------------------------------------------------- call seq_comm_setptrs(ID,mpicom=mpicom) !--------------------------------------------------------------------------- ! Set infodata on root pe !--------------------------------------------------------------------------- if (seq_comm_iamroot(ID)) then !--------------------------------------------------------------------------- ! Set namelist defaults !--------------------------------------------------------------------------- case_desc = ' ' case_name = ' ' model_version = 'unknown' username = 'unknown' hostname = 'unknown' timing_dir = '.' tchkpt_dir = '.' start_type = ' ' atm_ideal_phys = .false. atm_adiabatic = .false. aqua_planet = .false. aqua_planet_sst = 1 brnch_retain_casename = .false. info_debug = 1 bfbflag = .false. restart_pfile = 'rpointer.drv' restart_file = trim(sp_str) single_column = .false. scmlat = -999. scmlon = -999. logFilePostFix = '.log' outPathRoot = './' perpetual = .false. perpetual_ymd = -999 orb_iyear_AD = SHR_ORB_UNDEF_INT orb_obliq = SHR_ORB_UNDEF_REAL orb_eccen = SHR_ORB_UNDEF_REAL orb_mvelp = SHR_ORB_UNDEF_REAL flux_epbal = 'off' flux_albav = .false. samegrid_ao = .true. ! for cam samegrid_ro = .false. samegrid_al = .true. ! for cam shr_map_dopole = .true. npfix = .true. aoflux_grid = 'ocn' ocean_tight_coupling = .false. cpl_cdf64 = .true. do_budgets = .false. do_histinit = .false. budget_inst = 0 budget_daily = 0 budget_month = 1 budget_ann = 1 budget_ltann = 1 budget_ltend = 0 histaux_a2x = .false. histaux_a2x3hr = .false. histaux_a2x3hrp = .false. histaux_a2x24hr = .false. histaux_l2x = .false. histaux_r2x = .false. drv_threading = .false. eps_frac = 1.0e-02_SHR_KIND_R8 eps_amask = 1.0e-13_SHR_KIND_R8 eps_agrid = 1.0e-12_SHR_KIND_R8 eps_aarea = 9.0e-07_SHR_KIND_R8 eps_omask = 1.0e-06_SHR_KIND_R8 eps_ogrid = 1.0e-02_SHR_KIND_R8 eps_oarea = 1.0e-01_SHR_KIND_R8 !--------------------------------------------------------------------------- ! Read in namelist !--------------------------------------------------------------------------- unitn = shr_file_getUnit() write(logunit,"(A)") subname,' read seq_infodata_inparm namelist from: '//trim(nmlfile) open( unitn, file=trim(nmlfile), status='old' ) ierr = 1 do while( ierr /= 0 ) read(unitn,nml=seq_infodata_inparm,iostat=ierr) if (ierr < 0) then call shr_sys_abort( subname//':: namelist read returns an'// & ' end of file or end of record condition' ) end if end do close(unitn) call shr_file_freeUnit( unitn ) !--------------------------------------------------------------------------- ! Set infodata on root pe !--------------------------------------------------------------------------- infodata%case_desc = case_desc infodata%case_name = case_name infodata%model_version = model_version infodata%username = username infodata%hostname = hostname infodata%start_type = start_type infodata%timing_dir = timing_dir infodata%tchkpt_dir = tchkpt_dir infodata%atm_ideal_phys = atm_ideal_phys infodata%atm_adiabatic = atm_adiabatic infodata%aqua_planet = aqua_planet infodata%aqua_planet_sst = aqua_planet_sst infodata%brnch_retain_casename = brnch_retain_casename infodata%restart_pfile = restart_pfile infodata%restart_file = restart_file infodata%single_column = single_column infodata%scmlat = scmlat infodata%scmlon = scmlon infodata%logFilePostFix = logFilePostFix infodata%outPathRoot = outPathRoot infodata%perpetual = perpetual infodata%perpetual_ymd = perpetual_ymd infodata%flux_epbal = flux_epbal infodata%flux_albav = flux_albav infodata%samegrid_ao = samegrid_ao infodata%samegrid_ro = samegrid_ro infodata%samegrid_al = samegrid_al infodata%shr_map_dopole = shr_map_dopole infodata%npfix = npfix infodata%aoflux_grid = aoflux_grid infodata%ocean_tight_coupling = ocean_tight_coupling infodata%cpl_cdf64 = cpl_cdf64 infodata%do_budgets = do_budgets infodata%do_histinit = do_histinit infodata%budget_inst = budget_inst infodata%budget_daily = budget_daily infodata%budget_month = budget_month infodata%budget_ann = budget_ann infodata%budget_ltann = budget_ltann infodata%budget_ltend = budget_ltend infodata%histaux_a2x = histaux_a2x infodata%histaux_a2x3hr = histaux_a2x3hr infodata%histaux_a2x3hrp = histaux_a2x3hrp infodata%histaux_a2x24hr = histaux_a2x24hr infodata%histaux_l2x = histaux_l2x infodata%histaux_r2x = histaux_r2x infodata%drv_threading = drv_threading infodata%eps_frac = eps_frac infodata%eps_amask = eps_amask infodata%eps_agrid = eps_agrid infodata%eps_aarea = eps_aarea infodata%eps_omask = eps_omask infodata%eps_ogrid = eps_ogrid infodata%eps_oarea = eps_oarea infodata%info_debug = info_debug infodata%bfbflag = bfbflag infodata%atm_present = .true. infodata%lnd_present = .true. if (single_column) then infodata%rof_present = .false. else infodata%rof_present = .true. end if infodata%ocn_present = .true. infodata%ice_present = .true. infodata%glc_present = .true. infodata%sno_present = .false. infodata%atm_prognostic = .false. infodata%lnd_prognostic = .false. infodata%ocn_prognostic = .false. infodata%ocnrof_prognostic = .false. infodata%ice_prognostic = .false. infodata%glc_prognostic = .false. infodata%sno_prognostic = .false. infodata%dead_comps = .false. infodata%atm_nx = 0 infodata%atm_ny = 0 infodata%lnd_nx = 0 infodata%lnd_ny = 0 infodata%rof_nx = 0 infodata%rof_ny = 0 infodata%ice_nx = 0 infodata%ice_ny = 0 infodata%ocn_nx = 0 infodata%ocn_ny = 0 infodata%glc_nx = 0 infodata%glc_ny = 0 infodata%sno_nx = 0 infodata%sno_ny = 0 infodata%nextsw_cday = -1.0_SHR_KIND_R8 infodata%precip_fact = 1.0_SHR_KIND_R8 infodata%atm_phase = 1 infodata%lnd_phase = 1 infodata%ocn_phase = 1 infodata%ice_phase = 1 infodata%glc_phase = 1 infodata%atm_aero = .false. infodata%glcrun_alarm = .false. infodata%glc_g2supdate= .false. call shr_orb_params(orb_iyear_AD, orb_eccen, orb_obliq, orb_mvelp, & orb_obliqr, orb_lambm0, orb_mvelpp, .true.) infodata%orb_eccen = orb_eccen infodata%orb_obliqr = orb_obliqr infodata%orb_lambm0 = orb_lambm0 infodata%orb_mvelpp = orb_mvelpp !--- Derive a few things --- infodata%rest_case_name = ' ' infodata%read_restart = .false. if (trim(start_type) == trim(seq_infodata_start_type_cont) .or. & trim(start_type) == trim(seq_infodata_start_type_brnch)) then infodata%read_restart = .true. endif if (infodata%read_restart) then call seq_infodata_Restart('read', infodata) endif if (infodata%aqua_planet) then infodata%atm_present = .true. infodata%lnd_present = .false. infodata%rof_present = .false. infodata%ice_present = .false. infodata%ocn_present = .true. infodata%glc_present = .false. infodata%sno_present = .false. end if if (infodata%atm_adiabatic .or. infodata%atm_ideal_phys) then infodata%atm_present = .true. infodata%lnd_present = .false. infodata%rof_present = .false. infodata%ice_present = .false. infodata%ocn_present = .false. infodata%glc_present = .false. infodata%sno_present = .false. end if if ( infodata%aqua_planet ) then infodata%aqua_planet_sst = 1 infodata%perpetual = .true. infodata%perpetual_ymd = aqua_perpetual_ymd endif ! --- Error check the input values ------ call seq_infodata_Check( infodata ) end if call seq_infodata_bcast(infodata,mpicom) END SUBROUTINE seq_infodata_Init !=============================================================================== !=============================================================================== ! !IROUTINE: seq_infodata_GetData -- Get values from infodata object ! ! !DESCRIPTION: ! ! Get values out of the infodata object. ! ! !INTERFACE: ------------------------------------------------------------------ SUBROUTINE seq_infodata_GetData( infodata, case_name, case_desc, timing_dir, & 69 model_version, username, hostname, rest_case_name, tchkpt_dir, & start_type, restart_pfile, restart_file, perpetual, perpetual_ymd, & aqua_planet,aqua_planet_sst, atm_ideal_phys, atm_adiabatic, brnch_retain_casename, & single_column, scmlat,scmlon,logFilePostFix, outPathRoot, & atm_present, atm_prognostic, lnd_present, lnd_prognostic, & rof_present, ocn_present, ocn_prognostic, ocnrof_prognostic, & ice_present, ice_prognostic, glc_present, glc_prognostic, & sno_present, sno_prognostic, bfbflag, samegrid_ro, & samegrid_ao, samegrid_al, info_debug, dead_comps, read_restart, & shr_map_dopole, npfix, aoflux_grid, & nextsw_cday, precip_fact, flux_epbal, flux_albav, glcrun_alarm, & glc_g2supdate, atm_aero, & ocean_tight_coupling, do_budgets, do_histinit, drv_threading, & budget_inst, budget_daily, budget_month, & budget_ann, budget_ltann, budget_ltend , & histaux_a2x , histaux_a2x3hr, histaux_a2x3hrp , & histaux_a2x24hr, histaux_l2x , histaux_r2x , & cpl_cdf64, & orb_eccen, orb_obliqr, orb_lambm0, orb_mvelpp, glc_phase, & atm_phase, lnd_phase, ocn_phase, ice_phase, atm_nx, atm_ny, & lnd_nx, lnd_ny, rof_nx, rof_ny, ice_nx, ice_ny, ocn_nx, ocn_ny, & glc_nx, glc_ny, sno_nx, sno_ny, eps_frac, eps_amask, & eps_agrid, eps_aarea, eps_omask, eps_ogrid, eps_oarea ) implicit none ! !INPUT/OUTPUT PARAMETERS: type(seq_infodata_type), intent(IN) :: infodata ! Input CCSM structure character(len=*), optional, intent(OUT) :: start_type ! Start type character(len=*), optional, intent(OUT) :: case_name ! Short case identification character(len=*), optional, intent(OUT) :: case_desc ! Long case description character(len=*), optional, intent(OUT) :: model_version ! Model version character(len=*), optional, intent(OUT) :: username ! Username character(len=*), optional, intent(OUT) :: hostname ! Hostname character(len=*), optional, intent(OUT) :: rest_case_name ! restart casename character(len=*), optional, intent(OUT) :: timing_dir ! timing dir name character(len=*), optional, intent(OUT) :: tchkpt_dir ! timing checkpoint dir name logical, optional, intent(OUT) :: atm_adiabatic ! atm adiabatic mode logical, optional, intent(OUT) :: atm_ideal_phys! atm idealized-physics mode logical, optional, intent(OUT) :: aqua_planet ! aqua_planet mode integer(SHR_KIND_IN),optional, intent(OUT) :: aqua_planet_sst! aqua_planet sst_type logical, optional, intent(OUT) :: brnch_retain_casename logical, optional, intent(OUT) :: read_restart ! read restart flag character(len=*), optional, intent(OUT) :: restart_pfile ! Restart pointer file character(len=*), optional, intent(OUT) :: restart_file ! Restart file pathname logical, optional, intent(OUT) :: single_column real (SHR_KIND_R8), optional, intent(OUT) :: scmlat real (SHR_KIND_R8), optional, intent(OUT) :: scmlon character(len=*), optional, intent(OUT) :: logFilePostFix! output log file postfix character(len=*), optional, intent(OUT) :: outPathRoot ! output file root logical, optional, intent(OUT) :: perpetual ! If this is perpetual integer, optional, intent(OUT) :: perpetual_ymd ! If perpetual, date real(SHR_KIND_R8) ,optional, intent(OUT) :: orb_eccen ! See shr_orb_mod, needed for cosz real(SHR_KIND_R8) ,optional, intent(OUT) :: orb_obliqr ! See shr_orb_mod, needed for cosz real(SHR_KIND_R8) ,optional, intent(OUT) :: orb_lambm0 ! See shr_orb_mod, needed for cosz real(SHR_KIND_R8) ,optional, intent(OUT) :: orb_mvelpp ! See shr_orb_mod, needed for cosz character(len=*) ,optional, intent(OUT) :: flux_epbal ! selects E,P,R adjustment technique logical ,optional, intent(OUT) :: flux_albav ! T => no diurnal cycle in ocn albedos logical ,optional, intent(OUT) :: samegrid_ao ! are atm/ocn grids same logical ,optional, intent(OUT) :: samegrid_ro ! are rof/ocn grids same logical ,optional, intent(OUT) :: samegrid_al ! are atm/lnd grids same logical ,optional, intent(OUT) :: shr_map_dopole ! pole corrections in shr_map_mod logical ,optional, intent(OUT) :: npfix ! pole fix in atm2ocn mapping character(len=*) ,optional, intent(OUT) :: aoflux_grid ! grid for atm ocn flux calc logical ,optional, intent(OUT) :: ocean_tight_coupling ! tight vs loose ocean coupling logical ,optional, intent(OUT) :: cpl_cdf64 ! netcdf large file setting logical ,optional, intent(OUT) :: do_budgets ! heat/water budgets logical ,optional, intent(OUT) :: do_histinit ! initial history file integer ,optional, intent(OUT) :: budget_inst ! inst budget integer ,optional, intent(OUT) :: budget_daily ! daily budget integer ,optional, intent(OUT) :: budget_month ! month budget integer ,optional, intent(OUT) :: budget_ann ! ann budget integer ,optional, intent(OUT) :: budget_ltann ! ltann budget integer ,optional, intent(OUT) :: budget_ltend ! ltend budget logical ,optional, intent(OUT) :: histaux_a2x logical ,optional, intent(OUT) :: histaux_a2x3hr logical ,optional, intent(OUT) :: histaux_a2x3hrp logical ,optional, intent(OUT) :: histaux_a2x24hr logical ,optional, intent(OUT) :: histaux_l2x logical ,optional, intent(OUT) :: histaux_r2x logical ,optional, intent(OUT) :: drv_threading ! driver threading control flag real(SHR_KIND_R8) ,optional, intent(OUT) :: eps_frac ! fraction error tolerance real(SHR_KIND_R8) ,optional, intent(OUT) :: eps_amask ! atm mask error tolerance real(SHR_KIND_R8) ,optional, intent(OUT) :: eps_agrid ! atm grid error tolerance real(SHR_KIND_R8) ,optional, intent(OUT) :: eps_aarea ! atm area error tolerance real(SHR_KIND_R8) ,optional, intent(OUT) :: eps_omask ! ocn mask error tolerance real(SHR_KIND_R8) ,optional, intent(OUT) :: eps_ogrid ! ocn grid error tolerance real(SHR_KIND_R8) ,optional, intent(OUT) :: eps_oarea ! ocn area error tolerance integer(SHR_KIND_IN),optional, intent(OUT) :: info_debug logical ,optional, intent(OUT) :: bfbflag logical ,optional, intent(OUT) :: dead_comps ! do we have dead models logical ,optional, intent(OUT) :: atm_present ! provide data logical ,optional, intent(OUT) :: atm_prognostic ! need data logical ,optional, intent(OUT) :: lnd_present logical ,optional, intent(OUT) :: lnd_prognostic logical ,optional, intent(OUT) :: rof_present logical ,optional, intent(OUT) :: ocn_present logical ,optional, intent(OUT) :: ocn_prognostic logical ,optional, intent(OUT) :: ocnrof_prognostic logical ,optional, intent(OUT) :: ice_present logical ,optional, intent(OUT) :: ice_prognostic logical ,optional, intent(OUT) :: glc_present logical ,optional, intent(OUT) :: glc_prognostic logical ,optional, intent(OUT) :: sno_present logical ,optional, intent(OUT) :: sno_prognostic integer(SHR_KIND_IN),optional, intent(OUT) :: atm_nx ! nx,ny 2d grid size global integer(SHR_KIND_IN),optional, intent(OUT) :: atm_ny ! nx,ny 2d grid size global integer(SHR_KIND_IN),optional, intent(OUT) :: lnd_nx integer(SHR_KIND_IN),optional, intent(OUT) :: lnd_ny integer(SHR_KIND_IN),optional, intent(OUT) :: rof_nx integer(SHR_KIND_IN),optional, intent(OUT) :: rof_ny integer(SHR_KIND_IN),optional, intent(OUT) :: ice_nx integer(SHR_KIND_IN),optional, intent(OUT) :: ice_ny integer(SHR_KIND_IN),optional, intent(OUT) :: ocn_nx integer(SHR_KIND_IN),optional, intent(OUT) :: ocn_ny integer(SHR_KIND_IN),optional, intent(OUT) :: glc_nx integer(SHR_KIND_IN),optional, intent(OUT) :: glc_ny integer(SHR_KIND_IN),optional, intent(OUT) :: sno_nx integer(SHR_KIND_IN),optional, intent(OUT) :: sno_ny real(SHR_KIND_R8) ,optional, intent(OUT) :: nextsw_cday ! calendar of next atm shortwave real(SHR_KIND_R8) ,optional, intent(OUT) :: precip_fact ! precip factor integer(SHR_KIND_IN),optional, intent(OUT) :: atm_phase ! atm phase integer(SHR_KIND_IN),optional, intent(OUT) :: lnd_phase ! lnd phase integer(SHR_KIND_IN),optional, intent(OUT) :: ice_phase ! ice phase integer(SHR_KIND_IN),optional, intent(OUT) :: ocn_phase ! ocn phase integer(SHR_KIND_IN),optional, intent(OUT) :: glc_phase ! glc phase logical ,optional, intent(OUT) :: atm_aero ! atmosphere aerosols logical ,optional, intent(OUT) :: glcrun_alarm ! glc run alarm logical ,optional, intent(OUT) :: glc_g2supdate ! update glc2sno fields in lnd model !EOP !----- local ----- character(len=*), parameter :: subname = '(seq_infodata_GetData) ' !------------------------------------------------------------------------------- if ( present(start_type) ) start_type = infodata%start_type if ( present(case_name) ) case_name = infodata%case_name if ( present(case_desc) ) case_desc = infodata%case_desc if ( present(model_version) ) model_version = infodata%model_version if ( present(username) ) username = infodata%username if ( present(hostname) ) hostname = infodata%hostname if ( present(rest_case_name) ) rest_case_name = infodata%rest_case_name if ( present(timing_dir) ) timing_dir = infodata%timing_dir if ( present(tchkpt_dir) ) tchkpt_dir = infodata%tchkpt_dir if ( present(atm_adiabatic) ) atm_adiabatic = infodata%atm_adiabatic if ( present(atm_ideal_phys) ) atm_ideal_phys = infodata%atm_ideal_phys if ( present(aqua_planet) ) aqua_planet = infodata%aqua_planet if ( present(aqua_planet_sst)) aqua_planet_sst= infodata%aqua_planet_sst if ( present(brnch_retain_casename) ) & brnch_retain_casename = infodata%brnch_retain_casename if ( present(read_restart) ) read_restart = infodata%read_restart if ( present(restart_pfile) ) restart_pfile = infodata%restart_pfile if ( present(restart_file) ) restart_file = infodata%restart_file if ( present(single_column) ) single_column = infodata%single_column if ( present(scmlat) ) scmlat = infodata%scmlat if ( present(scmlon) ) scmlon = infodata%scmlon if ( present(logFilePostFix) ) logFilePostFix = infodata%logFilePostFix if ( present(outPathRoot) ) outPathRoot = infodata%outPathRoot if ( present(perpetual) ) perpetual = infodata%perpetual if ( present(perpetual_ymd) ) perpetual_ymd = infodata%perpetual_ymd if ( present(orb_eccen) ) orb_eccen = infodata%orb_eccen if ( present(orb_obliqr) ) orb_obliqr = infodata%orb_obliqr if ( present(orb_lambm0) ) orb_lambm0 = infodata%orb_lambm0 if ( present(orb_mvelpp) ) orb_mvelpp = infodata%orb_mvelpp if ( present(flux_epbal) ) flux_epbal = infodata%flux_epbal if ( present(flux_albav) ) flux_albav = infodata%flux_albav if ( present(samegrid_ao) ) samegrid_ao = infodata%samegrid_ao if ( present(samegrid_ro) ) samegrid_ro = infodata%samegrid_ro if ( present(samegrid_al) ) samegrid_al = infodata%samegrid_al if ( present(shr_map_dopole) ) shr_map_dopole = infodata%shr_map_dopole if ( present(npfix) ) npfix = infodata%npfix if ( present(aoflux_grid) ) aoflux_grid = infodata%aoflux_grid if ( present(ocean_tight_coupling)) ocean_tight_coupling = infodata%ocean_tight_coupling if ( present(cpl_cdf64) ) cpl_cdf64 = infodata%cpl_cdf64 if ( present(do_budgets) ) do_budgets = infodata%do_budgets if ( present(do_histinit) ) do_histinit = infodata%do_histinit if ( present(budget_inst) ) budget_inst = infodata%budget_inst if ( present(budget_daily) ) budget_daily = infodata%budget_daily if ( present(budget_month) ) budget_month = infodata%budget_month if ( present(budget_ann) ) budget_ann = infodata%budget_ann if ( present(budget_ltann) ) budget_ltann = infodata%budget_ltann if ( present(budget_ltend) ) budget_ltend = infodata%budget_ltend if ( present(histaux_a2x) ) histaux_a2x = infodata%histaux_a2x if ( present(histaux_a2x3hr) ) histaux_a2x3hr = infodata%histaux_a2x3hr if ( present(histaux_a2x3hrp)) histaux_a2x3hrp= infodata%histaux_a2x3hrp if ( present(histaux_a2x24hr)) histaux_a2x24hr= infodata%histaux_a2x24hr if ( present(histaux_l2x) ) histaux_l2x = infodata%histaux_l2x if ( present(histaux_r2x) ) histaux_r2x = infodata%histaux_r2x if ( present(drv_threading) ) drv_threading = infodata%drv_threading if ( present(eps_frac) ) eps_frac = infodata%eps_frac if ( present(eps_amask) ) eps_amask = infodata%eps_amask if ( present(eps_agrid) ) eps_agrid = infodata%eps_agrid if ( present(eps_aarea) ) eps_aarea = infodata%eps_aarea if ( present(eps_omask) ) eps_omask = infodata%eps_omask if ( present(eps_ogrid) ) eps_ogrid = infodata%eps_ogrid if ( present(eps_oarea) ) eps_oarea = infodata%eps_oarea if ( present(info_debug) ) info_debug = infodata%info_debug if ( present(bfbflag) ) bfbflag = infodata%bfbflag if ( present(dead_comps) ) dead_comps = infodata%dead_comps if ( present(atm_present) ) atm_present = infodata%atm_present if ( present(atm_prognostic) ) atm_prognostic = infodata%atm_prognostic if ( present(lnd_present) ) lnd_present = infodata%lnd_present if ( present(lnd_prognostic) ) lnd_prognostic = infodata%lnd_prognostic if ( present(rof_present) ) rof_present = infodata%rof_present if ( present(ocn_present) ) ocn_present = infodata%ocn_present if ( present(ocn_prognostic) ) ocn_prognostic = infodata%ocn_prognostic if ( present(ocnrof_prognostic) ) ocnrof_prognostic = infodata%ocnrof_prognostic if ( present(ice_present) ) ice_present = infodata%ice_present if ( present(ice_prognostic) ) ice_prognostic = infodata%ice_prognostic if ( present(glc_present) ) glc_present = infodata%glc_present if ( present(glc_prognostic) ) glc_prognostic = infodata%glc_prognostic if ( present(sno_present) ) sno_present = infodata%sno_present if ( present(sno_prognostic) ) sno_prognostic = infodata%sno_prognostic if ( present(atm_nx) ) atm_nx = infodata%atm_nx if ( present(atm_ny) ) atm_ny = infodata%atm_ny if ( present(lnd_nx) ) lnd_nx = infodata%lnd_nx if ( present(lnd_ny) ) lnd_ny = infodata%lnd_ny if ( present(rof_nx) ) rof_nx = infodata%rof_nx if ( present(rof_ny) ) rof_ny = infodata%rof_ny if ( present(ice_nx) ) ice_nx = infodata%ice_nx if ( present(ice_ny) ) ice_ny = infodata%ice_ny if ( present(ocn_nx) ) ocn_nx = infodata%ocn_nx if ( present(ocn_ny) ) ocn_ny = infodata%ocn_ny if ( present(glc_nx) ) glc_nx = infodata%glc_nx if ( present(glc_ny) ) glc_ny = infodata%glc_ny if ( present(sno_nx) ) sno_nx = infodata%sno_nx if ( present(sno_ny) ) sno_ny = infodata%sno_ny if ( present(nextsw_cday) ) nextsw_cday = infodata%nextsw_cday if ( present(precip_fact) ) precip_fact = infodata%precip_fact if ( present(atm_phase) ) atm_phase = infodata%atm_phase if ( present(lnd_phase) ) lnd_phase = infodata%lnd_phase if ( present(ice_phase) ) ice_phase = infodata%ice_phase if ( present(ocn_phase) ) ocn_phase = infodata%ocn_phase if ( present(glc_phase) ) glc_phase = infodata%glc_phase if ( present(atm_aero) ) atm_aero = infodata%atm_aero if ( present(glcrun_alarm) ) glcrun_alarm = infodata%glcrun_alarm if ( present(glc_g2supdate) ) glc_g2supdate = infodata%glc_g2supdate END SUBROUTINE seq_infodata_GetData !=============================================================================== ! !IROUTINE: seq_infodata_PutData -- Put values from infodata object ! ! !DESCRIPTION: ! ! Put values out of the infodata object. ! ! !INTERFACE: ------------------------------------------------------------------ SUBROUTINE seq_infodata_PutData( infodata, case_name, case_desc, timing_dir, & 14 model_version, username, hostname, rest_case_name, tchkpt_dir, & start_type, restart_pfile, restart_file, perpetual, perpetual_ymd, & aqua_planet,aqua_planet_sst, atm_ideal_phys, atm_adiabatic, brnch_retain_casename, & single_column, scmlat,scmlon,logFilePostFix, outPathRoot, & atm_present, atm_prognostic, lnd_present, lnd_prognostic, & rof_present, ocn_present, ocn_prognostic, ocnrof_prognostic, & ice_present, ice_prognostic, glc_present, glc_prognostic, & sno_present, sno_prognostic, bfbflag, samegrid_ro, & samegrid_ao, samegrid_al, info_debug, dead_comps, read_restart, & shr_map_dopole, npfix, aoflux_grid, & nextsw_cday, precip_fact, flux_epbal, flux_albav, glcrun_alarm, & glc_g2supdate, atm_aero, & ocean_tight_coupling, do_budgets, do_histinit, drv_threading, & budget_inst, budget_daily, budget_month, & budget_ann, budget_ltann, budget_ltend , & histaux_a2x , histaux_a2x3hr, histaux_a2x3hrp , & histaux_a2x24hr, histaux_l2x , histaux_r2x , & cpl_cdf64, & orb_eccen, orb_obliqr, orb_lambm0, orb_mvelpp, glc_phase, & atm_phase, lnd_phase, ocn_phase, ice_phase, atm_nx, atm_ny, & lnd_nx, lnd_ny, rof_nx, rof_ny, ice_nx, ice_ny, ocn_nx, ocn_ny, & glc_nx, glc_ny, sno_nx, sno_ny, eps_frac, eps_amask, & eps_agrid, eps_aarea, eps_omask, eps_ogrid, eps_oarea ) implicit none ! !INPUT/OUTPUT PARAMETERS: type(seq_infodata_type), intent(INOUT) :: infodata ! Input CCSM structure character(len=*), optional, intent(IN) :: start_type ! Start type character(len=*), optional, intent(IN) :: case_name ! Short case identification character(len=*), optional, intent(IN) :: case_desc ! Long case description character(len=*), optional, intent(IN) :: model_version ! Model version character(len=*), optional, intent(IN) :: username ! Username character(len=*), optional, intent(IN) :: hostname ! Hostname character(len=*), optional, intent(IN) :: rest_case_name ! restart casename character(len=*), optional, intent(IN) :: timing_dir ! timing dir name character(len=*), optional, intent(IN) :: tchkpt_dir ! timing checkpoint dir name logical, optional, intent(IN) :: atm_adiabatic ! atm adiabatic mode logical, optional, intent(IN) :: atm_ideal_phys! atm idealized-physics mode logical, optional, intent(IN) :: aqua_planet ! aqua_planet mode integer(SHR_KIND_IN),optional, intent(IN) :: aqua_planet_sst ! aqua_planet sst type logical, optional, intent(IN) :: brnch_retain_casename logical, optional, intent(IN) :: read_restart ! read restart flag character(len=*), optional, intent(IN) :: restart_pfile ! Restart pointer file character(len=*), optional, intent(IN) :: restart_file ! Restart file pathname logical, optional, intent(IN) :: single_column real (SHR_KIND_R8), optional, intent(IN) :: scmlat real (SHR_KIND_R8), optional, intent(IN) :: scmlon character(len=*), optional, intent(IN) :: logFilePostFix! output log file postfix character(len=*), optional, intent(IN) :: outPathRoot ! output file root logical, optional, intent(IN) :: perpetual ! If this is perpetual integer, optional, intent(IN) :: perpetual_ymd ! If perpetual, date real(SHR_KIND_R8) ,optional, intent(IN) :: orb_eccen ! See shr_orb_mod, needed for cosz real(SHR_KIND_R8) ,optional, intent(IN) :: orb_obliqr ! See shr_orb_mod, needed for cosz real(SHR_KIND_R8) ,optional, intent(IN) :: orb_lambm0 ! See shr_orb_mod, needed for cosz real(SHR_KIND_R8) ,optional, intent(IN) :: orb_mvelpp ! See shr_orb_mod, needed for cosz character(len=*) ,optional, intent(IN) :: flux_epbal ! selects E,P,R adjustment technique logical ,optional, intent(IN) :: flux_albav ! T => no diurnal cycle in ocn albedos logical ,optional, intent(IN) :: samegrid_ao ! are atm/ocn grids same logical ,optional, intent(IN) :: samegrid_ro ! are rof/ocn grids same logical ,optional, intent(IN) :: samegrid_al ! are atm/lnd grids same logical ,optional, intent(IN) :: shr_map_dopole ! pole corrections in shr_map_mod logical ,optional, intent(IN) :: npfix ! pole fix in atm2ocn mapping character(len=*) ,optional, intent(IN) :: aoflux_grid ! grid for atm ocn flux calc logical ,optional, intent(IN) :: ocean_tight_coupling ! tight vs loose ocean coupling logical ,optional, intent(IN) :: cpl_cdf64 ! netcdf large file setting logical ,optional, intent(IN) :: do_budgets ! heat/water budgets logical ,optional, intent(IN) :: do_histinit ! initial history file integer ,optional, intent(IN) :: budget_inst ! inst budget integer ,optional, intent(IN) :: budget_daily ! daily budget integer ,optional, intent(IN) :: budget_month ! month budget integer ,optional, intent(IN) :: budget_ann ! ann budget integer ,optional, intent(IN) :: budget_ltann ! ltann budget integer ,optional, intent(IN) :: budget_ltend ! ltend budget logical ,optional, intent(IN) :: histaux_a2x logical ,optional, intent(IN) :: histaux_a2x3hr logical ,optional, intent(IN) :: histaux_a2x3hrp logical ,optional, intent(IN) :: histaux_a2x24hr logical ,optional, intent(IN) :: histaux_l2x logical ,optional, intent(IN) :: histaux_r2x logical ,optional, intent(IN) :: drv_threading ! driver threading control flag real(SHR_KIND_R8) ,optional, intent(IN) :: eps_frac ! fraction error tolerance real(SHR_KIND_R8) ,optional, intent(IN) :: eps_amask ! atm mask error tolerance real(SHR_KIND_R8) ,optional, intent(IN) :: eps_agrid ! atm grid error tolerance real(SHR_KIND_R8) ,optional, intent(IN) :: eps_aarea ! atm area error tolerance real(SHR_KIND_R8) ,optional, intent(IN) :: eps_omask ! ocn mask error tolerance real(SHR_KIND_R8) ,optional, intent(IN) :: eps_ogrid ! ocn grid error tolerance real(SHR_KIND_R8) ,optional, intent(IN) :: eps_oarea ! ocn area error tolerance integer(SHR_KIND_IN),optional, intent(IN) :: info_debug logical ,optional, intent(IN) :: bfbflag logical ,optional, intent(IN) :: dead_comps ! do we have dead models logical ,optional, intent(IN) :: atm_present ! provide data logical ,optional, intent(IN) :: atm_prognostic ! need data logical ,optional, intent(IN) :: lnd_present logical ,optional, intent(IN) :: lnd_prognostic logical ,optional, intent(IN) :: rof_present logical ,optional, intent(IN) :: ocn_present logical ,optional, intent(IN) :: ocn_prognostic logical ,optional, intent(IN) :: ocnrof_prognostic logical ,optional, intent(IN) :: ice_present logical ,optional, intent(IN) :: ice_prognostic logical ,optional, intent(IN) :: glc_present logical ,optional, intent(IN) :: glc_prognostic logical ,optional, intent(IN) :: sno_present logical ,optional, intent(IN) :: sno_prognostic integer(SHR_KIND_IN),optional, intent(IN) :: atm_nx ! nx,ny 2d grid size global integer(SHR_KIND_IN),optional, intent(IN) :: atm_ny ! nx,ny 2d grid size global integer(SHR_KIND_IN),optional, intent(IN) :: lnd_nx integer(SHR_KIND_IN),optional, intent(IN) :: lnd_ny integer(SHR_KIND_IN),optional, intent(IN) :: rof_nx integer(SHR_KIND_IN),optional, intent(IN) :: rof_ny integer(SHR_KIND_IN),optional, intent(IN) :: ice_nx integer(SHR_KIND_IN),optional, intent(IN) :: ice_ny integer(SHR_KIND_IN),optional, intent(IN) :: ocn_nx integer(SHR_KIND_IN),optional, intent(IN) :: ocn_ny integer(SHR_KIND_IN),optional, intent(IN) :: glc_nx integer(SHR_KIND_IN),optional, intent(IN) :: glc_ny integer(SHR_KIND_IN),optional, intent(IN) :: sno_nx integer(SHR_KIND_IN),optional, intent(IN) :: sno_ny real(SHR_KIND_R8) ,optional, intent(IN) :: nextsw_cday ! calendar of next atm shortwave real(SHR_KIND_R8) ,optional, intent(IN) :: precip_fact ! precip factor integer(SHR_KIND_IN),optional, intent(IN) :: atm_phase ! atm phase integer(SHR_KIND_IN),optional, intent(IN) :: lnd_phase ! lnd phase integer(SHR_KIND_IN),optional, intent(IN) :: ice_phase ! ice phase integer(SHR_KIND_IN),optional, intent(IN) :: ocn_phase ! ocn phase integer(SHR_KIND_IN),optional, intent(IN) :: glc_phase ! glc phase logical ,optional, intent(IN) :: atm_aero ! atm aerosols logical ,optional, intent(IN) :: glcrun_alarm ! glc run alarm logical ,optional, intent(IN) :: glc_g2supdate ! update glc2sno fields in lnd model !EOP !----- local ----- character(len=*), parameter :: subname = '(seq_infodata_PutData) ' !------------------------------------------------------------------------------- if ( present(start_type) ) infodata%start_type = start_type if ( present(case_name) ) infodata%case_name = case_name if ( present(case_desc) ) infodata%case_desc = case_desc if ( present(model_version) ) infodata%model_version = model_version if ( present(username) ) infodata%username = username if ( present(hostname) ) infodata%hostname = hostname if ( present(rest_case_name) ) infodata%rest_case_name = rest_case_name if ( present(timing_dir) ) infodata%timing_dir = timing_dir if ( present(tchkpt_dir) ) infodata%tchkpt_dir = tchkpt_dir if ( present(atm_adiabatic) ) infodata%atm_adiabatic = atm_adiabatic if ( present(atm_ideal_phys) ) infodata%atm_ideal_phys = atm_ideal_phys if ( present(aqua_planet) ) infodata%aqua_planet = aqua_planet if ( present(aqua_planet_sst)) infodata%aqua_planet_sst= aqua_planet_sst if ( present(brnch_retain_casename)) infodata%brnch_retain_casename = brnch_retain_casename if ( present(read_restart) ) infodata%read_restart = read_restart if ( present(restart_pfile) ) infodata%restart_pfile = restart_pfile if ( present(restart_file) ) infodata%restart_file = restart_file if ( present(single_column) ) infodata%single_column = single_column if ( present(scmlat) ) infodata%scmlat = scmlat if ( present(scmlon) ) infodata%scmlon = scmlon if ( present(logFilePostFix) ) infodata%logFilePostFix = logFilePostFix if ( present(outPathRoot) ) infodata%outPathRoot = outPathRoot if ( present(perpetual) ) infodata%perpetual = perpetual if ( present(perpetual_ymd) ) infodata%perpetual_ymd = perpetual_ymd if ( present(orb_eccen) ) infodata%orb_eccen = orb_eccen if ( present(orb_obliqr) ) infodata%orb_obliqr = orb_obliqr if ( present(orb_lambm0) ) infodata%orb_lambm0 = orb_lambm0 if ( present(orb_mvelpp) ) infodata%orb_mvelpp = orb_mvelpp if ( present(flux_epbal) ) infodata%flux_epbal = flux_epbal if ( present(flux_albav) ) infodata%flux_albav = flux_albav if ( present(samegrid_ao) ) infodata%samegrid_ao = samegrid_ao if ( present(samegrid_ro) ) infodata%samegrid_ro = samegrid_ro if ( present(samegrid_al) ) infodata%samegrid_al = samegrid_al if ( present(shr_map_dopole) ) infodata%shr_map_dopole = shr_map_dopole if ( present(npfix) ) infodata%npfix = npfix if ( present(aoflux_grid) ) infodata%aoflux_grid = aoflux_grid if ( present(ocean_tight_coupling)) infodata%ocean_tight_coupling = ocean_tight_coupling if ( present(cpl_cdf64) ) infodata%cpl_cdf64 = cpl_cdf64 if ( present(do_budgets) ) infodata%do_budgets = do_budgets if ( present(do_histinit) ) infodata%do_histinit = do_histinit if ( present(budget_inst) ) infodata%budget_inst = budget_inst if ( present(budget_daily) ) infodata%budget_daily = budget_daily if ( present(budget_month) ) infodata%budget_month = budget_month if ( present(budget_ann) ) infodata%budget_ann = budget_ann if ( present(budget_ltann) ) infodata%budget_ltann = budget_ltann if ( present(budget_ltend) ) infodata%budget_ltend = budget_ltend if ( present(histaux_a2x) ) infodata%histaux_a2x = histaux_a2x if ( present(histaux_a2x3hr) ) infodata%histaux_a2x3hr = histaux_a2x3hr if ( present(histaux_a2x3hrp)) infodata%histaux_a2x3hrp= histaux_a2x3hrp if ( present(histaux_a2x24hr)) infodata%histaux_a2x24hr= histaux_a2x24hr if ( present(histaux_l2x) ) infodata%histaux_l2x = histaux_l2x if ( present(histaux_r2x) ) infodata%histaux_r2x = histaux_r2x if ( present(drv_threading) ) infodata%drv_threading = drv_threading if ( present(eps_frac) ) infodata%eps_frac = eps_frac if ( present(eps_amask) ) infodata%eps_amask = eps_amask if ( present(eps_agrid) ) infodata%eps_agrid = eps_agrid if ( present(eps_aarea) ) infodata%eps_aarea = eps_aarea if ( present(eps_omask) ) infodata%eps_omask = eps_omask if ( present(eps_ogrid) ) infodata%eps_ogrid = eps_ogrid if ( present(eps_oarea) ) infodata%eps_oarea = eps_oarea if ( present(info_debug) ) infodata%info_debug = info_debug if ( present(bfbflag) ) infodata%bfbflag = bfbflag if ( present(dead_comps) ) infodata%dead_comps = dead_comps if ( present(atm_present) ) infodata%atm_present = atm_present if ( present(atm_prognostic) ) infodata%atm_prognostic = atm_prognostic if ( present(lnd_present) ) infodata%lnd_present = lnd_present if ( present(lnd_prognostic) ) infodata%lnd_prognostic = lnd_prognostic if ( present(rof_present) ) infodata%rof_present = rof_present if ( present(ocn_present) ) infodata%ocn_present = ocn_present if ( present(ocn_prognostic) ) infodata%ocn_prognostic = ocn_prognostic if ( present(ocnrof_prognostic)) infodata%ocnrof_prognostic = ocnrof_prognostic if ( present(ice_present) ) infodata%ice_present = ice_present if ( present(ice_prognostic) ) infodata%ice_prognostic = ice_prognostic if ( present(glc_present) ) infodata%glc_present = glc_present if ( present(glc_prognostic) ) infodata%glc_prognostic = glc_prognostic if ( present(sno_present) ) infodata%sno_present = sno_present if ( present(sno_prognostic) ) infodata%sno_prognostic = sno_prognostic if ( present(atm_nx) ) infodata%atm_nx = atm_nx if ( present(atm_ny) ) infodata%atm_ny = atm_ny if ( present(lnd_nx) ) infodata%lnd_nx = lnd_nx if ( present(lnd_ny) ) infodata%lnd_ny = lnd_ny if ( present(rof_nx) ) infodata%rof_nx = rof_nx if ( present(rof_ny) ) infodata%rof_ny = rof_ny if ( present(ice_nx) ) infodata%ice_nx = ice_nx if ( present(ice_ny) ) infodata%ice_ny = ice_ny if ( present(ocn_nx) ) infodata%ocn_nx = ocn_nx if ( present(ocn_ny) ) infodata%ocn_ny = ocn_ny if ( present(glc_nx) ) infodata%glc_nx = glc_nx if ( present(glc_ny) ) infodata%glc_ny = glc_ny if ( present(sno_nx) ) infodata%sno_nx = sno_nx if ( present(sno_ny) ) infodata%sno_ny = sno_ny if ( present(nextsw_cday) ) infodata%nextsw_cday = nextsw_cday if ( present(precip_fact) ) infodata%precip_fact = precip_fact if ( present(atm_phase) ) infodata%atm_phase = atm_phase if ( present(lnd_phase) ) infodata%lnd_phase = lnd_phase if ( present(ice_phase) ) infodata%ice_phase = ice_phase if ( present(ocn_phase) ) infodata%ocn_phase = ocn_phase if ( present(glc_phase) ) infodata%glc_phase = glc_phase if ( present(atm_aero) ) infodata%atm_aero = atm_aero if ( present(glcrun_alarm) ) infodata%glcrun_alarm = glcrun_alarm if ( present(glc_g2supdate) ) infodata%glc_g2supdate = glc_g2supdate END SUBROUTINE seq_infodata_PutData !=============================================================================== !BOP =========================================================================== ! ! !IROUTINE: seq_infodata_bcast -- Broadcast an infodata from root pe ! ! !DESCRIPTION: ! ! Broadcast an infodata across pes ! ! !INTERFACE: ------------------------------------------------------------------ subroutine seq_infodata_bcast(infodata,mpicom) 1,1 use shr_mpi_mod, only : shr_mpi_bcast implicit none ! !INPUT/OUTPUT PARAMETERS: type(seq_infodata_type), intent(INOUT) :: infodata ! assume valid on root pe integer(SHR_KIND_IN), intent(IN) :: mpicom ! mpi comm !EOP !----- local ----- !------------------------------------------------------------------------------- ! Notes: !------------------------------------------------------------------------------- call shr_mpi_bcast(infodata%start_type, mpicom) call shr_mpi_bcast(infodata%case_desc, mpicom) call shr_mpi_bcast(infodata%model_version, mpicom) call shr_mpi_bcast(infodata%username, mpicom) call shr_mpi_bcast(infodata%hostname, mpicom) call shr_mpi_bcast(infodata%case_name, mpicom) call shr_mpi_bcast(infodata%timing_dir, mpicom) call shr_mpi_bcast(infodata%tchkpt_dir, mpicom) call shr_mpi_bcast(infodata%atm_ideal_phys, mpicom) call shr_mpi_bcast(infodata%atm_adiabatic, mpicom) call shr_mpi_bcast(infodata%aqua_planet, mpicom) call shr_mpi_bcast(infodata%aqua_planet_sst, mpicom) call shr_mpi_bcast(infodata%brnch_retain_casename, mpicom) call shr_mpi_bcast(infodata%read_restart, mpicom) call shr_mpi_bcast(infodata%restart_pfile, mpicom) call shr_mpi_bcast(infodata%restart_file, mpicom) call shr_mpi_bcast(infodata%single_column, mpicom) call shr_mpi_bcast(infodata%scmlat, mpicom) call shr_mpi_bcast(infodata%scmlon, mpicom) call shr_mpi_bcast(infodata%logFilePostFix, mpicom) call shr_mpi_bcast(infodata%outPathRoot, mpicom) call shr_mpi_bcast(infodata%perpetual, mpicom) call shr_mpi_bcast(infodata%perpetual_ymd, mpicom) call shr_mpi_bcast(infodata%orb_eccen, mpicom) call shr_mpi_bcast(infodata%orb_obliqr, mpicom) call shr_mpi_bcast(infodata%orb_lambm0, mpicom) call shr_mpi_bcast(infodata%orb_mvelpp, mpicom) call shr_mpi_bcast(infodata%flux_epbal, mpicom) call shr_mpi_bcast(infodata%flux_albav, mpicom) call shr_mpi_bcast(infodata%samegrid_ao, mpicom) call shr_mpi_bcast(infodata%samegrid_ro, mpicom) call shr_mpi_bcast(infodata%samegrid_al, mpicom) call shr_mpi_bcast(infodata%shr_map_dopole, mpicom) call shr_mpi_bcast(infodata%npfix, mpicom) call shr_mpi_bcast(infodata%aoflux_grid, mpicom) call shr_mpi_bcast(infodata%ocean_tight_coupling, mpicom) call shr_mpi_bcast(infodata%cpl_cdf64, mpicom) call shr_mpi_bcast(infodata%do_budgets, mpicom) call shr_mpi_bcast(infodata%do_histinit, mpicom) call shr_mpi_bcast(infodata%budget_inst, mpicom) call shr_mpi_bcast(infodata%budget_daily, mpicom) call shr_mpi_bcast(infodata%budget_month, mpicom) call shr_mpi_bcast(infodata%budget_ann, mpicom) call shr_mpi_bcast(infodata%budget_ltann, mpicom) call shr_mpi_bcast(infodata%budget_ltend, mpicom) call shr_mpi_bcast(infodata%histaux_a2x ,mpicom) call shr_mpi_bcast(infodata%histaux_a2x3hr ,mpicom) call shr_mpi_bcast(infodata%histaux_a2x3hrp ,mpicom) call shr_mpi_bcast(infodata%histaux_a2x24hr ,mpicom) call shr_mpi_bcast(infodata%histaux_l2x ,mpicom) call shr_mpi_bcast(infodata%histaux_r2x ,mpicom) call shr_mpi_bcast(infodata%drv_threading, mpicom) call shr_mpi_bcast(infodata%eps_frac, mpicom) call shr_mpi_bcast(infodata%eps_amask, mpicom) call shr_mpi_bcast(infodata%eps_agrid, mpicom) call shr_mpi_bcast(infodata%eps_aarea, mpicom) call shr_mpi_bcast(infodata%eps_omask, mpicom) call shr_mpi_bcast(infodata%eps_ogrid, mpicom) call shr_mpi_bcast(infodata%eps_oarea, mpicom) call shr_mpi_bcast(infodata%info_debug, mpicom) call shr_mpi_bcast(infodata%bfbflag, mpicom) call shr_mpi_bcast(infodata%dead_comps, mpicom) call shr_mpi_bcast(infodata%atm_present, mpicom) call shr_mpi_bcast(infodata%atm_prognostic, mpicom) call shr_mpi_bcast(infodata%lnd_present, mpicom) call shr_mpi_bcast(infodata%lnd_prognostic, mpicom) call shr_mpi_bcast(infodata%rof_present, mpicom) call shr_mpi_bcast(infodata%ocn_present, mpicom) call shr_mpi_bcast(infodata%ocn_prognostic, mpicom) call shr_mpi_bcast(infodata%ocnrof_prognostic, mpicom) call shr_mpi_bcast(infodata%ice_present, mpicom) call shr_mpi_bcast(infodata%ice_prognostic, mpicom) call shr_mpi_bcast(infodata%glc_present, mpicom) call shr_mpi_bcast(infodata%glc_prognostic, mpicom) call shr_mpi_bcast(infodata%sno_present, mpicom) call shr_mpi_bcast(infodata%sno_prognostic, mpicom) call shr_mpi_bcast(infodata%atm_nx, mpicom) call shr_mpi_bcast(infodata%atm_ny, mpicom) call shr_mpi_bcast(infodata%lnd_nx, mpicom) call shr_mpi_bcast(infodata%lnd_ny, mpicom) call shr_mpi_bcast(infodata%rof_nx, mpicom) call shr_mpi_bcast(infodata%rof_ny, mpicom) call shr_mpi_bcast(infodata%ice_nx, mpicom) call shr_mpi_bcast(infodata%ice_ny, mpicom) call shr_mpi_bcast(infodata%ocn_nx, mpicom) call shr_mpi_bcast(infodata%ocn_ny, mpicom) call shr_mpi_bcast(infodata%glc_nx, mpicom) call shr_mpi_bcast(infodata%glc_ny, mpicom) call shr_mpi_bcast(infodata%sno_nx, mpicom) call shr_mpi_bcast(infodata%sno_ny, mpicom) call shr_mpi_bcast(infodata%nextsw_cday, mpicom) call shr_mpi_bcast(infodata%precip_fact, mpicom) call shr_mpi_bcast(infodata%atm_phase, mpicom) call shr_mpi_bcast(infodata%lnd_phase, mpicom) call shr_mpi_bcast(infodata%ice_phase, mpicom) call shr_mpi_bcast(infodata%ocn_phase, mpicom) call shr_mpi_bcast(infodata%glc_phase, mpicom) call shr_mpi_bcast(infodata%atm_aero, mpicom) call shr_mpi_bcast(infodata%glcrun_alarm, mpicom) call shr_mpi_bcast(infodata%glc_g2supdate, mpicom) end subroutine seq_infodata_bcast !=============================================================================== !BOP =========================================================================== ! ! !IROUTINE: seq_infodata_Exchange -- Broadcast a subset of infodata between pes ! ! !DESCRIPTION: ! ! Broadcast a subset of infodata data between pes to support "exchange" of information ! ! !INTERFACE: ------------------------------------------------------------------ subroutine seq_infodata_Exchange(infodata,ID,type) 28,5 use shr_mpi_mod, only : shr_mpi_bcast implicit none ! !INPUT/OUTPUT PARAMETERS: type(seq_infodata_type), intent(INOUT) :: infodata ! assume valid on root pe integer(SHR_KIND_IN), intent(IN) :: ID ! mpi comm character(len=*), intent(IN) :: type ! type !EOP !----- local ----- integer(SHR_KIND_IN) :: mpicom ! mpicom integer(SHR_KIND_IN) :: pebcast ! pe sending logical :: atm2cpli,atm2cplr logical :: lnd2cpli,lnd2cplr logical :: ocn2cpli,ocn2cplr logical :: ice2cpli,ice2cplr logical :: glc2cpli,glc2cplr logical :: cpl2i,cpl2r logical :: logset logical :: deads ! local variable to hold info temporarily character(len=*), parameter :: subname = '(seq_infodata_Exchange) ' !------------------------------------------------------------------------------- ! Notes: !------------------------------------------------------------------------------- ! assume the comp pe is going to broadcast, change to cplpe below if appropriate call seq_comm_setptrs(ID,mpicom=mpicom,cmppe=pebcast) logset = .false. atm2cpli = .false. atm2cplr = .false. lnd2cpli = .false. lnd2cplr = .false. ocn2cpli = .false. ocn2cplr = .false. ice2cpli = .false. ice2cplr = .false. glc2cpli = .false. glc2cplr = .false. cpl2i = .false. cpl2r = .false. ! --- translate type into logicals --- if (trim(type) == 'atm2cpl_init') then atm2cpli = .true. atm2cplr = .true. logset = .true. endif if (trim(type) == 'atm2cpl_run') then atm2cplr = .true. logset = .true. endif if (trim(type) == 'lnd2cpl_init') then lnd2cpli = .true. lnd2cplr = .true. logset = .true. endif if (trim(type) == 'lnd2cpl_run') then lnd2cplr = .true. logset = .true. endif if (trim(type) == 'ocn2cpl_init') then ocn2cpli = .true. ocn2cplr = .true. logset = .true. endif if (trim(type) == 'ocn2cpl_run') then ocn2cplr = .true. logset = .true. endif if (trim(type) == 'ice2cpl_init') then ice2cpli = .true. ice2cplr = .true. logset = .true. endif if (trim(type) == 'ice2cpl_run') then ice2cplr = .true. logset = .true. endif if (trim(type) == 'glc2cpl_init') then glc2cpli = .true. glc2cplr = .true. logset = .true. endif if (trim(type) == 'glc2cpl_run') then glc2cplr = .true. logset = .true. endif if (trim(type) == 'cpl2atm_init' .or. & trim(type) == 'cpl2lnd_init' .or. & trim(type) == 'cpl2ocn_init' .or. & trim(type) == 'cpl2glc_init' .or. & trim(type) == 'cpl2ice_init') then cpl2i = .true. cpl2r = .true. call seq_comm_setptrs(ID,cplpe=pebcast) logset = .true. endif if (trim(type) == 'cpl2atm_run' .or. & trim(type) == 'cpl2lnd_run' .or. & trim(type) == 'cpl2ocn_run' .or. & trim(type) == 'cpl2glc_run' .or. & trim(type) == 'cpl2ice_run') then cpl2r = .true. call seq_comm_setptrs(ID,cplpe=pebcast) logset = .true. endif ! --- make sure the type was valid --- if (.not. logset) then write(logunit,*) trim(subname),' ERROR: type invalid ',trim(type) call shr_sys_abort() endif ! --- now execute exchange --- if (atm2cpli) then call shr_mpi_bcast(infodata%atm_present, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%atm_prognostic, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%atm_nx, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%atm_ny, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%atm_aero, mpicom,pebcast=pebcast) ! dead_comps is true if it's ever set to true deads = infodata%dead_comps call shr_mpi_bcast(deads, mpicom,pebcast=pebcast) if (deads .or. infodata%dead_comps) infodata%dead_comps = .true. endif if (lnd2cpli) then call shr_mpi_bcast(infodata%lnd_present, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%lnd_prognostic, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%rof_present, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%sno_present, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%sno_prognostic, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%lnd_nx, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%lnd_ny, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%rof_nx, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%rof_ny, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%sno_nx, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%sno_ny, mpicom,pebcast=pebcast) ! dead_comps is true if it's ever set to true deads = infodata%dead_comps call shr_mpi_bcast(deads, mpicom,pebcast=pebcast) if (deads .or. infodata%dead_comps) infodata%dead_comps = .true. endif if (ocn2cpli) then call shr_mpi_bcast(infodata%ocn_present, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%ocn_prognostic, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%ocnrof_prognostic,mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%ocn_nx, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%ocn_ny, mpicom,pebcast=pebcast) ! dead_comps is true if it's ever set to true deads = infodata%dead_comps call shr_mpi_bcast(deads, mpicom,pebcast=pebcast) if (deads .or. infodata%dead_comps) infodata%dead_comps = .true. endif if (ice2cpli) then call shr_mpi_bcast(infodata%ice_present, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%ice_prognostic, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%ice_nx, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%ice_ny, mpicom,pebcast=pebcast) ! dead_comps is true if it's ever set to true deads = infodata%dead_comps call shr_mpi_bcast(deads, mpicom,pebcast=pebcast) if (deads .or. infodata%dead_comps) infodata%dead_comps = .true. endif if (glc2cpli) then call shr_mpi_bcast(infodata%glc_present, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%glc_prognostic, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%glc_nx, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%glc_ny, mpicom,pebcast=pebcast) ! dead_comps is true if it's ever set to true deads = infodata%dead_comps call shr_mpi_bcast(deads, mpicom,pebcast=pebcast) if (deads .or. infodata%dead_comps) infodata%dead_comps = .true. endif if (cpl2i) then call shr_mpi_bcast(infodata%atm_present, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%atm_prognostic, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%lnd_present, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%lnd_prognostic, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%rof_present, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%ocn_present, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%ocn_prognostic, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%ocnrof_prognostic,mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%ice_present, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%ice_prognostic, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%glc_present, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%glc_prognostic, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%sno_present, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%sno_prognostic, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%dead_comps, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%atm_aero, mpicom,pebcast=pebcast) endif if (atm2cplr) then call shr_mpi_bcast(infodata%nextsw_cday, mpicom,pebcast=pebcast) endif if (ocn2cplr) then call shr_mpi_bcast(infodata%precip_fact, mpicom,pebcast=pebcast) endif if (cpl2r) then call shr_mpi_bcast(infodata%nextsw_cday, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%precip_fact, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%glcrun_alarm, mpicom,pebcast=pebcast) call shr_mpi_bcast(infodata%glc_g2supdate, mpicom,pebcast=pebcast) endif end subroutine seq_infodata_Exchange !=============================================================================== !BOP =========================================================================== ! ! !IROUTINE: seq_infodata_Check -- Check that input InputInfo derived type is valid ! ! !DESCRIPTION: ! ! Check that input infodata object has reasonable values ! ! !INTERFACE: ------------------------------------------------------------------ subroutine seq_infodata_Check( infodata ) 1,11 ! !USES: use shr_string_mod, only: shr_string_listIntersect implicit none ! !INPUT/OUTPUT PARAMETERS: type(seq_infodata_type), intent(INOUT) :: infodata ! Output CCSM structure !EOP !----- local ----- character(len=*), parameter :: subname = '(seq_infodata_Check) ' integer :: lastchar ! Last character index integer :: rc ! Return code !------------------------------------------------------------------------------- ! Notes: !------------------------------------------------------------------------------- ! --- Case name ------ lastchar = len(infodata%case_name) if ( len_trim(infodata%case_name) == 0) then call shr_sys_abort( subname//': variable case_name must be set, aborting') end if if (infodata%case_name(lastchar:lastchar) /= ' ') then write(logunit,"(A,I4,A)")'ERROR: case_name must not exceed ', len(infodata%case_name)-1, & ' characters' call shr_sys_abort( subname//': variable case_name must be set, aborting') end if ! --- Special configurations ----- if ( infodata%atm_adiabatic .and. (infodata%atm_ideal_phys .or. & infodata%aqua_planet) )then call shr_sys_abort( subname//': only one of atm_adiabatic, ' // & 'atm_ideal_phys or aqua_planet can be set' ) end if ! --- Restart pointer file ----- if ( len_trim(infodata%restart_pfile) == 0 ) then call shr_sys_abort( subname//': restart_pfile must be set' ) end if ! --- LogFile ending name ----- if ( len_trim(infodata%logFilePostFix) == 0 ) then call shr_sys_abort( subname//': logFilePostFix must be set to something not blank' ) end if ! --- Output path root directory ----- if ( len_trim(infodata%outPathRoot) == 0 ) then call shr_sys_abort( subname//': outPathRoot must be set' ) end if if ( index(infodata%outPathRoot,"/",back=.true.) /= & len_trim(infodata%outPathRoot) ) then call shr_sys_abort( subname//': outPathRoot must end with a slash' ) end if ! --- Start-type ------ if ((trim(infodata%start_type) /= seq_infodata_start_type_start) .and. & (trim(infodata%start_type) /= seq_infodata_start_type_cont ) .and. & (trim(infodata%start_type) /= seq_infodata_start_type_brnch)) then call shr_sys_abort(subname//': start_type invalid = '//trim(infodata%start_type)) end if if ((trim(infodata%start_type) == seq_infodata_start_type_cont ) .and. & (trim(infodata%case_name) /= trim(infodata%rest_case_name))) then call shr_sys_abort(subname//': invalid continue restart case name = '//trim(infodata%rest_case_name)) endif if (infodata%orb_eccen == SHR_ORB_UNDEF_REAL .or. & infodata%orb_obliqr == SHR_ORB_UNDEF_REAL .or. & infodata%orb_mvelpp == SHR_ORB_UNDEF_REAL .or. & infodata%orb_lambm0 == SHR_ORB_UNDEF_REAL) then call shr_sys_abort(subname//': orb params incorrect') endif END SUBROUTINE seq_infodata_Check !=============================================================================== !=============================================================================== ! !IROUTINE: seq_infodata_print -- Print out values to log file ! ! !DESCRIPTION: ! ! Print derivied type out to screen. ! ! !INTERFACE: ------------------------------------------------------------------ SUBROUTINE seq_infodata_print( infodata ) 1 implicit none ! !INPUT/OUTPUT PARAMETERS: type(seq_infodata_type), intent(IN) :: infodata ! Output CCSM structure !EOP !----- local ----- character(len=*), parameter :: subname = '(seq_infodata_print) ' character(len=*), parameter :: F0A = "(2A,A)" character(len=*), parameter :: F0L = "(2A,L3)" character(len=*), parameter :: F0I = "(2A,I10)" character(len=*), parameter :: F0S = "(2A,I4)" character(len=*), parameter :: F0R = "(2A,g22.14)" !------------------------------------------------------------------------------- ! Notes: !------------------------------------------------------------------------------- ! if (loglevel > 0) then write(logunit,F0A) subname,'Start type = ', trim(infodata%start_type) write(logunit,F0A) subname,'Case name = ', trim(infodata%case_name) write(logunit,F0A) subname,'Case description = ', trim(infodata%case_desc) write(logunit,F0A) subname,'Model version = ', trim(infodata%model_version) write(logunit,F0A) subname,'Username = ', trim(infodata%username) write(logunit,F0A) subname,'Hostname = ', trim(infodata%hostname) write(logunit,F0A) subname,'Timing Dir = ', trim(infodata%timing_dir) write(logunit,F0A) subname,'Timing Checkpoint Dir = ', trim(infodata%tchkpt_dir) write(logunit,F0A) subname,'Restart case name = ', trim(infodata%rest_case_name) write(logunit,F0L) subname,'atm_ideal_phys = ', infodata%atm_ideal_phys write(logunit,F0L) subname,'atm adiabatic mode = ', infodata%atm_adiabatic write(logunit,F0L) subname,'aqua_planet mode = ', infodata%aqua_planet write(logunit,F0I) subname,'aqua_planet analytic sst = ', infodata%aqua_planet_sst write(logunit,F0L) subname,'brnch_retain_casename = ', infodata%brnch_retain_casename write(logunit,F0L) subname,'read_restart flag = ', infodata%read_restart write(logunit,F0A) subname,'Restart pointer file = ', trim(infodata%restart_pfile) write(logunit,F0A) subname,'Restart file (full path) = ', trim(infodata%restart_file) write(logunit,F0L) subname,'single_column = ', infodata%single_column write(logunit,F0R) subname,'scmlat = ', infodata%scmlat write(logunit,F0R) subname,'scmlon = ', infodata%scmlon write(logunit,F0A) subname,'Log output end name = ', trim(infodata%logFilePostFix) write(logunit,F0A) subname,'Output path dir = ', trim(infodata%outPathRoot) write(logunit,F0L) subname,'perpetual = ', infodata%perpetual write(logunit,F0I) subname,'perpetual_ymd = ', infodata%perpetual_ymd write(logunit,F0R) subname,'orb_eccen = ', infodata%orb_eccen write(logunit,F0R) subname,'orb_obliqr = ', infodata%orb_obliqr write(logunit,F0R) subname,'orb_lambm0 = ', infodata%orb_lambm0 write(logunit,F0R) subname,'orb_mvelpp = ', infodata%orb_mvelpp write(logunit,F0A) subname,'flux_epbal = ', trim(infodata%flux_epbal) write(logunit,F0L) subname,'flux_albav = ', infodata%flux_albav write(logunit,F0L) subname,'samegrid_ao = ', infodata%samegrid_ao write(logunit,F0L) subname,'samegrid_ro = ', infodata%samegrid_ro write(logunit,F0L) subname,'samegrid_al = ', infodata%samegrid_al write(logunit,F0L) subname,'shr_map_dopole = ', infodata%shr_map_dopole write(logunit,F0L) subname,'npfix = ', infodata%npfix write(logunit,F0A) subname,'aoflux_grid = ', trim(infodata%aoflux_grid) write(logunit,F0L) subname,'ocean_tight_coupling = ', infodata%ocean_tight_coupling write(logunit,F0L) subname,'cpl_cdf64 = ', infodata%cpl_cdf64 write(logunit,F0L) subname,'do_budgets = ', infodata%do_budgets write(logunit,F0L) subname,'do_histinit = ', infodata%do_histinit write(logunit,F0S) subname,'budget_inst = ', infodata%budget_inst write(logunit,F0S) subname,'budget_daily = ', infodata%budget_daily write(logunit,F0S) subname,'budget_month = ', infodata%budget_month write(logunit,F0S) subname,'budget_ann = ', infodata%budget_ann write(logunit,F0S) subname,'budget_ltann = ', infodata%budget_ltann write(logunit,F0S) subname,'budget_ltend = ', infodata%budget_ltend write(logunit,F0L) subname,'histaux_a2x = ', infodata%histaux_a2x write(logunit,F0L) subname,'histaux_a2x3hr = ', infodata%histaux_a2x3hr write(logunit,F0L) subname,'histaux_a2x3hrp = ', infodata%histaux_a2x3hrp write(logunit,F0L) subname,'histaux_a2x24hr = ', infodata%histaux_a2x24hr write(logunit,F0L) subname,'histaux_l2x = ', infodata%histaux_l2x write(logunit,F0L) subname,'histaux_r2x = ', infodata%histaux_r2x write(logunit,F0L) subname,'drv_threading = ', infodata%drv_threading write(logunit,F0R) subname,'eps_frac = ', infodata%eps_frac write(logunit,F0R) subname,'eps_amask = ', infodata%eps_amask write(logunit,F0R) subname,'eps_agrid = ', infodata%eps_agrid write(logunit,F0R) subname,'eps_aarea = ', infodata%eps_aarea write(logunit,F0R) subname,'eps_omask = ', infodata%eps_omask write(logunit,F0R) subname,'eps_ogrid = ', infodata%eps_ogrid write(logunit,F0R) subname,'eps_oarea = ', infodata%eps_oarea write(logunit,F0S) subname,'info_debug = ', infodata%info_debug write(logunit,F0L) subname,'bfbflag = ', infodata%bfbflag write(logunit,F0L) subname,'dead_comps = ', infodata%dead_comps write(logunit,F0L) subname,'atm_present = ', infodata%atm_present write(logunit,F0L) subname,'atm_prognostic = ', infodata%atm_prognostic write(logunit,F0L) subname,'lnd_present = ', infodata%lnd_present write(logunit,F0L) subname,'lnd_prognostic = ', infodata%lnd_prognostic write(logunit,F0L) subname,'rof_present = ', infodata%rof_present write(logunit,F0L) subname,'ocn_present = ', infodata%ocn_present write(logunit,F0L) subname,'ocn_prognostic = ', infodata%ocn_prognostic write(logunit,F0L) subname,'ocnrof_prognostic = ', infodata%ocnrof_prognostic write(logunit,F0L) subname,'ice_present = ', infodata%ice_present write(logunit,F0L) subname,'ice_prognostic = ', infodata%ice_prognostic write(logunit,F0L) subname,'glc_present = ', infodata%glc_present write(logunit,F0L) subname,'glc_prognostic = ', infodata%glc_prognostic write(logunit,F0L) subname,'sno_present = ', infodata%sno_present write(logunit,F0L) subname,'sno_prognostic = ', infodata%sno_prognostic write(logunit,F0I) subname,'atm_nx = ', infodata%atm_nx write(logunit,F0I) subname,'atm_ny = ', infodata%atm_ny write(logunit,F0I) subname,'lnd_nx = ', infodata%lnd_nx write(logunit,F0I) subname,'lnd_ny = ', infodata%lnd_ny write(logunit,F0I) subname,'rof_nx = ', infodata%rof_nx write(logunit,F0I) subname,'rof_ny = ', infodata%rof_ny write(logunit,F0I) subname,'ice_nx = ', infodata%ice_nx write(logunit,F0I) subname,'ice_ny = ', infodata%ice_ny write(logunit,F0I) subname,'ocn_nx = ', infodata%ocn_nx write(logunit,F0I) subname,'ocn_ny = ', infodata%ocn_ny write(logunit,F0I) subname,'glc_nx = ', infodata%glc_nx write(logunit,F0I) subname,'glc_ny = ', infodata%glc_ny write(logunit,F0I) subname,'sno_nx = ', infodata%sno_nx write(logunit,F0I) subname,'sno_ny = ', infodata%sno_ny write(logunit,F0R) subname,'nextsw_cday = ', infodata%nextsw_cday write(logunit,F0R) subname,'precip_fact = ', infodata%precip_fact write(logunit,F0L) subname,'atm_aero = ', infodata%atm_aero write(logunit,F0S) subname,'atm_phase = ', infodata%atm_phase write(logunit,F0S) subname,'lnd_phase = ', infodata%lnd_phase write(logunit,F0S) subname,'ocn_phase = ', infodata%ocn_phase write(logunit,F0S) subname,'ice_phase = ', infodata%ice_phase write(logunit,F0S) subname,'glc_phase = ', infodata%glc_phase write(logunit,F0L) subname,'glcrun_alarm = ', infodata%glcrun_alarm write(logunit,F0L) subname,'glc_g2supdate = ', infodata%glc_g2supdate ! endif END SUBROUTINE seq_infodata_print !=============================================================================== !=============================================================================== ! !IROUTINE: seq_infodata_Restart -- Read/Write the infodata restart data ! ! !DESCRIPTION: ! ! Read/Write infodata information to/from given input netCDF file. ! ! !INTERFACE: ------------------------------------------------------------------ subroutine seq_infodata_Restart( type, infodata, restart_file, mpicom) 2,38 ! !USES: use shr_ncio_mod, only : shr_ncio_descripType, shr_ncio_descripInit, & shr_ncio_descripSetDefault, & shr_ncio_open, shr_ncio_close, & shr_ncio_descripRead, shr_ncio_descripName, & shr_ncio_descripPutData, shr_ncio_descripWrite, & shr_ncio_descripGetInteger, & shr_ncio_descripGetRealR8, & shr_ncio_descripGetString, & shr_ncio_descripGetLogical, & shr_ncio_setDebug use shr_string_mod, only : shr_string_listGetIndexF use shr_file_mod, only : shr_file_getUnit, shr_file_freeUnit use shr_mpi_mod, only : shr_mpi_bcast implicit none ! !INPUT/OUTPUT PARAMETERS: character(len=*), intent(IN) :: type ! read or write type(seq_infodata_type), intent(INOUT) :: infodata ! infodata character(SHR_KIND_CL), optional, intent(IN) :: restart_file! Restart local filename integer, optional, intent(IN) :: mpicom ! MPI communicator !EOP !----- local ----- character(len=*), parameter :: subname = '(seq_infodata_Restart) ' integer :: iam ! pe number logical :: lmaster ! master task integer :: n ! Index integer :: ncId ! NetCDF file id logical :: exists ! If file exists or not character(SHR_KIND_CL) :: lrestart_file ! local restart filename integer(SHR_KIND_IN) :: intvar ! integer variable real(SHR_KIND_R8) :: real8var ! real8 variable logical :: logvar ! logical variable character(SHR_KIND_CL) :: strvar ! string variable logical :: doread ! convert type to logical integer :: iun ! unit number integer :: ierr ! Return code type(shr_ncio_descripType) :: restvar(nrestvar) integer(SHR_KIND_IN), parameter :: intFill = -9876 real(SHR_KIND_R8) , parameter :: real8Fill = -9876._SHR_KIND_R8 character(len=*), parameter :: prefix = "seq_infodata_" !------------------------------------------------------------------------------- ! Notes: !------------------------------------------------------------------------------- if (trim(type) == 'read') then doread = .true. elseif (trim(type) == 'write') then doread = .false. else write(logunit,*) subname,' ERROR: invalid type ',trim(type) call shr_sys_abort() endif iam = 0 if ( present(mpicom) )then call mpi_comm_rank(mpicom,iam,ierr) endif lmaster = .false. if (iam == 0) lmaster = .true. !--------------------------------------------------------------------------- ! Initialize, required for both Read and Write !--------------------------------------------------------------------------- call shr_ncio_descripSetDefault( nrestvar, restvar ) do n = 1, nrestvar if (trim(resttype(n)) == 'integer') then call shr_ncio_descripInit( restvar(n), restname(n), & LongName = restlnam(n), units = restunit(n), & IntegerData =.true., IntegerFill = IntFill ) elseif (trim(resttype(n)) == 'real8') then call shr_ncio_descripInit( restvar(n), restname(n), & LongName = restlnam(n), units = restunit(n), & RealR8Data =.true., RealR8Fill = real8Fill ) elseif (trim(resttype(n)) == 'logical') then call shr_ncio_descripInit( restvar(n), restname(n), & LongName = restlnam(n), units = restunit(n), & LogicalData =.true. ) elseif (trim(resttype(n)) == 'char') then call shr_ncio_descripInit( restvar(n), restname(n), & LongName = restlnam(n), units = restunit(n), & StringData =.true. ) else write(logunit,*) subname,' ERROR descripInit not implemented for type ',trim(resttype(n)) call shr_sys_abort() endif enddo !--------------------------------------------------------------------------- ! Write Begin !--------------------------------------------------------------------------- if (.not.doread) then do n = 1, nrestvar selectcase (trim(restname(n))) case('case_name') strvar = infodata%case_name case('case_desc') strvar = infodata%case_desc case('atm_adiabatic') logvar = infodata%atm_adiabatic case('atm_ideal_phys') logvar = infodata%atm_ideal_phys case('aqua_planet') logvar = infodata%aqua_planet case('aqua_planet_sst') intvar = infodata%aqua_planet_sst case('single_column') logvar = infodata%single_column case('scmlon') real8var = infodata%scmlon case('scmlat') real8var = infodata%scmlat case('perpetual') logvar = infodata%perpetual case('perpetual_ymd') intvar = infodata%perpetual_ymd case('flux_albav') logvar = infodata%flux_albav case('flux_epbal') strvar = infodata%flux_epbal case('orb_eccen') real8var = infodata%orb_eccen case('orb_lambm0') real8var = infodata%orb_lambm0 case('orb_mvelpp') real8var = infodata%orb_mvelpp case('nextsw_cday') real8var = infodata%nextsw_cday case('precip_fact') real8var = infodata%precip_fact case default write(logunit,*) subname,' ERROR descripPut not implemented for name ',trim(restname(n)) call shr_sys_abort() endselect if (trim(resttype(n)) == 'integer') then call shr_ncio_descripPutData( restvar(n), restname(n), IntegerData=intvar ) elseif (trim(resttype(n)) == 'real8') then call shr_ncio_descripPutData( restvar(n), restname(n), RealR8Data =real8var ) elseif (trim(resttype(n)) == 'logical') then call shr_ncio_descripPutData( restvar(n), restname(n), LogicalData=logvar ) elseif (trim(resttype(n)) == 'char') then call shr_ncio_descripPutData( restvar(n), restname(n), StringData =trim(strvar) ) else write(logunit,*) subname,' ERROR descripPut not implemented for type ',trim(resttype(n)) call shr_sys_abort() end if enddo !--- restart_file must be an argument --- if (.not. present(restart_file)) then write(logunit,"(A)") subname," ERROR: on write, must provide restart_file" call shr_sys_abort() endif !--- Write rpointer file --- if (lmaster) then iun = shr_file_getUnit() if (loglevel > 0) write(logunit,"(3A)") subname," write rpointer file ", & trim(infodata%restart_pfile) open(iun, file=infodata%restart_pfile, form='FORMATTED') write(iun,'(a)') restart_file close(iun) call shr_file_freeUnit( iun ) endif !--- Write restart file --- call shr_ncio_open( restart_file, lmaster, FileType=prefix, & ncId=ncId, exists=exists, writing=.true.,clobber=.true. ) if ( present(mpicom) )then call shr_ncio_descripWrite( ncId, nrestvar, prefix=prefix, mpicom=mpicom, & mastertask=lmaster, exists=exists, var=restvar ) else call shr_ncio_descripWrite( ncId, nrestvar, prefix=prefix, & exists=exists, var=restvar ) end if call shr_ncio_close( ncId, lmaster, type=prefix, NCFileName=restart_file ) endif !--------------------------------------------------------------------------- ! Write End !--------------------------------------------------------------------------- !--------------------------------------------------------------------------- ! Read Begin !--------------------------------------------------------------------------- if (doread) then !--- restart_file from namelist, should not be an argument --- if (present(restart_file)) then write(logunit,"(A)") subname," ERROR: on read, do not provide restart_file" call shr_sys_abort() endif !--- Read rpointer file --- if (trim(infodata%restart_file) == trim(sp_str)) then if (lmaster) then iun = shr_file_getUnit() if (loglevel > 0) write(logunit,"(3A)") subname," read rpointer file ", & trim(infodata%restart_pfile) open(iun, file=infodata%restart_pfile, form='FORMATTED', status='old') read(iun,'(a)') lrestart_file close(iun) call shr_file_freeUnit( iun ) write(logunit,"(3A)") subname,' restart file from rpointer= ', & trim(lrestart_file) endif if (present(mpicom)) call shr_mpi_bcast(lrestart_file,mpicom) infodata%restart_file = lrestart_file endif ! --- Read in restart file ------- call shr_ncio_open( infodata%restart_file, lmaster, FileType=prefix, & ncId=ncId, exists=exists, writing=.false. ) if ( present(MPICom) )then call shr_ncio_descripRead( ncId, nrestvar, prefix=prefix, mpicom=MPICom, & mastertask=lmaster, var=restvar ) else call shr_ncio_descripRead( ncId, nrestvar, prefix=prefix, & var=restvar ) end if call shr_ncio_close( ncId, lmaster, type=prefix, NCFileName=infodata%restart_file ) do n = 1, nrestvar ! --- verify that restvar name is consistent with restname --- ! --- this is a little paranoid given the descripInit call above --- if (trim(shr_ncio_descripName(restvar(n))) /= trim(restname(n))) then write(logunit,*) subname,' ERROR restvar name no match with restname ', & trim(shr_ncio_descripName(restvar(n))),' ',trim(restname(n)) call shr_sys_abort() endif if (trim(resttype(n)) == 'integer') then intvar = shr_ncio_descripGetInteger(restvar(n)) if (lmaster.and.loglevel > 1) write(logunit) subname,' read ',trim(restname(n)),intvar elseif (trim(resttype(n)) == 'real8') then real8var = shr_ncio_descripGetRealR8 (restvar(n)) if (lmaster.and.loglevel > 1) write(logunit) subname,' read ',trim(restname(n)),real8var elseif (trim(resttype(n)) == 'logical') then logvar = shr_ncio_descripGetLogical(restvar(n)) if (lmaster.and.loglevel > 1) write(logunit) subname,' read ',trim(restname(n)),logvar elseif (trim(resttype(n)) == 'char') then strvar = shr_ncio_descripGetString (restvar(n)) if (lmaster.and.loglevel > 1) write(logunit) subname,' read ',trim(restname(n)),trim(strvar) else write(logunit,*) subname,' ERROR descripGet not implemented for type ',trim(resttype(n)) call shr_sys_abort() endif ! many restart parameters are not used to update infodata. for now, ! we write them to the restart file, and they are just place holders. selectcase (trim(restname(n))) case('case_name') infodata%rest_case_name = trim(strvar) case('case_desc') ! infodata%case_desc = trim(strvar) case('atm_adiabatic') ! infodata%atm_adiabatic = logvar case('atm_ideal_phys') ! infodata%atm_ideal_phys = logvar case('aqua_planet') ! infodata%aqua_planet = logvar case('aqua_planet_sst') ! infodata%aqua_planet_sst = logvar case('single_column') ! infodata%single_column = logvar case('scmlon') ! infodata%scmlon = real8var case('scmlat') ! infodata%scmlat = real8var case('perpetual') ! infodata%perpetual = logvar case('perpetual_ymd') ! infodata%perpetual_ymd = intvar case('flux_albav') ! infodata%flux_albav = logvar case('flux_epbal') ! infodata%flux_epbal = trim(strvar) case('orb_eccen') ! infodata%orb_eccen = real8var case('orb_lambm0') ! infodata%orb_lambm0 = real8var case('orb_mvelpp') ! infodata%orb_mvelpp = real8var case('nextsw_cday') infodata%nextsw_cday = real8var case('precip_fact') infodata%precip_fact = real8var case default write(logunit,*) subname,' ERROR descripGet not implemented for ',trim(restname(n)) call shr_sys_abort() endselect enddo endif end subroutine seq_infodata_Restart !=============================================================================== !=============================================================================== END MODULE seq_infodata_mod