6 pdel, m_allaer, delt, &
7 rhcl, ai, flag_aerosol, &
55 REAL,
DIMENSION(klon,klev),
INTENT(in) :: pdel
56 REAL,
INTENT(in) :: delt
57 REAL,
DIMENSION(klon,klev,naero_tot),
INTENT(in) :: m_allaer
58 REAL,
DIMENSION(klon,klev),
INTENT(in) :: RHcl
59 INTEGER,
INTENT(in) :: flag_aerosol
60 REAL,
DIMENSION(klon,klev),
INTENT(in) :: pplay
61 REAL,
DIMENSION(klon,klev),
INTENT(in) :: t_seri
65 REAL,
DIMENSION(klon),
INTENT(out) :: ai
66 REAL,
DIMENSION(klon,nwave,naero_tot),
INTENT(out) :: tausum
67 REAL,
DIMENSION(klon,klev,nwave,naero_tot),
INTENT(out) :: tau
72 INTEGER,
PARAMETER :: las =
nwave
75 INTEGER :: i, k, m, aerindex
76 INTEGER :: spsol, spinsol, la
78 INTEGER,
PARAMETER :: la443 = 1
79 INTEGER,
PARAMETER :: la550 = 2
80 INTEGER,
PARAMETER :: la670 = 3
81 INTEGER,
PARAMETER :: la765 = 4
82 INTEGER,
PARAMETER :: la865 = 5
83 INTEGER,
PARAMETER :: nbre_RH=12
84 INTEGER,
PARAMETER :: naero_soluble=7
86 INTEGER,
PARAMETER :: naero_insoluble=3
90 REAL,
PARAMETER :: RH_tab(nbre_rh)=(/0.,10.,20.,30.,40.,50.,60.,70.,80.,85.,90.,95./)
91 REAL,
PARAMETER :: RH_MAX=95.
94 REAL :: od670aer(
klon)
97 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: aerosol_name
98 INTEGER :: nb_aer, itau
104 REAL :: alpha_aers_5wv(nbre_rh,las,naero_soluble)
106 REAL :: alpha_aeri_5wv(las,naero_insoluble)
108 REAL,
DIMENSION(klon,klev,naero_tot) :: mass_temp
113 REAL :: fact_RH(nbre_rh)
121 DATA alpha_aers_5wv/ &
123 7.930,7.930,7.930,7.930,7.930,7.930, &
124 7.930,7.930,10.893,12.618,14.550,16.613, &
125 7.658,7.658,7.658,7.658,7.658,7.658, &
126 7.658,7.658,10.351,11.879,13.642,15.510, &
127 7.195,7.195,7.195,7.195,7.195,7.195, &
128 7.195,7.195,9.551,10.847,12.381,13.994, &
129 6.736,6.736,6.736,6.736,6.736,6.736, &
130 6.736,6.736,8.818,9.938,11.283,12.687, &
131 6.277,6.277,6.277,6.277,6.277,6.277, &
132 6.277,6.277,8.123,9.094,10.275,11.501, &
134 6.676,6.676,6.676,6.676,6.710,6.934, &
135 7.141,7.569,8.034,8.529,9.456,10.511, &
136 5.109,5.109,5.109,5.109,5.189,5.535, &
137 5.960,6.852,8.008,9.712,12.897,19.676, &
138 3.718,3.718,3.718,3.718,3.779,4.042, &
139 4.364,5.052,5.956,7.314,9.896,15.688, &
140 2.849,2.849,2.849,2.849,2.897,3.107, &
141 3.365,3.916,4.649,5.760,7.900,12.863, &
142 2.229,2.229,2.229,2.229,2.268,2.437, &
143 2.645,3.095,3.692,4.608,6.391,10.633, &
145 5.751,6.215,6.690,7.024,7.599,8.195, &
146 9.156,10.355,12.660,14.823,18.908,24.508, &
147 4.320,4.675,5.052,5.375,5.787,6.274, &
148 7.066,8.083,10.088,12.003,15.697,21.133, &
149 3.079,3.351,3.639,3.886,4.205,4.584, &
150 5.206,6.019,7.648,9.234,12.391,17.220, &
151 2.336,2.552,2.781,2.979,3.236,3.540, &
152 4.046,4.711,6.056,7.388,10.093,14.313, &
153 1.777,1.949,2.134,2.292,2.503,2.751, &
154 3.166,3.712,4.828,5.949,8.264,11.922, &
156 5.751,6.215,6.690,7.024,7.599,8.195, &
157 9.156,10.355,12.660,14.823,18.908,24.508, &
158 4.320,4.675,5.052,5.375,5.787,6.274, &
159 7.066,8.083,10.088,12.003,15.697,21.133, &
160 3.079,3.351,3.639,3.886,4.205,4.584, &
161 5.206,6.019,7.648,9.234,12.391,17.220, &
162 2.336,2.552,2.781,2.979,3.236,3.540, &
163 4.046,4.711,6.056,7.388,10.093,14.313, &
164 1.777,1.949,2.134,2.292,2.503,2.751, &
165 3.166,3.712,4.828,5.949,8.264,11.922, &
167 0.218, 0.272, 0.293, 0.316, 0.343, 0.380, &
168 0.429, 0.501, 0.636, 0.755, 0.967, 1.495, &
169 0.221, 0.275, 0.297, 0.320, 0.348, 0.383, &
170 0.432, 0.509, 0.640, 0.759, 0.972, 1.510, &
171 0.224, 0.279, 0.301, 0.324, 0.352, 0.388, &
172 0.438, 0.514, 0.647, 0.768, 0.985, 1.514, &
173 0.227, 0.282, 0.303, 0.327, 0.356, 0.392, &
174 0.441, 0.518, 0.652, 0.770, 0.987, 1.529, &
175 0.230, 0.285, 0.306, 0.330, 0.359, 0.396, &
176 0.446, 0.522, 0.656, 0.777, 0.993, 1.539, &
178 0.578, 0.706, 0.756, 0.809, 0.876, 0.964, &
179 1.081, 1.256, 1.577, 1.858, 2.366, 3.613, &
180 0.598, 0.725, 0.779, 0.833, 0.898, 0.990, &
181 1.109, 1.290, 1.609, 1.889, 2.398, 3.682, &
182 0.619, 0.750, 0.802, 0.857, 0.927, 1.022, &
183 1.141, 1.328, 1.648, 1.939, 2.455, 3.729, &
184 0.633, 0.767, 0.820, 0.879, 0.948, 1.044, &
185 1.167, 1.353, 1.683, 1.969, 2.491, 3.785, &
186 0.648, 0.785, 0.838, 0.896, 0.967, 1.066, &
187 1.192, 1.381, 1.714, 2.006, 2.531, 3.836, &
189 4.432, 5.899, 6.505, 7.166, 7.964, 7.962, &
190 9.232,11.257,14.979,18.337,24.223,37.811, &
191 3.298, 4.569, 5.110, 5.709, 6.446, 6.268, &
192 7.396, 9.246,12.787,16.113,22.197,37.136, &
193 2.340, 3.358, 3.803, 4.303, 4.928, 4.696, &
194 5.629, 7.198,10.308,13.342,19.120,34.296, &
195 1.789, 2.626, 2.999, 3.422, 3.955, 3.730, &
196 4.519, 5.864, 8.593,11.319,16.653,31.331, &
197 1.359, 2.037, 2.343, 2.693, 3.139, 2.940, &
198 3.596, 4.729, 7.076, 9.469,14.266,28.043 /
200 DATA alpha_aeri_5wv/ &
202 0.759, 0.770, 0.775, 0.775, 0.772, &
204 11.536,10.033, 8.422, 7.234, 6.270, &
206 5.042, 3.101, 1.890, 1.294, 0.934/
214 zrho=pplay(i,k)/t_seri(i,k)/rd
215 dh(i,k)=pdel(i,k)/(
rg*zrho)
217 mass_temp(i,k,:) = m_allaer(i,k,:) / zrho / 1.e+9
218 zdp1(i,k)=pdel(i,k)/(
rg*delt)
222 IF (flag_aerosol .EQ. 1)
THEN
224 ALLOCATE (aerosol_name(nb_aer))
227 ELSEIF (flag_aerosol .EQ. 2)
THEN
229 ALLOCATE (aerosol_name(nb_aer))
232 ELSEIF (flag_aerosol .EQ. 3)
THEN
234 ALLOCATE (aerosol_name(nb_aer))
237 ELSEIF (flag_aerosol .EQ. 4)
THEN
239 ALLOCATE (aerosol_name(nb_aer))
243 ELSEIF (flag_aerosol .EQ. 5)
THEN
245 ALLOCATE (aerosol_name(nb_aer))
247 ELSEIF (flag_aerosol .EQ. 6)
THEN
249 ALLOCATE (aerosol_name(nb_aer))
276 fact_rh(n)=1./(rh_tab(n+1)-rh_tab(n))
283 rh(i,k)=min(rhcl(i,k)*100.,rh_max)
284 rh_num(i,k) = int( rh(i,k)/10. + 1.)
285 IF (rh(i,k).GT.85.) rh_num(i,k)=10
286 IF (rh(i,k).GT.90.) rh_num(i,k)=11
287 delta(i,k)=(rh(i,k)-rh_tab(rh_num(i,k)))*fact_rh(rh_num(i,k))
333 used_tau(spsol)=.
true.
335 used_tau(naero_soluble+spinsol)=.
true.
338 aerindex=aerosol_name(m)
346 tau_ae5wv_int = alpha_aers_5wv(rh_num(i,k),la,spsol)+delta(i,k)* &
347 (alpha_aers_5wv(rh_num(i,k)+1,la,spsol) - &
348 alpha_aers_5wv(rh_num(i,k),la,spsol))
349 tau(i,k,la,aerindex) = mass_temp(i,k,aerindex)*1000.*zdp1(i,k)* &
350 tau_ae5wv_int*delt*fac
351 tausum(i,la,aerindex)=tausum(i,la,aerindex)+tau(i,k,la,aerindex)
359 tau_ae5wv_int = alpha_aeri_5wv(la,spinsol)
360 tau(i,k,la,aerindex) = mass_temp(i,k,aerindex)*1000.*zdp1(i,k)* &
361 tau_ae5wv_int*delt*fac
362 tausum(i,la,aerindex)= tausum(i,la,aerindex)+tau(i,k,la,aerindex)
372 IF (.NOT.used_tau(m)) tau(:,:,:,m)=0.
385 od670aer(i)=od670aer(i)+tausum(i,la670,m)
406 ai(i)=-log(max(od670aer(i),1.e-8)/max(
od865aer(i),1.e-8))/log(670./865.)
413 DEALLOCATE(aerosol_name)
integer, parameter id_asssm_phy
integer, parameter id_aipomm_phy
integer, parameter id_aspomm_phy
real, dimension(:), allocatable, save od550lt1aer
real, dimension(:,:), allocatable, save ec550aer
integer, parameter id_csssm_phy
real, dimension(:), allocatable, save od865aer
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
integer, parameter id_asbcm_phy
integer, parameter id_aibcm_phy
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL pplay
integer, parameter id_asso4m_phy
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
real, dimension(:), allocatable, save od550aer
subroutine aeropt_5wv_rrtm(pdel, m_allaer, delt, RHcl, ai, flag_aerosol, pplay, t_seri, tausum, tau)
integer, parameter id_ssssm_phy
integer, parameter naero_tot
integer, parameter id_csso4m_phy
integer, parameter id_cidustm_phy