source: LMDZ6/trunk/libf/phylmd/ecrad/radiation/radiation_liquid_optics_slingo.F90 @ 4773

Last change on this file since 4773 was 4773, checked in by idelkadi, 6 months ago
  • Update of Ecrad in LMDZ The same organization of the Ecrad offline version is retained in order to facilitate the updating of Ecrad in LMDZ and the comparison between online and offline results. version 1.6.1 of Ecrad (https://github.com/lguez/ecrad.git)
  • Implementation of the double call of Ecrad in LMDZ


File size: 4.0 KB
Line 
1! radiation_liquid_optics_slingo.F90 - Slingo SW & Lindner-Li LW parameterization of liquid droplet optics
2!
3! (C) Copyright 2016- ECMWF.
4!
5! This software is licensed under the terms of the Apache Licence Version 2.0
6! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
7!
8! In applying this licence, ECMWF does not waive the privileges and immunities
9! granted to it by virtue of its status as an intergovernmental organisation
10! nor does it submit to any jurisdiction.
11!
12! Author:  Robin Hogan
13! Email:   r.j.hogan@ecmwf.int
14!
15
16module radiation_liquid_optics_slingo
17
18  implicit none
19  public
20
21  integer, parameter :: NLiqOpticsCoeffsSlingoSW = 6
22  integer, parameter :: NLiqOpticsCoeffsLindnerLiLW = 13
23
24contains
25
26  !---------------------------------------------------------------------
27  ! Compute liquid-droplet scattering properties in the shortwave from
28  ! Slingo (1989). WARNING: this parameterization is known not to be
29  ! very accurate: see Nielsen et al. (GMD 2014).
30  subroutine calc_liq_optics_slingo(nb, coeff, lwp, re, od, scat_od, g)
31
32    use parkind1, only : jprb
33    !use yomhook,  only : lhook, dr_hook, jphook
34
35    ! Number of bands
36    integer, intent(in)  :: nb
37    ! Coefficients read from a data file
38    real(jprb), intent(in) :: coeff(:,:)
39    ! Liquid water path (kg m-2) and effective radius (m)
40    real(jprb), intent(in) :: lwp, re
41    ! Total optical depth, scattering optical depth and asymmetry factor
42    real(jprb), intent(out) :: od(nb), scat_od(nb), g(nb)
43
44    ! Liquid water path in g m-2
45    real(jprb) :: lwp_gm_2
46    ! Effective radius in microns, and its inverse
47    real(jprb) :: re_um, inv_re_um
48
49    !real(jphook) :: hook_handle
50
51    !if (lhook) call dr_hook('radiation_liquid_optics_slingo:calc_liq_optics_slingo',0,hook_handle)
52
53    lwp_gm_2 = lwp * 1000.0_jprb
54    ! Range of validity reported by Slingo (1989): 4.2-16.6 microns
55    re_um = min(max(4.2_jprb, re * 1.0e6_jprb), 16.6_jprb)
56    inv_re_um = 1.0_jprb / re_um
57
58    od = lwp_gm_2 * (coeff(1:nb,1) + inv_re_um*coeff(1:nb,2))
59    scat_od = od * (1.0_jprb - coeff(1:nb,3) - re_um*coeff(1:nb,4))
60    g = coeff(1:nb,5) + re_um*coeff(1:nb,6)
61
62    !if (lhook) call dr_hook('radiation_liquid_optics_slingo:calc_liq_optics_slingo',1,hook_handle)
63
64  end subroutine calc_liq_optics_slingo
65
66
67  !---------------------------------------------------------------------
68  ! Compute liquid-droplet scattering properties in the longwave from
69  ! Lindner & Li (2000)
70  subroutine calc_liq_optics_lindner_li(nb, coeff, lwp, re, od, scat_od, g)
71
72    use parkind1, only : jprb
73    use yomhook,  only : lhook, dr_hook, jphook
74
75    ! Number of bands
76    integer, intent(in)  :: nb
77    ! Coefficients read from a data file
78    real(jprb), intent(in) :: coeff(:,:)
79    ! Liquid water path (kg m-2) and effective radius (m)
80    real(jprb), intent(in) :: lwp, re
81    ! Total optical depth, scattering optical depth and asymmetry factor
82    real(jprb), intent(out) :: od(nb), scat_od(nb), g(nb)
83
84    ! Liquid water path in g m-2
85    real(jprb) :: lwp_gm_2
86    ! Effective radius in microns, and its inverse
87    real(jprb) :: re_um, inv_re_um
88
89    real(jphook) :: hook_handle
90
91    if (lhook) call dr_hook('radiation_liquid_optics_slingo:calc_liq_optics_lindner_li',0,hook_handle)
92
93    lwp_gm_2 = lwp * 1000.0_jprb
94    ! Range of validity reported by Lindner and Li (2000): 2-40 microns
95    re_um = min(max(2.0_jprb, re * 1.0e6_jprb), 40.0_jprb)
96    inv_re_um = 1.0_jprb / re_um
97
98    od = lwp_gm_2 * (coeff(1:nb,1) + re_um*coeff(1:nb,2) + inv_re_um*(coeff(1:nb,3) &
99         &  + inv_re_um*(coeff(1:nb,4) + inv_re_um*coeff(1:nb,5))))
100    scat_od = od * (1.0_jprb - (coeff(1:nb,6) + inv_re_um*coeff(1:nb,7) &
101         &                      + re_um*(coeff(1:nb,8) + re_um*coeff(1:nb,9))))
102    g = coeff(1:nb,10) + inv_re_um*coeff(1:nb,11) &
103         &  + re_um*(coeff(1:nb,12) + re_um*coeff(1:nb,13))
104
105    if (lhook) call dr_hook('radiation_liquid_optics_slingo:calc_liq_optics_lindner_li',1,hook_handle)
106
107  end subroutine calc_liq_optics_lindner_li
108
109end module radiation_liquid_optics_slingo
Note: See TracBrowser for help on using the repository browser.