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

📄 surfaceradiation.f90

📁 CCSM Research Tools: Community Atmosphere Model (CAM)
💻 F90
字号:
#include <misc.h>#include <preproc.h>subroutine SurfaceRadiation (clm)!-----------------------------------------------------------------------!!  CLMCLMCLMCLMCLMCLMCLMCLMCLMCL  A community developed and sponsored, freely!  L                           M  available land surface process model.!  M --COMMUNITY LAND MODEL--  C!  C                           L!  LMCLMCLMCLMCLMCLMCLMCLMCLMCLM!!-----------------------------------------------------------------------! Purpose: ! Solar fluxes absorbed by vegetation and ground surface! ! Method: ! Note possible problem when land is on different grid than atmosphere.!! Land may have sun above the horizon (coszen > 0) but atmosphere may! have sun below the horizon (forc_solad = 0 and forc_solai = 0). This is okay! because all fluxes (absorbed, reflected, transmitted) are multiplied! by the incoming flux and all will equal zero.!! Atmosphere may have sun above horizon (forc_solad > 0 and forc_solai > 0) but! land may have sun below horizon. This is okay because fabd, fabi,! ftdd, ftid, and ftii all equal zero so that sabv=sabg=fsa=0. Also,! albd and albi equal one so that fsr=forc_solad+forc_solai. In other words, all! the radiation is reflected. NDVI should equal zero in this case.! However, the way the code is currently implemented this is only true! if (forc_solad+forc_solai)|vis = (forc_solad+forc_solai)|nir.!! Output variables are parsun,parsha,sabv,sabg,fsa,fsr,ndvi! ! Author:! Gordon Bonan! April 2002: Vertenstein/Oleson/Levis; Final form! !-----------------------------------------------------------------------! $Id: SurfaceRadiation.F90,v 1.1.10.2 2002/04/27 15:38:42 erik Exp $!-----------------------------------------------------------------------  use precision  use clmtype  implicit none!----Arguments----------------------------------------------------------  type (clm1d), intent(inout) :: clm    !CLM 1-D Module!----Local Variables----------------------------------------------------  integer ib              ! waveband number (1=vis, 2=nir)  integer nband           ! number of solar radiation waveband classes                real(r8) abs            ! absorbed solar radiation [W/m2]  real(r8) rnir           ! reflected solar radiation [nir] [W/m2]  real(r8) rvis           ! reflected solar radiation [vis] [W/m2]  real(r8) laifra         ! leaf area fraction of canopy  real(r8) trd            ! transmitted solar radiation: direct [W/m2]  real(r8) tri            ! transmitted solar radiation: diffuse [W/m2]  real(r8) cad(numrad)    ! direct beam absorbed by canopy [W/m2]  real(r8) cai(numrad)    ! diffuse radiation absorbed by canopy [W/m2]  real(r8) fsha           ! shaded fraction of canopy  real(r8) vai            ! total leaf area index + stem area index, one sided  real(r8) mpe            ! prevents overflow for division by zero                  !----End Variable List--------------------------------------------------  mpe   = 1.e-06  nband = numrad  fsha = 1.-clm%fsun  clm%laisun = clm%elai*clm%fsun  clm%laisha = clm%elai*fsha  vai = clm%elai+ clm%esai!! Zero summed solar fluxes!  clm%sabg = 0.  clm%sabv = 0.  clm%fsa  = 0.!! Loop over nband wavebands!  do ib = 1, nband!! Absorbed by canopy!     cad(ib)  = clm%forc_solad(ib)*clm%fabd(ib)     cai(ib)  = clm%forc_solai(ib)*clm%fabi(ib)     clm%sabv = clm%sabv + cad(ib) + cai(ib)     clm%fsa  = clm%fsa  + cad(ib) + cai(ib)!! Transmitted = solar fluxes incident on ground!     trd = clm%forc_solad(ib)*clm%ftdd(ib)     tri = clm%forc_solad(ib)*clm%ftid(ib) + clm%forc_solai(ib)*clm%ftii(ib)!! Solar radiation absorbed by ground surface!     abs = trd*(1.-clm%albgrd(ib)) + tri*(1.-clm%albgri(ib))      clm%sabg = clm%sabg + abs     clm%fsa  = clm%fsa  + abs  end do!! Partition visible canopy absorption to sunlit and shaded fractions! to get average absorbed par for sunlit and shaded leaves!  laifra = clm%elai / max(vai,mpe)  if (clm%fsun > 0.) then     clm%parsun = (cad(1) + cai(1)) * laifra     clm%parsha = 0._r8   else     clm%parsun = 0._r8      clm%parsha = 0._r8   endif!! NDVI and reflected solar radiation!  rvis = clm%albd(1)*clm%forc_solad(1) + clm%albi(1)*clm%forc_solai(1)   rnir = clm%albd(2)*clm%forc_solad(2) + clm%albi(2)*clm%forc_solai(2)  clm%fsr = rvis + rnir  clm%ndvi = (rnir-rvis) / max(rnir+rvis,mpe)  returnend subroutine SurfaceRadiation 

⌨️ 快捷键说明

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