Changeset 1126 for trunk/LMDZ.TITAN/libf/phytitan
- Timestamp:
- Dec 17, 2013, 1:02:44 PM (11 years ago)
- Location:
- trunk/LMDZ.TITAN/libf/phytitan
- Files:
-
- 1 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.TITAN/libf/phytitan/calchim.F
r1056 r1126 1 1 SUBROUTINE calchim(nlon,ny,qy_c,nomqy_c,declin_rad,ls_rad,dtchim, 2 . ctemp,cplay,cplev, 2 . ctemp,cplay,cplev,czlay,czlev, 3 3 . dqyc) 4 4 … … 10 10 c adaptation pour Titan 3D: 02/2009 11 11 c adaptation pour // : 04/2013 12 c 12 c extension chimie jusqu a 1300km : 10/2013 13 c 13 14 c------------------------------------------------- 14 15 c 15 16 use dimphy 16 17 use common_mod, only:utilaer,maer,prodaer,csn,csh,psurfhaze, 17 . NLEV,N C,ND,NR18 . NLEV,NLRT,NC,ND,NR 18 19 USE comgeomphy, only: rlatd 19 use moyzon_mod, only:klat20 USE moyzon_mod, only: tmoy,playmoy,zlaymoy,zlevmoy,klat 20 21 implicit none 21 22 #include "dimensions.h" … … 35 36 REAL ctemp(nlon,klev) ! Temperature 36 37 REAL cplay(nlon,klev) ! pression (Pa) 37 REAL cplev(nlon,klev) ! pression intercouches (Pa) 38 REAL cplev(nlon,klev+1) ! pression intercouches (Pa) 39 REAL czlay(nlon,klev) ! altitude (m) 40 REAL czlev(nlon,klev+1) ! altitude intercouches (m) 38 41 39 42 REAL dqyc(nlon,klev,NC) ! Tendances especes chimiques … … 46 49 c variables envoyees dans la chimie: double precision 47 50 48 REAL temp_c(klev),press_c(klev) ! T,p(mbar) a 1 lat donnee 49 REAL declin_c ! declinaison en degres 50 REAL cqy(klev,NC) ! frac mol qui seront modifiees 51 REAL surfhaze(klev) 52 REAL cprodaer(klev,4),cmaer(klev,4),ccsn(klev,4),ccsh(klev,4) 53 REAL rinter(klev),nb(klev) 51 REAL temp_c(NLEV) 52 REAL press_c(NLEV) ! T,p(mbar) a 1 lat donnee 53 REAL cqy(NLEV,NC) ! frac mol qui seront modifiees 54 REAL cqy0(NLEV,NC) ! frac mol avant modif 55 REAL surfhaze(NLEV) 56 REAL cprodaer(NLEV,4),cmaer(NLEV,4) 57 REAL ccsn(NLEV,4),ccsh(NLEV,4) 58 ! rmil: milieu de couche, grille pour K,D,p,ct,T,y 59 ! rinter: intercouche (grille RA dans la chimie) 60 REAL rmil(NLEV),rinter(NLEV),nb(NLEV) 61 REAL,save :: kedd(NLEV) 62 54 63 REAL a,b 55 64 character str1*1,str2*2 56 integer ntotftop 57 parameter (ntotftop=50) 58 integer nftop(ntotftop),isaisonflux 59 REAL fluxtop(NC),latit,tabletmp(ntotftop),factflux 60 character*10 nomsftop(ntotftop+1) 65 REAL latit 61 66 character*20 formt1,formt2,formt3 62 67 … … 67 72 SAVE firstcal 68 73 69 REAL mass(NC),duree 70 REAL tablefluxtop(NC,jjp1,5) 71 REAL botCH4 74 integer dec,declinint,ialt 75 REAL declin_c ! declinaison en degres 76 real factalt,factdec,krpddec,krpddecp1,krpddecm1 77 real duree 78 REAL,save :: mass(NC) 79 REAL,save,allocatable :: md(:,:) 80 REAL,save :: botCH4 72 81 DATA botCH4/0.05/ 82 real,save :: r1d(131),ct1d(131),p1d(131),t1d(131) ! lecture tcp.ver 73 83 REAL,save,allocatable :: krpd(:,:,:,:),krate(:,:) 74 integer reactif(5,NR),nom_prod(NC),nom_perte(NC) 75 integer prod(200,NC),perte(2,200,NC) 76 SAVE mass,tablefluxtop,botCH4 77 SAVE reactif,nom_prod,nom_perte,prod,perte 78 84 integer,save :: reactif(5,NR),nom_prod(NC),nom_perte(NC) 85 integer,save :: prod(200,NC),perte(2,200,NC) 86 character dummy*30,fich*7,ficdec*15,curdec*15,name*10 87 real ficalt,oldq,newq,zalt 88 logical okfic 89 79 90 c----------------------------------------------------------------------- 80 91 c*********************************************************************** … … 94 105 c ************************************ 95 106 96 allocate(krpd(15,ND+1,klev,jjp1),krate(klev,NR)) 97 98 c Verification dimension verticale: coherence titan_for.h et klev 99 c -------------------------------- 100 101 if (klev.ne.NLEV) then 102 print*,'PROBLEME de coherence dans la dimension verticale:' 103 . ,klev,NLEV 104 STOP 105 endif 106 107 c Verification du nombre de composes: coherence titan_for.h et nqmax-nmicro 107 allocate(krpd(15,ND+1,NLRT,jjp1),krate(NLEV,NR),md(NLEV,NC)) 108 109 c Verification du nombre de composes: coherence common_mod et nqmax-nmicro 108 110 c ---------------------------------- 109 111 … … 114 116 endif 115 117 116 c calcul de temp_c, densites et press_c au milieu de l'ensemble des points:117 c -------------------------------------------------------------- --------118 119 print*,'pression, densites et temp ( chimie):'118 c calcul de temp_c, densites et press_c en moyenne planetaire : 119 c -------------------------------------------------------------- 120 121 print*,'pression, densites et temp (init chimie):' 120 122 print*,'level, press_c, nb, temp_c' 121 123 DO l=1,klev 124 rinter(l) = (zlevmoy(l)+RA)/1000. 125 rmil(l) = (zlaymoy(l)+RA)/1000. 122 126 c temp_c (K): 123 temp_c(l) = ctemp(nlon/2+1,l)127 temp_c(l) = tmoy(l) 124 128 c press_c (mbar): 125 press_c(l) = cplay(nlon/2+1,l)/100.129 press_c(l) = playmoy(l)/100. 126 130 c nb (cm-3): 127 131 nb(l) = 1.e-4*press_c(l) / (RKBOL*temp_c(l)) 128 print*,l, press_c(l),nb(l),temp_c(l)132 print*,l,rmil(l)-RA/1000.,press_c(l),nb(l),temp_c(l) 129 133 ENDDO 134 135 c au-dessus du GCM, dr regulier et rinter(NLEV)=1290+2575 km. 136 do l=klev+1,NLEV 137 rinter(l) = rinter(klev) 138 & + (l-klev)*(3865.-rinter(klev))/(NLEV-klev) 139 rmil(l) = rmil(klev) 140 & + (l-klev)*(3865.-rinter(klev))/(NLEV-klev) 141 enddo 142 143 c lecture de tcp.ver, une seule fois 144 c remplissage r1d,t1d,ct1d,p1d 145 open(11,file='../../INPUT/tcp.ver',status='old') 146 read(11,*) dummy 147 do i=1,131 148 read(11,*) r1d(i),t1d(i),ct1d(i),p1d(i) 149 c print*,"TCP.VER ",r1d(i),t1d(i),ct1d(i),p1d(i) 150 enddo 151 close(11) 152 153 c extension pour klev+1 a NLEV avec tcp.ver 154 c la jonction klev/klev+1 est brutale... Tant pis ? 155 ialt=1 156 do l=klev+1,NLEV 157 zalt=rmil(l)-RA/1000. 158 do i=ialt,130 159 if ((zalt.ge.r1d(i)).and.(zalt.lt.r1d(i+1))) then 160 ialt=i 161 endif 162 enddo 163 factalt = (zalt-r1d(ialt))/(r1d(ialt+1)-r1d(ialt)) 164 press_c(l) = exp( log(p1d(ialt)) * (1-factalt) 165 & + log(p1d(ialt+1)) * factalt ) 166 nb(l) = exp( log(ct1d(ialt)) * (1-factalt) 167 & + log(ct1d(ialt+1)) * factalt ) 168 temp_c(l) = t1d(ialt) * (1-factalt) + t1d(ialt+1) * factalt 169 print*,l,zalt,press_c(l),nb(l),temp_c(l) 170 enddo 130 171 131 172 c caracteristiques des composes: 132 173 c ----------------------------- 133 mass = 0.0134 call comp(nomqy_c, mass)174 mass(:) = 0.0 175 call comp(nomqy_c,nb,temp_c,mass,md) 135 176 print*,' Mass' 136 177 do ic=1,NC 137 178 print*,nomqy_c(ic),mass(ic) 179 c if(nomqy_c(ic).eq.'CH4') print*,"MD=",md(:,ic) 138 180 enddo 139 181 140 182 141 c FLUX AU SOMMET: DEPENDANT DE LA LATITUDE ET DE LA SAISON... 142 143 c flux dans la derniere couche:(issu du modele 1D, a 500 km) 144 c ----------------------------- 145 c !! en cm-2.s-1 !! 146 c ces valeurs sont converties en cm-3.s-1 (dni/dt) dans a couche 54 147 c 148 c Lecture des tables de flux en fonction lat et saison 149 c ---------------------------------------------------- 150 151 WRITE(str2(1:2),'(i2.2)') ntotftop 152 formt1 = '(A10,'//str2//'(3X,A10))' 153 formt2 = '(F12.6,'//str2//'(2X,F13.6))' 154 formt3 = '(F13.6,'//str2//'(2X,F13.6))' 155 156 do j=1,jjp1 157 do ic=1,NC 158 do l=1,5 159 tablefluxtop(ic,j,l) = 0. 160 enddo 161 enddo 162 enddo 163 164 do l=1,4 165 WRITE(str1(1:1),'(i1.1)') l 166 c hx1 -> Ls=RPI/2 / hx4 -> Ls=0 167 open(10,file="../../INPUT/FLUXTOP/flux500.hs"//str1) 168 c open(10,file="FLUXTOP/flux500.hs"//str1) 169 c on remet l=1 et 5 -> Ls=0 / l=2 -> Ls=RPI/2 ... 170 171 read(10,formt1) nomsftop 172 do j=1,ntotftop 173 do i=1,10 !justification a gauche... 174 if (nomsftop(j+1)(i:i).ne.' ') then 175 nomsftop(j) = nomsftop(j+1)(i:) 176 goto 100 177 endif 178 enddo 179 100 continue 180 c print*,nomsftop(j) 181 nftop(j) = 0 182 do i=1,NC 183 if (nomqy_c(i).eq.nomsftop(j)) then 184 nftop(j) = i 185 endif 186 enddo 187 c if (nftop(j).ne.0) print*,nomsftop(j),nomqy_c(nftop(j)) 188 enddo 189 190 191 c lecture des flux. Les formats sont un peu alambiques... 192 c a revoir eventuellement 193 do j=1,jjp1/2+1 194 read(10,formt2) latit,tabletmp 195 do i=1,ntotftop 196 if (nftop(i).ne.0) then 197 tablefluxtop(nftop(i),j,l+1) = tabletmp(i) 198 endif 199 enddo 200 enddo 201 do j=jjp1/2+2,jjp1 202 read(10,formt3) latit,tabletmp 203 do i=1,ntotftop 204 if (nftop(i).ne.0) then 205 tablefluxtop(nftop(i),j,l+1) = tabletmp(i) 206 endif 207 enddo 208 enddo 209 210 close(10) 211 enddo ! l 212 213 do j=1,jjp1 214 do ic=1,NC 215 tablefluxtop(ic,j,1) = tablefluxtop(ic,j,5) 216 enddo 217 enddo 218 219 c Stockage des composes utilises dans la prod d'aerosols 183 c Stockage des composes utilises dans la prod d aerosols 220 184 c (aerprod=1) et dans H-> H2 (htoh2=1): utilaer 221 185 c ! decalage de 1 car utilise dans le c ! 222 c ------------------------------------------223 c + modifs du flux en fonction des obs UVIS et CIRS: C2H2,C2H6,HCN224 c + modifs des flux qui presentent un probleme evident: C3H8 et C4H10225 c ------------------------------------------226 186 227 187 do ic=1,NC … … 244 204 if (nomqy_c(ic).eq."HCN") then 245 205 utilaer(6) = ic-1 246 do j=1,jjp1247 do i=1,5248 tablefluxtop(ic,j,i) = tablefluxtop(ic,j,i) * 6.249 enddo250 enddo251 206 endif 252 207 if (nomqy_c(ic).eq."HC3N") then … … 268 223 if (nomqy_c(ic).eq."C2H2") then 269 224 utilaer(3) = ic-1 270 do j=1,jjp1271 do i=1,5272 c tablefluxtop(ic,j,i) = tablefluxtop(ic,j,i) * 7.3273 tablefluxtop(ic,j,i) = tablefluxtop(ic,j,i) * 10.274 enddo275 enddo276 225 endif 277 226 if (nomqy_c(ic).eq."AC6H6") then … … 298 247 if (nomqy_c(ic).eq."AC6H5") then 299 248 utilaer(12) = ic-1 300 endif301 302 if (nomqy_c(ic).eq."C2H6") then303 do j=1,jjp1304 do i=1,5305 c tablefluxtop(ic,j,i) = tablefluxtop(ic,j,i) * 640.306 tablefluxtop(ic,j,i) = tablefluxtop(ic,j,i) * 1200.307 enddo308 enddo309 endif310 if (nomqy_c(ic).eq."C3H8") then311 do j=1,jjp1312 do i=1,5313 c tablefluxtop(ic,j,i) = tablefluxtop(ic,j,i) * (-1.)314 tablefluxtop(ic,j,i) = tablefluxtop(ic,j,i) * (-3000.)315 enddo316 enddo317 endif318 if (nomqy_c(ic).eq."C4H10") then319 do j=1,jjp1320 do i=1,5321 tablefluxtop(ic,j,i) = tablefluxtop(ic,j,i) * (-1.)322 enddo323 enddo324 249 endif 325 250 … … 369 294 c enddo 370 295 296 297 c init kedd 298 c --------- 299 c kedd stays constant with time and space 300 c => linked to pressure rather than altitude... 301 302 kedd(:) = 5e2 ! valeur mise par defaut 303 ! UNITE ? doit etre ok pour gptitan 304 do l=1,NLEV 305 zalt=rmil(l)-RA/1000. ! z en km 306 if ((zalt.ge.250.).and.(zalt.le.400.)) then 307 kedd(l) = 10.**(3.+(zalt-250.)/50.) 308 ! 1E3 at 250 km 309 ! 1E6 at 400 km 310 elseif ((zalt.gt.400.).and.(zalt.le.600.)) then 311 kedd(l) = 10.**(6.+1.3*(zalt-400.)/200.) 312 ! 2E7 at 600 km 313 elseif ((zalt.gt.600.).and.(zalt.le.900.)) then 314 kedd(l) = 10.**(7.3+0.7*(zalt-600.)/300.) 315 ! 1E8 above 900 km 316 elseif ( zalt.gt.900. ) then 317 kedd(l) = 1.e8 318 endif 319 enddo 320 371 321 ENDIF ! premier appel 372 322 … … 380 330 c print*,'declinaison en degre=',declin_c 381 331 382 c-----------------------------------------------------------------------383 c384 c calcul du facteur d'interpolation entre deux saisons pour flux385 c --------------------------------------------------------------386 387 isaisonflux = int(ls_rad*2./RPI)+1388 if (isaisonflux.eq.5) then389 isaisonflux = 1390 endif391 factflux = (sin(ls_rad)-sin((isaisonflux-1)*RPI/2.))/392 . (sin(isaisonflux*RPI/2.)-sin((isaisonflux-1)*RPI/2.))393 394 332 c*********************************************************************** 395 333 c*********************************************************************** … … 410 348 c*********************************************************************** 411 349 350 c----------------------------------------------------------------------- 351 c 352 c Distance radiale (intercouches, en km) 353 c ---------------------------------------- 354 355 do l=1,klev 356 rinter(l) = (RA+czlev(j,l))/1000. 357 rmil(l) = (RA+czlay(j,l))/1000. 358 c print*,rinter(l) 359 enddo 360 361 c au-dessus du GCM, dr regulier et rinter(NLEV)=1290+2575 km. 362 do l=klev+1,NLEV 363 rinter(l) = rinter(klev) 364 & + (l-klev)*(3865.-rinter(klev))/(NLEV-klev) 365 rmil(l) = rmil(klev) 366 & + (l-klev)*(3865.-rinter(klev))/(NLEV-klev) 367 enddo 368 412 369 c----------------------------------------------------------------------- 413 370 c … … 423 380 nb(l) = 1.e-4*press_c(l) / (RKBOL*temp_c(l)) 424 381 ENDDO 425 426 c----------------------------------------------------------------------- 427 c 428 c Distances radiales (intercouches, en km) 429 c ---------------------------------------- 430 431 rinter(1) = RA/1000. 432 do l=2,klev 433 c A REVOIR: g doit varier avec r ! 434 rinter(l) = rinter(l-1) + 435 . (cplev(j,l-1)-cplev(j,l))/cplay(j,l)*(RD*temp_c(l)/RG)/1000. 436 c print*,rinter(l) 437 enddo 438 439 c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 440 c FLUX AU TOP: interpolation en saison et 441 c conversion en cm-3 s-1 dans la couche klev-1 (NLEV-2 dans le C) 442 c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 443 do ic=1,NC 444 fluxtop(ic) = tablefluxtop(ic,j,isaisonflux) *(1-factflux) 445 . + tablefluxtop(ic,j,isaisonflux+1)* factflux 446 fluxtop(ic) = fluxtop(ic)/((rinter(klev)-rinter(klev-1))*1e5) 447 enddo 448 449 c TEST: sortie de l'un des flux avec saveLs et factflux 450 c dans un fichier special pour tracer avec gnuplot 451 c if (j.eq.2) then 452 c open(unit=11,file="flux_80N.txt",status='old',position='append') 453 c write(11,*) ls_rad*180./RPI, factflux, 454 c . ((rinter(llm)-rinter(llm-1))*1e5), fluxtop 455 c write(11,*) ls_rad*180./RPI, factflux, 456 c . fluxtop(utilaer(3)+1)*((rinter(llm)-rinter(llm-1))*1e5), !C2H2 457 c . fluxtop(utilaer(6)+1)*((rinter(llm)-rinter(llm-1))*1e5) !HCN 458 c close(11) 459 c endif 460 c if (j.eq.17) then 461 c open(unit=11,file="flux_eq.txt",status='old',position='append') 462 c write(11,*) ls_rad*180./RPI, factflux, 463 c . ((rinter(llm)-rinter(llm-1))*1e5), fluxtop 464 c write(11,*) ls_rad*180./RPI, factflux, 465 c . fluxtop(utilaer(3)+1)*((rinter(llm)-rinter(llm-1))*1e5), !C2H2 466 c . fluxtop(utilaer(6)+1)*((rinter(llm)-rinter(llm-1))*1e5) !HCN 467 c close(11) 468 c endif 469 c FIN TEST: sortie de l'un des flux avec ls et factflux 470 471 c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 382 c extension pour klev+1 a NLEV avec tcp.ver 383 ialt=1 384 do l=klev+1,NLEV 385 zalt=rmil(l)-RA/1000. 386 do i=ialt,130 387 if ((zalt.ge.r1d(i)).and.(zalt.lt.r1d(i+1))) then 388 ialt=i 389 endif 390 enddo 391 factalt = (zalt-r1d(ialt))/(r1d(ialt+1)-r1d(ialt)) 392 press_c(l) = exp( log(p1d(ialt)) * (1-factalt) 393 & + log(p1d(ialt+1)) * factalt ) 394 nb(l) = exp( log(ct1d(ialt)) * (1-factalt) 395 & + log(ct1d(ialt+1)) * factalt ) 396 temp_c(l) = t1d(ialt) * (1-factalt) + t1d(ialt+1) * factalt 397 enddo 398 399 c----------------------------------------------------------------------- 400 c 401 c passage krpd => krate 402 c --------------------- 403 c initialisation krate pour dissociations 404 405 if ((declin_c*10+267).lt.14.) then 406 declinint = 0 407 dec = 0 408 else 409 if ((declin_c*10+267).gt.520.) then 410 declinint = 14 411 dec = 534 412 else 413 declinint = 1 414 dec = 27 415 do while( (declin_c*10+267).ge.real(dec+20) ) 416 dec = dec+40 417 declinint = declinint+1 418 enddo 419 endif 420 endif 421 if ((declin_c.ge.-24.).and.(declin_c.le.24.)) then 422 factdec = ( declin_c - (dec-267)/10. ) / 4. 423 else 424 factdec = ( declin_c - (dec-267)/10. ) / 2.7 425 endif 426 427 do l=1,NLEV 428 429 c INTERPOL EN ALT POUR k (krpd tous les deux km) 430 ialt = int((rmil(l)-RA/1000.)/2.)+1 431 factalt = (rmil(l)-RA/1000.)/2.-(ialt-1) 432 433 do i=1,ND+1 434 krpddecm1 = krpd(declinint ,i,ialt ,klat(j)) * (1-factalt) 435 & + krpd(declinint ,i,ialt+1,klat(j)) * factalt 436 krpddec = krpd(declinint+1,i,ialt ,klat(j)) * (1-factalt) 437 & + krpd(declinint+1,i,ialt+1,klat(j)) * factalt 438 krpddecp1 = krpd(declinint+2,i,ialt ,klat(j)) * (1-factalt) 439 & + krpd(declinint+2,i,ialt+1,klat(j)) * factalt 440 441 ! ND+1 correspond a la dissociation de N2 par les GCR 442 if ( factdec.lt.0. ) then 443 krate(l,i) = krpddecm1 * abs(factdec) 444 & + krpddec * ( 1 + factdec) 445 endif 446 if ( factdec.gt.0. ) then 447 krate(l,i) = krpddecp1 * factdec 448 & + krpddec * ( 1 - factdec) 449 endif 450 if ( factdec.eq.0. ) krate(l,i) = krpddec 451 enddo 452 enddo 472 453 473 454 c----------------------------------------------------------------------- … … 475 456 c composition 476 457 c ------------ 477 458 478 459 do ic=1,NC 479 460 do l=1,klev 480 cqy(l,ic) = qy_c(j,l,ic) 481 enddo 482 enddo 483 461 cqy(l,ic) = qy_c(j,l,ic) 462 cqy0(l,ic) = cqy(l,ic) 463 enddo 464 enddo 465 466 c lecture du fichier compo_klat(j) (01 à 49) pour klev+1 a NLEV 467 468 WRITE(str2,'(i2.2)') klat(j) 469 fich = "comp_"//str2//".dat" 470 inquire (file=fich,exist=okfic) 471 if (okfic) then 472 open(11,file=fich,status='old') 473 c premiere ligne=declin 474 read(11,'(A15)') ficdec 475 write(curdec,'(E15.5)') declin_c 476 c si la declin est la meme: ce fichier a deja ete reecrit 477 c on lit la colonne t-1 au lieu de la colonne t 478 c (cas d une bande de latitude partagee par 2 procs) 479 do ic=1,NC 480 read(11,'(A10)') name 481 if (name.ne.nomqy_c(ic)) then 482 print*,"probleme lecture ",fich 483 print*,name,nomqy_c(ic) 484 stop 485 endif 486 if (ficdec.eq.curdec) then 487 do l=klev+1,NLEV 488 read(11,*) ficalt,cqy(l,ic),newq 489 enddo 490 else 491 do l=klev+1,NLEV 492 read(11,*) ficalt,oldq,cqy(l,ic) 493 enddo 494 endif 495 enddo 496 close(11) 497 else ! le fichier n'est pas la 498 do ic=1,NC 499 do l=klev+1,NLEV 500 cqy(l,ic)=cqy(klev,ic) 501 enddo 502 enddo 503 endif 504 cqy0 = cqy 505 484 506 c----------------------------------------------------------------------- 485 507 c … … 502 524 503 525 call gptitan(rinter,temp_c,nb, 504 $ nomqy_c,cqy, fluxtop,505 $ d eclin_c,duree,(klat(j)-1),mass,506 $ botCH4,krpd,krate,reactif,526 $ nomqy_c,cqy, 527 $ duree,(klat(j)-1),mass,md, 528 $ kedd,botCH4,krate,reactif, 507 529 $ nom_prod,nom_perte,prod,perte, 508 530 $ aerprod,utilaer,cmaer,cprodaer,ccsn,ccsh, … … 514 536 do ic=1,NC 515 537 do l=1,klev 516 dqyc(j,l,ic) = (cqy(l,ic) - qy_c(j,l,ic))/dtchim ! en /s538 dqyc(j,l,ic) = (cqy(l,ic) - cqy0(l,ic))/dtchim ! en /s 517 539 enddo 518 540 enddo … … 535 557 536 558 endif 559 560 c----------------------------------------------------------------------- 561 c 562 c sauvegarde compo sur NLEV 563 c ------------------------- 564 565 c dans fichier compo_klat(j) (01 à 49) 566 567 open(11,file=fich,status='replace') 568 c premiere ligne=declin 569 write(11,'(E15.5)') declin_c 570 do ic=1,NC 571 write(11,'(A10)') nomqy_c(ic) 572 do l=klev+1,NLEV 573 write(11,'(E15.5,1X,E15.5,1X,E15.5)') rmil(l)-RA/1000., 574 . cqy0(l,ic),cqy(l,ic) 575 enddo 576 enddo 577 close(11) 537 578 538 579 c*********************************************************************** -
trunk/LMDZ.TITAN/libf/phytitan/common_mod.F90
r1056 r1126 34 34 35 35 ! ancien titan_for.h 36 INTEGER, PARAMETER :: NLEV=llm ,NC=44,ND=54,NR=37736 INTEGER, PARAMETER :: NLEV=llm+70,NC=44,ND=54,NR=377 37 37 !$OMP THREADPRIVATE(NLEV,NC,ND,NR) 38 38 !!! doivent etre en accord avec titan.h 39 ! pour l'UV (650 niveaux de 2 km) 40 INTEGER, PARAMETER :: NLRT=650 39 41 40 42 ! ancien diagmuphy.h -
trunk/LMDZ.TITAN/libf/phytitan/optci.F
r1080 r1126 162 162 XICLDI2(K)=TNI 163 163 420 CONTINUE 164 165 c DEBUG 166 c print*,"wnoi=",WNOI 164 167 165 168 C … … 284 287 TauGID(ig,:,:) = TAUGID_1pt(:,:) 285 288 289 c DEBUG 290 c if(ig.eq.(ngrid/2+16)) then 291 c print*,ig,'/',KLON,':' 292 c print*,'TauHID_1',TAUHID(ig,1,:) 293 c print*,'TauGID_1',TAUGID(ig,1,:) 294 c print*,'TauHID_50',TAUHID(ig,50,:) 295 c print*,'TauGID_50',TAUGID(ig,50,:) 296 c print*,"DTAUI_1=",DTAUI(ig,1,:) 297 c print*,"DTAUI_50=",DTAUI(ig,50,:) 298 c print*,'cosBI_1',COSBI(ig,1,:) 299 c print*,'cosBI_50',COSBI(ig,50,:) 300 c print*,'WBARI_1',WBARI(ig,1,:) 301 c print*,'WBARI_50',WBARI(ig,50,:) 302 c stop 303 c endif 304 286 305 c************************************************************************ 287 306 c************************************************************************ -
trunk/LMDZ.TITAN/libf/phytitan/optci_1pt_3.F
r1058 r1126 282 282 c CBAR=xv3(j,k) 283 283 284 c print*, 'HERE, CIRS AEROSOLS' 285 c call cirs_haze(PRESS(J),WNOI(K),TAEROS,TAEROSCAT,CBAR) 284 286 285 287 c*********** EN TRAVAUX *************************** -
trunk/LMDZ.TITAN/libf/phytitan/optcv.F
r1081 r1126 148 148 c close(1) 149 149 150 c DEBUG 151 c print*,"wnov=",WNOV 152 150 153 endif ! fin initialisations premier appel 151 154 … … 167 170 else 168 171 if (ig.eq.1) then 169 c initialisation zqaer_1pt a partir d 'une look-up table (uniforme en ig)172 c initialisation zqaer_1pt a partir d une look-up table (uniforme en ig) 170 173 c boucle sur nrad=10 171 174 open(10,file="qaer_eq_1d.dat") … … 220 223 TauGVD(ig,:,:) = TAUGVD_1pt(:,:) 221 224 225 c DEBUG 226 c if(ig.eq.(ngrid/2+16)) then 227 c print*,ig,'/',KLON,':' 228 c print*,'TauHVD_1',TAUHVD(ig,1,:) 229 c print*,'TauGVD_1',TAUGVD(ig,1,:) 230 c print*,'TauHVD_50',TAUHVD(ig,50,:) 231 c print*,'TauGVD_50',TAUGVD(ig,50,:) 232 c stop 233 c endif 234 222 235 101 CONTINUE 223 236 -
trunk/LMDZ.TITAN/libf/phytitan/optcv_1pt_3.F
r1058 r1126 231 231 232 232 IF (TAEROSCAT.le.0.) CBAR=0. 233 234 c print*, 'HERE, CIRS AEROSOLS' 235 c call cirs_haze(PRESS(J),WNOV(K),TAEROS,TAEROSCAT,CBAR) 233 236 234 237 1699 FORMAT(a3,2I3,3(ES15.7,1X)) -
trunk/LMDZ.TITAN/libf/phytitan/physiq.F
r1120 r1126 419 419 itap = 0 420 420 itaprad = 0 421 itapchim = 0421 itapchim = 1 422 422 423 423 c init rnuabar … … 1126 1126 tr_seri(:,:,1:nmicro) = tr_seri(:,:,1:nmicro) 1127 1127 . + d_tr_mph(:,:,1:nmicro)*dtime 1128 1128 c call WriteField_phy('physiq_d_tr_mph01', 1129 c . d_tr_mph(:,:,1),klev) 1130 c call WriteField_phy('physiq_d_tr_mph10', 1131 c . d_tr_mph(:,:,10),klev) 1132 endif 1129 1133 c PAS ELEGANT mais je n'ai pas trouve d'autres solutions : 1130 1134 c Il semblerait qu'il y ait un probleme lorsque les tendances de traceurs … … 1141 1145 ENDDO 1142 1146 1143 endif1144 1145 1147 c condensation: 1146 1148 c NE PAS OUBLIER LA CONDENSATION DES NUAGES !!!! … … 1149 1151 . + d_tr_mph(:,:,nmicro+1:nqmax)*dtime 1150 1152 endif 1153 1154 c chimie: 1151 1155 if ((chimi).and.(nqmax.gt.nmicro)) then 1152 c chimie:1153 1156 tr_seri(:,:,:) = tr_seri(:,:,:) + d_tr_kim(:,:,:)*dtime 1154 1157 endif 1155 1158 1156 endif 1159 endif !iflag_trac=1 1157 1160 1158 1161 c ch4=0. -
trunk/LMDZ.TITAN/libf/phytitan/phytrac.F
r1072 r1126 459 459 c ------------ 460 460 CALL calchim(klon,nqmax-nmicro,ychim,nomqy,pdecli,lonsol,dtkim, 461 . ztemp,zplay,zplev, 461 . ztemp,zplay,zplev,zzlay,zzlev, 462 462 . pdyfi) 463 463 c ychim ne doit pas etre modifie, pdyfi en /s -
trunk/LMDZ.TITAN/libf/phytitan/profile.F
r904 r1126 94 94 b2 = 3183. 95 95 c2 = 4737. 96 c pres est en Pa => conversion car expression veut p en hPa 96 97 DO il=1,nlev 97 temp(il)=a1*exp(-((pres(il) -b1)/c1)**2.)98 . + a2*exp(-((pres(il) -b2)/c2)**2.)98 temp(il)=a1*exp(-((pres(il)/100.-b1)/c1)**2.) 99 . + a2*exp(-((pres(il)/100.-b2)/c2)**2.) 99 100 ENDDO 100 101 zkm(1) = 0.0
Note: See TracChangeset
for help on using the changeset viewer.