source: LMDZ6/trunk/libf/phylmd/ecrad/lmdz/aeropt_5wv_ecrad.F90 @ 4853

Last change on this file since 4853 was 4853, checked in by idelkadi, 2 months ago

Ecrad update in LMDZ / Implementation of Ecrad double call in LMDZ

  • version 1.6.1 (commit 210d7911380f53a788c3cad73b3cf9b4e022ef87)
  • interface routines between lmdz and ecrad grouped in a new "lmdz" directory
  • double call method redesigned so as to go through the Ecrad initialization and configuration part only once for the entire simulation
  • clean-up in the read.F routine: delete unitules arguments
  • modification of default gas model in namelist (default: ECCKD)
File size: 3.9 KB
Line 
1!aeropt_5wv_ecrad.F90 2022-09-20 A. Idelkadi et O. Boucher
2!
3     SUBROUTINE AEROPT_5WV_ECRAD(istartcol,iendcol,istartlev,iendlev, &
4                                 config,thermodynamics,aerosol)
5
6
7      USE DIMPHY
8      USE aero_mod
9      USE phys_local_var_mod, ONLY: od443aer,od550aer,od865aer
10!                                      dryod550aer,
11!                                      ec550aer,od550lt1aer,abs550aer
12!        USE phys_output_var_mod, ONLY: dryaod_diag
13!        USE YOMCST, ONLY: RD,RG
14      USE phys_local_var_mod, ONLY: rhcl
15
16      use parkind1,                      only : jprb
17      use radiation_config,              only : config_type
18      use radiation_thermodynamics,      only : thermodynamics_type
19      use radiation_aerosol,             only : aerosol_type
20      use radiation_constants,           only : AccelDueToGravity
21      use radiation_aerosol_optics_data, only : aerosol_optics_type, &
22         &  IAerosolClassUndefined,   IAerosolClassIgnored, &
23         &  IAerosolClassHydrophobic, IAerosolClassHydrophilic
24
25      IMPLICIT NONE
26
27      !---ATTENTION n_mono est a redéfinir proprement
28
29      ! Range of levels over which aerosols are present
30      integer, intent(in) :: istartlev, iendlev, istartcol,iendcol
31      type(config_type), intent(in), target :: config
32      type(thermodynamics_type),intent(in)  :: thermodynamics
33      type(aerosol_type),       intent(in)  :: aerosol
34      type(aerosol_optics_type), pointer :: ao
35
36      ! Loop indices for column, level, g point, band and aerosol type, and relative humidity
37      integer :: jcol, jlev, jtype, irh
38      ! indice wavelength in aerosol_optics_lmdz.nc
39      INTEGER, PARAMETER :: la443 = 1
40      INTEGER, PARAMETER :: la550 = 2
41!      INTEGER, PARAMETER :: la670 = 3
42!      INTEGER, PARAMETER :: la765 = 4
43      INTEGER, PARAMETER :: la865 = 5
44      real(jprb) :: factor
45      ! n_bands_sw
46      real(jprb), dimension(config%aerosol_optics%n_mono_wl) :: od_aerosol_mono, local_od_mono
47
48      !--initialization
49      od443aer = 0.0_jprb
50      od550aer = 0.0_jprb
51      od865aer = 0.0_jprb
52
53      ao => config%aerosol_optics
54
55      ! Loop over level
56     do jlev = istartlev,iendlev
57
58        ! Loop over column
59        do jcol = istartcol,iendcol
60
61          ! Compute relative humidity with respect to liquid
62          ! saturation and the index to the relative-humidity index of
63          ! hydrophilic-aerosol data
64          irh = ao%calc_rh_index(rhcl(jcol,jlev))
65
66          factor = ( thermodynamics%pressure_hl(jcol,jlev+1) &
67               &    -thermodynamics%pressure_hl(jcol,jlev  )  ) &
68               &   / AccelDueToGravity
69
70          ! Reset temporary arrays
71          od_aerosol_mono = 0.0_jprb
72
73          do jtype = 1,config%n_aerosol_types
74            ! Add the optical depth for this aerosol type to the total for all aerosols. 
75            ! Note that the following expressions are array-wise
76            if (ao%iclass(jtype) == IAerosolClassHydrophobic) then
77              local_od_mono = factor * aerosol%mixing_ratio(jcol,jlev,jtype) &
78                   &  * ao%mass_ext_mono_phobic(:,ao%itype(jtype))
79              od_aerosol_mono = od_aerosol_mono + local_od_mono
80            else if (ao%iclass(jtype) == IAerosolClassHydrophilic) then
81              ! Hydrophilic aerosols require the look-up tables to
82              ! be indexed with irh
83              local_od_mono = factor * aerosol%mixing_ratio(jcol,jlev,jtype) &
84                   &  * ao%mass_ext_mono_philic(:,irh,ao%itype(jtype))
85              od_aerosol_mono = od_aerosol_mono + local_od_mono
86            end if
87
88          end do ! Loop over aerosol type
89
90          !--ATTENTION A BIEN FAIRE CORRESPONDRE LES INDICES
91          od443aer(jcol) = od443aer(jcol) + od_aerosol_mono(la443)
92          od550aer(jcol) = od550aer(jcol) + od_aerosol_mono(la550)
93          od865aer(jcol) = od865aer(jcol) + od_aerosol_mono(la865)
94
95        end do ! Loop over column
96
97      end do ! Loop over level
98
99     END SUBROUTINE AEROPT_5WV_ECRAD
100
Note: See TracBrowser for help on using the repository browser.