4 &,
paprs , pgelam, psin , pclon, pslon ,
pth &
67 USE yoeozoc , ONLY : cozqc ,cozqs ,cozhc ,cozhs
69 USE yoeaerc , ONLY : rsinct ,rsincv ,repaer ,&
70 &rtaebc ,rtaeor ,rtaesd ,rtaess ,rtaesu , &
84 integer_m :: kcf, krint, kshift
86 integer_m :: kcp__radaca
87 integer_m :: kdim_radaca
103 integer_m :: iinla1(
klon), iinla2(
klon)
104 integer_m :: iinlo1(
klon), iinlo2(
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)
124 real_b :: zsilat(
klon), zsinr(46)
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
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
159 zgridr=180._jprb/(nlatr-1)
161 zlatr=90._jprb-(jlr-1)*zgridr
162 zsinr(jlr)=sin(zlatr*
rpi/180._jprb)
169 zsilat(il)=-9999._jprb
172 IF (zsin <= zsinr(jlr) .AND. zsin > zsinr(jlr+1))
THEN
174 zsilat(il)=(zsin-zsinr(inla))/(zsinr(inla+1)-zsinr(inla))
175 zaervo(il)=rtaevo(inla)+zsilat(il)*(rtaevo(inla+1)-rtaevo(inla))
178 IF (zsin <= zsinr(nlatr-1) .AND. zsin >= zsinr(nlatr))
THEN
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))
186 stop
' Problem with lat. interpolation in radaca!'
212 9001
format(1
x,
'RADACA ',1
x,i5,1
x,2e15.8)
217 zgridr=180._jprb/(nlatr-1)
219 zlatr=90._jprb-(jlr-1)*zgridr
220 zsinr(jlr)=sin(zlatr*
rpi/180._jprb)
223 zdlonr=2._jprb*
rpi/nlonr
225 zlonr(jlr)=(jlr-1)*zdlonr
230 9121
format(1
x,
'ZSINR ',8e15.7)
232 9122
format(1
x,
'ZLONR ',8e15.7)
239 zsilat(il)=-9999._jprb
242 IF (zsin <= zsinr(jlr) .AND. zsin > zsinr(jlr+1))
THEN
246 zsilat(il)=(zsin-zsinr(inla))/(zsinr(inla+1)-zsinr(inla))
249 IF (zsin <= zsinr(nlatr-1) .AND. zsin >= zsinr(nlatr))
THEN
253 zsilat(il)=(zsin-zsinr(inla-1))/(zsinr(inla)-zsinr(inla-1))
257 stop
' Problem with lat. interpolation in radaca!'
260 9123
format(1
x,
'Interp.Latit.',2i4,f10.7,i4,2f10.7)
271 IF (pgelam(jl) < zlonr(jlr+1) .AND. pgelam(jl) >= zlonr(jlr)) &
276 znlo2(il)=zlonr(jlr+1)
279 IF (pgelam(jl) >= zlonr(72))
THEN
284 znlo2(il)=zlonr(72)+zdlonr
294 IF (iinlo1(il).EQ.0 .OR. iinlo2(il).EQ.0)
THEN
296 stop
' Problem with long. interpolation in radaca!'
298 zlon(il)=(pgelam(jl)-znlo1(il))/(znlo2(il)-znlo1(il))
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)
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)
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)
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)
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)
360 CALL legtri (zsin,kcp__radaca,kdim_radaca,zalp)
377 zfozq(imm)=zfozq(imm)+zalp(imnc)*cozqc(imnc)
378 zfozh(imm)=zfozh(imm)+zalp(imnc)*cozhc(imnc)
384 zfozq(imm)=zfozq(imm)+zalp(imns+6)*cozqs(imns)
385 zfozh(imm)=zfozh(imm)+zalp(imns+6)*cozhs(imns)
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
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)
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
427 CALL legtri (zsin,kcp__radaca,kdim_radaca,zalp)
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)
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)
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 )
534 zcpho3=
paprs(jl,1)**3
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)
548 zqofo(il)=zozq(il)*zsdpo3 / (zsdpo3 + zozh(il))
556 zgrth(il)=
pth(jl,jk)/
pth(jl,jk+1)
558 ELSEIF (kcf == 1)
THEN
561 zgrth(il)=
pth(il,jk)/
pth(il,jk+1)
568 zdpn(il)=
paprs(jl,jk+1)
569 zcphn3=
paprs(jl,jk+1)**3
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)
583 IF (_half_*(
paprs(jl,jk)+
paprs(jl,jk+1)) < 999._jprb)
THEN
588 zaetrn(il)=zaetro(il)*(min(_one_, zgrth(il) ))**
rctrpt
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))
599 paer(il,5,jk)= zaetr * zaervo(il) * zdpnmo
604 pozon(il,jk)=zqofn(il)-zqofo(il)
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)
627 paer(il,jaer,jk)=max(
paer(il,jaer,jk),repaer)
INTERFACE SUBROUTINE RRTM_ECRT_140GP pth
!$Id mode_top_bound COMMON comconstr r
real(kind=jprb), dimension(66) raelc
real(kind=jprb), dimension(66) raedc
real(kind=jprb), dimension(55) raeus
real(kind=jprb), dimension(66) raeuc
real(kind=jprb), dimension(55) raess
real(kind=jprb), dimension(:), allocatable cvdaes
real(kind=jprb), dimension(:), allocatable cvdael
real(kind=jprb), dimension(:), allocatable cvdaed
!$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
subroutine radaca(KIDIA, KFDIA, KLON, KTDIA, KLEV, PAPRS, PGELAM, PSIN, PCLON, PSLON, PTH, PAER, POZON)
!$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
subroutine legtri(PSIN, KCP, KDIM, PALP)
INTERFACE SUBROUTINE RRTM_ECRT_140GP && paer
real(kind=jprb), dimension(:), allocatable cvdaeu
real(kind=jprb), dimension(55) raeds
real(kind=jprb), dimension(55) raels