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

📄 map1_ppm.f90

📁 CCSM Research Tools: Community Atmosphere Model (CAM)
💻 F90
字号:
!----------------------------------------------------------------------- !BOP! !ROUTINE:  map1_ppm --- Piecewise parabolic mapping, variant 1!! !INTERFACE:      subroutine map1_ppm( km,     pe1,   q1,    kn,   pe2,               &                           q2,     itot,  i1,    i2,   j,                 &                           jfirst, jlast, ngs,   ngn,  iv,                &                           kord)! !USES:      use precision      implicit none! !INPUT PARAMETERS:      integer i1                             ! Starting longitude      integer i2                             ! Finishing longitude      integer itot                           ! Total latitudes      integer iv                             ! Mode: 0 ==  constituents  1 == ???      integer kord                           ! Method order      integer j                              ! Current latitude      integer jfirst                         ! Starting latitude      integer jlast                          ! Finishing latitude      integer ngs                            ! Ghosted latitudes south      integer ngn                            ! Ghosted latitudes north      integer km                             ! Original vertical dimension      integer kn                             ! Target vertical dimension      real(r8) pe1(itot,km+1)                ! pressure at layer edges                                              ! (from model top to bottom surface)                                             ! in the original vertical coordinate      real(r8) pe2(itot,kn+1)                ! pressure at layer edges                                              ! (from model top to bottom surface)                                             ! in the new vertical coordinate      real(r8)  q1(itot,jfirst-ngs:jlast+ngn,km)     ! Field input! !OUTPUT PARAMETERS:      real(r8)  q2(itot,jfirst-ngs:jlast+ngn,kn)     ! Field output! !DESCRIPTION:!!     Perform piecewise parabolic method on a given latitude    !! !REVISION HISTORY: !    00.04.24   Lin       Last modification!    01.03.26   Sawyer    Added ProTeX documentation!!EOP!-----------------------------------------------------------------------!BOC!! !LOCAL VARIABLES:      real(r8)       r3, r23      parameter (r3 = 1./3., r23 = 2./3.)      real(r8)   dp1(i1:i2,km)      real(r8)  q4(4,i1:i2,km)      integer i, k, l, ll, k0      real(r8)    pl, pr, qsum, delp, esl      do k=1,km         do i=i1,i2             dp1(i,k) = pe1(i,k+1) - pe1(i,k)            q4(1,i,k) = q1(i,j,k)         enddo      enddo! Compute vertical subgrid distribution      call ppm2m( q4, dp1, km, i1, i2, iv, kord )! Mapping      do 1000 i=i1,i2         k0 = 1      do 555 k=1,kn      do 100 l=k0,km! locate the top edge: pe2(i,k)      if(pe2(i,k) .ge. pe1(i,l) .and. pe2(i,k) .le. pe1(i,l+1)) then         pl = (pe2(i,k)-pe1(i,l)) / dp1(i,l)         if(pe2(i,k+1) .le. pe1(i,l+1)) then! entire new grid is within the original grid            pr = (pe2(i,k+1)-pe1(i,l)) / dp1(i,l)            q2(i,j,k) = q4(2,i,l) + 0.5*(q4(4,i,l)+q4(3,i,l)-q4(2,i,l)) &                          *(pr+pl)-q4(4,i,l)*r3*(pr*(pr+pl)+pl**2)               k0 = l               goto 555          else! Fractional area...            qsum = (pe1(i,l+1)-pe2(i,k))*(q4(2,i,l)+0.5*(q4(4,i,l)+     &                    q4(3,i,l)-q4(2,i,l))*(1.+pl)-q4(4,i,l)*             &                     (r3*(1.+pl*(1.+pl))))              do ll=l+1,km! locate the bottom edge: pe2(i,k+1)                 if(pe2(i,k+1) .gt. pe1(i,ll+1) ) then! Whole layer..                 qsum = qsum + dp1(i,ll)*q4(1,i,ll)                 else                 delp = pe2(i,k+1)-pe1(i,ll)                  esl = delp / dp1(i,ll)                 qsum = qsum + delp*(q4(2,i,ll)+0.5*esl*               &                       (q4(3,i,ll)-q4(2,i,ll)+q4(4,i,ll)*(1.-r23*esl)))                 k0 = ll                 goto 123                 endif              enddo              goto 123           endif      endif100   continue123   q2(i,j,k) = qsum / ( pe2(i,k+1) - pe2(i,k) )555   continue1000  continue      return!EOC      end subroutine map1_ppm!----------------------------------------------------------------------- 

⌨️ 快捷键说明

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