source: LMDZ6/trunk/libf/phylmd/ecrad/radiation_ice_optics_fu.F90 @ 4441

Last change on this file since 4441 was 3908, checked in by idelkadi, 4 years ago

Online implementation of the radiative transfer code ECRAD in the LMDZ model.

  • Inclusion of the ecrad directory containing the sources of the ECRAD code
    • interface routine : radiation_scheme.F90
  • Adaptation of compilation scripts :
    • compilation under CPP key CPP_ECRAD
    • compilation with option "-rad ecard" or "-ecard true"
    • The "-rad old/rtm/ecran" build option will need to replace the "-rrtm true" and "-ecrad true" options in the future.
  • Runing LMDZ simulations with ecrad, you need :
    • logical key iflag_rrtm = 2 in physiq.def
    • namelist_ecrad (DefLists?)
    • the directory "data" containing the configuration files is temporarily placed in ../libfphylmd/ecrad/
  • Compilation and execution are tested in the 1D case. The repository under svn would allow to continue the implementation work: tests, verification of the results, ...
File size: 4.7 KB
Line 
1! radiation_ice_optics_fu.F90 - Fu's scheme for ice optical properties
2!
3! (C) Copyright 2014- 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! Modifications
16!   2020-08-10  R. Hogan  Bounded re to be <= 100um and g to be < 1.0
17
18module radiation_ice_optics_fu
19
20  use parkind1, only : jprb
21
22  implicit none
23  public
24
25  ! The number of ice coefficients depends on the parameterization
26  integer, parameter :: NIceOpticsCoeffsFuSW  = 10
27  integer, parameter :: NIceOpticsCoeffsFuLW  = 11
28
29  ! Limits based on the range of validity of the parameterizations
30  real(jprb), parameter :: MaxAsymmetryFactor = 1.0_jprb - 10.0_jprb*epsilon(1.0_jprb)
31  real(jprb), parameter :: MaxEffectiveRadius = 100.0e-6_jprb ! metres
32
33contains
34
35  !---------------------------------------------------------------------
36  ! Compute shortwave ice-particle scattering properties using Fu
37  ! (1996) parameterization.  The asymmetry factor in band 14 goes
38  ! larger than one for re > 100.8 um, so we cap re at 100 um.
39  ! Asymmetry factor is capped at just less than 1 because if it is
40  ! exactly 1 then delta-Eddington scaling leads to a zero scattering
41  ! optical depth and then division by zero.
42  subroutine calc_ice_optics_fu_sw(nb, coeff, ice_wp, &
43       &  re, od, scat_od, g)
44
45    !use yomhook,  only : lhook, dr_hook
46
47    ! Number of bands
48    integer, intent(in)  :: nb
49    ! Coefficients read from a data file
50    real(jprb), intent(in) :: coeff(:,:)
51    ! Ice water path (kg m-2)
52    real(jprb), intent(in) :: ice_wp
53    ! Effective radius (m)
54    real(jprb), intent(in) :: re
55    ! Total optical depth, scattering optical depth and asymmetry factor
56    real(jprb), intent(out) :: od(nb), scat_od(nb), g(nb)
57
58    ! Fu's effective diameter (microns) and its inverse
59    real(jprb) :: de_um, inv_de_um
60    ! Ice water path in g m-2
61    real (jprb) :: iwp_gm_2
62
63    !real(jprb)  :: hook_handle
64
65    !if (lhook) call dr_hook('radiation_ice_optics:calc_ice_optics_fu_sw',0,hook_handle)
66
67    ! Convert to effective diameter using the relationship in the IFS
68    de_um     = min(re, MaxEffectiveRadius) * (1.0e6_jprb / 0.64952_jprb)
69    inv_de_um = 1.0_jprb / de_um
70    iwp_gm_2  = ice_wp * 1000.0_jprb
71
72    od = iwp_gm_2 * (coeff(1:nb,1) + coeff(1:nb,2) * inv_de_um)
73    scat_od = od * (1.0_jprb - (coeff(1:nb,3) + de_um*(coeff(1:nb,4) &
74         &  + de_um*(coeff(1:nb,5) + de_um*coeff(1:nb,6)))))
75    g = min(coeff(1:nb,7) + de_um*(coeff(1:nb,8) &
76         &  + de_um*(coeff(1:nb,9) + de_um*coeff(1:nb,10))), &
77         &  MaxAsymmetryFactor)
78
79    !if (lhook) call dr_hook('radiation_ice_optics:calc_ice_optics_fu_sw',1,hook_handle)
80
81  end subroutine calc_ice_optics_fu_sw
82
83
84  !---------------------------------------------------------------------
85  ! Compute longwave ice-particle scattering properties using Fu et
86  ! al. (1998) parameterization
87  subroutine calc_ice_optics_fu_lw(nb, coeff, ice_wp, &
88       &  re, od, scat_od, g)
89
90    !use yomhook,  only : lhook, dr_hook
91
92    ! Number of bands
93    integer, intent(in)  :: nb
94    ! Coefficients read from a data file
95    real(jprb), intent(in) :: coeff(:,:)
96    ! Ice water path (kg m-2)
97    real(jprb), intent(in) :: ice_wp
98    ! Effective radius (m)
99    real(jprb), intent(in) :: re
100    ! Total optical depth, scattering optical depth and asymmetry factor
101    real(jprb), intent(out) :: od(nb), scat_od(nb), g(nb)
102
103    ! Fu's effective diameter (microns) and its inverse
104    real(jprb) :: de_um, inv_de_um
105    ! Ice water path in g m-2
106    real (jprb) :: iwp_gm_2
107
108    !real(jprb)  :: hook_handle
109
110    !if (lhook) call dr_hook('radiation_ice_optics:calc_ice_optics_fu_lw',0,hook_handle)
111
112    ! Convert to effective diameter using the relationship in the IFS
113    de_um = min(re, MaxEffectiveRadius) * (1.0e6_jprb / 0.64952_jprb)
114
115    inv_de_um = 1.0_jprb / de_um
116    iwp_gm_2  = ice_wp * 1000.0_jprb
117
118    od = iwp_gm_2 * (coeff(1:nb,1) + inv_de_um*(coeff(1:nb,2) &
119         &  + inv_de_um*coeff(1:nb,3)))
120    scat_od = od - iwp_gm_2*inv_de_um*(coeff(1:nb,4) + de_um*(coeff(1:nb,5) &
121         &  + de_um*(coeff(1:nb,6) + de_um*coeff(1:nb,7))))
122    g = min(coeff(1:nb,8) + de_um*(coeff(1:nb,9) &
123         &  + de_um*(coeff(1:nb,10) + de_um*coeff(1:nb,11))), &
124         &  MaxAsymmetryFactor)
125
126    !if (lhook) call dr_hook('radiation_ice_optics:calc_ice_optics_fu_lw',1,hook_handle)
127
128  end subroutine calc_ice_optics_fu_lw
129
130end module radiation_ice_optics_fu
Note: See TracBrowser for help on using the repository browser.