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

📄 prognostics.f90

📁 CCSM Research Tools: Community Atmosphere Model (CAM)
💻 F90
字号:
#include <misc.h>#include <params.h>module prognostics!BOP!! !MODULE: prognostics --- dynamics-physics coupling module!   use precision   use pmgrid    use infnan   use constituents, only: ppcnst   use dynamics_vars, only: ng_d, ng_s   implicit none!! !PUBLIC MEMBER FUNCTIONS:   public initialize_prognostics, shift_time_indices   integer, parameter :: ptimelevels = 2  ! number of time levels in the dycore!-----------------------------------------------------------------------! Time index pointers: only used for prognostic cloud water!---------------------------------------------------------------------------   integer :: n3   = 2   integer :: n3m1 = 1!-----------------------------------------------------------------------! The next 5 arrays are the REQUIRED state variables for the f-v dynamics!-----------------------------------------------------------------------! dyn_state:   real(r8), allocatable :: u3s(:,:,:)  ! Staggered grid winds, latitude   real(r8), allocatable :: v3s(:,:,:)  ! Satggered grid winds, longitude   real(r8), allocatable :: delp(:,:,:) ! delta pressure   real(r8), allocatable :: pt(:,:,:)   ! virtual potential temperature (ghosted)   real(r8), allocatable :: q3(:,:,:,:) ! Moisture and constituents!-----------------------------------------------------------------------! Auxilliary pressure (for definition of vertical coordinate) arrays! These can be re-computed from delp and ptop.!-----------------------------------------------------------------------! dyn_grid:   real(r8), allocatable :: pe  (:,:,:)     ! edge pressure   real(r8), allocatable :: pk  (:,:,:)     ! pe**cappa   real(r8), allocatable :: piln(:,:,:)     ! ln(pe)   real(r8), allocatable :: pkz (:,:,:)     ! finite-volume mean pk!-----------------------------------------------------------------------! The following arrays also existed in phys_state!-----------------------------------------------------------------------! phys_state:   real(r8), allocatable :: phis(:,:)      ! Surface geopotential   real(r8), allocatable ::   ps(:,:)      ! Surface pressure   real(r8), allocatable ::   t3(:,:,:)    ! (virtual) Temperature   real(r8), allocatable :: omga(:,:,:)    ! vertical pressure velocity! !DESCRIPTION:!!   {\bf Purpose:} Prognostic variables held in-core for convenient !   access. q3 is specific humidity (water vapor) and other !   constituents. pcnst is advected constituents, pnats is non-advected, ppcnst is total.! ! !REVISION HISTORY:!!   00.08.15     Lin        Modifications!   00.12.14     Sawyer     SPMD bug: do j=1,plat => beglat,endlat!   01.03.26     Sawyer     Added ProTeX documentation!   01.12.10     Sawyer     Ghosted PT!   01.12.20     Sawyer     Changed index order of Q3!!EOP!-----------------------------------------------------------------------contains!-----------------------------------------------------------------------!BOP! !IROUTINE: initialize_prognostics --- initialize prognostic variables!! !INTERFACE:subroutine initialize_prognostics! !DESCRIPTION:!!   Initialize the prognostic variables!! !REVISION HISTORY:!   00.10.15  Lin      modified to declare only one-time-level; !                      may want to declare them as 3D arrays eventually!   01.03.26  Sawyer   Added ProTeX documentation!!EOP!-----------------------------------------------------------------------!BOC!! !LOCAL VARIABLES:   integer :: i, j, k, m      allocate (phis(plon      , beglat:endlat))      allocate (ps  (plon      , beglat:endlat))      allocate (t3  (plon, beglev:endlev, beglat:endlat))      allocate (omga(plon, beglev:endlev, beglat:endlat))          allocate ( u3s(plon, beglat-ng_d:endlat+ng_s, beglev:endlev))      allocate ( v3s(plon, beglat-ng_s:endlat+ng_d, beglev:endlev))      allocate (delp(plon, beglat:endlat, beglev:endlev))      allocate ( pt(plon, beglat-ng_d:endlat+ng_d, beglev:endlev))      allocate ( q3(plon, beglat-ng_d:endlat+ng_d, beglev:endlev, ppcnst) )      allocate (pkz (plon, beglat:endlat, beglev:endlev))      allocate (pk  (plon, beglat:endlat, beglev:endlevp1))      allocate (pe  (plon, beglev:endlevp1, beglat:endlat))       allocate (piln(plon, beglev:endlevp1, beglat:endlat))       phis (:,:) = inf         ! phis is used in SMP k-loop! The order of the "first touch" initialization may need to be r-arranged! in order to maximize the parallel efficiency!$omp parallel do private (i, j, k, m)  do j=beglat, endlat        do i=1,plon           ps(i,j) = inf        enddo      do k=beglev,endlev        do i=1,plon             t3(i,k,j) = inf           omga(i,k,j) = inf        enddo      enddo      do m=1,ppcnst         do k=beglev,endlev           do i=1,plon              q3(i,j,k,m) = inf           enddo         enddo      enddo      do k=beglev,endlevp1         do i=1,plon            pe  (i,k,j) = inf            piln(i,k,j) = inf         enddo      enddo  enddo!$omp parallel do private (i, j, k)  do k=beglev,endlev      do j=beglat,endlat         do i=1,plon            u3s(i,j,k) = inf            v3s(i,j,k) = inf             pt(i,j,k) = inf           delp(i,j,k) = inf            pkz(i,j,k) = inf         enddo      enddo  enddo!$omp parallel do private (i, j, k)  do k=beglev,endlevp1      do j=beglat,endlat        do i=1,plon           pk(i,j,k) = inf        enddo      enddo  enddo   return!EOC end subroutine initialize_prognostics!-----------------------------------------------------------------------!-----------------------------------------------------------------------!BOP! !IROUTINE: shift_time_indices --- Shift time indices!! !INTERFACE: subroutine shift_time_indices! !DESCRIPTION:!!   Shift time indices!! !REVISION HISTORY:!   01.03.26  Sawyer   Added ProTeX documentation!!EOP!-----------------------------------------------------------------------!BOC      integer :: itmp      itmp = n3m1      n3m1 = n3      n3   = itmp      return!EOC   end subroutine shift_time_indices!----------------------------------------------------------------------- end module prognostics

⌨️ 快捷键说明

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