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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 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.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区电影| 国产精品成人在线观看| 国产日韩精品一区二区三区| 国产精品国产三级国产普通话蜜臀 | 看电影不卡的网站| 91在线视频网址| 久久久夜色精品亚洲| 亚洲成av人片一区二区三区| 99国产欧美另类久久久精品| 精品国产亚洲在线| 蜜臀av在线播放一区二区三区| 99久久综合色| 中文av一区特黄| 国产在线不卡一区| 精品欧美一区二区三区精品久久| 亚洲自拍欧美精品| 99久久综合狠狠综合久久| 欧美va亚洲va国产综合| 日日摸夜夜添夜夜添精品视频| 一本久久精品一区二区 | 91精品婷婷国产综合久久性色| 亚洲欧美日韩综合aⅴ视频| 成人性生交大片免费看在线播放| 精品欧美一区二区久久| 久久超碰97人人做人人爱| 欧美人牲a欧美精品| 亚洲国产欧美一区二区三区丁香婷| 97aⅴ精品视频一二三区| 国产精品污污网站在线观看| 国产成人在线视频免费播放| 国产偷v国产偷v亚洲高清| 狠狠v欧美v日韩v亚洲ⅴ| 日韩欧美一区二区久久婷婷| 日韩高清中文字幕一区| 91精品欧美久久久久久动漫| 日本视频中文字幕一区二区三区| 欧美另类一区二区三区| 免费黄网站欧美| 久久这里都是精品| 成人午夜免费av| 亚洲人成网站在线| 欧美日韩中字一区| 青青草原综合久久大伊人精品优势| 91麻豆精品国产91久久久资源速度 | 日日摸夜夜添夜夜添国产精品 | 色噜噜久久综合| 亚洲一区在线视频| 欧美人与性动xxxx| 九九在线精品视频| 国产精品久久久久久久久久久免费看 | 激情综合网av| 久久久综合网站| 99精品视频免费在线观看| 一区二区三区影院| 欧美一区二区美女| 国产成都精品91一区二区三| 亚洲美女免费在线| 这里只有精品视频在线观看| 国产一区二区三区电影在线观看| 国产精品另类一区| 欧美日韩一卡二卡三卡| 久久99国产精品麻豆| **欧美大码日韩| 欧美一区二区免费| 99久久综合精品| 久久99精品久久久久婷婷| 国产精品动漫网站| 欧美一区二区私人影院日本| 国产91在线看| 免费成人av在线播放| 国产精品乱码人人做人人爱 | 青娱乐精品在线视频| 欧美韩国日本不卡| 制服丝袜亚洲网站| 成人h动漫精品| 麻豆免费看一区二区三区| 国产精品国产精品国产专区不蜜| 91精品一区二区三区在线观看| 成人免费视频视频在线观看免费 | 成人av网在线| 老司机精品视频一区二区三区| 日韩理论片在线| www亚洲一区| 制服丝袜亚洲网站| 欧美亚洲综合在线| 成人激情小说网站| 国产在线精品一区二区| 亚洲第一av色| 婷婷成人综合网| 亚洲视频你懂的| 久久精品夜色噜噜亚洲a∨| 欧美伦理视频网站| 色综合久久综合中文综合网| 国产精品亚洲第一区在线暖暖韩国| 天堂资源在线中文精品| 亚洲欧美另类小说| 国产精品欧美极品| 精品国产亚洲在线| 日韩一区二区三区视频| 在线播放/欧美激情| 在线亚洲精品福利网址导航| 国产成人av电影免费在线观看| 美脚の诱脚舐め脚责91| 日韩和欧美的一区| 日韩黄色免费网站| 日本欧美一区二区| 日韩和欧美的一区| 美腿丝袜亚洲三区| 麻豆国产精品视频| 精品在线播放免费| 国产一区日韩二区欧美三区| 久久 天天综合| 国模冰冰炮一区二区| 国产一区二区伦理| 国产精品一区二区三区乱码| 激情五月播播久久久精品| 国产精品一线二线三线| 国产精品系列在线观看| 成人国产精品免费观看动漫| 成人av电影观看| 日本高清不卡在线观看| 欧美三级午夜理伦三级中视频| 欧美午夜精品久久久| 欧美美女直播网站| 欧美一级夜夜爽| 亚洲免费在线视频一区 二区| 亚洲天堂2014| 亚洲国产成人精品视频| 蜜芽一区二区三区| 国产成人av一区二区| 99视频有精品| 欧美日韩一二三区| 精品第一国产综合精品aⅴ| 久久久国际精品| 亚洲最新在线观看| 日本麻豆一区二区三区视频| 国产一区二区伦理| 色悠悠久久综合| 91精品国产高清一区二区三区蜜臀| 精品久久久三级丝袜| 1024精品合集| 秋霞午夜鲁丝一区二区老狼| 韩国精品免费视频| 色综合天天性综合| 成人午夜精品一区二区三区| 99久久夜色精品国产网站| 欧美亚洲一区二区在线观看| 777午夜精品视频在线播放| 26uuu成人网一区二区三区| 亚洲欧洲三级电影| 奇米一区二区三区av| 成人av资源在线观看| 欧美一卡二卡三卡四卡| 国产精品久久久久三级| 蜜臀av性久久久久蜜臀av麻豆| 成人激情黄色小说| 精品久久久久香蕉网| 亚洲黄色片在线观看| 国产一区二区福利| 欧美日韩国产一级片| 国产精品动漫网站| 国产在线精品一区二区夜色| 精品污污网站免费看| 国产精品你懂的在线欣赏| 美女脱光内衣内裤视频久久网站 | 亚洲欧美色图小说| 国产中文字幕精品| 欧美日本在线播放| 亚洲婷婷国产精品电影人久久| 久久超碰97中文字幕| 精品视频色一区| 亚洲精品免费电影| 成人午夜电影网站| 久久影院电视剧免费观看| 亚洲r级在线视频| 在线视频你懂得一区二区三区| 国产亚洲一本大道中文在线| 免费看欧美女人艹b| 91久久久免费一区二区| 国产精品系列在线| 狠狠久久亚洲欧美| 日韩免费电影网站| 日本怡春院一区二区| 在线观看三级视频欧美| 亚洲日本青草视频在线怡红院| 国产九色sp调教91| 日韩一区二区三区电影| 日韩avvvv在线播放| 欧美区一区二区三区| 亚洲va欧美va人人爽| 欧美午夜电影在线播放| 亚洲精品国产成人久久av盗摄 | 欧美影视一区二区三区| 日韩理论片在线| 91丝袜美女网| 亚洲乱码国产乱码精品精的特点 | 国产欧美精品一区二区色综合 | 国产精品国产三级国产aⅴ中文 | 日韩中文字幕1| 欧美美女视频在线观看|