next up previous contents
Next: SNICAR_RT Up: Routine/Function Prologues Previous: QSat   Contents

Fortran: Module Interface SNICARMod (Source File: SNICARMod.F90)

Calculate albedo of snow containing impurities and the evolution of snow effective radius


USES:

   use shr_kind_mod  , only : r8 => shr_kind_r8
   use shr_sys_mod   , only : shr_sys_flush
   use clm_varctl    , only : iulog
   use shr_const_mod , only : SHR_CONST_RHOICE
   use abortutils    , only : endrun
 
   implicit none
   save
PUBLIC MEMBER FUNCTIONS:
   public :: SNICAR_RT        ! Snow albedo and vertically-resolved solar absorption
   public :: SnowAge_grain    ! Snow effective grain size evolution
   public :: SnowAge_init     ! Initial read in of snow-aging file
   public :: SnowOptics_init  ! Initial read in of snow-optics file
PUBLIC DATA MEMBERS:
 
   real(r8), public, parameter :: snw_rds_min = 54.526_r8  ! minimum allowed snow effective radius (also "fresh snow" value) [microns]
   integer,  public, parameter :: sno_nbr_aer =   8        ! number of aerosol species in snowpack (indices described above) [nbr]
   logical,  public, parameter :: DO_SNO_OC =    .false.   ! parameter to include organic carbon (OC) in snowpack radiative calculations
   logical,  public, parameter :: DO_SNO_AER =   .true.    ! parameter to include aerosols in snowpack radiative calculations
 
   real(r8), public, parameter :: scvng_fct_mlt_bcphi = 0.20_r8   ! scavenging factor for hydrophillic BC inclusion in meltwater [frc]
   real(r8), public, parameter :: scvng_fct_mlt_bcpho = 0.03_r8   ! scavenging factor for hydrophobic BC inclusion in meltwater [frc]
   real(r8), public, parameter :: scvng_fct_mlt_ocphi = 0.20_r8   ! scavenging factor for hydrophillic OC inclusion in meltwater [frc]
   real(r8), public, parameter :: scvng_fct_mlt_ocpho = 0.03_r8   ! scavenging factor for hydrophobic OC inclusion in meltwater [frc]
   real(r8), public, parameter :: scvng_fct_mlt_dst1  = 0.02_r8   ! scavenging factor for dust species 1 inclusion in meltwater [frc]
   real(r8), public, parameter :: scvng_fct_mlt_dst2  = 0.02_r8   ! scavenging factor for dust species 2 inclusion in meltwater [frc]
   real(r8), public, parameter :: scvng_fct_mlt_dst3  = 0.01_r8   ! scavenging factor for dust species 3 inclusion in meltwater [frc]
   real(r8), public, parameter :: scvng_fct_mlt_dst4  = 0.01_r8   ! scavenging factor for dust species 4 inclusion in meltwater [frc]
PRIVATE MEMBER FUNCTIONS:
 
   !PRIVATE DATA MEMBERS:
   ! Aerosol species indices:
   !  1= hydrophillic black carbon 
   !  2= hydrophobic black carbon
   !  3= hydrophilic organic carbon
   !  4= hydrophobic organic carbon
   !  5= dust species 1
   !  6= dust species 2
   !  7= dust species 3
   !  8= dust species 4
   integer,  parameter :: numrad_snw  =   5               ! number of spectral bands used in snow model [nbr]
   integer,  parameter :: nir_bnd_bgn =   2               ! first band index in near-IR spectrum [idx]
   integer,  parameter :: nir_bnd_end =   5               ! ending near-IR band index [idx]
 
   integer,  parameter :: idx_Mie_snw_mx = 1471           ! number of effective radius indices used in Mie lookup table [idx]
   integer,  parameter :: idx_T_max      = 11             ! maxiumum temperature index used in aging lookup table [idx]
   integer,  parameter :: idx_T_min      = 1              ! minimum temperature index used in aging lookup table [idx]
   integer,  parameter :: idx_Tgrd_max   = 31             ! maxiumum temperature gradient index used in aging lookup table [idx]
   integer,  parameter :: idx_Tgrd_min   = 1              ! minimum temperature gradient index used in aging lookup table [idx]
   integer,  parameter :: idx_rhos_max   = 8              ! maxiumum snow density index used in aging lookup table [idx]
   integer,  parameter :: idx_rhos_min   = 1              ! minimum snow density index used in aging lookup table [idx]
 
   integer,  parameter :: snw_rds_max_tbl = 1500          ! maximum effective radius defined in Mie lookup table [microns]
   integer,  parameter :: snw_rds_min_tbl = 30            ! minimium effective radius defined in Mie lookup table [microns]
   real(r8), parameter :: snw_rds_max     = 1500._r8      ! maximum allowed snow effective radius [microns]
   real(r8), parameter :: snw_rds_refrz   = 1000._r8      ! effective radius of re-frozen snow [microns]
 
   real(r8), parameter :: min_snw = 1.0E-30_r8            ! minimum snow mass required for SNICAR RT calculation [kg m-2]
 
   !real(r8), parameter :: C1_liq_Brun89 = 1.28E-17_r8    ! constant for liquid water grain growth [m3 s-1], from Brun89
   real(r8), parameter :: C1_liq_Brun89 = 0._r8           ! constant for liquid water grain growth [m3 s-1], from Brun89: zeroed to accomodate dry snow aging
   real(r8), parameter :: C2_liq_Brun89 = 4.22E-13_r8     ! constant for liquid water grain growth [m3 s-1], from Brun89: corrected for LWC in units of percent
 
   real(r8), parameter :: tim_cns_bc_rmv  = 2.2E-8_r8     ! time constant for removal of BC in snow on sea-ice [s-1] (50% mass removal/year)
   real(r8), parameter :: tim_cns_oc_rmv  = 2.2E-8_r8     ! time constant for removal of OC in snow on sea-ice [s-1] (50% mass removal/year)
   real(r8), parameter :: tim_cns_dst_rmv = 2.2E-8_r8     ! time constant for removal of dust in snow on sea-ice [s-1] (50% mass removal/year)
 
   ! scaling of the snow aging rate (tuning option):
   logical :: flg_snoage_scl    = .false.                 ! flag for scaling the snow aging rate by some arbitrary factor
   real(r8), parameter :: xdrdt = 1.0_r8                  ! arbitrary factor applied to snow aging rate
 
   ! snow and aerosol Mie parameters:
   ! (arrays declared here, but are set in iniTimeConst)
   ! (idx_Mie_snw_mx is number of snow radii with defined parameters (i.e. from 30um to 1500um))
   
   ! direct-beam weighted ice optical properties
   real(r8) :: ss_alb_snw_drc(idx_Mie_snw_mx,numrad_snw)
   real(r8) :: asm_prm_snw_drc(idx_Mie_snw_mx,numrad_snw)
   real(r8) :: ext_cff_mss_snw_drc(idx_Mie_snw_mx,numrad_snw)
 
   ! diffuse radiation weighted ice optical properties
   real(r8) :: ss_alb_snw_dfs(idx_Mie_snw_mx,numrad_snw)
   real(r8) :: asm_prm_snw_dfs(idx_Mie_snw_mx,numrad_snw)
   real(r8) :: ext_cff_mss_snw_dfs(idx_Mie_snw_mx,numrad_snw)
 
   ! hydrophiliic BC
   real(r8) :: ss_alb_bc1(numrad_snw)
   real(r8) :: asm_prm_bc1(numrad_snw)
   real(r8) :: ext_cff_mss_bc1(numrad_snw)
 
   ! hydrophobic BC
   real(r8) :: ss_alb_bc2(numrad_snw)
   real(r8) :: asm_prm_bc2(numrad_snw)
   real(r8) :: ext_cff_mss_bc2(numrad_snw)
 
   ! hydrophobic OC
   real(r8) :: ss_alb_oc1(numrad_snw)
   real(r8) :: asm_prm_oc1(numrad_snw)
   real(r8) :: ext_cff_mss_oc1(numrad_snw)
 
   ! hydrophilic OC
   real(r8) :: ss_alb_oc2(numrad_snw)
   real(r8) :: asm_prm_oc2(numrad_snw)
   real(r8) :: ext_cff_mss_oc2(numrad_snw)
 
   ! dust species 1:
   real(r8) :: ss_alb_dst1(numrad_snw)
   real(r8) :: asm_prm_dst1(numrad_snw)
   real(r8) :: ext_cff_mss_dst1(numrad_snw)
 
   ! dust species 2:
   real(r8) :: ss_alb_dst2(numrad_snw)
   real(r8) :: asm_prm_dst2(numrad_snw)
   real(r8) :: ext_cff_mss_dst2(numrad_snw)
 
   ! dust species 3:
   real(r8) :: ss_alb_dst3(numrad_snw)
   real(r8) :: asm_prm_dst3(numrad_snw)
   real(r8) :: ext_cff_mss_dst3(numrad_snw)
 
   ! dust species 4:
   real(r8) :: ss_alb_dst4(numrad_snw)
   real(r8) :: asm_prm_dst4(numrad_snw)
   real(r8) :: ext_cff_mss_dst4(numrad_snw)
 
   ! best-fit parameters for snow aging defined over:
   !  11 temperatures from 225 to 273 K
   !  31 temperature gradients from 0 to 300 K/m
   !   8 snow densities from 0 to 350 kg/m3
   ! (arrays declared here, but are set in iniTimeConst)
   real(r8), pointer :: snowage_tau(:,:,:) ! (idx_rhos_max,idx_Tgrd_max,idx_T_max)
   real(r8), pointer :: snowage_kappa(:,:,:) ! (idx_rhos_max,idx_Tgrd_max,idx_T_max)
   real(r8), pointer :: snowage_drdt0(:,:,:) ! idx_rhos_max,idx_Tgrd_max,idx_T_max)
REVISION HISTORY:
   Created by Mark Flanner



Subsections

Erik Kluzek 2011-06-15