Ignore:
Timestamp:
Nov 28, 2018 11:40:28 AM (3 years ago)
Author:
suehring
Message:

Additional output for radiative fluxes added

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/radiation_model_mod.f90

    r3528 r3572  
    2828! -----------------
    2929! $Id$
     30! Add filling the short- and longwave radiation flux arrays (e.g. diffuse,
     31! direct, reflected, resedual) for all surfaces. This is required to surface
     32! outputs in suface_output_mod. (M. Salim)
     33!
     34! 3571 2018-11-28 09:24:03Z moh.hefny
    3035! Add an epsilon value to compare values in if statement to fix possible
    3136! precsion related errors in raytrace routines.
     
    692697    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  rad_sw_out_xy_av !< average of outgoing shortwave radiation at surface
    693698!
    694 !-- Land surface albedos for solar zenith angle of 60° after Briegleb (1992)     
     699!-- Land surface albedos for solar zenith angle of 60° after Briegleb (1992)     
    695700!-- (shortwave, longwave, broadband):   sw,      lw,      bb,
    696701    REAL(wp), DIMENSION(0:2,1:33), PARAMETER :: albedo_pars = RESHAPE( (/&
     
    788793                                             rrtm_cfc22vmr,  & !< CFC22 volume mixing ratio (g/mol)
    789794                                             rrtm_ch4vmr,    & !< CH4 volume mixing ratio
    790                                              rrtm_cicewp,    & !< in-cloud ice water path (g/m²)
     795                                             rrtm_cicewp,    & !< in-cloud ice water path (g/m2)
    791796                                             rrtm_cldfr,     & !< cloud fraction (0,1)
    792                                              rrtm_cliqwp,    & !< in-cloud liquid water path (g/m²)
     797                                             rrtm_cliqwp,    & !< in-cloud liquid water path (g/m2)
    793798                                             rrtm_co2vmr,    & !< CO2 volume mixing ratio (g/mol)
    794799                                             rrtm_emis,      & !< surface emissivity (0-1) 
     
    17101715          ALLOCATE( surf_lsm_h%rad_sw_in(1:surf_lsm_h%ns)  )
    17111716          ALLOCATE( surf_lsm_h%rad_sw_out(1:surf_lsm_h%ns) )
     1717          ALLOCATE( surf_lsm_h%rad_sw_dir(1:surf_lsm_h%ns) )
     1718          ALLOCATE( surf_lsm_h%rad_sw_dif(1:surf_lsm_h%ns) )
     1719          ALLOCATE( surf_lsm_h%rad_sw_ref(1:surf_lsm_h%ns) )
     1720          ALLOCATE( surf_lsm_h%rad_sw_res(1:surf_lsm_h%ns) )
    17121721          ALLOCATE( surf_lsm_h%rad_lw_in(1:surf_lsm_h%ns)  )
    17131722          ALLOCATE( surf_lsm_h%rad_lw_out(1:surf_lsm_h%ns) )
     1723          ALLOCATE( surf_lsm_h%rad_lw_dif(1:surf_lsm_h%ns) )
     1724          ALLOCATE( surf_lsm_h%rad_lw_ref(1:surf_lsm_h%ns) )
     1725          ALLOCATE( surf_lsm_h%rad_lw_res(1:surf_lsm_h%ns) )
    17141726          surf_lsm_h%rad_sw_in  = 0.0_wp
    17151727          surf_lsm_h%rad_sw_out = 0.0_wp
     1728          surf_lsm_h%rad_sw_dir = 0.0_wp
     1729          surf_lsm_h%rad_sw_dif = 0.0_wp
     1730          surf_lsm_h%rad_sw_ref = 0.0_wp
     1731          surf_lsm_h%rad_sw_res = 0.0_wp
    17161732          surf_lsm_h%rad_lw_in  = 0.0_wp
    17171733          surf_lsm_h%rad_lw_out = 0.0_wp
     1734          surf_lsm_h%rad_lw_dif = 0.0_wp
     1735          surf_lsm_h%rad_lw_ref = 0.0_wp
     1736          surf_lsm_h%rad_lw_res = 0.0_wp
    17181737       ENDIF
    17191738       IF ( .NOT. ALLOCATED ( surf_usm_h%rad_sw_in )  .AND.                    &
     
    17211740          ALLOCATE( surf_usm_h%rad_sw_in(1:surf_usm_h%ns)  )
    17221741          ALLOCATE( surf_usm_h%rad_sw_out(1:surf_usm_h%ns) )
     1742          ALLOCATE( surf_usm_h%rad_sw_dir(1:surf_usm_h%ns) )
     1743          ALLOCATE( surf_usm_h%rad_sw_dif(1:surf_usm_h%ns) )
     1744          ALLOCATE( surf_usm_h%rad_sw_ref(1:surf_usm_h%ns) )
     1745          ALLOCATE( surf_usm_h%rad_sw_res(1:surf_usm_h%ns) )
    17231746          ALLOCATE( surf_usm_h%rad_lw_in(1:surf_usm_h%ns)  )
    17241747          ALLOCATE( surf_usm_h%rad_lw_out(1:surf_usm_h%ns) )
     1748          ALLOCATE( surf_usm_h%rad_lw_dif(1:surf_usm_h%ns) )
     1749          ALLOCATE( surf_usm_h%rad_lw_ref(1:surf_usm_h%ns) )
     1750          ALLOCATE( surf_usm_h%rad_lw_res(1:surf_usm_h%ns) )
    17251751          surf_usm_h%rad_sw_in  = 0.0_wp
    17261752          surf_usm_h%rad_sw_out = 0.0_wp
     1753          surf_usm_h%rad_sw_dir = 0.0_wp
     1754          surf_usm_h%rad_sw_dif = 0.0_wp
     1755          surf_usm_h%rad_sw_ref = 0.0_wp
     1756          surf_usm_h%rad_sw_res = 0.0_wp
    17271757          surf_usm_h%rad_lw_in  = 0.0_wp
    17281758          surf_usm_h%rad_lw_out = 0.0_wp
     1759          surf_usm_h%rad_lw_dif = 0.0_wp
     1760          surf_usm_h%rad_lw_ref = 0.0_wp
     1761          surf_usm_h%rad_lw_res = 0.0_wp
    17291762       ENDIF
    17301763       DO  l = 0, 3
     
    17331766             ALLOCATE( surf_lsm_v(l)%rad_sw_in(1:surf_lsm_v(l)%ns)  )
    17341767             ALLOCATE( surf_lsm_v(l)%rad_sw_out(1:surf_lsm_v(l)%ns) )
     1768             ALLOCATE( surf_lsm_v(l)%rad_sw_dir(1:surf_lsm_v(l)%ns) )
     1769             ALLOCATE( surf_lsm_v(l)%rad_sw_dif(1:surf_lsm_v(l)%ns) )
     1770             ALLOCATE( surf_lsm_v(l)%rad_sw_ref(1:surf_lsm_v(l)%ns) )
     1771             ALLOCATE( surf_lsm_v(l)%rad_sw_res(1:surf_lsm_v(l)%ns) )
     1772
    17351773             ALLOCATE( surf_lsm_v(l)%rad_lw_in(1:surf_lsm_v(l)%ns)  )
    17361774             ALLOCATE( surf_lsm_v(l)%rad_lw_out(1:surf_lsm_v(l)%ns) )
     1775             ALLOCATE( surf_lsm_v(l)%rad_lw_dif(1:surf_lsm_v(l)%ns) )
     1776             ALLOCATE( surf_lsm_v(l)%rad_lw_ref(1:surf_lsm_v(l)%ns) )
     1777             ALLOCATE( surf_lsm_v(l)%rad_lw_res(1:surf_lsm_v(l)%ns) )
     1778
    17371779             surf_lsm_v(l)%rad_sw_in  = 0.0_wp
    1738              surf_lsm_v(l)%rad_sw_out = 0.0_wp
     1780             surf_lsm_v(l)%rad_sw_out = 0.0_wp
     1781             surf_lsm_v(l)%rad_sw_dir = 0.0_wp
     1782             surf_lsm_v(l)%rad_sw_dif = 0.0_wp
     1783             surf_lsm_v(l)%rad_sw_ref = 0.0_wp
     1784             surf_lsm_v(l)%rad_sw_res = 0.0_wp
     1785
    17391786             surf_lsm_v(l)%rad_lw_in  = 0.0_wp
    17401787             surf_lsm_v(l)%rad_lw_out = 0.0_wp
     1788             surf_lsm_v(l)%rad_lw_dif = 0.0_wp
     1789             surf_lsm_v(l)%rad_lw_ref = 0.0_wp
     1790             surf_lsm_v(l)%rad_lw_res = 0.0_wp
    17411791          ENDIF
    17421792          IF ( .NOT. ALLOCATED ( surf_usm_v(l)%rad_sw_in )  .AND.              &
     
    17441794             ALLOCATE( surf_usm_v(l)%rad_sw_in(1:surf_usm_v(l)%ns)  )
    17451795             ALLOCATE( surf_usm_v(l)%rad_sw_out(1:surf_usm_v(l)%ns) )
     1796             ALLOCATE( surf_usm_v(l)%rad_sw_dir(1:surf_usm_v(l)%ns) )
     1797             ALLOCATE( surf_usm_v(l)%rad_sw_dif(1:surf_usm_v(l)%ns) )
     1798             ALLOCATE( surf_usm_v(l)%rad_sw_ref(1:surf_usm_v(l)%ns) )
     1799             ALLOCATE( surf_usm_v(l)%rad_sw_res(1:surf_usm_v(l)%ns) )
    17461800             ALLOCATE( surf_usm_v(l)%rad_lw_in(1:surf_usm_v(l)%ns)  )
    17471801             ALLOCATE( surf_usm_v(l)%rad_lw_out(1:surf_usm_v(l)%ns) )
     1802             ALLOCATE( surf_usm_v(l)%rad_lw_dif(1:surf_usm_v(l)%ns) )
     1803             ALLOCATE( surf_usm_v(l)%rad_lw_ref(1:surf_usm_v(l)%ns) )
     1804             ALLOCATE( surf_usm_v(l)%rad_lw_res(1:surf_usm_v(l)%ns) )
    17481805             surf_usm_v(l)%rad_sw_in  = 0.0_wp
    1749              surf_usm_v(l)%rad_sw_out = 0.0_wp
     1806             surf_usm_v(l)%rad_sw_out = 0.0_wp
     1807             surf_usm_v(l)%rad_sw_dir = 0.0_wp
     1808             surf_usm_v(l)%rad_sw_dif = 0.0_wp
     1809             surf_usm_v(l)%rad_sw_ref = 0.0_wp
     1810             surf_usm_v(l)%rad_sw_res = 0.0_wp
    17501811             surf_usm_v(l)%rad_lw_in  = 0.0_wp
    17511812             surf_usm_v(l)%rad_lw_out = 0.0_wp
     1813             surf_usm_v(l)%rad_lw_dif = 0.0_wp
     1814             surf_usm_v(l)%rad_lw_ref = 0.0_wp
     1815             surf_usm_v(l)%rad_lw_res = 0.0_wp
    17521816          ENDIF
    17531817       ENDDO
     
    32003264!
    32013265!--       Calculate liquid water path and cloud fraction for each column.
    3202 !--       Note that LWP is required in g/m² instead of kg/kg m.
     3266!--       Note that LWP is required in g/m2 instead of kg/kg m.
    32033267          rrtm_cldfr  = 0.0_wp
    32043268          rrtm_reliq  = 0.0_wp
     
    33863450!
    33873451!--             Calculate liquid water path and cloud fraction for each column.
    3388 !--             Note that LWP is required in g/m² instead of kg/kg m.
     3452!--             Note that LWP is required in g/m2 instead of kg/kg m.
    33893453                rrtm_cldfr  = 0.0_wp
    33903454                rrtm_reliq  = 0.0_wp
     
    51365200           surf_usm_h%rad_sw_in(m)  = surfinsw(i)
    51375201           surf_usm_h%rad_sw_out(m) = surfoutsw(i)
     5202           surf_usm_h%rad_sw_dir(m) = surfinswdir(i)
     5203           surf_usm_h%rad_sw_dif(m) = surfinswdif(i)
     5204           surf_usm_h%rad_sw_ref(m) = surfinsw(i) - surfinswdir(i) -        &
     5205                                      surfinswdif(i)
     5206           surf_usm_h%rad_sw_res(m) = surfins(i)
    51385207           surf_usm_h%rad_lw_in(m)  = surfinlw(i)
    51395208           surf_usm_h%rad_lw_out(m) = surfoutlw(i)
     
    51415210                                      surfinlw(i) - surfoutlw(i)
    51425211           surf_usm_h%rad_net_l(m)  = surf_usm_h%rad_net(m)
     5212           surf_usm_h%rad_lw_dif(m) = surfinlwdif(i)
     5213           surf_usm_h%rad_lw_ref(m) = surfinlw(i) - surfinlwdif(i)
     5214           surf_usm_h%rad_lw_res(m) = surfinl(i)
    51435215!
    51445216!--     northward-facding
     
    51465218           surf_usm_v(0)%rad_sw_in(m)  = surfinsw(i)
    51475219           surf_usm_v(0)%rad_sw_out(m) = surfoutsw(i)
     5220           surf_usm_v(0)%rad_sw_dir(m) = surfinswdir(i)
     5221           surf_usm_v(0)%rad_sw_dif(m) = surfinswdif(i)
     5222           surf_usm_v(0)%rad_sw_ref(m) = surfinsw(i) - surfinswdir(i) -     &
     5223                                         surfinswdif(i)
     5224           surf_usm_v(0)%rad_sw_res(m) = surfins(i)
    51485225           surf_usm_v(0)%rad_lw_in(m)  = surfinlw(i)
    51495226           surf_usm_v(0)%rad_lw_out(m) = surfoutlw(i)
     
    51515228                                         surfinlw(i) - surfoutlw(i)
    51525229           surf_usm_v(0)%rad_net_l(m)  = surf_usm_v(0)%rad_net(m)
     5230           surf_usm_v(0)%rad_lw_dif(m) = surfinlwdif(i)
     5231           surf_usm_v(0)%rad_lw_ref(m) = surfinlw(i) - surfinlwdif(i)
     5232           surf_usm_v(0)%rad_lw_res(m) = surfinl(i)
    51535233!
    51545234!--     southward-facding
     
    51565236           surf_usm_v(1)%rad_sw_in(m)  = surfinsw(i)
    51575237           surf_usm_v(1)%rad_sw_out(m) = surfoutsw(i)
     5238           surf_usm_v(1)%rad_sw_dir(m) = surfinswdir(i)
     5239           surf_usm_v(1)%rad_sw_dif(m) = surfinswdif(i)
     5240           surf_usm_v(1)%rad_sw_ref(m) = surfinsw(i) - surfinswdir(i) -     &
     5241                                         surfinswdif(i)
     5242           surf_usm_v(1)%rad_sw_res(m) = surfins(i)
    51585243           surf_usm_v(1)%rad_lw_in(m)  = surfinlw(i)
    51595244           surf_usm_v(1)%rad_lw_out(m) = surfoutlw(i)
     
    51615246                                         surfinlw(i) - surfoutlw(i)
    51625247           surf_usm_v(1)%rad_net_l(m)  = surf_usm_v(1)%rad_net(m)
     5248           surf_usm_v(1)%rad_lw_dif(m) = surfinlwdif(i)
     5249           surf_usm_v(1)%rad_lw_ref(m) = surfinlw(i) - surfinlwdif(i)
     5250           surf_usm_v(1)%rad_lw_res(m) = surfinl(i)
    51635251!
    51645252!--     eastward-facing
     
    51665254           surf_usm_v(2)%rad_sw_in(m)  = surfinsw(i)
    51675255           surf_usm_v(2)%rad_sw_out(m) = surfoutsw(i)
     5256           surf_usm_v(2)%rad_sw_dir(m) = surfinswdir(i)
     5257           surf_usm_v(2)%rad_sw_dif(m) = surfinswdif(i)
     5258           surf_usm_v(2)%rad_sw_ref(m) = surfinsw(i) - surfinswdir(i) -     &
     5259                                         surfinswdif(i)
     5260           surf_usm_v(2)%rad_sw_res(m) = surfins(i)
    51685261           surf_usm_v(2)%rad_lw_in(m)  = surfinlw(i)
    51695262           surf_usm_v(2)%rad_lw_out(m) = surfoutlw(i)
     
    51715264                                         surfinlw(i) - surfoutlw(i)
    51725265           surf_usm_v(2)%rad_net_l(m)  = surf_usm_v(2)%rad_net(m)
     5266           surf_usm_v(2)%rad_lw_dif(m) = surfinlwdif(i)
     5267           surf_usm_v(2)%rad_lw_ref(m) = surfinlw(i) - surfinlwdif(i)
     5268           surf_usm_v(2)%rad_lw_res(m) = surfinl(i)
    51735269!
    51745270!--     westward-facding
     
    51765272           surf_usm_v(3)%rad_sw_in(m)  = surfinsw(i)
    51775273           surf_usm_v(3)%rad_sw_out(m) = surfoutsw(i)
     5274           surf_usm_v(3)%rad_sw_dir(m) = surfinswdir(i)
     5275           surf_usm_v(3)%rad_sw_dif(m) = surfinswdif(i)
     5276           surf_usm_v(3)%rad_sw_ref(m) = surfinsw(i) - surfinswdir(i) -     &
     5277                                         surfinswdif(i)
     5278           surf_usm_v(3)%rad_sw_res(m) = surfins(i)
    51785279           surf_usm_v(3)%rad_lw_in(m)  = surfinlw(i)
    51795280           surf_usm_v(3)%rad_lw_out(m) = surfoutlw(i)
     
    51815282                                         surfinlw(i) - surfoutlw(i)
    51825283           surf_usm_v(3)%rad_net_l(m)  = surf_usm_v(3)%rad_net(m)
     5284           surf_usm_v(3)%rad_lw_dif(m) = surfinlwdif(i)
     5285           surf_usm_v(3)%rad_lw_ref(m) = surfinlw(i) - surfinlwdif(i)
     5286           surf_usm_v(3)%rad_lw_res(m) = surfinl(i)
    51835287!
    51845288!--     (2) land surfaces
     
    51875291           surf_lsm_h%rad_sw_in(m)  = surfinsw(i)
    51885292           surf_lsm_h%rad_sw_out(m) = surfoutsw(i)
     5293           surf_lsm_h%rad_sw_dir(m) = surfinswdir(i)
     5294           surf_lsm_h%rad_sw_dif(m) = surfinswdif(i)
     5295           surf_lsm_h%rad_sw_ref(m) = surfinsw(i) - surfinswdir(i) -        &
     5296                                         surfinswdif(i)
     5297           surf_lsm_h%rad_sw_res(m) = surfins(i)
    51895298           surf_lsm_h%rad_lw_in(m)  = surfinlw(i)
    51905299           surf_lsm_h%rad_lw_out(m) = surfoutlw(i)
    51915300           surf_lsm_h%rad_net(m)    = surfinsw(i) - surfoutsw(i) +          &
    51925301                                      surfinlw(i) - surfoutlw(i)
     5302           surf_lsm_h%rad_lw_dif(m) = surfinlwdif(i)
     5303           surf_lsm_h%rad_lw_ref(m) = surfinlw(i) - surfinlwdif(i)
     5304           surf_lsm_h%rad_lw_res(m) = surfinl(i)
    51935305!
    51945306!--     northward-facding
     
    51965308           surf_lsm_v(0)%rad_sw_in(m)  = surfinsw(i)
    51975309           surf_lsm_v(0)%rad_sw_out(m) = surfoutsw(i)
     5310           surf_lsm_v(0)%rad_sw_dir(m) = surfinswdir(i)
     5311           surf_lsm_v(0)%rad_sw_dif(m) = surfinswdif(i)
     5312           surf_lsm_v(0)%rad_sw_ref(m) = surfinsw(i) - surfinswdir(i) -     &
     5313                                         surfinswdif(i)
     5314           surf_lsm_v(0)%rad_sw_res(m) = surfins(i)
    51985315           surf_lsm_v(0)%rad_lw_in(m)  = surfinlw(i)
    51995316           surf_lsm_v(0)%rad_lw_out(m) = surfoutlw(i)
    52005317           surf_lsm_v(0)%rad_net(m)    = surfinsw(i) - surfoutsw(i) +       &
    52015318                                         surfinlw(i) - surfoutlw(i)
     5319           surf_lsm_v(0)%rad_lw_dif(m) = surfinlwdif(i)
     5320           surf_lsm_v(0)%rad_lw_ref(m) = surfinlw(i) - surfinlwdif(i)
     5321           surf_lsm_v(0)%rad_lw_res(m) = surfinl(i)
    52025322!
    52035323!--     southward-facding
     
    52055325           surf_lsm_v(1)%rad_sw_in(m)  = surfinsw(i)
    52065326           surf_lsm_v(1)%rad_sw_out(m) = surfoutsw(i)
     5327           surf_lsm_v(1)%rad_sw_dir(m) = surfinswdir(i)
     5328           surf_lsm_v(1)%rad_sw_dif(m) = surfinswdif(i)
     5329           surf_lsm_v(1)%rad_sw_ref(m) = surfinsw(i) - surfinswdir(i) -     &
     5330                                         surfinswdif(i)
     5331           surf_lsm_v(1)%rad_sw_res(m) = surfins(i)
    52075332           surf_lsm_v(1)%rad_lw_in(m)  = surfinlw(i)
    52085333           surf_lsm_v(1)%rad_lw_out(m) = surfoutlw(i)
    52095334           surf_lsm_v(1)%rad_net(m)    = surfinsw(i) - surfoutsw(i) +       &
    52105335                                         surfinlw(i) - surfoutlw(i)
     5336           surf_lsm_v(1)%rad_lw_dif(m) = surfinlwdif(i)
     5337           surf_lsm_v(1)%rad_lw_ref(m) = surfinlw(i) - surfinlwdif(i)
     5338           surf_lsm_v(1)%rad_lw_res(m) = surfinl(i)
    52115339!
    52125340!--     eastward-facing
     
    52145342           surf_lsm_v(2)%rad_sw_in(m)  = surfinsw(i)
    52155343           surf_lsm_v(2)%rad_sw_out(m) = surfoutsw(i)
     5344           surf_lsm_v(2)%rad_sw_dir(m) = surfinswdir(i)
     5345           surf_lsm_v(2)%rad_sw_dif(m) = surfinswdif(i)
     5346           surf_lsm_v(2)%rad_sw_ref(m) = surfinsw(i) - surfinswdir(i) -     &
     5347                                         surfinswdif(i)
     5348           surf_lsm_v(2)%rad_sw_res(m) = surfins(i)
    52165349           surf_lsm_v(2)%rad_lw_in(m)  = surfinlw(i)
    52175350           surf_lsm_v(2)%rad_lw_out(m) = surfoutlw(i)
    52185351           surf_lsm_v(2)%rad_net(m)    = surfinsw(i) - surfoutsw(i) +       &
    52195352                                         surfinlw(i) - surfoutlw(i)
     5353           surf_lsm_v(2)%rad_lw_dif(m) = surfinlwdif(i)
     5354           surf_lsm_v(2)%rad_lw_ref(m) = surfinlw(i) - surfinlwdif(i)
     5355           surf_lsm_v(2)%rad_lw_res(m) = surfinl(i)
    52205356!
    52215357!--     westward-facing
     
    52235359           surf_lsm_v(3)%rad_sw_in(m)  = surfinsw(i)
    52245360           surf_lsm_v(3)%rad_sw_out(m) = surfoutsw(i)
     5361           surf_lsm_v(3)%rad_sw_dir(m) = surfinswdir(i)
     5362           surf_lsm_v(3)%rad_sw_dif(m) = surfinswdif(i)
     5363           surf_lsm_v(3)%rad_sw_ref(m) = surfinsw(i) - surfinswdir(i) -     &
     5364                                         surfinswdif(i)
     5365           surf_lsm_v(3)%rad_sw_res(m) = surfins(i)
    52255366           surf_lsm_v(3)%rad_lw_in(m)  = surfinlw(i)
    52265367           surf_lsm_v(3)%rad_lw_out(m) = surfoutlw(i)
    52275368           surf_lsm_v(3)%rad_net(m)    = surfinsw(i) - surfoutsw(i) +       &
    52285369                                         surfinlw(i) - surfoutlw(i)
     5370           surf_lsm_v(3)%rad_lw_dif(m) = surfinlwdif(i)
     5371           surf_lsm_v(3)%rad_lw_ref(m) = surfinlw(i) - surfinlwdif(i)
     5372           surf_lsm_v(3)%rad_lw_res(m) = surfinl(i)
    52295373        ENDIF
    52305374
Note: See TracChangeset for help on using the changeset viewer.