1 |
! |
module aeropt_m |
2 |
! $Header: /home/cvsroot/LMDZ4/libf/phylmd/aeropt.F,v 1.1.1.1 2004/05/19 12:53:09 lmdzadmin Exp $ |
|
3 |
! |
IMPLICIT none |
4 |
SUBROUTINE aeropt(pplay, paprs, t_seri, msulfate, RHcl, |
|
5 |
. tau_ae, piz_ae, cg_ae, ai ) |
contains |
6 |
c |
|
7 |
use dimens_m |
SUBROUTINE aeropt(pplay, paprs, t_seri, msulfate, RHcl, tau_ae, piz_ae, & |
8 |
use dimphy |
cg_ae, ai) |
9 |
use SUPHEC_M |
|
10 |
IMPLICIT none |
! From LMDZ4/libf/phylmd/aeropt.F, v 1.1.1.1 2004/05/19 12:53:09 |
11 |
c |
|
12 |
c |
! Author: Olivier Boucher |
13 |
c |
! Calculate aerosol optical properties. |
14 |
c |
|
15 |
c Arguments: |
USE dimphy, ONLY: klev, klon |
16 |
c |
USE suphec_m, ONLY: rd, rg |
17 |
REAL, intent(in):: paprs(klon,klev+1) |
|
18 |
REAL, intent(in):: pplay(klon,klev), t_seri(klon,klev) |
REAL, intent(in):: pplay(klon, klev), paprs(klon, klev + 1) |
19 |
REAL msulfate(klon,klev) ! masse sulfate ug SO4/m3 [ug/m^3] |
REAL, intent(in):: t_seri(klon, klev) |
20 |
REAL RHcl(klon,klev) ! humidite relative ciel clair |
|
21 |
REAL tau_ae(klon,klev,2) ! epaisseur optique aerosol |
REAL, intent(in):: msulfate(klon, klev) |
22 |
REAL piz_ae(klon,klev,2) ! single scattering albedo aerosol |
! masse sulfate ug SO4 / m3 (ug / m^3) |
23 |
REAL cg_ae(klon,klev,2) ! asymmetry parameter aerosol |
|
24 |
REAL ai(klon) ! POLDER aerosol index |
REAL, intent(in):: RHcl(klon, klev) ! humidité relative ciel clair |
25 |
c |
|
26 |
c Local |
REAL, intent(out):: tau_ae(klon, klev, 2) ! épaisseur optique aérosols |
27 |
c |
REAL, intent(out):: piz_ae(klon, klev, 2) ! single scattering albedo aerosol |
28 |
INTEGER i, k, inu |
REAL, intent(out):: cg_ae(klon, klev, 2) ! asymmetry parameter aerosol |
29 |
INTEGER RH_num, nbre_RH |
REAL, intent(out):: ai(klon) ! POLDER aerosol index |
30 |
PARAMETER (nbre_RH=12) |
|
31 |
REAL RH_tab(nbre_RH) |
! Local: |
32 |
REAL RH_MAX, DELTA, rh |
|
33 |
PARAMETER (RH_MAX=95.) |
INTEGER i, k, inu |
34 |
DATA RH_tab/0.,10.,20.,30.,40.,50.,60.,70.,80.,85.,90.,95./ |
INTEGER RH_num |
35 |
REAL zrho, zdz |
INTEGER, PARAMETER:: nbre_RH = 12 |
36 |
REAL taue670(klon) ! epaisseur optique aerosol absorption 550 nm |
|
37 |
REAL taue865(klon) ! epaisseur optique aerosol extinction 865 nm |
REAL:: RH_tab(nbre_RH) = (/0., 10., 20., 30., 40., 50., 60., 70., 80., & |
38 |
REAL alpha_aer_sulfate(nbre_RH,5) !--unit m2/g SO4 |
85., 90., 95./) |
39 |
REAL alphasulfate |
|
40 |
c |
REAL DELTA, rh |
41 |
c Proprietes optiques |
REAL, PARAMETER:: RH_MAX = 95. |
42 |
c |
REAL zrho, zdz |
43 |
REAL alpha_aer(nbre_RH,2) !--unit m2/g SO4 |
REAL taue670(klon) ! épaisseur optique aerosol absorption 550 nm |
44 |
REAL cg_aer(nbre_RH,2) |
REAL taue865(klon) ! épaisseur optique aerosol extinction 865 nm |
45 |
DATA alpha_aer/.500130E+01, .500130E+01, .500130E+01, |
REAL alpha_aer_sulfate(nbre_RH, 5) ! unit m2 / g SO4 |
46 |
. .500130E+01, .500130E+01, .616710E+01, |
REAL alphasulfate |
47 |
. .826850E+01, .107687E+02, .136976E+02, |
|
48 |
. .162972E+02, .211690E+02, .354833E+02, |
! Propriétés optiques |
49 |
. .139460E+01, .139460E+01, .139460E+01, |
|
50 |
. .139460E+01, .139460E+01, .173910E+01, |
REAL alpha_aer(nbre_RH, 2) ! unit m2 / g SO4 |
51 |
. .244380E+01, .332320E+01, .440120E+01, |
REAL cg_aer(nbre_RH, 2) |
52 |
. .539570E+01, .734580E+01, .136038E+02 / |
DATA alpha_aer/.500130E+01, .500130E+01, .500130E+01, & |
53 |
DATA cg_aer/.619800E+00, .619800E+00, .619800E+00, |
.500130E+01, .500130E+01, .616710E+01, & |
54 |
. .619800E+00, .619800E+00, .662700E+00, |
.826850E+01, .107687E+02, .136976E+02, & |
55 |
. .682100E+00, .698500E+00, .712500E+00, |
.162972E+02, .211690E+02, .354833E+02, & |
56 |
. .721800E+00, .734600E+00, .755800E+00, |
.139460E+01, .139460E+01, .139460E+01, & |
57 |
. .545600E+00, .545600E+00, .545600E+00, |
.139460E+01, .139460E+01, .173910E+01, & |
58 |
. .545600E+00, .545600E+00, .583700E+00, |
.244380E+01, .332320E+01, .440120E+01, & |
59 |
. .607100E+00, .627700E+00, .645800E+00, |
.539570E+01, .734580E+01, .136038E+02 / |
60 |
. .658400E+00, .676500E+00, .708500E+00 / |
DATA cg_aer/.619800E+00, .619800E+00, .619800E+00, & |
61 |
DATA alpha_aer_sulfate/ |
.619800E+00, .619800E+00, .662700E+00, & |
62 |
. 4.910,4.910,4.910,4.910,6.547,7.373, |
.682100E+00, .698500E+00, .712500E+00, & |
63 |
. 8.373,9.788,12.167,14.256,17.924,28.433, |
.721800E+00, .734600E+00, .755800E+00, & |
64 |
. 1.453,1.453,1.453,1.453,2.003,2.321, |
.545600E+00, .545600E+00, .545600E+00, & |
65 |
. 2.711,3.282,4.287,5.210,6.914,12.305, |
.545600E+00, .545600E+00, .583700E+00, & |
66 |
. 4.308,4.308,4.308,4.308,5.753,6.521, |
.607100E+00, .627700E+00, .645800E+00, & |
67 |
. 7.449,8.772,11.014,12.999,16.518,26.772, |
.658400E+00, .676500E+00, .708500E+00 / |
68 |
. 3.265,3.265,3.265,3.265,4.388,5.016, |
DATA alpha_aer_sulfate/ & |
69 |
. 5.775,6.868,8.745,10.429,13.457,22.538, |
4.910, 4.910, 4.910, 4.910, 6.547, 7.373, & |
70 |
. 2.116,2.116,2.116,2.116,2.882,3.330, |
8.373, 9.788, 12.167, 14.256, 17.924, 28.433, & |
71 |
. 3.876,4.670,6.059,7.327,9.650,16.883/ |
1.453, 1.453, 1.453, 1.453, 2.003, 2.321, & |
72 |
c |
2.711, 3.282, 4.287, 5.210, 6.914, 12.305, & |
73 |
DO i=1, klon |
4.308, 4.308, 4.308, 4.308, 5.753, 6.521, & |
74 |
taue670(i)=0.0 |
7.449, 8.772, 11.014, 12.999, 16.518, 26.772, & |
75 |
taue865(i)=0.0 |
3.265, 3.265, 3.265, 3.265, 4.388, 5.016, & |
76 |
ENDDO |
5.775, 6.868, 8.745, 10.429, 13.457, 22.538, & |
77 |
c |
2.116, 2.116, 2.116, 2.116, 2.882, 3.330, & |
78 |
DO k=1, klev |
3.876, 4.670, 6.059, 7.327, 9.650, 16.883/ |
79 |
DO i=1, klon |
|
80 |
if (t_seri(i,k).eq.0) write (*,*) 'aeropt T ',i,k,t_seri(i,k) |
!---------------------------------------------------------------------- |
81 |
if (pplay(i,k).eq.0) write (*,*) 'aeropt p ',i,k,pplay(i,k) |
|
82 |
zrho=pplay(i,k)/t_seri(i,k)/RD ! kg/m3 |
taue670 = 0. |
83 |
zdz=(paprs(i,k)-paprs(i,k+1))/zrho/RG ! m |
taue865 = 0. |
84 |
rh=MIN(RHcl(i,k)*100.,RH_MAX) |
|
85 |
RH_num = INT( rh/10. + 1.) |
DO k = 1, klev |
86 |
IF (rh.LT.0.) STOP 'aeropt: RH < 0 not possible' |
DO i = 1, klon |
87 |
IF (rh.gt.85.) RH_num=10 |
if (t_seri(i, k).eq.0) write (*, *) 'aeropt T ', i, k, t_seri(i, k) |
88 |
IF (rh.gt.90.) RH_num=11 |
if (pplay(i, k).eq.0) write (*, *) 'aeropt p ', i, k, pplay(i, k) |
89 |
DELTA=(rh-RH_tab(RH_num))/(RH_tab(RH_num+1)-RH_tab(RH_num)) |
zrho = pplay(i, k) / t_seri(i, k) / RD ! kg / m3 |
90 |
c |
zdz = (paprs(i, k) - paprs(i, k + 1)) / zrho / RG ! m |
91 |
inu=1 |
rh = MIN(RHcl(i, k) * 100., RH_MAX) |
92 |
tau_ae(i,k,inu)=alpha_aer(RH_num,inu) + |
RH_num = INT(rh / 10. + 1.) |
93 |
. DELTA*(alpha_aer(RH_num+1,inu)-alpha_aer(RH_num,inu)) |
IF (rh < 0.) then |
94 |
tau_ae(i,k,inu)=tau_ae(i,k,inu)*msulfate(i,k)*zdz*1.e-6 |
print *, 'aeropt: RH < 0 not possible' |
95 |
piz_ae(i,k,inu)=1.0 |
STOP 1 |
96 |
cg_ae(i,k,inu)=cg_aer(RH_num,inu) + |
end IF |
97 |
. DELTA*(cg_aer(RH_num+1,inu)-cg_aer(RH_num,inu)) |
IF (rh > 85.) RH_num = 10 |
98 |
c |
IF (rh > 90.) RH_num = 11 |
99 |
inu=2 |
DELTA = (rh - RH_tab(RH_num)) / (RH_tab(RH_num + 1) - RH_tab(RH_num)) |
100 |
tau_ae(i,k,inu)=alpha_aer(RH_num,inu) + |
|
101 |
. DELTA*(alpha_aer(RH_num+1,inu)-alpha_aer(RH_num,inu)) |
do inu = 1, 2 |
102 |
tau_ae(i,k,inu)=tau_ae(i,k,inu)*msulfate(i,k)*zdz*1.e-6 |
tau_ae(i, k, inu) = alpha_aer(RH_num, inu) + DELTA & |
103 |
piz_ae(i,k,inu)=1.0 |
* (alpha_aer(RH_num + 1, inu) - alpha_aer(RH_num, inu)) |
104 |
cg_ae(i,k,inu)=cg_aer(RH_num,inu) + |
tau_ae(i, k, inu) = tau_ae(i, k, inu) * msulfate(i, k) * zdz * 1e-6 |
105 |
. DELTA*(cg_aer(RH_num+1,inu)-cg_aer(RH_num,inu)) |
piz_ae(i, k, inu) = 1. |
106 |
cjq |
cg_ae(i, k, inu) = cg_aer(RH_num, inu) & |
107 |
cjq for aerosol index |
+ DELTA * (cg_aer(RH_num + 1, inu) - cg_aer(RH_num, inu)) |
108 |
c |
end do |
109 |
alphasulfate=alpha_aer_sulfate(RH_num,4) + |
|
110 |
. DELTA*(alpha_aer_sulfate(RH_num+1,4)- |
alphasulfate = alpha_aer_sulfate(RH_num, 4) + DELTA & |
111 |
. alpha_aer_sulfate(RH_num,4)) !--m2/g |
* (alpha_aer_sulfate(RH_num + 1, 4) & |
112 |
c |
- alpha_aer_sulfate(RH_num, 4)) ! m2 / g |
113 |
taue670(i)=taue670(i)+ |
|
114 |
. alphasulfate*msulfate(i,k)*zdz*1.e-6 |
taue670(i) = taue670(i) + alphasulfate * msulfate(i, k) * zdz * 1e-6 |
115 |
c |
|
116 |
alphasulfate=alpha_aer_sulfate(RH_num,5) + |
alphasulfate = alpha_aer_sulfate(RH_num, 5) + DELTA & |
117 |
. DELTA*(alpha_aer_sulfate(RH_num+1,5)- |
* (alpha_aer_sulfate(RH_num + 1, 5) & |
118 |
. alpha_aer_sulfate(RH_num,5)) !--m2/g |
- alpha_aer_sulfate(RH_num, 5)) ! m2 / g |
119 |
c |
|
120 |
taue865(i)=taue865(i)+ |
taue865(i) = taue865(i) + alphasulfate * msulfate(i, k) * zdz * 1e-6 |
121 |
. alphasulfate*msulfate(i,k)*zdz*1.e-6 |
ENDDO |
122 |
|
ENDDO |
123 |
ENDDO |
|
124 |
ENDDO |
DO i = 1, klon |
125 |
c |
ai(i) = (- log(MAX(taue670(i), 0.0001) / MAX(taue865(i), 0.0001)) & |
126 |
DO i=1, klon |
/ log(670. / 865.)) * taue865(i) |
127 |
ai(i)=(-log(MAX(taue670(i),0.0001)/ |
ENDDO |
128 |
. MAX(taue865(i),0.0001))/log(670./865.)) * |
|
129 |
. taue865(i) |
END SUBROUTINE aeropt |
130 |
ENDDO |
|
131 |
c |
end module aeropt_m |
|
RETURN |
|
|
END |
|