4 SUBROUTINE aeropt(pplay, paprs, t_seri, msulfate, rhcl, tau_ae, piz_ae, &
16 REAL,
INTENT (IN) :: paprs(
klon,
klev+1)
18 REAL,
INTENT (IN) :: msulfate(
klon,
klev)
19 REAL,
INTENT (IN) :: rhcl(
klon,
klev)
20 REAL,
INTENT (OUT) :: tau_ae(
klon,
klev, 2)
21 REAL,
INTENT (OUT) :: piz_ae(
klon,
klev, 2)
22 REAL,
INTENT (OUT) :: cg_ae(
klon,
klev, 2)
23 REAL,
INTENT (OUT) :: ai(
klon)
28 INTEGER rh_num, nbre_rh
31 REAL rh_max, delta, rh
33 DATA rh_tab/0., 10., 20., 30., 40., 50., 60., 70., 80., 85., 90., 95./
37 REAL alpha_aer_sulfate(nbre_rh, 5)
40 CHARACTER (LEN=20) :: modname =
'aeropt'
41 CHARACTER (LEN=80) :: abort_message
46 REAL alpha_aer(nbre_rh, 2)
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, &
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
76 zdz = (paprs(i,k)-paprs(i,k+1))/zrho/
rg
77 rh = min(rhcl(i,k)*100., rh_max)
78 rh_num = int(rh/10.+1.)
80 abort_message =
'aeropt: RH < 0 not possible'
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))
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)- &
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)- &
105 alphasulfate = alpha_aer_sulfate(rh_num, 4) + &
106 delta*(alpha_aer_sulfate(rh_num+1,4)-alpha_aer_sulfate(rh_num,4))
108 taue670(i) = taue670(i) + alphasulfate*msulfate(i, k)*zdz*1.e-6
110 alphasulfate = alpha_aer_sulfate(rh_num, 5) + &
111 delta*(alpha_aer_sulfate(rh_num+1,5)-alpha_aer_sulfate(rh_num,5))
113 taue865(i) = taue865(i) + alphasulfate*msulfate(i, k)*zdz*1.e-6
119 ai(i) = (-log(max(taue670(i),0.0001)/max(taue865(i), &
120 0.0001))/log(670./865.))*taue865(i)
!$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)
subroutine abort_physic(modname, message, ierr)