qneg4.f90

来自「CCSM Research Tools: Community Atmospher」· F90 代码 · 共 99 行

F90
99
字号
#include <misc.h>#include <params.h>subroutine qneg4 (subnam  ,lchnk   ,ncol    ,ztodt   ,        &                  qbot    ,srfrpdel,shflx   ,lhflx   ,qflx    )!----------------------------------------------------------------------- ! ! Purpose: ! Check if moisture flux into the ground is exceeding the total! moisture content of the lowest model layer (creating negative moisture! values).  If so, then subtract the excess from the moisture and! latent heat fluxes and add it to the sensible heat flux.! ! Method: ! <Describe the algorithm(s) used in the routine.> ! <Also include any applicable external references.> ! ! Author: J. Olson! !-----------------------------------------------------------------------   use precision   use ppgrid   use phys_grid,    only: get_lat_p, get_lon_p   use physconst,    only: gravit, latvap   use constituents, only: qmin   implicit none!! Input arguments!   character*8, intent(in) :: subnam         ! name of calling routine!   integer, intent(in) :: lchnk              ! chunk index   integer, intent(in) :: ncol               ! number of atmospheric columns!   real(r8), intent(in) :: ztodt             ! two times model timestep (2 delta-t)   real(r8), intent(in) :: qbot(pcols)       ! moisture at lowest model level   real(r8), intent(in) :: srfrpdel(pcols)   ! 1./(pint(K+1)-pint(K))!! Input/Output arguments!   real(r8), intent(inout) :: shflx(pcols)   ! Surface sensible heat flux (J/m2/s)   real(r8), intent(inout) :: lhflx(pcols)   ! Surface latent   heat flux (J/m2/s)   real(r8), intent(inout) :: qflx (pcols)   ! surface water flux (kg/m^2/s)!!---------------------------Local workspace-----------------------------!   integer :: i,ii              ! longitude indices   integer :: iw                ! i index of worst violator   integer :: indxexc(pcols)    ! index array of points with excess flux   integer :: nptsexc           ! number of points with excess flux!   real(r8):: worst             ! biggest violator   real(r8):: excess(pcols)     ! Excess downward sfc latent heat flux!!-----------------------------------------------------------------------!! Compute excess downward (negative) q flux compared to a theoretical! maximum downward q flux.  The theoretical max is based upon the! given moisture content of lowest level of the model atmosphere.!   nptsexc = 0!CDIR$ IVDEP   do i = 1,ncol      excess(i) = qflx(i) - (qmin(1) - qbot(i))/(ztodt*gravit*srfrpdel(i))!! If there is an excess downward (negative) q flux, then subtract! excess from "qflx" and "lhflx" and add to "shflx".!      if (excess(i) < 0.) then         nptsexc = nptsexc + 1         indxexc(nptsexc) = i         qflx (i) = qflx (i) - excess(i)         lhflx(i) = lhflx(i) - excess(i)*latvap         shflx(i) = shflx(i) + excess(i)*latvap      end if   end do!! Write out worst value if excess!   if (nptsexc.gt.0) then      worst = 0.      do ii=1,nptsexc         i = indxexc(ii)         if (excess(i) < worst) then            worst = excess(i)            iw = i         end if      end do      write(6,9000) subnam,get_lat_p(lchnk,iw),nptsexc,worst,get_lon_p(lchnk,iw)   end if!   return9000 format(' QNEG4 WARNING from ',a8,', lchnk = ',i3,';', &            ' Max possible LH flx exceeded at ',i4,' points. ', &            ' Worst excess = ',1pe12.4,' at i = ',i4)end subroutine qneg4

⌨️ 快捷键说明

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