亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? time_manager.f90

?? CCSM Research Tools: Community Atmosphere Model (CAM)
?? F90
?? 第 1 頁 / 共 3 頁
字號:
#include <misc.h>module time_manager   use precision, only: r8   use pmgrid, only: masterproc   use esmf_timemgmtmod, only: &      esmf_errhandlersettype, esmf_err_return, esmf_errprint, esmf_success, &      esmf_time, esmf_timeinit, esmf_timeget, esmf_timegetdays, &        esmf_timeincrement, esmf_timedecrement, &      esmf_date, esmf_dateinit, esmf_gregorian, esmf_no_leap, esmf_dateget, &        esmf_dateincrementsec, esmf_dateincrementday, esmf_datedecrement, &        esmf_datediff, esmf_dategetfltdayofyear, &      esmf_timemgr, esmf_timemgrinit, esmf_timemgradvance, esmf_timemgrgetnstep, &        esmf_timemgrgetstepsize, esmf_timemgrgetstartdate, esmf_timemgrgetbasedate, &        esmf_timemgrlaststep, esmf_timemgrgetcurrdate, esmf_timemgrgetprevdate, esmf_dateislater, &        esmf_timemgrrestartwrite, esmf_timemgrrestartread   use string_utils, only: to_upper   use dycore, only: dycore_is#ifdef SPMD   use mpishorthand, only: mpicom, mpiint, mpilog#endif   implicit none   private   save! Public methods   public ::&      timemgr_preset,           &! time manager initialization before namelist input      timemgr_init,             &! time manager initialization      advance_timestep,         &! increment timestep number      get_step_size,            &! return step size in seconds      get_nstep,                &! return timestep number      get_curr_date,            &! return date components at end of current timestep      get_prev_date,            &! return date components at beginning of current timestep      get_start_date,           &! return components of the start date      get_ref_date,             &! return components of the reference date      get_perp_date,            &! return components of the perpetual date, and current time of day      get_curr_time,            &! return components of elapsed time since reference date      get_curr_calday,          &! return calendar day at end of current timestep      is_first_step,            &! return true on first step of initial run      is_first_restart_step,    &! return true on first step of restart or branch run      is_end_curr_day,          &! return true on last timestep in current day      is_end_curr_month,        &! return true on last timestep in current month      is_last_step,             &! return true on last timestep      is_perpetual,             &! return true if perpetual calendar is in use      timemgr_write_restart,    &! write info to file needed to restart the time manager      timemgr_read_restart,     &! read info from file needed to restart the time manager      timemgr_restart            ! restart the time manager! Public data for namelist input   character(len=32), public ::&      calendar   = 'NO_LEAP'     ! Calendar to use in date calculations.                                 ! 'NO_LEAP' or 'GREGORIAN'   integer, parameter :: uninit_int = -999999999   integer, public ::&      dtime         = uninit_int,  &! timestep in seconds      nestep        = uninit_int,  &! final timestep (or day if negative) number      nelapse       = uninit_int,  &! number of timesteps (or days if negative) to extend a run      start_ymd     = uninit_int,  &! starting date for run in yearmmdd format      start_tod     = 0,           &! starting time of day for run in seconds      stop_ymd      = uninit_int,  &! stopping date for run in yearmmdd format      stop_tod      = 0,           &! stopping time of day for run in seconds      ref_ymd       = uninit_int,  &! reference date for time coordinate in yearmmdd format      ref_tod       = 0,           &! reference time of day for time coordinate in seconds      perpetual_ymd = uninit_int    ! date used by perpetual calendar   logical, public ::&      perpetual_run = .false.       ! .true. => use a perpetual calendar! Public data for communicating with modules that don't have 'get' methods.   integer, public ::&      ic_ymd  = uninit_int,     &! date of initial conditions in yearmmdd format      ic_tod  = 0                ! time of day of initial conditions in seconds                                 ! ic_ymd, ic_tod set in control/readinitial.F90   logical, public ::&      tm_aqua_planet = .false.   ! flag for aqua-planet simulation! Private module data   type(esmf_timemgr) :: tm_id          ! time manager ID   type(esmf_date)    :: tm_perp_date   ! reference date for perpetual calendar day calc   integer ::&                      ! Data required to restart time manager:      rst_type      = uninit_int,  &! calendar type      rst_nstep     = uninit_int,  &! current step number      rst_step_days = uninit_int,  &! days component of timestep size      rst_step_sec  = uninit_int,  &! seconds component of timestep size      rst_start_ymd = uninit_int,  &! start date      rst_start_tod = uninit_int,  &! start time of day      rst_stop_ymd  = uninit_int,  &! stop date      rst_stop_tod  = uninit_int,  &! stop time of day      rst_ref_ymd   = uninit_int,  &! reference date      rst_ref_tod   = uninit_int,  &! reference time of day      rst_curr_ymd  = uninit_int,  &! current date      rst_curr_tod  = uninit_int,  &! current time of day      rst_perp_ymd  = uninit_int    ! perpetual date   logical ::&      rst_perp_cal  = .false.       ! true when using perpetual calendar   logical :: tm_first_restart_step = .false.  ! true for first step of a restart or branch run   logical :: tm_perp_calendar = .false.       ! true when using perpetual calendar!=========================================================================================contains!=========================================================================================subroutine timemgr_preset()! Initialize variables before namelist input.   implicit none! Local variables   character(len=*), parameter :: sub = 'timemgr_preset'!-----------------------------------------------------------------------------------------   if ( dtime == uninit_int ) then      if (dycore_is ('EUL')) then         dtime  = 1200      else if (dycore_is ('SLD')) then         dtime  = 3600      else if (dycore_is ('LR')) then         dtime  = 3600      else         write(6,*)sub,': need valid dycore to set default DTIME'         call endrun      end if   end ifend subroutine timemgr_preset!=========================================================================================subroutine timemgr_init()! Initialize the ESMF time manager.!! NOTE - Assumptions:!      1) The namelist variables have been set before this routine is called.  (set in control/parse_namelist.F90)!      2) ic_ymd, ic_tod are set before this routine is called.  (set in control/readinitial.F90)   implicit none! Local variables   character(len=*), parameter :: sub = 'timemgr_init'   character(len=len(calendar)) :: cal   integer :: rc                 ! return code   integer :: cal_type           ! calendar type   type(esmf_time) :: step_size   ! timestep size   type(esmf_date) :: start_date  ! start date for run   type(esmf_date) :: stop_date   ! stop date for run   type(esmf_date) :: ref_date    ! reference date for time coordinate! Some backwards compatibility stuff:   type(esmf_time) :: diff   integer :: ntspday, ndays, nsecs   logical :: islater!-----------------------------------------------------------------------------------------! Initialize error handling.   call esmf_errhandlersettype(esmf_err_return)! Initialize calendar type.   cal = to_upper(calendar)   if ( trim(cal) == 'NO_LEAP' ) then      cal_type = esmf_no_leap   else if ( trim(cal) == 'GREGORIAN' ) then      cal_type = esmf_gregorian   else      write(6,*)sub,': unrecognized calendar specified: ',calendar      call endrun   end if! Initialize timestep size.   if ( mod(86400,dtime) /=0 ) then      write(6,*)sub,': timestep must divide evenly into 1 day'      call endrun   end if   step_size = esmf_timeinit(0, dtime, rc)   call chkrc(rc, sub//': error return from esmf_timeinit: setting step_size')! Initialize start date.   if ( start_ymd == uninit_int ) then      start_ymd = ic_ymd      start_tod = ic_tod   end if   start_date = esmf_dateinit(cal_type, start_ymd, start_tod, rc)   call chkrc(rc, sub//': error return from esmf_dateinit: setting start_date')! Initialize reference date for time coordinate.   if ( ref_ymd /= uninit_int ) then      ref_date = esmf_dateinit(cal_type, ref_ymd, ref_tod, rc)   else      ref_date = esmf_dateinit(start_date, rc)   end if   call chkrc(rc, sub//': error return from esmf_dateinit: setting ref_date')! Initialize stop date.   if ( stop_ymd /= uninit_int ) then      stop_date = esmf_dateinit(cal_type, stop_ymd, stop_tod, rc)   else if ( nestep /= uninit_int ) then      if ( nestep >= 0 ) then         stop_date = esmf_dateincrementsec(start_date, dtime*nestep, rc)      else         stop_date = esmf_dateincrementday(start_date, -nestep, rc)      end if   else if ( nelapse /= uninit_int ) then      if ( nelapse >= 0 ) then         stop_date = esmf_dateincrementsec(start_date, dtime*nelapse, rc)      else         stop_date = esmf_dateincrementday(start_date, -nelapse, rc)      end if   else      write(6,*)sub,': Must specify one of stop_ymd, nestep, or nelapse'      call endrun   end if   call chkrc(rc, sub//': error return setting stop_date')! Initialize a time manager.   tm_id = esmf_timemgrinit(step_size, start_date, stop_date, ref_date, rc)   call chkrc(rc, sub//': error return from esmf_timemgrinit')! Initialize date used for perpetual calendar day calculation.   if ( tm_aqua_planet ) then      tm_perp_date = esmf_dateinit(cal_type, 321, 0, rc)      call chkrc(rc, sub//': error return from esmf_dateinit: setting tm_perp_date')      tm_perp_calendar = .true.   else if ( perpetual_run ) then      if ( perpetual_ymd /= uninit_int ) then         tm_perp_date = esmf_dateinit(cal_type, perpetual_ymd, 0, rc)         call chkrc(rc, sub//': error return from esmf_dateinit: setting tm_perp_date')         tm_perp_calendar = .true.      else         tm_perp_date = esmf_dateinit(cal_type, ic_ymd, 0, rc)         call chkrc(rc, sub//': error return from esmf_dateinit: setting tm_perp_date')         tm_perp_calendar = .true.      end if   end if! Set variables from "comtim.h interface" for backwards compatibility.! Calculation of ending timestep number (nestep) assumes a constant stepsize.   ntspday = 86400/dtime   diff = esmf_timeinit()   call esmf_datediff(start_date, stop_date, diff, islater, rc)   call chkrc(rc, sub//': error return from esmf_datediff calculating nestep')   call esmf_timeget(diff, ndays, nsecs, rc)   call chkrc(rc, sub//': error return from esmf_timeget calculating nestep')   nestep = ntspday*ndays + nsecs/dtime   if ( mod(nsecs,dtime) /= 0 ) nestep = nestep + 1! Print configuration summary to log file (stdout).   if (masterproc) then      call timemgr_print()   end ifend subroutine timemgr_init!=========================================================================================subroutine timemgr_restart()! Restart the ESMF time manager.!! NOTE - Assumptions:!      1) The namelist variables have been set before this routine is called.!         (set in control/parse_namelist.F90)!         The stop date is the only thing that can be changed by the user on a restart.!      2) Restart data have been read on the master process before this routine is called.!         (timemgr_read_restart called from control/restart.F90::read_restart)   implicit none! Local variables   character(len=*), parameter :: sub = 'timemgr_restart'   integer :: rc                 ! return code   type(esmf_date) :: start_date  ! start date for run   type(esmf_date) :: stop_date   ! stop date for run   type(esmf_date) :: curr_date   ! date of data in restart file   logical :: islater   integer :: ymd, tod! Some backwards compatibility stuff:   type(esmf_time) :: diff   integer :: ntspday, ndays, nsecs!-----------------------------------------------------------------------------------------#if ( defined SPMD )    call mpibcast(rst_type,      1, mpiint, 0, mpicom)   call mpibcast(rst_nstep,     1, mpiint, 0, mpicom)   call mpibcast(rst_step_days, 1, mpiint, 0, mpicom)   call mpibcast(rst_step_sec,  1, mpiint, 0, mpicom)   call mpibcast(rst_start_ymd, 1, mpiint, 0, mpicom)   call mpibcast(rst_start_tod, 1, mpiint, 0, mpicom)   call mpibcast(rst_stop_ymd,  1, mpiint, 0, mpicom)   call mpibcast(rst_stop_tod,  1, mpiint, 0, mpicom)   call mpibcast(rst_ref_ymd,   1, mpiint, 0, mpicom)   call mpibcast(rst_ref_tod,   1, mpiint, 0, mpicom)   call mpibcast(rst_curr_ymd,  1, mpiint, 0, mpicom)   call mpibcast(rst_curr_tod,  1, mpiint, 0, mpicom)   call mpibcast(rst_perp_ymd,  1, mpiint, 0, mpicom)   call mpibcast(rst_perp_cal,  1, mpilog, 0, mpicom)#endif! Initialize error handling.   call esmf_errhandlersettype(esmf_err_return)! Initialize calendar type.   if ( rst_type == esmf_no_leap ) then      calendar = 'NO_LEAP'   else if ( rst_type == esmf_gregorian ) then      calendar = 'GREGORIAN'   else      write(6,*)sub,': unrecognized calendar type in restart file: ',rst_type      call endrun   end if! Initialize the timestep.   dtime = rst_step_days*86400 + rst_step_sec! Initialize start date.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费精品视频在线| 欧美日韩情趣电影| 欧美日韩在线三区| 国产女同互慰高潮91漫画| 亚洲午夜免费视频| 成人动漫精品一区二区| 日韩午夜激情免费电影| 一区二区三区四区不卡视频| 国产精品1区二区.| 日韩欧美中文字幕一区| 夜夜嗨av一区二区三区四季av| 激情综合一区二区三区| 欧美一级夜夜爽| 亚洲成人手机在线| 色婷婷av一区二区三区软件 | 成人黄色在线网站| 欧美成人在线直播| 日韩av电影一区| 337p亚洲精品色噜噜狠狠| 亚洲综合小说图片| 91免费国产在线观看| 国产精品美女一区二区| 成人精品视频一区二区三区| 久久久亚洲精品石原莉奈| 精品制服美女丁香| 精品av久久707| 狠狠色综合播放一区二区| 欧美不卡视频一区| 久久99精品久久久久久国产越南 | 777精品伊人久久久久大香线蕉| 亚洲精品视频免费看| av日韩在线网站| 亚洲欧美自拍偷拍| 欧美亚洲尤物久久| 天天av天天翘天天综合网 | 国产精品国产精品国产专区不蜜| 国产69精品一区二区亚洲孕妇| 久久网这里都是精品| 国产精品一区免费视频| 久久九九国产精品| 不卡av免费在线观看| 亚洲综合视频在线观看| 欧美精品久久久久久久久老牛影院| 日韩国产一二三区| 亚洲精品一区二区三区影院| 国产一区999| 中文字幕一区不卡| 精品污污网站免费看| 奇米精品一区二区三区在线观看| 欧美mv和日韩mv国产网站| 成人性视频网站| 亚洲最新视频在线观看| 欧美一级日韩免费不卡| 国产成人午夜精品5599| 亚洲乱码一区二区三区在线观看| 欧美性猛片aaaaaaa做受| 久久精品国产精品亚洲精品| 久久久久国产一区二区三区四区| 91啪亚洲精品| 久久99国产精品免费| 国产精品久久久久久亚洲毛片| 在线观看日韩毛片| 久久国产精品99久久久久久老狼 | 精品精品欲导航| zzijzzij亚洲日本少妇熟睡| 亚洲成人午夜影院| 亚洲国产成人一区二区三区| 日本乱码高清不卡字幕| 国产一区啦啦啦在线观看| 夜夜嗨av一区二区三区四季av| 26uuu久久综合| 欧美亚洲国产一区在线观看网站| 国产真实乱子伦精品视频| 亚洲精品免费视频| 久久久欧美精品sm网站| 欧美日韩国产一级二级| 国产成人精品免费| 蜜臀99久久精品久久久久久软件| 国产精品成人免费精品自在线观看| 91.麻豆视频| 在线观看亚洲成人| 成人av电影在线| 激情五月婷婷综合网| 天堂精品中文字幕在线| 亚洲免费电影在线| 久久精品综合网| 日韩欧美在线一区二区三区| 色天天综合久久久久综合片| 国产精品123区| 美女网站视频久久| 日欧美一区二区| 亚洲激情综合网| 亚洲欧洲三级电影| 国产精品日韩精品欧美在线 | 91精品国产高清一区二区三区| 99久久久免费精品国产一区二区| 激情六月婷婷久久| 日韩av电影一区| 日韩国产高清影视| 亚洲福利电影网| 午夜在线电影亚洲一区| 玉米视频成人免费看| 亚洲欧洲成人精品av97| 中文幕一区二区三区久久蜜桃| 精品国产乱码久久久久久久久| 欧美精选一区二区| 3atv一区二区三区| 日韩一区二区免费在线电影 | 国产欧美一区二区精品性| 日韩一区二区三区在线视频| 777久久久精品| 337p亚洲精品色噜噜狠狠| 欧美疯狂做受xxxx富婆| 欧美日韩在线不卡| 欧美日本韩国一区二区三区视频| 欧美日韩国产影片| 欧美一区二区二区| 日韩丝袜美女视频| 26uuu亚洲综合色| 国产丝袜在线精品| 中文字幕五月欧美| 亚洲男人的天堂在线aⅴ视频| 成人欧美一区二区三区白人 | 亚洲裸体在线观看| 一区二区在线免费观看| 亚洲电影欧美电影有声小说| 日韩av电影天堂| 国精产品一区一区三区mba视频 | 在线播放91灌醉迷j高跟美女 | 亚洲精品国产精品乱码不99| 亚洲精品成人悠悠色影视| 亚洲精品日日夜夜| 日本视频在线一区| 国产在线精品免费av| 不卡一二三区首页| 欧美无乱码久久久免费午夜一区 | 欧美四级电影网| 欧美电影免费观看高清完整版在线 | 国内一区二区在线| 成人丝袜高跟foot| 欧美日韩一级二级| 久久婷婷成人综合色| 中文字幕亚洲不卡| 蜜臂av日日欢夜夜爽一区| 国产精品18久久久久| 在线视频国产一区| 亚洲精品一区二区三区福利 | 久久九九全国免费| 一二三区精品视频| 国产精品123| 精品视频在线免费| 国产精品天美传媒| 美女视频黄 久久| 色综合中文字幕国产 | 欧美系列亚洲系列| 久久伊人蜜桃av一区二区| 一区二区成人在线| 国产经典欧美精品| 欧美老女人第四色| 国产精品久久久久aaaa樱花| 天天综合天天做天天综合| 不卡的av中国片| 欧美电影免费观看高清完整版在线观看| 国产精品嫩草影院com| 奇米色777欧美一区二区| 色www精品视频在线观看| 26uuu精品一区二区在线观看| 亚洲大片精品永久免费| 99综合影院在线| 国产亚洲一区字幕| 美国十次了思思久久精品导航| 色偷偷久久人人79超碰人人澡| 国产婷婷色一区二区三区 | fc2成人免费人成在线观看播放| 9191国产精品| 亚洲成av人片一区二区三区| 99视频热这里只有精品免费| 久久久国产精品午夜一区ai换脸| 日韩主播视频在线| 在线免费精品视频| 亚洲精品乱码久久久久久黑人| av中文一区二区三区| 久久久久久99精品| 国产精品自拍av| 精品国产99国产精品| 日本va欧美va瓶| 91精品欧美福利在线观看| 亚洲电影中文字幕在线观看| 91免费看`日韩一区二区| 日韩毛片精品高清免费| 成人小视频在线观看| 国产欧美日韩视频一区二区| 国产精品自拍在线| 国产亚洲综合在线| 国产成人8x视频一区二区| 日本一区二区三区视频视频| 国产一区二区三区四| 国产亚洲自拍一区| 不卡电影一区二区三区| 亚洲日本护士毛茸茸|