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

📄 lagyin.f90

📁 CCSM Research Tools: Community Atmosphere Model (CAM)
💻 F90
字号:
#include <misc.h>#include <params.h>subroutine lagyin(pf      ,fint    ,wdy     ,ydp     ,jdp     ,  &                  jcen    ,fdp     ,nlon    )!----------------------------------------------------------------------- ! ! Purpose: ! For each departure point in the latitude slice to be forecast,! interpolate (using unequally spaced Lagrange cubic formulas) the! x interpolants to the y value of the departure point.! ! Method: ! ! Author: ! Original version:  J. Olson! Standardized:      J. Rosinski, June 1992! Reviewed:          D. Williamson, P. Rasch, August 1992! Reviewed:          D. Williamson, P. Rasch, March 1996!!-----------------------------------------------------------------------!! $Id: lagyin.F90,v 1.1 2000/06/02 16:19:45 jet Exp $! $Author: jet $!!-----------------------------------------------------------------------   use precision   use pmgrid#if (!defined CRAY)   use srchutil, only: wheneq#endif!-----------------------------------------------------------------------   implicit none!-----------------------------------------------------------------------#include <parslt.h>!------------------------------Arguments--------------------------------!! Input arguments!   integer, intent(in) :: pf                        ! dimension (number of fields)!   real(r8), intent(in) :: fint(plon,plev,ppdy,pf)  ! x-interpolants   real(r8), intent(in) :: wdy(4,2,platd)           ! y-interpolation weights   real(r8), intent(in) :: ydp(plon,plev)           ! y-coordinates of departure pts.!   integer, intent(in) :: jdp(plon,plev)            ! j-index of departure point coord.   integer, intent(in) :: jcen                      ! current latitude   integer, intent(in) :: nlon!! Output arguments!   real(r8), intent(out) :: fdp(plon,plev,pf)         ! interpolants at the horiz. depart. pt.!!-----------------------------------------------------------------------!!  pf      Number of fields being interpolated.!  fint    (fint(i,k,j,m),j=ppdy/2,ppdy/2 + 1) contains the x!          interpolants at the endpoints of the y-interval that contains!          the departure point for grid point (i,k).  The last index of!          fint allows for interpolation of multiple fields.  fint is!          generated by a call to herxin.!  wdy     Grid values and weights for Lagrange cubic interpolation on!          the unequally spaced y-grid.!  ydp     ydp(i,k) is the y-coordinate of the departure point that!          corresponds to global grid point (i,k) in the latitude slice!          being forecasted.!  jdp     jdp(i,k) is the index of the y-interval that contains the!          departure point corresponding to global grid point (i,k) in!          the latitude slice being forecasted.!          Note that!                y(jdp(i,k)) .le. ydp(i,k) .lt. y(jdp(i,k)+1) .!  fdp     Horizontally interpolated field values at the departure point!          for the latitude slice being forecasted.!!---------------------------Local variables-----------------------------!   integer i,m               ! indices!   real(r8) ymy1                 ! |   real(r8) ymy2                 ! |   real(r8) ymy3                 ! |   real(r8) ymy4                 ! |   real(r8) coef12               ! |   real(r8) coef34               ! | -- interpolation weights/coeffs.   real(r8) term1(plon,plev)          ! |   real(r8) term2(plon,plev)          ! |   real(r8) term3(plon,plev)          ! |   real(r8) term4(plon,plev)          ! |!   integer jdpval,icount,ii,indx(plon),nval   integer k!!-----------------------------------------------------------------------!   if( ppdy .ne. 4) then      write(6,*) 'LAGYIN:Error:  ppdy .ne. 4'      call endrun   end if   icount = 0   do jdpval=jcen-2,jcen+1      if (icount.lt.nlon*plev) then         do k=1,plev            call wheneq(nlon,jdp(1,k),1,jdpval,indx,nval)            icount = icount + nval!            do ii = 1,nval               i=indx(ii)               ymy3     = ydp(i,k) - wdy(3,1,jdpval)               ymy4     = ydp(i,k) - wdy(4,1,jdpval)               coef12   = ymy3*ymy4               ymy2     = ydp(i,k) - wdy(2,1,jdpval)               term1(i,k) = coef12*ymy2*wdy(1,2,jdpval)               ymy1     = ydp(i,k) - wdy(1,1,jdpval)               term2(i,k) = coef12*ymy1*wdy(2,2,jdpval)               coef34   = ymy1*ymy2                  term3(i,k) = coef34*ymy4*wdy(3,2,jdpval)               term4(i,k) = coef34*ymy3*wdy(4,2,jdpval)            end do         end do      end if   end do   if (icount.ne.nlon*plev) then      write(6,*)'LAGYIN: Departure pt out of bounds: ', &                'jcen,icount,nlon*plev=',jcen,icount,nlon*plev      call endrun   end if!! Loop over fields.!   do m = 1,pf      do k=1,plev         do i = 1,nlon            fdp(i,k,m) = fint(i,k,1,m)*term1(i,k) +  &               fint(i,k,2,m)*term2(i,k) +  &               fint(i,k,3,m)*term3(i,k) +  &               fint(i,k,4,m)*term4(i,k)         end do      end do   end do!   returnend subroutine lagyin

⌨️ 快捷键说明

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