source: LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/splaeropt_lw_rrtm.f90

Last change on this file was 5137, checked in by abarral, 8 weeks ago

Put gradsdef.h, tracstoke.h, clesphys.h into modules

File size: 2.8 KB
Line 
1! splaeropt_lw_rrtm.F90 2014-05-13 C. Kleinschmitt
2!                      2016-05-03 O. Boucher
3
4! This routine feeds aerosol LW properties to RRTM
5! we only consider absorption (not scattering)
6
7SUBROUTINE SPLAEROPT_LW_RRTM(ok_alw, zdm, tr_seri)
8
9  USE dimphy
10  USE aero_mod
11  USE infotrac_phy, ONLY: nqtot, nbtr, tracers
12  USE phys_state_var_mod, ONLY: tau_aero_lw_rrtm
13  USE lmdz_yoerad, ONLY: NLW
14  USE lmdz_abort_physic, ONLY: abort_physic
15  USE lmdz_clesphys
16
17  IMPLICIT NONE
18
19  ! Input arguments:
20
21  LOGICAL, INTENT(IN) :: ok_alw
22  REAL, DIMENSION(klon, klev), INTENT(IN) :: zdm
23  REAL, DIMENSION(klon, klev, nbtr), INTENT(IN) :: tr_seri
24
25  ! Local arguments :
26
27  INTEGER, PARAMETER :: naero_soluble = 2    ! 1- accumulation soluble; 2- coarse soluble
28  INTEGER, PARAMETER :: naero_insoluble = 2  ! 1- coarse dust; 2- supercoarse dust
29  INTEGER, PARAMETER :: naero = naero_soluble + naero_insoluble
30
31  INTEGER inu, itr, iq, spinsol
32  CHARACTER*20 modname
33
34  !--absorption coefficient for coarse and super-coarse DUST
35  REAL :: alpha_abs_CIDUST_16bands(nbands_lw_rrtm, naero_insoluble)   !--unit m2/g
36  DATA alpha_abs_CIDUST_16bands /                         &
37          ! Dust CO insoluble
38          0.001, 0.003, 0.005, 0.006, 0.011, 0.031, 0.157, 0.102, &
39          0.017, 0.056, 0.032, 0.008, 0.010, 0.011, 0.013, 0.016, &
40          ! Dust SC insoluble
41          0.002, 0.004, 0.007, 0.010, 0.018, 0.043, 0.099, 0.071, &
42          0.021, 0.056, 0.033, 0.011, 0.013, 0.014, 0.016, 0.018 /
43
44  modname = 'splaeropt_lw_rrtm'
45
46  IF (NLW/=nbands_lw_rrtm) THEN
47    CALL abort_physic(modname, 'Erreur NLW doit etre egal a 16 pour cette routine', 1)
48  ENDIF
49
50  IF (ok_alw) THEN
51
52    !--initialisation
53    tau_aero_lw_rrtm = 0.0
54
55    itr = 0
56    DO iq = 1, nqtot
57      IF(.NOT.tracers(iq)%isInPhysics) CYCLE
58      itr = itr + 1
59      SELECT CASE(tracers(iq)%name)
60      CASE('PREC', 'FINE', 'COSS'); CYCLE                  !--precursor or fine/coarde accumulation mode
61      CASE('CODU'); spinsol = 1                            !--coarse mode dust
62      CASE('SCDU'); spinsol = 2                            !--super coarse mode dust
63      CASE DEFAULT; CALL abort_physic(modname, 'I cannot do aerosol optics for ' // tracers(iq)%name, 1)
64      END SELECT
65
66      DO inu = 1, NLW
67
68        !--total aerosol
69        tau_aero_lw_rrtm(:, :, 2, inu) = tau_aero_lw_rrtm(:, :, 2, inu) + tr_seri(:, :, itr) * zdm(:, :) * alpha_abs_CIDUST_16bands(inu, spinsol)
70        !--no aerosol at all
71        tau_aero_lw_rrtm(:, :, 1, inu) = tau_aero_lw_rrtm(:, :, 1, inu) + 0.0
72
73      ENDDO
74
75    ENDDO
76
77    !--avoid very small values
78    tau_aero_lw_rrtm = MAX(tau_aero_lw_rrtm, 1.e-15)
79
80  ELSE
81    !--default value
82    tau_aero_lw_rrtm = 1.e-15
83  ENDIF
84
85END SUBROUTINE SPLAEROPT_LW_RRTM
Note: See TracBrowser for help on using the repository browser.