Changeset 3572


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

Additional output for radiative fluxes added

Location:
palm/trunk/SOURCE
Files:
3 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
  • palm/trunk/SOURCE/surface_mod.f90

    r3560 r3572  
    2626! -----------------
    2727! $Id$
     28! Define short- and longwave radiation flux arrays (e.g. diffuse, direct,
     29! reflected, resedual) for all surfaces. This is required to surface outputs
     30! in suface_output_mod. (M. Salim)
     31!
     32! 3560 2018-11-23 09:20:21Z raasch
    2833! Surface restoring in restarts commented. Some formatting.
    2934!
     
    392397       REAL(wp), DIMENSION(:), ALLOCATABLE ::  rad_lw_in           !< incoming longwave radiation
    393398       REAL(wp), DIMENSION(:), ALLOCATABLE ::  rad_lw_out          !< emitted longwave radiation
     399       REAL(wp), DIMENSION(:), ALLOCATABLE ::  rad_lw_dif          !< incoming longwave radiation from sky
     400       REAL(wp), DIMENSION(:), ALLOCATABLE ::  rad_lw_ref          !< incoming longwave radiation from reflection
     401       REAL(wp), DIMENSION(:), ALLOCATABLE ::  rad_lw_res          !< resedual longwave radiation in surface after last reflection step
    394402       REAL(wp), DIMENSION(:), ALLOCATABLE ::  rad_sw_in           !< incoming shortwave radiation
    395403       REAL(wp), DIMENSION(:), ALLOCATABLE ::  rad_sw_out          !< emitted shortwave radiation
     404       REAL(wp), DIMENSION(:), ALLOCATABLE ::  rad_sw_dir          !< direct incoming shortwave radiation
     405       REAL(wp), DIMENSION(:), ALLOCATABLE ::  rad_sw_dif          !< diffuse incoming shortwave radiation
     406       REAL(wp), DIMENSION(:), ALLOCATABLE ::  rad_sw_ref          !< incoming shortwave radiation from reflection
     407       REAL(wp), DIMENSION(:), ALLOCATABLE ::  rad_sw_res          !< resedual shortwave radiation in surface after last reflection step
    396408       
    397409
  • palm/trunk/SOURCE/surface_output_mod.f90

    r3494 r3572  
    2525! -----------------
    2626! $Id$
     27! Added short- and longwave radiation flux arrays (e.g. diffuse, direct,
     28! reflected, resedual) for all surfaces (M. Salim)
     29!
     30! 3494 2018-11-06 14:51:27Z suehring
    2731! Bugfix in gathering surface data from different types and orientation.
    2832! Output of total number of surfaces and vertices added.
     
    20032007                                               surf_lsm_v(3)%r_s,              &
    20042008                                               surf_usm_v(3)%r_s )
     2009               ELSE
     2010!
     2011!--               Output of averaged data
     2012                  surfaces%var_out(:) = surfaces%var_av(:,n_out) /             &
     2013                                        REAL( average_count_surf, KIND=wp )
     2014                  surfaces%var_av(:,n_out) = 0.0_wp
     2015                                                       
     2016               ENDIF
     2017
     2018            CASE ( 'rad_sw_dir' )
     2019!
     2020!--            Output of instantaneous data
     2021               IF ( av == 0 )  THEN
     2022                  CALL surface_output_collect( surf_def_h(0)%rad_sw_dir,       &
     2023                                               surf_def_h(1)%rad_sw_dir,       &
     2024                                               surf_lsm_h%rad_sw_dir,          &
     2025                                               surf_usm_h%rad_sw_dir,          &
     2026                                               surf_def_v(0)%rad_sw_dir,       &
     2027                                               surf_lsm_v(0)%rad_sw_dir,       &
     2028                                               surf_usm_v(0)%rad_sw_dir,       &
     2029                                               surf_def_v(1)%rad_sw_dir,       &
     2030                                               surf_lsm_v(1)%rad_sw_dir,       &
     2031                                               surf_usm_v(1)%rad_sw_dir,       &
     2032                                               surf_def_v(2)%rad_sw_dir,       &
     2033                                               surf_lsm_v(2)%rad_sw_dir,       &
     2034                                               surf_usm_v(2)%rad_sw_dir,       &
     2035                                               surf_def_v(3)%rad_sw_dir,       &
     2036                                               surf_lsm_v(3)%rad_sw_dir,       &
     2037                                               surf_usm_v(3)%rad_sw_dir )
     2038               ELSE
     2039!
     2040!--               Output of averaged data
     2041                  surfaces%var_out(:) = surfaces%var_av(:,n_out) /             &
     2042                                        REAL( average_count_surf, KIND=wp )
     2043                  surfaces%var_av(:,n_out) = 0.0_wp
     2044                                                       
     2045               ENDIF
     2046
     2047            CASE ( 'rad_sw_dif' )
     2048!
     2049!--            Output of instantaneous data
     2050               IF ( av == 0 )  THEN
     2051                  CALL surface_output_collect( surf_def_h(0)%rad_sw_dif,       &
     2052                                               surf_def_h(1)%rad_sw_dif,       &
     2053                                               surf_lsm_h%rad_sw_dif,          &
     2054                                               surf_usm_h%rad_sw_dif,          &
     2055                                               surf_def_v(0)%rad_sw_dif,       &
     2056                                               surf_lsm_v(0)%rad_sw_dif,       &
     2057                                               surf_usm_v(0)%rad_sw_dif,       &
     2058                                               surf_def_v(1)%rad_sw_dif,       &
     2059                                               surf_lsm_v(1)%rad_sw_dif,       &
     2060                                               surf_usm_v(1)%rad_sw_dif,       &
     2061                                               surf_def_v(2)%rad_sw_dif,       &
     2062                                               surf_lsm_v(2)%rad_sw_dif,       &
     2063                                               surf_usm_v(2)%rad_sw_dif,       &
     2064                                               surf_def_v(3)%rad_sw_dif,       &
     2065                                               surf_lsm_v(3)%rad_sw_dif,       &
     2066                                               surf_usm_v(3)%rad_sw_dif )
     2067               ELSE
     2068!
     2069!--               Output of averaged data
     2070                  surfaces%var_out(:) = surfaces%var_av(:,n_out) /             &
     2071                                        REAL( average_count_surf, KIND=wp )
     2072                  surfaces%var_av(:,n_out) = 0.0_wp
     2073                                                       
     2074               ENDIF
     2075
     2076            CASE ( 'rad_sw_ref' )
     2077!
     2078!--            Output of instantaneous data
     2079               IF ( av == 0 )  THEN
     2080                  CALL surface_output_collect( surf_def_h(0)%rad_sw_ref,       &
     2081                                               surf_def_h(1)%rad_sw_ref,       &
     2082                                               surf_lsm_h%rad_sw_ref,          &
     2083                                               surf_usm_h%rad_sw_ref,          &
     2084                                               surf_def_v(0)%rad_sw_ref,       &
     2085                                               surf_lsm_v(0)%rad_sw_ref,       &
     2086                                               surf_usm_v(0)%rad_sw_ref,       &
     2087                                               surf_def_v(1)%rad_sw_ref,       &
     2088                                               surf_lsm_v(1)%rad_sw_ref,       &
     2089                                               surf_usm_v(1)%rad_sw_ref,       &
     2090                                               surf_def_v(2)%rad_sw_ref,       &
     2091                                               surf_lsm_v(2)%rad_sw_ref,       &
     2092                                               surf_usm_v(2)%rad_sw_ref,       &
     2093                                               surf_def_v(3)%rad_sw_ref,       &
     2094                                               surf_lsm_v(3)%rad_sw_ref,       &
     2095                                               surf_usm_v(3)%rad_sw_ref )
     2096               ELSE
     2097!
     2098!--               Output of averaged data
     2099                  surfaces%var_out(:) = surfaces%var_av(:,n_out) /             &
     2100                                        REAL( average_count_surf, KIND=wp )
     2101                  surfaces%var_av(:,n_out) = 0.0_wp
     2102                                                       
     2103               ENDIF
     2104
     2105            CASE ( 'rad_sw_res' )
     2106!
     2107!--            Output of instantaneous data
     2108               IF ( av == 0 )  THEN
     2109                  CALL surface_output_collect( surf_def_h(0)%rad_sw_res,       &
     2110                                               surf_def_h(1)%rad_sw_res,       &
     2111                                               surf_lsm_h%rad_sw_res,          &
     2112                                               surf_usm_h%rad_sw_res,          &
     2113                                               surf_def_v(0)%rad_sw_res,       &
     2114                                               surf_lsm_v(0)%rad_sw_res,       &
     2115                                               surf_usm_v(0)%rad_sw_res,       &
     2116                                               surf_def_v(1)%rad_sw_res,       &
     2117                                               surf_lsm_v(1)%rad_sw_res,       &
     2118                                               surf_usm_v(1)%rad_sw_res,       &
     2119                                               surf_def_v(2)%rad_sw_res,       &
     2120                                               surf_lsm_v(2)%rad_sw_res,       &
     2121                                               surf_usm_v(2)%rad_sw_res,       &
     2122                                               surf_def_v(3)%rad_sw_res,       &
     2123                                               surf_lsm_v(3)%rad_sw_res,       &
     2124                                               surf_usm_v(3)%rad_sw_res )
     2125               ELSE
     2126!
     2127!--               Output of averaged data
     2128                  surfaces%var_out(:) = surfaces%var_av(:,n_out) /             &
     2129                                        REAL( average_count_surf, KIND=wp )
     2130                  surfaces%var_av(:,n_out) = 0.0_wp
     2131                                                       
     2132               ENDIF
     2133
     2134            CASE ( 'rad_lw_dif' )
     2135!
     2136!--            Output of instantaneous data
     2137               IF ( av == 0 )  THEN
     2138                  CALL surface_output_collect( surf_def_h(0)%rad_lw_dif,       &
     2139                                               surf_def_h(1)%rad_lw_dif,       &
     2140                                               surf_lsm_h%rad_lw_dif,          &
     2141                                               surf_usm_h%rad_lw_dif,          &
     2142                                               surf_def_v(0)%rad_lw_dif,       &
     2143                                               surf_lsm_v(0)%rad_lw_dif,       &
     2144                                               surf_usm_v(0)%rad_lw_dif,       &
     2145                                               surf_def_v(1)%rad_lw_dif,       &
     2146                                               surf_lsm_v(1)%rad_lw_dif,       &
     2147                                               surf_usm_v(1)%rad_lw_dif,       &
     2148                                               surf_def_v(2)%rad_lw_dif,       &
     2149                                               surf_lsm_v(2)%rad_lw_dif,       &
     2150                                               surf_usm_v(2)%rad_lw_dif,       &
     2151                                               surf_def_v(3)%rad_lw_dif,       &
     2152                                               surf_lsm_v(3)%rad_lw_dif,       &
     2153                                               surf_usm_v(3)%rad_lw_dif )
     2154               ELSE
     2155!
     2156!--               Output of averaged data
     2157                  surfaces%var_out(:) = surfaces%var_av(:,n_out) /             &
     2158                                        REAL( average_count_surf, KIND=wp )
     2159                  surfaces%var_av(:,n_out) = 0.0_wp
     2160                                                       
     2161               ENDIF
     2162
     2163            CASE ( 'rad_lw_ref' )
     2164!
     2165!--            Output of instantaneous data
     2166               IF ( av == 0 )  THEN
     2167                  CALL surface_output_collect( surf_def_h(0)%rad_lw_ref,       &
     2168                                               surf_def_h(1)%rad_lw_ref,       &
     2169                                               surf_lsm_h%rad_lw_ref,          &
     2170                                               surf_usm_h%rad_lw_ref,          &
     2171                                               surf_def_v(0)%rad_lw_ref,       &
     2172                                               surf_lsm_v(0)%rad_lw_ref,       &
     2173                                               surf_usm_v(0)%rad_lw_ref,       &
     2174                                               surf_def_v(1)%rad_lw_ref,       &
     2175                                               surf_lsm_v(1)%rad_lw_ref,       &
     2176                                               surf_usm_v(1)%rad_lw_ref,       &
     2177                                               surf_def_v(2)%rad_lw_ref,       &
     2178                                               surf_lsm_v(2)%rad_lw_ref,       &
     2179                                               surf_usm_v(2)%rad_lw_ref,       &
     2180                                               surf_def_v(3)%rad_lw_ref,       &
     2181                                               surf_lsm_v(3)%rad_lw_ref,       &
     2182                                               surf_usm_v(3)%rad_lw_ref )
     2183               ELSE
     2184!
     2185!--               Output of averaged data
     2186                  surfaces%var_out(:) = surfaces%var_av(:,n_out) /             &
     2187                                        REAL( average_count_surf, KIND=wp )
     2188                  surfaces%var_av(:,n_out) = 0.0_wp
     2189                                                       
     2190               ENDIF
     2191
     2192            CASE ( 'rad_lw_res' )
     2193!
     2194!--            Output of instantaneous data
     2195               IF ( av == 0 )  THEN
     2196                  CALL surface_output_collect( surf_def_h(0)%rad_lw_res,       &
     2197                                               surf_def_h(1)%rad_lw_res,       &
     2198                                               surf_lsm_h%rad_lw_res,          &
     2199                                               surf_usm_h%rad_lw_res,          &
     2200                                               surf_def_v(0)%rad_lw_res,       &
     2201                                               surf_lsm_v(0)%rad_lw_res,       &
     2202                                               surf_usm_v(0)%rad_lw_res,       &
     2203                                               surf_def_v(1)%rad_lw_res,       &
     2204                                               surf_lsm_v(1)%rad_lw_res,       &
     2205                                               surf_usm_v(1)%rad_lw_res,       &
     2206                                               surf_def_v(2)%rad_lw_res,       &
     2207                                               surf_lsm_v(2)%rad_lw_res,       &
     2208                                               surf_usm_v(2)%rad_lw_res,       &
     2209                                               surf_def_v(3)%rad_lw_res,       &
     2210                                               surf_lsm_v(3)%rad_lw_res,       &
     2211                                               surf_usm_v(3)%rad_lw_res )
    20052212               ELSE
    20062213!
     
    27532960                                           surf_usm_v(3)%r_s, n_out )
    27542961
     2962
     2963            CASE ( 'rad_sw_dir' )
     2964               CALL surface_output_sum_up( surf_def_h(0)%rad_sw_dir,           &
     2965                                           surf_def_h(1)%rad_sw_dir,           &
     2966                                           surf_lsm_h%rad_sw_dir,              &
     2967                                           surf_usm_h%rad_sw_dir,              &
     2968                                           surf_def_v(0)%rad_sw_dir,           &
     2969                                           surf_lsm_v(0)%rad_sw_dir,           &
     2970                                           surf_usm_v(0)%rad_sw_dir,           &
     2971                                           surf_def_v(1)%rad_sw_dir,           &
     2972                                           surf_lsm_v(1)%rad_sw_dir,           &
     2973                                           surf_usm_v(1)%rad_sw_dir,           &
     2974                                           surf_def_v(2)%rad_sw_dir,           &
     2975                                           surf_lsm_v(2)%rad_sw_dir,           &
     2976                                           surf_usm_v(2)%rad_sw_dir,           &
     2977                                           surf_def_v(3)%rad_sw_dir,           &
     2978                                           surf_lsm_v(3)%rad_sw_dir,           &
     2979                                           surf_usm_v(3)%rad_sw_dir, n_out )
     2980            CASE ( 'rad_sw_dif' )
     2981               CALL surface_output_sum_up( surf_def_h(0)%rad_sw_dif,           &
     2982                                           surf_def_h(1)%rad_sw_dif,           &
     2983                                           surf_lsm_h%rad_sw_dif,              &
     2984                                           surf_usm_h%rad_sw_dif,              &
     2985                                           surf_def_v(0)%rad_sw_dif,           &
     2986                                           surf_lsm_v(0)%rad_sw_dif,           &
     2987                                           surf_usm_v(0)%rad_sw_dif,           &
     2988                                           surf_def_v(1)%rad_sw_dif,           &
     2989                                           surf_lsm_v(1)%rad_sw_dif,           &
     2990                                           surf_usm_v(1)%rad_sw_dif,           &
     2991                                           surf_def_v(2)%rad_sw_dif,           &
     2992                                           surf_lsm_v(2)%rad_sw_dif,           &
     2993                                           surf_usm_v(2)%rad_sw_dif,           &
     2994                                           surf_def_v(3)%rad_sw_dif,           &
     2995                                           surf_lsm_v(3)%rad_sw_dif,           &
     2996                                           surf_usm_v(3)%rad_sw_dif, n_out )
     2997
     2998            CASE ( 'rad_sw_ref' )
     2999               CALL surface_output_sum_up( surf_def_h(0)%rad_sw_ref,           &
     3000                                           surf_def_h(1)%rad_sw_ref,           &
     3001                                           surf_lsm_h%rad_sw_ref,              &
     3002                                           surf_usm_h%rad_sw_ref,              &
     3003                                           surf_def_v(0)%rad_sw_ref,           &
     3004                                           surf_lsm_v(0)%rad_sw_ref,           &
     3005                                           surf_usm_v(0)%rad_sw_ref,           &
     3006                                           surf_def_v(1)%rad_sw_ref,           &
     3007                                           surf_lsm_v(1)%rad_sw_ref,           &
     3008                                           surf_usm_v(1)%rad_sw_ref,           &
     3009                                           surf_def_v(2)%rad_sw_ref,           &
     3010                                           surf_lsm_v(2)%rad_sw_ref,           &
     3011                                           surf_usm_v(2)%rad_sw_ref,           &
     3012                                           surf_def_v(3)%rad_sw_ref,           &
     3013                                           surf_lsm_v(3)%rad_sw_ref,           &
     3014                                           surf_usm_v(3)%rad_sw_ref, n_out )
     3015               
     3016            CASE ( 'rad_sw_res' )
     3017               CALL surface_output_sum_up( surf_def_h(0)%rad_sw_res,           &
     3018                                           surf_def_h(1)%rad_sw_res,           &
     3019                                           surf_lsm_h%rad_sw_res,              &
     3020                                           surf_usm_h%rad_sw_res,              &
     3021                                           surf_def_v(0)%rad_sw_res,           &
     3022                                           surf_lsm_v(0)%rad_sw_res,           &
     3023                                           surf_usm_v(0)%rad_sw_res,           &
     3024                                           surf_def_v(1)%rad_sw_res,           &
     3025                                           surf_lsm_v(1)%rad_sw_res,           &
     3026                                           surf_usm_v(1)%rad_sw_res,           &
     3027                                           surf_def_v(2)%rad_sw_res,           &
     3028                                           surf_lsm_v(2)%rad_sw_res,           &
     3029                                           surf_usm_v(2)%rad_sw_res,           &
     3030                                           surf_def_v(3)%rad_sw_res,           &
     3031                                           surf_lsm_v(3)%rad_sw_res,           &
     3032                                           surf_usm_v(3)%rad_sw_res, n_out )
     3033
     3034            CASE ( 'rad_lw_dif' )
     3035               CALL surface_output_sum_up( surf_def_h(0)%rad_lw_dif,           &
     3036                                           surf_def_h(1)%rad_lw_dif,           &
     3037                                           surf_lsm_h%rad_lw_dif,              &
     3038                                           surf_usm_h%rad_lw_dif,              &
     3039                                           surf_def_v(0)%rad_lw_dif,           &
     3040                                           surf_lsm_v(0)%rad_lw_dif,           &
     3041                                           surf_usm_v(0)%rad_lw_dif,           &
     3042                                           surf_def_v(1)%rad_lw_dif,           &
     3043                                           surf_lsm_v(1)%rad_lw_dif,           &
     3044                                           surf_usm_v(1)%rad_lw_dif,           &
     3045                                           surf_def_v(2)%rad_lw_dif,           &
     3046                                           surf_lsm_v(2)%rad_lw_dif,           &
     3047                                           surf_usm_v(2)%rad_lw_dif,           &
     3048                                           surf_def_v(3)%rad_lw_dif,           &
     3049                                           surf_lsm_v(3)%rad_lw_dif,           &
     3050                                           surf_usm_v(3)%rad_lw_dif, n_out )
     3051
     3052            CASE ( 'rad_lw_ref' )
     3053               CALL surface_output_sum_up( surf_def_h(0)%rad_lw_ref,           &
     3054                                           surf_def_h(1)%rad_lw_ref,           &
     3055                                           surf_lsm_h%rad_lw_ref,              &
     3056                                           surf_usm_h%rad_lw_ref,              &
     3057                                           surf_def_v(0)%rad_lw_ref,           &
     3058                                           surf_lsm_v(0)%rad_lw_ref,           &
     3059                                           surf_usm_v(0)%rad_lw_ref,           &
     3060                                           surf_def_v(1)%rad_lw_ref,           &
     3061                                           surf_lsm_v(1)%rad_lw_ref,           &
     3062                                           surf_usm_v(1)%rad_lw_ref,           &
     3063                                           surf_def_v(2)%rad_lw_ref,           &
     3064                                           surf_lsm_v(2)%rad_lw_ref,           &
     3065                                           surf_usm_v(2)%rad_lw_ref,           &
     3066                                           surf_def_v(3)%rad_lw_ref,           &
     3067                                           surf_lsm_v(3)%rad_lw_ref,           &
     3068                                           surf_usm_v(3)%rad_lw_ref, n_out )
     3069
     3070            CASE ( 'rad_lw_res' )
     3071               CALL surface_output_sum_up( surf_def_h(0)%rad_lw_res,           &
     3072                                           surf_def_h(1)%rad_lw_res,           &
     3073                                           surf_lsm_h%rad_lw_res,              &
     3074                                           surf_usm_h%rad_lw_res,              &
     3075                                           surf_def_v(0)%rad_lw_res,           &
     3076                                           surf_lsm_v(0)%rad_lw_res,           &
     3077                                           surf_usm_v(0)%rad_lw_res,           &
     3078                                           surf_def_v(1)%rad_lw_res,           &
     3079                                           surf_lsm_v(1)%rad_lw_res,           &
     3080                                           surf_usm_v(1)%rad_lw_res,           &
     3081                                           surf_def_v(2)%rad_lw_res,           &
     3082                                           surf_lsm_v(2)%rad_lw_res,           &
     3083                                           surf_usm_v(2)%rad_lw_res,           &
     3084                                           surf_def_v(3)%rad_lw_res,           &
     3085                                           surf_lsm_v(3)%rad_lw_res,           &
     3086                                           surf_usm_v(3)%rad_lw_res, n_out )
     3087
    27553088         END SELECT
    27563089      ENDDO
     
    33113644            CASE ( 'rad_net' )
    33123645
    3313             CASE ( 'rad_lw_in', 'rad_lw_out', 'rad_sw_in', 'rad_sw_out' )
     3646            CASE ( 'rad_lw_in', 'rad_lw_out', 'rad_lw_dif', 'rad_lw_ref',     &
     3647                   'rad_lw_res' )
     3648
     3649            CASE ( 'rad_sw_in', 'rad_sw_out', 'rad_sw_dif', 'rad_sw_ref',     &
     3650                   'rad_sw_res', 'rad_sw_dir' )
    33143651
    33153652            CASE ( 'ghf' )
Note: See TracChangeset for help on using the changeset viewer.