1 | |
---|
2 | ! $Id: aeropt.f90 5274 2024-10-25 13:41:23Z abarral $ |
---|
3 | |
---|
4 | SUBROUTINE aeropt(pplay, paprs, t_seri, msulfate, rhcl, tau_ae, piz_ae, & |
---|
5 | cg_ae, ai) |
---|
6 | |
---|
7 | USE dimphy |
---|
8 | USE yomcst_mod_h, ONLY: RPI, RCLUM, RHPLA, RKBOL, RNAVO & |
---|
9 | , RDAY, REA, REPSM, RSIYEA, RSIDAY, ROMEGA & |
---|
10 | , R_ecc, R_peri, R_incl & |
---|
11 | , RA, RG, R1SA & |
---|
12 | , RSIGMA & |
---|
13 | , R, RMD, RMV, RD, RV, RCPD & |
---|
14 | , RMO3, RMCO2, RMC, RMCH4, RMN2O, RMCFC11, RMCFC12 & |
---|
15 | , RCPV, RCVD, RCVV, RKAPPA, RETV, eps_w & |
---|
16 | , RCW, RCS & |
---|
17 | , RLVTT, RLSTT, RLMLT, RTT, RATM & |
---|
18 | , RESTT, RALPW, RBETW, RGAMW, RALPS, RBETS, RGAMS & |
---|
19 | , RALPD, RBETD, RGAMD |
---|
20 | IMPLICIT NONE |
---|
21 | |
---|
22 | |
---|
23 | |
---|
24 | |
---|
25 | |
---|
26 | ! Arguments: |
---|
27 | |
---|
28 | REAL, INTENT (IN) :: paprs(klon, klev+1) |
---|
29 | REAL, INTENT (IN) :: pplay(klon, klev), t_seri(klon, klev) |
---|
30 | REAL, INTENT (IN) :: msulfate(klon, klev) ! masse sulfate ug SO4/m3 [ug/m^3] |
---|
31 | REAL, INTENT (IN) :: rhcl(klon, klev) ! humidite relative ciel clair |
---|
32 | REAL, INTENT (OUT) :: tau_ae(klon, klev, 2) ! epaisseur optique aerosol |
---|
33 | REAL, INTENT (OUT) :: piz_ae(klon, klev, 2) ! single scattering albedo aerosol |
---|
34 | REAL, INTENT (OUT) :: cg_ae(klon, klev, 2) ! asymmetry parameter aerosol |
---|
35 | REAL, INTENT (OUT) :: ai(klon) ! POLDER aerosol index |
---|
36 | |
---|
37 | ! Local |
---|
38 | |
---|
39 | INTEGER i, k, inu |
---|
40 | INTEGER rh_num, nbre_rh |
---|
41 | PARAMETER (nbre_rh=12) |
---|
42 | REAL rh_tab(nbre_rh) |
---|
43 | REAL rh_max, delta, rh |
---|
44 | PARAMETER (rh_max=95.) |
---|
45 | DATA rh_tab/0., 10., 20., 30., 40., 50., 60., 70., 80., 85., 90., 95./ |
---|
46 | REAL zrho, zdz |
---|
47 | REAL taue670(klon) ! epaisseur optique aerosol absorption 550 nm |
---|
48 | REAL taue865(klon) ! epaisseur optique aerosol extinction 865 nm |
---|
49 | REAL alpha_aer_sulfate(nbre_rh, 5) !--unit m2/g SO4 |
---|
50 | REAL alphasulfate |
---|
51 | |
---|
52 | CHARACTER (LEN=20) :: modname = 'aeropt' |
---|
53 | CHARACTER (LEN=80) :: abort_message |
---|
54 | |
---|
55 | |
---|
56 | ! Proprietes optiques |
---|
57 | |
---|
58 | REAL alpha_aer(nbre_rh, 2) !--unit m2/g SO4 |
---|
59 | REAL cg_aer(nbre_rh, 2) |
---|
60 | DATA alpha_aer/.500130E+01, .500130E+01, .500130E+01, .500130E+01, & |
---|
61 | .500130E+01, .616710E+01, .826850E+01, .107687E+02, .136976E+02, & |
---|
62 | .162972E+02, .211690E+02, .354833E+02, .139460E+01, .139460E+01, & |
---|
63 | .139460E+01, .139460E+01, .139460E+01, .173910E+01, .244380E+01, & |
---|
64 | .332320E+01, .440120E+01, .539570E+01, .734580E+01, .136038E+02/ |
---|
65 | DATA cg_aer/.619800E+00, .619800E+00, .619800E+00, .619800E+00, & |
---|
66 | .619800E+00, .662700E+00, .682100E+00, .698500E+00, .712500E+00, & |
---|
67 | .721800E+00, .734600E+00, .755800E+00, .545600E+00, .545600E+00, & |
---|
68 | .545600E+00, .545600E+00, .545600E+00, .583700E+00, .607100E+00, & |
---|
69 | .627700E+00, .645800E+00, .658400E+00, .676500E+00, .708500E+00/ |
---|
70 | DATA alpha_aer_sulfate/4.910, 4.910, 4.910, 4.910, 6.547, 7.373, 8.373, & |
---|
71 | 9.788, 12.167, 14.256, 17.924, 28.433, 1.453, 1.453, 1.453, 1.453, 2.003, & |
---|
72 | 2.321, 2.711, 3.282, 4.287, 5.210, 6.914, 12.305, 4.308, 4.308, 4.308, & |
---|
73 | 4.308, 5.753, 6.521, 7.449, 8.772, 11.014, 12.999, 16.518, 26.772, 3.265, & |
---|
74 | 3.265, 3.265, 3.265, 4.388, 5.016, 5.775, 6.868, 8.745, 10.429, 13.457, & |
---|
75 | 22.538, 2.116, 2.116, 2.116, 2.116, 2.882, 3.330, 3.876, 4.670, 6.059, & |
---|
76 | 7.327, 9.650, 16.883/ |
---|
77 | |
---|
78 | DO i = 1, klon |
---|
79 | taue670(i) = 0.0 |
---|
80 | taue865(i) = 0.0 |
---|
81 | END DO |
---|
82 | |
---|
83 | DO k = 1, klev |
---|
84 | DO i = 1, klon |
---|
85 | IF (t_seri(i,k)==0) WRITE (*, *) 'aeropt T ', i, k, t_seri(i, k) |
---|
86 | IF (pplay(i,k)==0) WRITE (*, *) 'aeropt p ', i, k, pplay(i, k) |
---|
87 | zrho = pplay(i, k)/t_seri(i, k)/rd ! kg/m3 |
---|
88 | zdz = (paprs(i,k)-paprs(i,k+1))/zrho/rg ! m |
---|
89 | rh = min(rhcl(i,k)*100., rh_max) |
---|
90 | rh_num = int(rh/10.+1.) |
---|
91 | IF (rh<0.) THEN |
---|
92 | abort_message = 'aeropt: RH < 0 not possible' |
---|
93 | CALL abort_physic(modname, abort_message, 1) |
---|
94 | END IF |
---|
95 | IF (rh>85.) rh_num = 10 |
---|
96 | IF (rh>90.) rh_num = 11 |
---|
97 | delta = (rh-rh_tab(rh_num))/(rh_tab(rh_num+1)-rh_tab(rh_num)) |
---|
98 | |
---|
99 | inu = 1 |
---|
100 | tau_ae(i, k, inu) = alpha_aer(rh_num, inu) + delta*(alpha_aer(rh_num+1, & |
---|
101 | inu)-alpha_aer(rh_num,inu)) |
---|
102 | tau_ae(i, k, inu) = tau_ae(i, k, inu)*msulfate(i, k)*zdz*1.E-6 |
---|
103 | piz_ae(i, k, inu) = 1.0 |
---|
104 | cg_ae(i, k, inu) = cg_aer(rh_num, inu) + delta*(cg_aer(rh_num+1,inu)- & |
---|
105 | cg_aer(rh_num,inu)) |
---|
106 | |
---|
107 | inu = 2 |
---|
108 | tau_ae(i, k, inu) = alpha_aer(rh_num, inu) + delta*(alpha_aer(rh_num+1, & |
---|
109 | inu)-alpha_aer(rh_num,inu)) |
---|
110 | tau_ae(i, k, inu) = tau_ae(i, k, inu)*msulfate(i, k)*zdz*1.E-6 |
---|
111 | piz_ae(i, k, inu) = 1.0 |
---|
112 | cg_ae(i, k, inu) = cg_aer(rh_num, inu) + delta*(cg_aer(rh_num+1,inu)- & |
---|
113 | cg_aer(rh_num,inu)) |
---|
114 | ! jq |
---|
115 | ! jq for aerosol index |
---|
116 | |
---|
117 | alphasulfate = alpha_aer_sulfate(rh_num, 4) + & |
---|
118 | delta*(alpha_aer_sulfate(rh_num+1,4)-alpha_aer_sulfate(rh_num,4)) !--m2/g |
---|
119 | |
---|
120 | taue670(i) = taue670(i) + alphasulfate*msulfate(i, k)*zdz*1.E-6 |
---|
121 | |
---|
122 | alphasulfate = alpha_aer_sulfate(rh_num, 5) + & |
---|
123 | delta*(alpha_aer_sulfate(rh_num+1,5)-alpha_aer_sulfate(rh_num,5)) !--m2/g |
---|
124 | |
---|
125 | taue865(i) = taue865(i) + alphasulfate*msulfate(i, k)*zdz*1.E-6 |
---|
126 | |
---|
127 | END DO |
---|
128 | END DO |
---|
129 | |
---|
130 | DO i = 1, klon |
---|
131 | ai(i) = (-log(max(taue670(i),0.0001)/max(taue865(i), & |
---|
132 | 0.0001))/log(670./865.))*taue865(i) |
---|
133 | END DO |
---|
134 | |
---|
135 | RETURN |
---|
136 | END SUBROUTINE aeropt |
---|