source: LMDZ5/branches/LMDZ5_SPLA/libf/phylmd/aeropt_spl.F @ 2232

Last change on this file since 2232 was 2217, checked in by jescribano, 10 years ago

Bugs corrections. Included a correction/tunning factor for the Chimere-dust emissions, Constant of MB95 equal to 2.61 as in MB95. No spurious increase of u* before horizontal flux calculations in the dust emission scheme. Values of AG00 binding energies fixed as the original AG00 divided by 3 as is Sow et al 2011 ACPD.

File size: 11.2 KB
Line 
1      SUBROUTINE aeropt_spl(zdz, tr_seri, RHcl,
2     .              id_prec, id_fine, id_coss, id_codu, id_scdu,
3     .              ok_chimeredust,
4     .                      ztaue550,ztaue670,ztaue865,
5     .                      taue550_tr2,taue670_tr2,taue865_tr2,
6     .                      taue550_ss,taue670_ss,taue865_ss,
7     .                      taue550_dust,taue670_dust,taue865_dust,
8     .             taue550_dustsco,taue670_dustsco,taue865_dustsco)
9c
10      USE dimphy
11      USE infotrac
12      IMPLICIT none
13c
14#include "chem.h"
15#include "dimensions.h"
16c #include "dimphy.h"
17#include "YOMCST.h"
18c
19c Arguments:
20c
21c======================== INPUT ==================================     
22      REAL zdz(klon,klev)
23      REAL tr_seri(klon,klev,nbtr) ! masse of tracer
24      REAL RHcl(klon,klev)     ! humidite relativen ciel clair
25      INTEGER  id_prec, id_fine, id_coss, id_codu, id_scdu
26      LOGICAL ok_chimeredust
27c============================== OUTPUT =================================
28      REAL ztaue550(klon) ! epaisseur optique aerosol 550 nm
29      REAL ztaue670(klon) ! epaisseur optique aerosol 670 nm
30      REAL ztaue865(klon) ! epaisseur optique aerosol 865 nm
31      REAL taue550_tr2(klon) ! epaisseur optique aerosol 550 nm, diagnostic
32      REAL taue670_tr2(klon) ! epaisseur optique aerosol 670 nm, diagnostic
33      REAL taue865_tr2(klon) ! epaisseur optique aerosol 865 nm, diagnostic
34      REAL taue550_ss(klon) ! epaisseur optique aerosol 550 nm, diagnostic
35      REAL taue670_ss(klon) ! epaisseur optique aerosol 670 nm, diagnostic
36      REAL taue865_ss(klon) ! epaisseur optique aerosol 865 nm, diagnostic
37      REAL taue550_dust(klon) ! epaisseur optique aerosol 550 nm, diagnostic
38      REAL taue670_dust(klon) ! epaisseur optique aerosol 670 nm, diagnostic
39      REAL taue865_dust(klon) ! epaisseur optique aerosol 865 nm, diagnostic
40      REAL taue550_dustsco(klon) ! epaisseur optique aerosol 550 nm, diagnostic
41      REAL taue670_dustsco(klon) ! epaisseur optique aerosol 670 nm, diagnostic
42      REAL taue865_dustsco(klon) ! epaisseur optique aerosol 865 nm, diagnostic
43c===================== LOCAL VARIABLES ===========================     
44      INTEGER nb_lambda,nbre_RH
45      PARAMETER (nb_lambda=3,nbre_RH=12)
46      INTEGER i, k, RH_num
47      REAL rh, RH_MAX, DELTA, RH_tab(nbre_RH)
48      PARAMETER (RH_MAX=95.)
49      INTEGER rh_int
50      PARAMETER (rh_int=12)
51      REAL auxreal
52c      REAL ss_a(nb_lambda,int,nbtr-1)
53c      DATA ss_a/72*1./
54      REAL ss_dust(nb_lambda), ss_acc550(rh_int), alpha_acc
55      REAL ss_dustsco(nb_lambda)
56      REAL ss_acc670(rh_int), ss_acc865(rh_int)
57      REAL ss_ssalt550(rh_int)
58      REAL ss_ssalt670(rh_int), ss_ssalt865(rh_int)
59      REAL burden_ss(klon)
60      DATA ss_acc550 /3.135,3.135,3.135, 3.135, 4.260, 4.807,
61     .                5.546,6.651,8.641,10.335,13.534,22.979/
62      DATA ss_acc670 /2.220,2.220,2.220, 2.220, 3.048, 3.460,
63     .                4.023,4.873,6.426, 7.761,10.322,18.079/
64      DATA ss_acc865 /1.329,1.329,1.329, 1.329, 1.855, 2.124,
65     .                2.494,3.060,4.114, 5.033, 6.831,12.457/ 
66!old4tracers      DATA ss_dust/0.564, 0.614, 0.700/ !for bin 0.5-10um
67!      DATA ss_dust/0.553117, 0.610185, 0.7053460 / !for bin 0.5-3um radius
68!      DATA ss_dustsco/0.1014, 0.102156, 0.1035538 / !for bin 3-15um radius
69!20140902      DATA ss_dust/0.5345737, 0.5878828, 0.6772957/ !for bin 0.5-3um radius
70!20140902      DATA ss_dustsco/0.1009634, 0.1018700, 0.1031178/ !for bin 3-15um radius
71!3days      DATA ss_dust/0.4564216, 0.4906738, 0.5476248/ !for bin 0.5-3um radius
72!3days      DATA ss_dustsco/0.1015022, 0.1024051, 0.1036622/ !for bin 3-15um radius
73!JE20140911      DATA ss_dust/0.5167768,0.5684330,0.6531643/ !for bin 0.5-3um radius
74!JE20140911      DATA ss_dustsco/0.1003391,0.1012288,0.1024651/ !for bin 3-15um radius
75!JE20140915      DATA ss_dust/0.3188754,0.3430106,0.3829019/ !for bin 0.5-5um radius
76!JE20140915      DATA ss_dustsco/8.0582686E-02,8.1255026E-02,8.1861295E-02/ !for bin 5-15um radius
77
78!      DATA ss_dust/0.5167768,0.5684330,0.6531643/ !for bin 0.5-3um radius
79!      DATA ss_dustsco/0.1003391,0.1012288,0.1024651/ !for bin 3-15um radius
80
81
82      DATA ss_ssalt550/0.182,0.182,0.182,0.182,0.366,0.430,
83     .                 0.484,0.551,0.648,0.724,0.847,1.218/ !for bin 0.5-20 um, fit_v2
84      DATA ss_ssalt670/0.193,0.193,0.193,0.193,0.377,0.431,
85     .                 0.496,0.587,0.693,0.784,0.925,1.257/ !for bin 0.5-20 um
86      DATA ss_ssalt865/0.188,0.188,0.188,0.188,0.384,0.443,
87     .                 0.502,0.580,0.699,0.799,0.979,1.404/ !for bin 0.5-20 um
88
89      DATA RH_tab/0.,10.,20.,30.,40.,50.,60.,70.,80.,85.,90.,95./
90c
91      IF (ok_chimeredust) THEN
92!JE20150212<< : changes in ustar in dustmod changes emission distribution
93!      ss_dust=(/0.5167768,0.5684330,0.6531643/)
94!      ss_dustsco=(/0.1003391,0.1012288,0.1024651/)
95      ss_dust=(/0.4670522, 0.5077308, 0.5745184/)
96      ss_dustsco=(/0.099858, 0.1007395, 0.1019673/)
97!JE20150212>>
98
99      ELSE
100      ss_dust=(/0.564, 0.614, 0.700/)
101      ss_dustsco=(/0.,0.,0./)
102      ENDIF
103
104      DO i=1, klon
105        ztaue550(i)=0.0
106        ztaue670(i)=0.0
107        ztaue865(i)=0.0
108        taue550_tr2(i)=0.0
109        taue670_tr2(i)=0.0
110        taue865_tr2(i)=0.0
111        taue550_ss(i)=0.0
112        taue670_ss(i)=0.0
113        taue865_ss(i)=0.0
114        taue550_dust(i)=0.0
115        taue670_dust(i)=0.0
116        taue865_dust(i)=0.0
117        taue550_dustsco(i)=0.0
118        taue670_dustsco(i)=0.0
119        taue865_dustsco(i)=0.0
120        burden_ss(i)=0.0
121      ENDDO
122
123      DO k=1, klev
124      DO i=1, klon
125c     
126      rh=MIN(RHcl(i,k)*100.,RH_MAX)
127      RH_num = INT( rh/10. + 1.)
128      IF (rh.gt.85.) RH_num=10
129      IF (rh.gt.90.) RH_num=11
130c      IF (rh.gt.40.) THEN
131c          RH_num=5   ! Added by NHL temporarily
132c          print *,'TEMPORARY CASE'
133c      ENDIF
134      DELTA=(rh-RH_tab(RH_num))/(RH_tab(RH_num+1)-RH_tab(RH_num))
135
136
137c*******************************************************************
138c                       AOD at 550 NM
139c*******************************************************************
140        alpha_acc=ss_acc550(RH_num) + DELTA*(ss_acc550(RH_num+1)-
141     .            ss_acc550(RH_num))              !--m2/g
142cnhl_test TOTAL AOD
143       auxreal=0.
144      IF(id_fine>0) auxreal=auxreal+alpha_acc*tr_seri(i,k,id_fine)
145      IF(id_coss>0) auxreal=auxreal+ss_ssalt550(RH_num)*
146     .                       tr_seri(i,k,id_coss)
147      IF(id_codu>0) auxreal=auxreal+ss_dust(1)*tr_seri(i,k,id_codu)
148      IF(id_scdu>0) auxreal=auxreal+ss_dustsco(1)*tr_seri(i,k,id_scdu)
149      ztaue550(i)=ztaue550(i)+auxreal*zdz(i,k)*1.e6
150   
151!JE20150128        ztaue550(i)=ztaue550(i)+(alpha_acc*tr_seri(i,k,id_fine)+
152!     .                 ss_ssalt550(RH_num)*tr_seri(i,k,id_coss)+
153!     .                 ss_dust(1)*tr_seri(i,k,id_codu)+
154!     .              ss_dustsco(1)*tr_seri(i,k,id_scdu)  )*zdz(i,k)*1.e6
155
156cnhl_test TOTAL AOD IS NOW AOD COARSE MODE ONLY
157cnhl_test        ztaue550(i)=ztaue550(i)+(                     
158cnhl_test     .                 ss_ssalt550(RH_num)*tr_seri(i,k,3)+
159cnhl_test     .                 ss_dust(1)*tr_seri(i,k,4))*zdz(i,k)*1.e6
160
161        IF(id_fine>0) taue550_tr2(i)=taue550_tr2(i)
162     .               + alpha_acc*tr_seri(i,k,id_fine)*zdz(i,k)*1.e6
163        IF(id_coss>0) taue550_ss(i)=taue550_ss(i)+
164     .                ss_ssalt550(RH_num)*tr_seri(i,k,id_coss)*
165     .                zdz(i,k)*1.e6
166        IF(id_codu>0) taue550_dust(i)=taue550_dust(i)+
167     .                ss_dust(1)*tr_seri(i,k,id_codu)*
168     .                zdz(i,k)*1.e6
169        IF(id_scdu>0) taue550_dustsco(i)=taue550_dustsco(i)+
170     .                ss_dustsco(1)*tr_seri(i,k,id_scdu)*
171     .                zdz(i,k)*1.e6
172!        print *,'taue550_ss = ',SUM(taue550_ss),MINVAL(taue550_ss),
173!     .                                          MAXVAL(taue550_ss)
174
175c*******************************************************************
176c                       AOD at 670 NM
177c*******************************************************************
178        alpha_acc=ss_acc670(RH_num) + DELTA*(ss_acc670(RH_num+1)-
179     .            ss_acc670(RH_num))              !--m2/g
180      auxreal=0.
181      IF(id_fine>0) auxreal=auxreal+alpha_acc*tr_seri(i,k,id_fine)
182      IF(id_coss>0) auxreal=auxreal+ss_ssalt670(RH_num)
183     .                      *tr_seri(i,k,id_coss)
184      IF(id_codu>0) auxreal=auxreal+ss_dust(2)*tr_seri(i,k,id_codu)
185      IF(id_scdu>0) auxreal=auxreal+ss_dustsco(2)*tr_seri(i,k,id_scdu)
186      ztaue670(i)=ztaue670(i)+auxreal*zdz(i,k)*1.e6
187
188!JE20150128        ztaue670(i)=ztaue670(i)+(alpha_acc*tr_seri(i,k,id_fine)+
189!     .                 ss_ssalt670(RH_num)*tr_seri(i,k,id_coss)+
190!     .                 ss_dust(2)*tr_seri(i,k,id_codu)+
191!     .               ss_dustsco(2)*tr_seri(i,k,id_scdu))*zdz(i,k)*1.e6
192
193      IF(id_fine>0)  taue670_tr2(i)=taue670_tr2(i)+
194     .                alpha_acc*tr_seri(i,k,id_fine)*
195     .                 zdz(i,k)*1.e6
196      IF(id_coss>0)  taue670_ss(i)=taue670_ss(i)+
197     .                ss_ssalt670(RH_num)*tr_seri(i,k,id_coss)*
198     .                zdz(i,k)*1.e6
199      IF(id_codu>0)  taue670_dust(i)=taue670_dust(i)
200     .                +ss_dust(2)*tr_seri(i,k,id_codu)*
201     .                zdz(i,k)*1.e6
202      IF(id_scdu>0)  taue670_dustsco(i)=taue550_dustsco(i)+
203     .                ss_dustsco(2)*tr_seri(i,k,id_scdu)*
204     .                zdz(i,k)*1.e6
205
206c*******************************************************************
207c                       AOD at 865 NM
208c*******************************************************************
209        alpha_acc=ss_acc865(RH_num) + DELTA*(ss_acc865(RH_num+1)-
210     .            ss_acc865(RH_num))              !--m2/g
211        auxreal=0.
212      IF(id_fine>0) auxreal=auxreal+alpha_acc*tr_seri(i,k,id_fine)
213      IF(id_coss>0) auxreal=auxreal
214     .                     +ss_ssalt865(RH_num)*tr_seri(i,k,id_coss)
215      IF(id_codu>0) auxreal=auxreal+ss_dust(3)*tr_seri(i,k,id_codu)
216      IF(id_scdu>0) auxreal=auxreal+ss_dustsco(3)*tr_seri(i,k,id_scdu)
217        ztaue865(i)=ztaue865(i)+auxreal*zdz(i,k)*1.e6
218!JE20150128        ztaue865(i)=ztaue865(i)+(alpha_acc*tr_seri(i,k,id_fine)+
219!     .                 ss_ssalt865(RH_num)*tr_seri(i,k,id_coss)+
220!     .                 ss_dust(3)*tr_seri(i,k,id_codu)+
221!     .               ss_dustsco(3)*tr_seri(i,k,id_scdu))*zdz(i,k)*1.e6
222      IF(id_fine>0) taue865_tr2(i)=taue865_tr2(i)
223     .                +alpha_acc*tr_seri(i,k,id_fine)*
224     .                 zdz(i,k)*1.e6
225      IF(id_coss>0) taue865_ss(i)=taue865_ss(i)+
226     .                ss_ssalt865(RH_num)*tr_seri(i,k,id_coss)*
227     .                zdz(i,k)*1.e6
228      IF(id_codu>0)  taue865_dust(i)=taue865_dust(i)
229     .                +ss_dust(3)*tr_seri(i,k,id_codu)*
230     .                zdz(i,k)*1.e6
231      IF(id_scdu>0)  taue865_dustsco(i)=taue550_dustsco(i)+
232     .                ss_dustsco(3)*tr_seri(i,k,id_scdu)*
233     .                zdz(i,k)*1.e6
234
235
236c
237      IF(id_coss>0)  burden_ss(i)=burden_ss(i)
238     .                +tr_seri(i,k,id_coss)*1.e6*1.e3*zdz(i,k)
239      ENDDO            !-loop on klev
240      ENDDO            !-loop on klon
241!      print *,'tr_seri = ',SUM(tr_seri(:,:,3)),MINVAL(tr_seri(:,:,3)),
242!     .                                          MAXVAL(tr_seri(:,:,3))
243!      print *,'taue550_ss = ',SUM(taue550_ss),MINVAL(taue550_ss),
244!     .                                        MAXVAL(taue550_ss)
245c
246      RETURN
247      END
Note: See TracBrowser for help on using the repository browser.