⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readinitial.f90

📁 CCSM Research Tools: Community Atmosphere Model (CAM)
💻 F90
字号:
#include <misc.h>#include <params.h>subroutine readinitial (ncid)!----------------------------------------------------------------------- ! ! Purpose: Ensure that requisite netcdf variables are on the initial dataset.!          Set base day and date info using the "current" values from it.! ! Method: Issue proper netcdf wrapper calls.  Broadcast to slaves if SPMD! ! Author: CCM Core Group! !-----------------------------------------------------------------------   use precision   use pmgrid   use pspect   use rgrid   use time_manager, only: ic_ymd, ic_tod#if ( defined SPMD )   use mpishorthand#endif!-----------------------------------------------------------------------   implicit none!------------------------------Parameters-------------------------------#include <comctl.h>!-----------------------------------------------------------------------#include <comhyb.h>!-----------------------------------------------------------------------   include 'netcdf.inc'!-----------------------------------------------------------------------!! Arguments!   integer, intent(in) :: ncid  ! History file unit!                                ! Local variables!                                   integer :: lonid            !------------------------------------------------------   integer :: levid            !    integer :: latid            !    integer :: ntrkid           !    integer :: ntrmid           !    integer :: ntrnid           !    integer :: ncdateid         ! Netcdf variable and dimension ids for variable of that   integer :: ncsecid          ! name with "id" tacked on to the end   integer :: hyaiid           !    integer :: hybiid           !    integer :: hyamid           !    integer :: hybmid           !    integer :: ilev             !    integer :: ilevid           !    integer :: rlonid           !    integer :: nlonid           !    integer :: wnummaxid        !------------------------------------------------------   integer :: mlon             ! longitude dimension length from dataset   integer :: mlev             ! level dimension length from dataset   integer :: morec            ! latitude dimension length from dataset#ifdef STAGGERED   integer :: slonid           ! staggered longitude dimension length from dataset   integer :: slatid           ! staggered latitude dimension length from dataset#endif!!-----------------------------------------------------------------------!   if (masterproc) then!! Get and check dimension/date info!      call wrap_inq_dimid (ncid, 'lon' , lonid)      call wrap_inq_dimid (ncid, 'lev' , levid)      call wrap_inq_dimid (ncid, 'ilev', ilevid)      call wrap_inq_dimid (ncid, 'lat' , latid)!#ifdef STAGGERED      call wrap_inq_dimid (ncid, 'slon' , slonid)      call wrap_inq_dimid (ncid, 'slat' , slatid)#endif      call wrap_inq_varid (ncid, 'ntrk'   , ntrkid)      call wrap_inq_varid (ncid, 'ntrm'   , ntrmid)      call wrap_inq_varid (ncid, 'ntrn'   , ntrnid)      call wrap_inq_varid (ncid, 'date'   , ncdateid)      call wrap_inq_varid (ncid, 'datesec', ncsecid)      call wrap_inq_varid (ncid, 'hyai'   , hyaiid)      call wrap_inq_varid (ncid, 'hybi'   , hybiid)      call wrap_inq_varid (ncid, 'hyam'   , hyamid)      call wrap_inq_varid (ncid, 'hybm'   , hybmid)!      call wrap_inq_dimlen (ncid, lonid , mlon)      call wrap_inq_dimlen (ncid, levid , mlev)      call wrap_inq_dimlen (ncid, ilevid, ilev)      call wrap_inq_dimlen (ncid, latid , morec)!! Check for reduced grid info on initial dataset.  If not present, define! variables for full grid!      if (nf_inq_varid (ncid, 'nlon', nlonid)  ==  nf_noerr) then         call wrap_inq_varid (ncid, 'wnummax', wnummaxid)         call wrap_get_var_int (ncid, nlonid, nlon)         call wrap_get_var_int (ncid, wnummaxid, wnummax)      else         wnummax(:) = ptrm         nlon(:) = plon      end if      call wrap_get_var_int (ncid, ncdateid, ic_ymd)      call wrap_get_var_int (ncid, ncsecid , ic_tod)      if (mlev /= plev.or.mlon /= plon.or.morec /= plat) then         write(6,*)'READINITIAL: model parameters do not match initial dataset parameters'         write(6,*)'Model Parameters:   plev = ',plev,' plon = ',plon,' plat = ',plat         write(6,*)'Dataset Parameters: dlev = ',mlev,' dlon = ',mlon,' dlat = ',morec         call endrun      end if      call wrap_get_var_realx (ncid, hyamid,hyam)      call wrap_get_var_realx (ncid, hybmid,hybm)      call wrap_get_var_realx (ncid, hyaiid,hyai)      call wrap_get_var_realx (ncid, hybiid,hybi)   end if#if ( defined SPMD )   call mpibcast (ic_ymd,  1,    mpiint, 0, mpicom)   call mpibcast (ic_tod,  1,    mpiint, 0, mpicom)   call mpibcast (nlon,    plat, mpiint, 0, mpicom)   call mpibcast (wnummax, plat, mpiint, 0, mpicom)   call mpibcast (hyam  ,plev ,mpir8,  0, mpicom)   call mpibcast (hybm  ,plev ,mpir8,  0, mpicom)   call mpibcast (hyai  ,plevp,mpir8,  0, mpicom)   call mpibcast (hybi  ,plevp,mpir8,  0, mpicom)#endif   returnend subroutine readinitial

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -