4#if defined ICE_MODEL && defined ICE_ALBEDO 
   49      SUBROUTINE ice_albedo (ng, tile, model)
 
   56      integer, 
intent(in) :: ng, tile, model
 
   60      character (len=*), 
parameter :: MyFile =                          &
 
   66      CALL wclock_on (ng, model, 42, __line__, myfile)
 
   68      CALL ice_albedo_tile (ng, tile, model,                            &
 
   69     &                      lbi, ubi, lbj, ubj,                         &
 
   70     &                      imins, imaxs, jmins, jmaxs,                 &
 
   71     &                      liold(ng), linew(ng),                       &
 
   72# if defined SHORTWAVE && (defined ALBEDO_CURVE || defined ALBEDO_SZO) 
   78     &                      
forces(ng) % albedo_ice,                    &
 
   81      CALL wclock_off (ng, model, 42, __line__, myfile)
 
   85      END SUBROUTINE ice_albedo
 
   88      SUBROUTINE ice_albedo_tile (ng, tile, model,                      &
 
   89     &                            LBi, UBi, LBj, UBj,                   &
 
   90     &                            IminS, ImaxS, JminS, JmaxS,           &
 
   92# if defined SHORTWAVE && (defined ALBEDO_CURVE || defined ALBEDO_SZO)
 
  101      integer, 
intent(in) :: ng, tile, model
 
  102      integer, 
intent(in) :: LBi, UBi, LBj, UBj
 
  103      integer, 
intent(in) :: IminS, ImaxS, JminS, JmaxS
 
  104      integer, 
intent(in) :: liold, linew
 
  107#  if defined SHORTWAVE && (defined ALBEDO_CURVE || defined ALBEDO_SZO) 
  108      real(r8), 
intent(in) :: lonr(LBi:,LBj:)
 
  109      real(r8), 
intent(in) :: latr(LBi:,LBj:)
 
  111      real(r8), 
intent(in) :: Fi(LBi:,LBj:,:)
 
  112      real(r8), 
intent(in) :: Si(LBi:,LBj:,:,:)
 
  113      real(r8), 
intent(out) :: albedo_ice(LBi:,LBj:)
 
  114      real(r8), 
intent(out) :: albedo(LBi:,LBj:)
 
  118#  if defined SHORTWAVE && (defined ALBEDO_CURVE || defined ALBEDO_SZO) 
  119      real(r8), 
intent(in) :: lonr(LBi:UBi,LBj:UBj)
 
  120      real(r8), 
intent(in) :: latr(LBi:UBi,LBj:UBj)
 
  122      real(r8), 
intent(in) :: Fi(LBi:UBi,LBj:UBj,nIceF)
 
  123      real(r8), 
intent(in) :: Si(LBi:UBi,LBj:UBj,2,nIceS)
 
  124      real(r8), 
intent(out) :: albedo_ice(LBi:UBi,LBj:UBj)
 
  125      real(r8), 
intent(out) :: albedo(LBi:UBi,LBj:UBj)
 
  130      integer :: i, j, li_stp
 
  131# if defined ALBEDO_SZO 
  132      integer :: iday, month, year
 
  135      real(r8), 
parameter :: alb_w = 0.06_r8
 
  138      real(r8), 
parameter :: alb_i_thick = 0.54_r8
 
  139      real(r8), 
parameter :: alb_s_dry = 0.83_r8
 
  140      real(r8), 
parameter :: alb_s_wet = 0.70_r8
 
  142      real(r8), 
parameter :: alb_i_dry = 0.65_r8
 
  143      real(r8), 
parameter :: alb_i_wet = 0.60_r8
 
  144      real(r8), 
parameter :: alb_s_dry = 0.85_r8
 
  145      real(r8), 
parameter :: alb_s_wet = 0.72_r8
 
  149      real(r8) :: alb_ice, alb_snow, Hice, Hsnow
 
  151# if defined ALBEDO_SZO 
  152      real(r8) :: Dangle, Hangle, LatRad, zenith
 
  153      real(dp) :: hour, yday
 
  155      real(r8) :: cff, cff1, cff2, sfc_temp
 
  157      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: ice_thick
 
  158      real(r8), 
dimension(IminS:ImaxS,JminS:JmaxS) :: snow_thick
 
  160# include "set_bounds.h" 
  174# if defined ALBEDO_SZO 
  183      dangle=23.44_r8*cos((172.0_r8-yday)*2.0_r8*
pi/365.25_r8)
 
  188      hangle=(12.0_r8-hour)*
pi/12.0_r8
 
  200          cff=1.0_r8/(si(i,j,li_stp,
isaice)+0.001_r8)
 
  201          ice_thick(i,j)=cff*si(i,j,li_stp,
ishice)
 
  202          snow_thick(i,j)=cff*si(i,j,li_stp,
ishsno)
 
  214            hsnow=snow_thick(i,j)
 
  220            hice=max(hice, 0.01_r8)
 
  221            IF (hice.ge.2.0_r8) 
THEN 
  223            ELSE IF (hice.ge.1.0_r8) 
THEN 
  224              alb_ice=0.07616_r8*hice+0.414492_r8
 
  226              alb_ice=0.082409_r8*log(hice)+0.485472_r8
 
  232            IF (si(i,j,li_stp,
ishmel).gt.0.0_r8) 
THEN 
  233              IF (hsnow.ge.0.1_r8) 
THEN 
  236                alb_snow=alb_ice+(0.701009_r8-alb_ice)*hsnow/0.1_r8
 
  253            IF (si(i,j,li_stp,
ishsno).gt.0.0_r8) 
THEN 
  254              albedo_ice(i,j)=alb_snow
 
  255            ELSE IF (si(i,j,li_stp,
ishmel).gt.0.02_r8) 
THEN 
  256              albedo_ice(i,j)=0.42_r8
 
  258              albedo_ice(i,j)=alb_ice
 
  261            albedo_ice(i,j)=alb_w             
 
  264# elif defined ALBEDO_CSIM 
  268          fhi=min(atan(4.0_r8*ice_thick(i,j))/atan(2.0_r8), 1.0_r8)
 
  269          fsn=snow_thick(i,j)/(snow_thick(i,j)+0.02_r8)
 
  270          alb_i_dry=alb_w*(1-fh)+alb_i_thick*fh
 
  271          cff1=alb_s_wet-alb_s_dry
 
  274            IF (sfc_temp-273.16_r8.gt. -1.0_r8) 
THEN 
  275              alb_snow=cff1*(sfc_temp-272.16_r8)+alb_s_dry
 
  279            IF (sfc_temp-273.16_r8.gt. -1._r8) 
THEN 
  280              alb_ice=cff2*(sfc_temp-272.16_r8)+alb_i_dry
 
  284            albedo_ice(i,j)=fsn*alb_snow+(1-fsn)*alb_ice
 
  286            albedo_ice(i,j)=alb_w             
 
  292          cff1=alb_s_wet-alb_s_dry
 
  293          cff2=alb_i_wet-alb_i_dry
 
  295            IF (si(i,j,li_stp,
ishsno).gt.0.0_r8) 
THEN 
  296              IF ((sfc_temp-273.16_r8).gt.-1.0_r8) 
THEN 
  297                albedo_ice(i,j)=cff1*(sfc_temp-272.16_r8)+alb_s_dry
 
  299                albedo_ice(i,j)=alb_s_dry
 
  302              IF ((sfc_temp-273.16_r8).gt.-1.0_r8) 
THEN 
  303                albedo_ice(i,j)=cff2*(sfc_temp-272.16_r8)+alb_i_dry
 
  305                albedo_ice(i,j)=alb_i_dry
 
  309            albedo_ice(i,j)=alb_w             
 
  317          albedo(i,j)=0.069_r8-                                         &
 
  318     &                0.011_r8*cos(2.0_r8*
deg2rad*latr(i,j))
 
  320# elif defined ALBEDO_SZO 
  331          cff1=sin(latrad)*sin(dangle)
 
  332          cff2=cos(latrad)*cos(dangle)
 
  333          zenith=max(cff1+cff2*cos(hangle-lonr(i,j)*
deg2rad             &
 
  334     &                             -
pi/12.0_r8),0.0_r8)
 
  338          albedo(i,j)=0.026_r8/(zenith**1.7_r8+0.065_r8)+               &
 
  339     &                0.15_r8*(zenith-0.1_r8)*                          &
 
  340     &                (zenith-0.5_r8)*(zenith-1.0_r8)
 
  356     &                          lbi, ubi, lbj, ubj,                     &
 
  360     &                          lbi, ubi, lbj, ubj,                     &
 
  367     &                    lbi, ubi, lbj, ubj,                           &
 
  370     &                    albedo, albedo_ice)
 
  374      END SUBROUTINE ice_albedo_tile
 
subroutine, public caldate(currenttime, yy_i, yd_i, mm_i, dd_i, h_i, m_i, s_i, yd_dp, dd_dp, h_dp, m_dp, s_dp)
subroutine exchange_r2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
type(t_forces), dimension(:), allocatable forces
type(t_grid), dimension(:), allocatable grid
integer, parameter ishsno
type(t_ice), dimension(:), allocatable ice
real(r8), dimension(:), allocatable min_ai
integer, parameter ishmel
integer, parameter isaice
integer, parameter ishice
integer, parameter icisst
integer, dimension(:), allocatable iic
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
real(dp), dimension(:), allocatable tdays
real(dp), parameter deg2rad
logical, dimension(:), allocatable perfectrst
integer, dimension(:), allocatable ntstart
subroutine mp_exchange2d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, nghost, ew_periodic, ns_periodic, a, b, c, d)
recursive subroutine wclock_off(ng, model, region, line, routine)
recursive subroutine wclock_on(ng, model, region, line, routine)