LMDZ
radaca.F90
Go to the documentation of this file.
1 !OPTIONS XOPT(HSFUN)
2 SUBROUTINE radaca &
3  &( kidia , kfdia , klon , ktdia , klev &
4  &, paprs , pgelam, psin , pclon, pslon , pth &
5  &, paer , pozon &
6  &)
7 
8 !***********************************************************************
9 ! CAUTION: THIS ROUTINE WORKS ONLY ON A NON-ROTATED, UNSTRETCHED GRID
10 !***********************************************************************
11 
12 !**** *RADACA - COMPUTES DISTRIBUTION OF AEROSOLS AND OZONE
13 
14 ! PURPOSE.
15 ! --------
16 
17 !** INTERFACE.
18 ! ----------
19 ! CALL *RADACA* FROM *RADINT*
20 
21 ! EXPLICIT ARGUMENTS :
22 ! --------------------
23 ! ==== INPUTS ===
24 ! ==== OUTPUTS ===
25 
26 ! IMPLICIT ARGUMENTS : NONE
27 ! --------------------
28 
29 ! METHOD.
30 ! -------
31 
32 
33 ! EXTERNALS.
34 ! ----------
35 
36 ! NONE
37 
38 ! REFERENCE.
39 ! ----------
40 
41 ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
42 ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE "I.F.S"
43 
44 ! AUTHOR.
45 ! -------
46 ! J.-J. MORCRETTE E.C.M.W.F. 91/03/15
47 
48 ! MODIFICATIONS.
49 ! --------------
50 ! J.-J. MORCRETTE E.C.M.W.F. 93/03/15 OPERATIONAL CLIMATOLOGY
51 ! JJMorcrette 98-12-21 GISS volcanic aerosol climatology
52 ! JJMorcrette 99-09 monthly climatology of tropospheric aerosols
53 
54 ! ADAPTATION TO zahir.idris.fr
55 ! ----------------------------
56 ! HGallée 04-11-17 Definition of the arguments 2 & 3 of LEGTRI
57 !-----------------------------------------------------------------------
58 
59 #include "tsmbkind.h"
60 
61 USE yomcst , ONLY : r ,rpi
62 USE yoeaerd , ONLY : cvdaes ,cvdael ,cvdaeu ,cvdaed ,&
65  &raelc ,raels ,raeuc ,raeus ,raedc ,&
66  &raeds
67 USE yoeozoc , ONLY : cozqc ,cozqs ,cozhc ,cozhs
68 USE yoerad , ONLY : lhvolca ,lnewaer
69 USE yoeaerc , ONLY : rsinct ,rsincv ,repaer ,&
70  &rtaebc ,rtaeor ,rtaesd ,rtaess ,rtaesu , &
71  &rtaevo
72 
73 
74 IMPLICIT NONE
75 
76 
77 ! DUMMY INTEGER SCALARS
78 integer_m :: kfdia
79 integer_m :: kidia
80 integer_m :: klev
81 integer_m :: klon
82 integer_m :: ktdia
83 
84 integer_m :: kcf, krint, kshift
85 
86 integer_m :: kcp__radaca
87 integer_m :: kdim_radaca
88 
89 ! -----------------------------------------------------------------
90 
91 !* 0.1 ARGUMENTS.
92 ! ----------
93 
94 real_b :: paprs(klon,klev+1), pgelam(klon), psin(klon)&
95  &, pclon(klon) , pslon(klon) , pth(klon,klev+1)
96 
97 real_b :: paer(klon,6,klev),pozon(klon,klev)
98 ! -----------------------------------------------------------------
99 
100 !* 0.2 LOCAL ARRAYS.
101 ! -------------
102 
103 integer_m :: iinla1(klon), iinla2(klon)
104 integer_m :: iinlo1(klon), iinlo2(klon)
105 
106 real_b :: zaed(klon), zael(klon), zaes(klon), zaeu(klon)
107 real_b :: zaeqdn(klon), zaeqdo(klon), zaeqln(klon), zaeqlo(klon)
108 real_b :: zaeqsn(klon), zaeqso(klon), zaequn(klon), zaequo(klon)
109 
110 real_b :: zaerbc(klon), zaeror(klon), zaersd(klon)
111 real_b :: zaerss(klon), zaersu(klon), zaervo(klon)
112 
113 real_b :: zaetrn(klon),zaetro(klon)
114 
115 real_b :: zalp(66)
116 real_b :: zdpn(klon) , zdpo(klon)
117 real_b :: zfaed(21) , zfael(21) , zfaes(21) , zfaeu(21)
118 real_b :: zfozq(11) , zfozh(11)
119 real_b :: zgrth(klon)
120 real_b :: zlon(klon) , zlonr(72) , znlo1(klon) , znlo2(klon)
121 
122 real_b :: zozh(klon) , zozq(klon)
123 real_b :: zqofn(klon) , zqofo(klon)
124 real_b :: zsilat(klon), zsinr(46)
125 
126 ! LOCAL INTEGER SCALARS
127 integer_m :: il, imm, imnc, imns, inla, inla1, inla2, inlo1, inlo2, &
128  &itotpt, jk, jl, jlr, jmm, &
129  &jnn, nlatr, nlonr, jaer, jend, jil, jjl, iprint, itot
130 
131 ! LOCAL REAL SCALARS
132 real_b :: zaetr, zcos1, zcos10, zcos2, zcos3, zcos4,&
133  &zcos5, zcos6, zcos7, zcos8, zcos9, zcphn3, &
134  &zcpho3, zdpnmo, zgridr, zlatr, zsdpn3, zsdpo3, &
135  &zsin, zsin1, zsin10, zsin2, zsin3, zsin4, &
136  &zsin5, zsin6, zsin7, zsin8, zsin9
137 real_b :: zaerbc1, zaerbc2, zaeror1, zaeror2, zaersd1, zaersd2, &
138  &zaerss1, zaerss2, zaersu1, zaersu2
139 real_b :: zdlonr
140 
141 ! ------------------------------------------------------------------
142 
143 !* 1. "NEW AEROSOL DISTRIBUTION" PARAMETERS COMPUTATIONS
144 ! --------------------------------------------------
145 
146 
147 !* 1.1 VOLCANIC AEROSOL DISTRIBUTION PARAMETERS
148 ! ----------------------------------------
149 
150 ! GISS CLIMATOLOGY
151 ! ----------------
152 
153 kcf=0
154 kshift=0
155 krint=1
156 
157 IF (lhvolca) THEN
158  nlatr=46
159  zgridr=180._jprb/(nlatr-1)
160  DO jlr=1,nlatr
161  zlatr=90._jprb-(jlr-1)*zgridr
162  zsinr(jlr)=sin(zlatr*rpi/180._jprb)
163  ENDDO
164 
165  il=kshift
166  DO jl=kidia,kfdia
167  il=il+1
168  inla=0
169  zsilat(il)=-9999._jprb
170  zsin=psin(jl)
171  DO jlr=1,nlatr-1
172  IF (zsin <= zsinr(jlr) .AND. zsin > zsinr(jlr+1)) THEN
173  inla=jlr
174  zsilat(il)=(zsin-zsinr(inla))/(zsinr(inla+1)-zsinr(inla))
175  zaervo(il)=rtaevo(inla)+zsilat(il)*(rtaevo(inla+1)-rtaevo(inla))
176  ENDIF
177  ENDDO
178  IF (zsin <= zsinr(nlatr-1) .AND. zsin >= zsinr(nlatr))THEN
179  inla=nlatr
180  zsilat(il)=(zsin-zsinr(inla-1))/(zsinr(inla)-zsinr(inla-1))
181  zaervo(il)=rtaevo(inla-1)&
182  &+zsilat(il)*(rtaevo(inla)-rtaevo(inla-1))
183  ENDIF
184  IF (inla == 0) THEN
185 ! CALL ABOR1(' Problem with lat. interpolation in radaca!')
186  stop ' Problem with lat. interpolation in radaca!'
187  ENDIF
188  ENDDO
189 
190 ! TANRE ET AL. CLIMATOLOGY
191 ! ------------------------
192 
193 ELSE
194  il = kshift
195  DO jl=kidia,kfdia
196  il = il+1
197  zaervo(il)=rcvobga
198  ENDDO
199 ENDIF
200 itotpt=il
201 
202 
203 
204 !* 1.2 TROPOSPHERIC AEROSOL DISTRIBUTION PARAMETERS
205 ! --------------------------------------------
206 
207 IF (lnewaer) THEN
208 ! print *,'LNEWAER= ',LNEWAER
209 ! print *,' inputs SINLAT LONGITUDE'
210 ! DO JL=KIDIA,KFDIA
211 ! print 9001,JL,PSIN(JL),PGELAM(JL)
212 9001 format(1x,'RADACA ',1x,i5,1x,2e15.8)
213 ! END DO
214 
215 !-- latitude
216  nlatr=46
217  zgridr=180._jprb/(nlatr-1)
218  DO jlr=1,nlatr
219  zlatr=90._jprb-(jlr-1)*zgridr
220  zsinr(jlr)=sin(zlatr*rpi/180._jprb)
221  END DO
222  nlonr=72
223  zdlonr=2._jprb*rpi/nlonr
224  DO jlr=1,nlonr
225  zlonr(jlr)=(jlr-1)*zdlonr
226  END DO
227 
228 ! print *,'Reference grid for Tegen climatology'
229 ! print 9121,(ZSINR(JLR),JLR=1,NLATR)
230 9121 format(1x,'ZSINR ',8e15.7)
231 ! print 9122,(ZLONR(JLR),JLR=1,NLONR)
232 9122 format(1x,'ZLONR ',8e15.7)
233 
234  il=kshift
235  DO jl=kidia,kfdia
236  il=il+1
237  iinla1(il)=0
238  iinla2(il)=0
239  zsilat(il)=-9999._jprb
240  zsin=psin(jl)
241  DO jlr=1,nlatr-1
242  IF (zsin <= zsinr(jlr) .AND. zsin > zsinr(jlr+1)) THEN
243  inla=jlr
244  iinla1(il)=jlr
245  iinla2(il)=jlr+1
246  zsilat(il)=(zsin-zsinr(inla))/(zsinr(inla+1)-zsinr(inla))
247  ENDIF
248  ENDDO
249  IF (zsin <= zsinr(nlatr-1) .AND. zsin >= zsinr(nlatr))THEN
250  inla=nlatr
251  iinla1(il)=nlatr-1
252  iinla2(il)=nlatr
253  zsilat(il)=(zsin-zsinr(inla-1))/(zsinr(inla)-zsinr(inla-1))
254  END IF
255  IF (inla.EQ.0) THEN
256 ! CALL ABOR1(' Problem with lat. interpolation in radaca!')
257  stop ' Problem with lat. interpolation in radaca!'
258  ENDIF
259 ! print 9123,JL,IL,PSIN(JL),INLA,ZSINR(INLA),ZSILAT(IL)
260 9123 format(1x,'Interp.Latit.',2i4,f10.7,i4,2f10.7)
261  END DO
262 
263 !-- longitude
264  il=kshift
265  DO jl=kidia,kfdia
266  il=il+1
267  iinlo1(il)=0
268  iinlo2(il)=0
269  zlon(il)=-9999.
270  DO jlr=1,71
271  IF (pgelam(jl) < zlonr(jlr+1) .AND. pgelam(jl) >= zlonr(jlr)) &
272  & THEN
273  iinlo1(il)=jlr
274  iinlo2(il)=jlr+1
275  znlo1(il)=zlonr(jlr)
276  znlo2(il)=zlonr(jlr+1)
277  END IF
278  END DO
279  IF (pgelam(jl) >= zlonr(72)) THEN
280  iinlo1(il)=72
281  iinlo2(il)= 1
282  znlo1(il)=zlonr(72)
283 ! ZNLO2(IL)=ZLONR(72)+2.*RPI
284  znlo2(il)=zlonr(72)+zdlonr
285  ENDIF
286 ! Martin control
287 ! print 9124,JL,IL,PGELAM(JL),IINLO1(IL),IINLO2(IL),ZNLO1(IL),ZNLO2(IL)
288 !9124 format(1x,'Interp.Longit0.',2I4,F10.7,2I5,2F10.7)
289  END DO
290 
291  il=kshift
292  DO jl=kidia,kfdia
293  il=il+1
294  IF (iinlo1(il).EQ.0 .OR. iinlo2(il).EQ.0) THEN
295 ! CALL ABOR1(' Problem with long. interpolation in radaca!')
296  stop ' Problem with long. interpolation in radaca!'
297  ENDIF
298  zlon(il)=(pgelam(jl)-znlo1(il))/(znlo2(il)-znlo1(il))
299  inlo1=iinlo1(il)
300  inlo2=iinlo2(il)
301  inla1=iinla1(il)
302  inla2=iinla2(il)
303 
304  zaerbc1=rtaebc(inlo1,inla1) &
305  & +zsilat(il)*(rtaebc(inlo1,inla2)-rtaebc(inlo1,inla1))
306  zaerbc2=rtaebc(inlo2,inla1) &
307  & +zsilat(il)*(rtaebc(inlo2,inla2)-rtaebc(inlo2,inla1))
308  zaerbc(il)=zaerbc1+zlon(il)*(zaerbc2-zaerbc1)
309 
310  zaeror1=rtaeor(inlo1,inla1) &
311  & +zsilat(il)*(rtaeor(inlo1,inla2)-rtaeor(inlo1,inla1))
312  zaeror2=rtaeor(inlo2,inla1) &
313  & +zsilat(il)*(rtaeor(inlo2,inla2)-rtaeor(inlo2,inla1))
314  zaeror(il)=zaeror1+zlon(il)*(zaeror2-zaeror1)
315 
316  zaersd1=rtaesd(inlo1,inla1) &
317  & +zsilat(il)*(rtaesd(inlo1,inla2)-rtaesd(inlo1,inla1))
318  zaersd2=rtaesd(inlo2,inla1) &
319  & +zsilat(il)*(rtaesd(inlo2,inla2)-rtaesd(inlo2,inla1))
320  zaersd(il)=zaersd1+zlon(il)*(zaersd2-zaersd1)
321 
322  zaerss1=rtaess(inlo1,inla1) &
323  & +zsilat(il)*(rtaess(inlo1,inla2)-rtaess(inlo1,inla1))
324  zaerss2=rtaess(inlo2,inla1) &
325  & +zsilat(il)*(rtaess(inlo2,inla2)-rtaess(inlo2,inla1))
326  zaerss(il)=zaerss1+zlon(il)*(zaerss2-zaerss1)
327 
328  zaersu1=rtaesu(inlo1,inla1) &
329  & +zsilat(il)*(rtaesu(inlo1,inla2)-rtaesu(inlo1,inla1))
330  zaersu2=rtaesu(inlo2,inla1) &
331  & +zsilat(il)*(rtaesu(inlo2,inla2)-rtaesu(inlo2,inla1))
332  zaersu(il)=zaersu1+zlon(il)*(zaersu2-zaersu1)
333 
334 ! print 9125,JL,IL,PSIN(JL),PGELAM(JL),ZSILAT(IL) &
335 ! & ,RTAESU(INLO1,INLA2),RTAESU(INLO1,INLA1),ZAERSU1 &
336 ! & ,RTAESU(INLO2,INLA2),RTAESU(INLO2,INLA1),ZAERSU2 &
337 ! & ,INLA1,INLO1,INLO2,INLA2
338 !9125 format(1x,'Interp.Longit1.',2I4,9F10.7,4I5)
339 ! print 9126,JL,IL,PSIN(JL),PGELAM(JL),ZSILAT(IL),ZLON(IL) &
340 ! & ,ZNLO1(IL),ZNLO2(IL),INLA1,INLO1,INLO2,INLA2
341 !9126 format(1x,'Interp.Longit2.',2I4,6F10.7,4I5)
342 ! print 9127,JL,IL,ZAERBC(IL),ZAEROR(IL),ZAERSD(IL),ZAERSS(IL) &
343 ! & ,ZAERSU(IL)
344 !9127 format(1x,'Interp.Longit3.',2I4,5F10.7)
345  END DO
346 END IF
347 
348 ! ------------------------------------------------------------------
349 
350 !* 2. OZONE
351 ! -----
352 
353 zsin=psin(kidia)
354 
355 !* 2.1 CALL TO LEGTRI.
356 ! ---------------
357 kcp__radaca= 6
358 kdim_radaca=66
359 !***
360 CALL legtri (zsin,kcp__radaca,kdim_radaca,zalp)
361 !***
362 
363 !* 2.2 LEGENDRE TRANSFORM FOR OZONE.
364 ! -----------------------------
365 
366 DO jmm=1,11
367  zfozq(jmm)=_zero_
368  zfozh(jmm)=_zero_
369 ENDDO
370 imm=0
371 imnc=0
372 imns=0
373 DO jmm=1,6
374  imm=imm+1
375  DO jnn=jmm,6
376  imnc=imnc+1
377  zfozq(imm)=zfozq(imm)+zalp(imnc)*cozqc(imnc)
378  zfozh(imm)=zfozh(imm)+zalp(imnc)*cozhc(imnc)
379  ENDDO
380  IF(jmm /= 1) THEN
381  imm=imm+1
382  DO jnn=jmm,6
383  imns=imns+1
384  zfozq(imm)=zfozq(imm)+zalp(imns+6)*cozqs(imns)
385  zfozh(imm)=zfozh(imm)+zalp(imns+6)*cozhs(imns)
386  ENDDO
387  ENDIF
388 ENDDO
389 
390 !* 2.3 FOURIER TRANSFORM FOR OZONE.
391 ! ----------------------------
392 
393 il=kshift
394 DO jl=kidia,kfdia
395  il=il+1
396  zcos1=pclon(jl)
397  zsin1=pslon(jl)
398  zcos2=zcos1*zcos1-zsin1*zsin1
399  zsin2=zsin1*zcos1+zcos1*zsin1
400  zcos3=zcos2*zcos1-zsin2*zsin1
401  zsin3=zsin2*zcos1+zcos2*zsin1
402  zcos4=zcos3*zcos1-zsin3*zsin1
403  zsin4=zsin3*zcos1+zcos3*zsin1
404  zcos5=zcos4*zcos1-zsin4*zsin1
405  zsin5=zsin4*zcos1+zcos4*zsin1
406  zozq(il)=&
407  &zfozq(1)+_two_*(zfozq(2)*zcos1+zfozq(3)*zsin1+zfozq(4)*zcos2 &
408  &+zfozq(5)*zsin2+zfozq(6)*zcos3+zfozq(7)*zsin3+zfozq(8)&
409  &*zcos4+zfozq(9)*zsin4+zfozq(10)*zcos5+zfozq(11)*zsin5)
410  zozh(il)=&
411  &zfozh(1)+_two_*(zfozh(2)*zcos1+zfozh(3)*zsin1+zfozh(4)*zcos2 &
412  &+zfozh(5)*zsin2+zfozh(6)*zcos3+zfozh(7)*zsin3+zfozh(8)&
413  &*zcos4+zfozh(9)*zsin4+zfozh(10)*zcos5+zfozh(11)*zsin5)
414  zozh(il)=sqrt(zozh(il))**3
415 ENDDO
416 
417 ! ------------------------------------------------------------------
418 
419 ! 3. AEROSOLS
420 ! --------
421 !***
422 ! 3.1 CALL TO LEGTRI
423 
424 kcp__radaca=11
425 kdim_radaca=66
426 !***
427 CALL legtri (zsin,kcp__radaca,kdim_radaca,zalp)
428 !***
429 
430 ! 3.2 LEGENDRE TRANSFORM FOR AEROSOLS
431 ! -------------------------------
432 
433 DO jmm=1,21
434  zfaes(jmm) = _zero_
435  zfael(jmm) = _zero_
436  zfaeu(jmm) = _zero_
437  zfaed(jmm) = _zero_
438 ENDDO
439 imm = 0
440 imnc = 0
441 imns = 0
442 DO jmm=1,11
443  imm = imm+1
444  DO jnn=jmm,11
445  imnc = imnc+1
446  zfaes(imm) = zfaes(imm)+zalp(imnc)*raesc(imnc)
447  zfael(imm) = zfael(imm)+zalp(imnc)*raelc(imnc)
448  zfaeu(imm) = zfaeu(imm)+zalp(imnc)*raeuc(imnc)
449  zfaed(imm) = zfaed(imm)+zalp(imnc)*raedc(imnc)
450  ENDDO
451  IF(jmm /= 1) THEN
452  imm = imm+1
453  DO jnn=jmm,11
454  imns = imns+1
455  zfaes(imm) = zfaes(imm)+zalp(imns+11)*raess(imns)
456  zfael(imm) = zfael(imm)+zalp(imns+11)*raels(imns)
457  zfaeu(imm) = zfaeu(imm)+zalp(imns+11)*raeus(imns)
458  zfaed(imm) = zfaed(imm)+zalp(imns+11)*raeds(imns)
459  ENDDO
460  ENDIF
461 ENDDO
462 
463 ! 3.3 FOURIER TRANSFORM FOR AEROSOLS
464 ! ------------------------------
465 
466 il = kshift
467 DO jl=kidia,kfdia
468  il = il+1
469  zcos1 = pclon(jl)
470  zsin1 = pslon(jl)
471  zcos2 = zcos1*zcos1-zsin1*zsin1
472  zsin2 = zsin1*zcos1+zcos1*zsin1
473  zcos3 = zcos2*zcos1-zsin2*zsin1
474  zsin3 = zsin2*zcos1+zcos2*zsin1
475  zcos4 = zcos3*zcos1-zsin3*zsin1
476  zsin4 = zsin3*zcos1+zcos3*zsin1
477  zcos5 = zcos4*zcos1-zsin4*zsin1
478  zsin5 = zsin4*zcos1+zcos4*zsin1
479  zcos6 = zcos5*zcos1-zsin5*zsin1
480  zsin6 = zsin5*zcos1+zcos5*zsin1
481  zcos7 = zcos6*zcos1-zsin6*zsin1
482  zsin7 = zsin6*zcos1+zcos6*zsin1
483  zcos8 = zcos7*zcos1-zsin7*zsin1
484  zsin8 = zsin7*zcos1+zcos7*zsin1
485  zcos9 = zcos8*zcos1-zsin8*zsin1
486  zsin9 = zsin8*zcos1+zcos8*zsin1
487  zcos10 = zcos9*zcos1-zsin9*zsin1
488  zsin10 = zsin9*zcos1+zcos9*zsin1
489  zaes(il) = zfaes(1) + _two_*&
490  &( zfaes(2)*zcos1 + zfaes(3)*zsin1 + zfaes(4)*zcos2 &
491  &+ zfaes(5)*zsin2 + zfaes(6)*zcos3 + zfaes(7)*zsin3 &
492  &+ zfaes(8)*zcos4 + zfaes(9)*zsin4 + zfaes(10)*zcos5 &
493  &+ zfaes(11)*zsin5 + zfaes(12)*zcos6 + zfaes(13)*zsin6 &
494  &+ zfaes(14)*zcos7 + zfaes(15)*zsin7 + zfaes(16)*zcos8 &
495  &+ zfaes(17)*zsin8 + zfaes(18)*zcos9 + zfaes(19)*zsin9 &
496  &+ zfaes(20)*zcos10+ zfaes(21)*zsin10 )
497  zael(il) = zfael(1) + _two_*&
498  &( zfael(2)*zcos1 + zfael(3)*zsin1 + zfael(4)*zcos2 &
499  &+ zfael(5)*zsin2 + zfael(6)*zcos3 + zfael(7)*zsin3 &
500  &+ zfael(8)*zcos4 + zfael(9)*zsin4 + zfael(10)*zcos5 &
501  &+ zfael(11)*zsin5 + zfael(12)*zcos6 + zfael(13)*zsin6 &
502  &+ zfael(14)*zcos7 + zfael(15)*zsin7 + zfael(16)*zcos8 &
503  &+ zfael(17)*zsin8 + zfael(18)*zcos9 + zfael(19)*zsin9 &
504  &+ zfael(20)*zcos10+ zfael(21)*zsin10 )
505  zaeu(il) = zfaeu(1) + _two_*&
506  &( zfaeu(2)*zcos1 + zfaeu(3)*zsin1 + zfaeu(4)*zcos2 &
507  &+ zfaeu(5)*zsin2 + zfaeu(6)*zcos3 + zfaeu(7)*zsin3 &
508  &+ zfaeu(8)*zcos4 + zfaeu(9)*zsin4 + zfaeu(10)*zcos5 &
509  &+ zfaeu(11)*zsin5 + zfaeu(12)*zcos6 + zfaeu(13)*zsin6 &
510  &+ zfaeu(14)*zcos7 + zfaeu(15)*zsin7 + zfaeu(16)*zcos8 &
511  &+ zfaeu(17)*zsin8 + zfaeu(18)*zcos9 + zfaeu(19)*zsin9 &
512  &+ zfaeu(20)*zcos10+ zfaeu(21)*zsin10 )
513  zaed(il) = zfaed(1) + _two_*&
514  &( zfaed(2)*zcos1 + zfaed(3)*zsin1 + zfaed(4)*zcos2 &
515  &+ zfaed(5)*zsin2 + zfaed(6)*zcos3 + zfaed(7)*zsin3 &
516  &+ zfaed(8)*zcos4 + zfaed(9)*zsin4 + zfaed(10)*zcos5 &
517  &+ zfaed(11)*zsin5 + zfaed(12)*zcos6 + zfaed(13)*zsin6 &
518  &+ zfaed(14)*zcos7 + zfaed(15)*zsin7 + zfaed(16)*zcos8 &
519  &+ zfaed(17)*zsin8 + zfaed(18)*zcos9 + zfaed(19)*zsin9 &
520  &+ zfaed(20)*zcos10+ zfaed(21)*zsin10 )
521 ENDDO
522 
523 
524 ! ------------------------------------------------------------------
525 
526 !* 4. VERTICAL DISTRIBUTION
527 !* ---------------------
528 
529 
530 il=kshift
531 DO jl=kidia,kfdia
532  il=il+1
533  zdpo(il)=paprs(jl,1)
534  zcpho3=paprs(jl,1)**3
535  zsdpo3=sqrt(zcpho3)
536  IF (lnewaer) THEN
537  zaeqso(il)= zaerss(il)*cvdaes(1)
538  zaeqlo(il)=(zaeror(il)+zaersu(il))*cvdael(1)
539  zaequo(il)= zaerbc(il)*cvdaeu(1)
540  zaeqdo(il)= zaersd(il)*cvdaed(1)
541  ELSE
542  zaeqso(il)=rcaeops*zaes(il)*cvdaes(1)
543  zaeqlo(il)=rcaeopl*zael(il)*cvdael(1)
544  zaequo(il)=rcaeopu*zaeu(il)*cvdaeu(1)
545  zaeqdo(il)=rcaeopd*zaed(il)*cvdaed(1)
546  END IF
547  zaetro(il)=_one_
548  zqofo(il)=zozq(il)*zsdpo3 / (zsdpo3 + zozh(il))
549 ENDDO
550 
551 DO jk=1,klev
552  il=kshift
553  IF (kcf == 0) THEN
554  DO jl=kidia,kfdia
555  il=il+1
556  zgrth(il)= pth(jl,jk)/pth(jl,jk+1)
557  ENDDO
558  ELSEIF (kcf == 1) THEN
559  DO jl=kidia,kfdia
560  il=il+1
561  zgrth(il)= pth(il,jk)/pth(il,jk+1)
562  ENDDO
563  ENDIF
564 
565  il=kshift
566  DO jl=kidia,kfdia
567  il=il+1
568  zdpn(il)=paprs(jl,jk+1)
569  zcphn3=paprs(jl,jk+1)**3
570  zsdpn3=sqrt(zcphn3)
571  IF (lnewaer) THEN
572  zaeqsn(il)= zaerss(il)*cvdaes(jk+1)
573  zaeqln(il)=(zaeror(il)+zaersu(il))*cvdael(jk+1)
574  zaequn(il)= zaerbc(il)*cvdaeu(jk+1)
575  zaeqdn(il)= zaersd(il)*cvdaed(jk+1)
576  ELSE
577  zaeqsn(il)=rcaeops*zaes(il)*cvdaes(jk+1)
578  zaeqln(il)=rcaeopl*zael(il)*cvdael(jk+1)
579  zaequn(il)=rcaeopu*zaeu(il)*cvdaeu(jk+1)
580  zaeqdn(il)=rcaeopd*zaed(il)*cvdaed(jk+1)
581  END IF
582 
583  IF (_half_*(paprs(jl,jk)+paprs(jl,jk+1)) < 999._jprb) THEN
584 ! for models with top above 10hPa
585  zaetrn(il)=_one_
586  zaetro(il)=_one_
587  ELSE
588  zaetrn(il)=zaetro(il)*(min(_one_, zgrth(il) ))**rctrpt
589  ENDIF
590 
591  zaetr=sqrt(zaetrn(il)*zaetro(il))
592  zqofn(il)=zozq(il)*zsdpn3/(zsdpn3+zozh(il))
593  zdpnmo =zdpn(il)-zdpo(il)
594  paer(il,1,jk)=(_one_-zaetr)*(rctrbga*zdpnmo+ zaeqln(il)-zaeqlo(il))
595  paer(il,2,jk)=(_one_-zaetr)*(zaeqsn(il)-zaeqso(il))
596  paer(il,3,jk)=(_one_-zaetr)*(zaeqdn(il)-zaeqdo(il))
597  paer(il,4,jk)=(_one_-zaetr)*(zaequn(il)-zaequo(il))
598 !old volc PAER(IL,JK,5)= ZAETR * RCVOBGA*ZDPNMO
599  paer(il,5,jk)= zaetr * zaervo(il) * zdpnmo
600  paer(il,6,jk)= zaetr * rcstbga*zdpnmo
601 !old RH dependence
602 ! AADS(IL,JK)=MAX(RCAEADM, (RCAEADK(1)*PAER(IL,1,JK)
603 ! + RCAEADK(2)*PAER(IL,2,JK)+RCAEADK(3)*PAER(IL,3,JK))/ZDPNMO)
604  pozon(il,jk)=zqofn(il)-zqofo(il)
605 !**** **************************************************
606 !**** **************************************************
607  ENDDO
608  il=kshift
609  DO jl=kidia,kfdia
610  il=il+1
611  zdpo(il)=zdpn(il)
612  zqofo(il)=zqofn(il)
613 
614  zaeqso(il)=zaeqsn(il)
615  zaeqlo(il)=zaeqln(il)
616  zaequo(il)=zaequn(il)
617  zaeqdo(il)=zaeqdn(il)
618  zaetro(il)=zaetrn(il)
619  ENDDO
620 
621 
622 !-- diagnostics in case of problem
623  DO jaer=1,6
624  il=kshift
625  DO jl=kidia,kfdia
626  il=il+1
627  paer(il,jaer,jk)=max(paer(il,jaer,jk),repaer)
628  END DO
629  itot=il
630  END DO
631 !--
632 
633 ENDDO
634 
635 ! ------------------------------------------------------------------
636 
637 RETURN
638 END SUBROUTINE radaca
real(kind=jprb) rpi
Definition: yomcst.F90:15
INTERFACE SUBROUTINE RRTM_ECRT_140GP pth
!$Id mode_top_bound COMMON comconstr r
Definition: comconst.h:7
real(kind=jprb), dimension(66) raelc
Definition: yoeaerd.F90:20
logical lhvolca
Definition: yoerad.F90:55
real(kind=jprb), dimension(66) raedc
Definition: yoeaerd.F90:24
real(kind=jprb), dimension(55) raeus
Definition: yoeaerd.F90:23
real(kind=jprb), dimension(66) raeuc
Definition: yoeaerd.F90:22
integer, save kidia
Definition: dimphy.F90:6
integer, save klon
Definition: dimphy.F90:3
real(kind=jprb), dimension(55) raess
Definition: yoeaerd.F90:19
logical lnewaer
Definition: yoerad.F90:56
integer, save klev
Definition: dimphy.F90:7
real(kind=jprb), dimension(:), allocatable cvdaes
Definition: yoeaerd.F90:13
integer, save kfdia
Definition: dimphy.F90:5
real(kind=jprb) rcvobga
Definition: yoeaerd.F90:32
Definition: yoerad.F90:1
real(kind=jprb), dimension(:), allocatable cvdael
Definition: yoeaerd.F90:14
real(kind=jprb), dimension(:), allocatable cvdaed
Definition: yoeaerd.F90:16
!$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 &zphi geo500!IM on interpole a chaque pas de temps le paprs
real(kind=jprb) rctrbga
Definition: yoeaerd.F90:31
subroutine radaca(KIDIA, KFDIA, KLON, KTDIA, KLEV, PAPRS, PGELAM, PSIN, PCLON, PSLON, PTH, PAER, POZON)
Definition: radaca.F90:7
real(kind=jprb) rcaeopd
Definition: yoeaerd.F90:30
!$Header!c c INCLUDE fxyprim h c c c Fonctions in line c c REAL fyprim REAL rj c c il faut la calculer avant d appeler ces fonctions c c c Fonctions a changer selon x(x) et y(y) choisis.c-----------------------------------------------------------------c c.....ici
real(kind=jprb), dimension(66) raesc
Definition: yoeaerd.F90:18
subroutine legtri(PSIN, KCP, KDIM, PALP)
Definition: legtri.F90:2
real(kind=jprb) rcaeopu
Definition: yoeaerd.F90:29
real(kind=jprb) rcaeopl
Definition: yoeaerd.F90:28
real(kind=jprb) rcstbga
Definition: yoeaerd.F90:33
INTERFACE SUBROUTINE RRTM_ECRT_140GP && paer
Definition: yomcst.F90:1
real(kind=jprb), dimension(:), allocatable cvdaeu
Definition: yoeaerd.F90:15
real(kind=jprb), dimension(55) raeds
Definition: yoeaerd.F90:25
real(kind=jprb) rctrpt
Definition: yoeaerd.F90:34
real(kind=jprb), dimension(55) raels
Definition: yoeaerd.F90:21
real(kind=jprb) rcaeops
Definition: yoeaerd.F90:27