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

📄 herzin.f90

📁 CCSM Research Tools: Community Atmosphere Model (CAM)
💻 F90
字号:
#include <misc.h>#include <params.h>subroutine herzin(pkdim   ,pf      ,f       ,fst     ,fsb     , &                  sig     ,dsig    ,sigdp   ,kdp     ,fdp     , &                  nlon    )!----------------------------------------------------------------------- ! ! Purpose: ! Interpolate field on vertical slice to vertical departure point using! Hermite cubic interpolation.! ! 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: herzin.F90,v 1.1 2000/06/02 16:19:42 jet Exp $! $Author: jet $!!-----------------------------------------------------------------------   use precision   use pmgrid!-----------------------------------------------------------------------   implicit none!------------------------------Arguments--------------------------------!! Input arguments!   integer, intent(in) :: pkdim             ! vertical dimension   integer, intent(in) :: pf                ! dimension (number of fields)!   real(r8), intent(in) :: f    (plon,pkdim,pf) ! fields   real(r8), intent(in) :: fst  (plon,pkdim,pf) ! z-derivatives at top edge of interval   real(r8), intent(in) :: fsb  (plon,pkdim,pf) ! z-derivatives at bot edge of interval   real(r8), intent(in) :: sig  (pkdim)         ! vertical grid coordinates   real(r8), intent(in) :: dsig (pkdim)         ! intervals between vertical grid pts.   real(r8), intent(in) :: sigdp(plon,plev)     ! vertical coord. of departure point!   integer, intent(in) :: kdp  (plon,plev)  ! vertical index  of departure point   integer, intent(in) :: nlon!! Output arguments!   real(r8), intent(out) :: fdp(plond,plev,pf)   ! z-interpolants!!-----------------------------------------------------------------------!!  pkdim   Vertical dimension of vertical slice arrays.!  pf      Number of fields being interpolated.!  f       Vertical slice of data to be interpolated.!  fst     z-derivatives at the top edge of each interval contained in f!  fsb     z-derivatives at the bot edge of each interval contained in f!  sig     Sigma values corresponding to the vertical grid!  dsig    Increment in sigma value for each interval in vertical grid.!  sigdp   Sigma value at the trajectory midpoint or endpoint for each!          gridpoint in a vertical slice from the global grid.!  kdp     Vertical index for each gridpoint.  This index points into a!          vertical slice array whose vertical grid is given by sig.!          E.g.,   sig(kdp(i,j)) .le. sigdp(i,j) .lt. sig(kdp(i,j)+1) .!  fdp     Value of field at the trajectory midpoints or endpoints.!!---------------------------Local variables-----------------------------!   integer i,k,m             ! indices!   real(r8) dzk                  ! vert interval containing the dep. pt.   real(r8) zt                   ! |   real(r8) zb                   ! |   real(r8) ht (plon)            ! | -- interpolation coefficients   real(r8) hb (plon)            ! |   real(r8) dht(plon)            ! |   real(r8) dhb(plon)            ! |!!-----------------------------------------------------------------------!   do k=1,plev      do i=1,nlon         dzk = dsig(kdp(i,k))         zt = ( sig(kdp(i,k)+1) - sigdp(i,k) )/dzk         zb = 1. - zt         ht (i) = ( 3.0 - 2.0*zt )*zt**2         hb (i) = ( 3.0 - 2.0*zb )*zb**2         dht(i) = -dzk*( zt - 1. )*zt**2         dhb(i) =  dzk*( zb - 1. )*zb**2      end do!! Loop over fields.!      do m=1,pf         do i=1,nlon            fdp(i,k,m) = f(i,kdp(i,k)  ,m)* ht(i) +  &               fst(i,kdp(i,k),m)*dht(i) +  &               f(i,kdp(i,k)+1,m)* hb(i) +  &               fsb(i,kdp(i,k),m)*dhb(i)         end do      end do   end do!   returnend subroutine herzin

⌨️ 快捷键说明

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