LMDZ
aeropt.F90
Go to the documentation of this file.
1 
2 ! $Id: aeropt.F90 2346 2015-08-21 15:13:46Z emillour $
3 
4 SUBROUTINE aeropt(pplay, paprs, t_seri, msulfate, rhcl, tau_ae, piz_ae, &
5  cg_ae, ai)
6 
7  USE dimphy
8  IMPLICIT NONE
9 
10 
11 
12  include "YOMCST.h"
13 
14  ! Arguments:
15 
16  REAL, INTENT (IN) :: paprs(klon, klev+1)
17  REAL, INTENT (IN) :: pplay(klon, klev), t_seri(klon, klev)
18  REAL, INTENT (IN) :: msulfate(klon, klev) ! masse sulfate ug SO4/m3 [ug/m^3]
19  REAL, INTENT (IN) :: rhcl(klon, klev) ! humidite relative ciel clair
20  REAL, INTENT (OUT) :: tau_ae(klon, klev, 2) ! epaisseur optique aerosol
21  REAL, INTENT (OUT) :: piz_ae(klon, klev, 2) ! single scattering albedo aerosol
22  REAL, INTENT (OUT) :: cg_ae(klon, klev, 2) ! asymmetry parameter aerosol
23  REAL, INTENT (OUT) :: ai(klon) ! POLDER aerosol index
24 
25  ! Local
26 
27  INTEGER i, k, inu
28  INTEGER rh_num, nbre_rh
29  parameter(nbre_rh=12)
30  REAL rh_tab(nbre_rh)
31  REAL rh_max, delta, rh
32  parameter(rh_max=95.)
33  DATA rh_tab/0., 10., 20., 30., 40., 50., 60., 70., 80., 85., 90., 95./
34  REAL zrho, zdz
35  REAL taue670(klon) ! epaisseur optique aerosol absorption 550 nm
36  REAL taue865(klon) ! epaisseur optique aerosol extinction 865 nm
37  REAL alpha_aer_sulfate(nbre_rh, 5) !--unit m2/g SO4
38  REAL alphasulfate
39 
40  CHARACTER (LEN=20) :: modname = 'aeropt'
41  CHARACTER (LEN=80) :: abort_message
42 
43 
44  ! Proprietes optiques
45 
46  REAL alpha_aer(nbre_rh, 2) !--unit m2/g SO4
47  REAL cg_aer(nbre_rh, 2)
48  DATA alpha_aer/.500130e+01, .500130e+01, .500130e+01, .500130e+01, &
49  .500130e+01, .616710e+01, .826850e+01, .107687e+02, .136976e+02, &
50  .162972e+02, .211690e+02, .354833e+02, .139460e+01, .139460e+01, &
51  .139460e+01, .139460e+01, .139460e+01, .173910e+01, .244380e+01, &
52  .332320e+01, .440120e+01, .539570e+01, .734580e+01, .136038e+02/
53  DATA cg_aer/.619800e+00, .619800e+00, .619800e+00, .619800e+00, &
54  .619800e+00, .662700e+00, .682100e+00, .698500e+00, .712500e+00, &
55  .721800e+00, .734600e+00, .755800e+00, .545600e+00, .545600e+00, &
56  .545600e+00, .545600e+00, .545600e+00, .583700e+00, .607100e+00, &
57  .627700e+00, .645800e+00, .658400e+00, .676500e+00, .708500e+00/
58  DATA alpha_aer_sulfate/4.910, 4.910, 4.910, 4.910, 6.547, 7.373, 8.373, &
59  9.788, 12.167, 14.256, 17.924, 28.433, 1.453, 1.453, 1.453, 1.453, 2.003, &
60  2.321, 2.711, 3.282, 4.287, 5.210, 6.914, 12.305, 4.308, 4.308, 4.308, &
61  4.308, 5.753, 6.521, 7.449, 8.772, 11.014, 12.999, 16.518, 26.772, 3.265, &
62  3.265, 3.265, 3.265, 4.388, 5.016, 5.775, 6.868, 8.745, 10.429, 13.457, &
63  22.538, 2.116, 2.116, 2.116, 2.116, 2.882, 3.330, 3.876, 4.670, 6.059, &
64  7.327, 9.650, 16.883/
65 
66  DO i = 1, klon
67  taue670(i) = 0.0
68  taue865(i) = 0.0
69  END DO
70 
71  DO k = 1, klev
72  DO i = 1, klon
73  IF (t_seri(i,k)==0) WRITE (*, *) 'aeropt T ', i, k, t_seri(i, k)
74  IF (pplay(i,k)==0) WRITE (*, *) 'aeropt p ', i, k, pplay(i, k)
75  zrho = pplay(i, k)/t_seri(i, k)/rd ! kg/m3
76  zdz = (paprs(i,k)-paprs(i,k+1))/zrho/rg ! m
77  rh = min(rhcl(i,k)*100., rh_max)
78  rh_num = int(rh/10.+1.)
79  IF (rh<0.) THEN
80  abort_message = 'aeropt: RH < 0 not possible'
81  CALL abort_physic(modname, abort_message, 1)
82  END IF
83  IF (rh>85.) rh_num = 10
84  IF (rh>90.) rh_num = 11
85  delta = (rh-rh_tab(rh_num))/(rh_tab(rh_num+1)-rh_tab(rh_num))
86 
87  inu = 1
88  tau_ae(i, k, inu) = alpha_aer(rh_num, inu) + delta*(alpha_aer(rh_num+1, &
89  inu)-alpha_aer(rh_num,inu))
90  tau_ae(i, k, inu) = tau_ae(i, k, inu)*msulfate(i, k)*zdz*1.e-6
91  piz_ae(i, k, inu) = 1.0
92  cg_ae(i, k, inu) = cg_aer(rh_num, inu) + delta*(cg_aer(rh_num+1,inu)- &
93  cg_aer(rh_num,inu))
94 
95  inu = 2
96  tau_ae(i, k, inu) = alpha_aer(rh_num, inu) + delta*(alpha_aer(rh_num+1, &
97  inu)-alpha_aer(rh_num,inu))
98  tau_ae(i, k, inu) = tau_ae(i, k, inu)*msulfate(i, k)*zdz*1.e-6
99  piz_ae(i, k, inu) = 1.0
100  cg_ae(i, k, inu) = cg_aer(rh_num, inu) + delta*(cg_aer(rh_num+1,inu)- &
101  cg_aer(rh_num,inu))
102  ! jq
103  ! jq for aerosol index
104 
105  alphasulfate = alpha_aer_sulfate(rh_num, 4) + &
106  delta*(alpha_aer_sulfate(rh_num+1,4)-alpha_aer_sulfate(rh_num,4)) !--m2/g
107 
108  taue670(i) = taue670(i) + alphasulfate*msulfate(i, k)*zdz*1.e-6
109 
110  alphasulfate = alpha_aer_sulfate(rh_num, 5) + &
111  delta*(alpha_aer_sulfate(rh_num+1,5)-alpha_aer_sulfate(rh_num,5)) !--m2/g
112 
113  taue865(i) = taue865(i) + alphasulfate*msulfate(i, k)*zdz*1.e-6
114 
115  END DO
116  END DO
117 
118  DO i = 1, klon
119  ai(i) = (-log(max(taue670(i),0.0001)/max(taue865(i), &
120  0.0001))/log(670./865.))*taue865(i)
121  END DO
122 
123  RETURN
124 END SUBROUTINE aeropt
integer, save klon
Definition: dimphy.F90:3
integer, save klev
Definition: dimphy.F90:7
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
subroutine aeropt(pplay, paprs, t_seri, msulfate, rhcl, tau_ae, piz_ae, cg_ae, ai)
Definition: aeropt.F90:6
subroutine abort_physic(modname, message, ierr)
Definition: abort_physic.F90:3
Definition: dimphy.F90:1
real rg
Definition: comcstphy.h:1