Changeset 5
- Timestamp:
- Oct 14, 2010, 3:18:14 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 16 added
- 10 deleted
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libf/dyn3d/caldyn.F
r1 r5 5 5 c 6 6 SUBROUTINE caldyn 7 $ (itau,ucov,vcov,teta,ps,masse,pk,pkf, phis ,7 $ (itau,ucov,vcov,teta,ps,masse,pk,pkf,tsurpk,phis , 8 8 $ phi,conser,du,dv,dteta,dp,w,pbaru,pbarv,time ) 9 9 … … 40 40 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm) 41 41 REAL ps(ip1jmp1),phis(ip1jmp1) 42 REAL pk(iip1,jjp1,llm),pkf(ip1jmp1,llm) 42 REAL pk(ip1jmp1,llm),pkf(ip1jmp1,llm) 43 REAL tsurpk(ip1jmp1,llm) 43 44 REAL vcont(ip1jm,llm),ucont(ip1jmp1,llm) 44 45 REAL phi(ip1jmp1,llm),masse(ip1jmp1,llm) … … 57 58 REAL bern(ip1jmp1,llm) 58 59 REAL massebxy(ip1jm,llm) 59 60 REAL temp(ip1jmp1,llm) 60 61 61 62 INTEGER ij,l … … 84 85 CALL enercin ( vcov , ucov , vcont , ucont , ecin ) 85 86 CALL bernoui ( ip1jmp1, llm , phi , ecin , bern ) 86 CALL dudv2 ( t eta, pkf , bern , du , dv )87 CALL dudv2 ( tsurpk , pkf , bern , du , dv ) 87 88 88 89 … … 115 116 IF( conser ) THEN 116 117 CALL sortvarc 117 $ ( itau,ucov,teta,ps,masse,pk,phis,vorpot,phi,bern,dp,time,vcov)118 $ (itau,ucov,tsurpk,ps,masse,pk,phis,vorpot,phi,bern,dp,time,vcov) 118 119 119 120 ENDIF -
trunk/libf/dyn3d/caldyn0.F
r1 r5 36 36 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm) 37 37 REAL ps(ip1jmp1),phis(ip1jmp1) 38 REAL pk(i ip1,jjp1,llm)38 REAL pk(ip1jmp1,llm) 39 39 REAL vcont(ip1jm,llm),ucont(ip1jmp1,llm) 40 40 REAL phi(ip1jmp1,llm),masse(ip1jmp1,llm) … … 51 51 REAL bern(ip1jmp1,llm) 52 52 REAL massebxy(ip1jm,llm), dp(ip1jmp1) 53 53 REAL temp(ip1jmp1,llm),tsurpk(ip1jmp1,llm) 54 54 55 55 INTEGER ij,l … … 83 83 ENDDO 84 84 85 ! ADAPTATION GCM POUR CP(T) 86 CALL tpot2t(ip1jmp1*llm,teta,temp,pk) 87 tsurpk = cpp*temp/pk 88 85 89 CALL sortvarc0 86 $ ( itau,ucov,teta,ps,masse,pk,phis,vorpot,phi,bern,dp,time,vcov)90 $ (itau,ucov,tsurpk,ps,masse,pk,phis,vorpot,phi,bern,dp,time,vcov) 87 91 88 92 RETURN -
trunk/libf/dyn3d/calfis.F
r1 r5 75 75 c pdufi tendency for the natural zonal velocity (ms-1) 76 76 c pdvfi tendency for the natural meridional velocity 77 c pdhfi tendency for the potential temperature 77 c pdhfi tendency for the potential temperature (K/s) 78 78 c pdtsfi tendency for the surface temperature 79 79 c … … 143 143 REAL zufi(ngridmx,llm), zvfi(ngridmx,llm) 144 144 REAL ztfi(ngridmx,llm),zqfi(ngridmx,llm,nqtot) 145 c 146 REAL pcvgu(ngridmx,llm), pcvgv(ngridmx,llm) 147 REAL pcvgt(ngridmx,llm), pcvgq(ngridmx,llm,2) 145 ! ADAPTATION GCM POUR CP(T) 146 REAL zteta(ngridmx,llm) 147 REAL zpk(ngridmx,llm) 148 c 149 ! RQ SL 13/10/10: 150 ! Ces calculs ne servent pas. 151 ! Si necessaire, decommenter ces variables et les calculs... 152 ! REAL pcvgu(ngridmx,llm), pcvgv(ngridmx,llm) 153 ! REAL pcvgt(ngridmx,llm), pcvgq(ngridmx,llm,2) 148 154 c 149 155 REAL zdufi(ngridmx,llm),zdvfi(ngridmx,llm) … … 221 227 222 228 223 c 42. pression intercouches :229 c 42. pression intercouches et fonction d'Exner: 224 230 c 225 231 c ----------------------------------------------------------------- … … 232 238 unskap = 1./ kappa 233 239 c 234 DO l = 1, llmp1 240 ! ADAPTATION GCM POUR CP(T) 241 DO l = 1, llm 242 zpk( 1,l ) = ppk(1,1,l) 243 zteta( 1,l ) = pteta(1,1,l) 235 244 zplev( 1,l ) = pp(1,1,l) 236 245 ig0 = 2 237 246 DO j = 2, jjm 238 247 DO i =1, iim 248 zpk( ig0,l ) = ppk(i,j,l) 249 zteta( ig0,l ) = pteta(i,j,l) 239 250 zplev( ig0,l ) = pp(i,j,l) 240 251 ig0 = ig0 +1 241 252 ENDDO 242 253 ENDDO 254 zpk( ngridmx,l ) = ppk(1,jjp1,l) 255 zteta( ngridmx,l ) = pteta(1,jjp1,l) 243 256 zplev( ngridmx,l ) = pp(1,jjp1,l) 244 257 ENDDO 258 zplev( 1,llmp1 ) = pp(1,1,llmp1) 259 ig0 = 2 260 DO j = 2, jjm 261 DO i =1, iim 262 zplev( ig0,llmp1 ) = pp(i,j,llmp1) 263 ig0 = ig0 +1 264 ENDDO 265 ENDDO 266 zplev( ngridmx,llmp1 ) = pp(1,jjp1,llmp1) 245 267 c 246 268 c … … 249 271 c --------------------------------------------------------------- 250 272 273 ! ADAPTATION GCM POUR CP(T) 274 call tpot2t(ngridmx*llm,zteta,ztfi,zpk) 275 251 276 DO l=1,llm 252 277 253 278 pksurcp = ppk(1,1,l) / cpp 254 279 zplay(1,l) = preff * pksurcp ** unskap 255 ztfi(1,l) = pteta(1,1,l) * pksurcp 256 pcvgt(1,l) = pdteta(1,1,l) * pksurcp / pmasse(1,1,l) 280 ! pcvgt(1,l) = pdteta(1,1,l) * pksurcp / pmasse(1,1,l) 257 281 ig0 = 2 258 282 … … 261 285 pksurcp = ppk(i,j,l) / cpp 262 286 zplay(ig0,l) = preff * pksurcp ** unskap 263 ztfi(ig0,l) = pteta(i,j,l) * pksurcp 264 pcvgt(ig0,l) = pdteta(i,j,l) * pksurcp / pmasse(i,j,l) 287 ! pcvgt(ig0,l) = pdteta(i,j,l) * pksurcp / pmasse(i,j,l) 265 288 ig0 = ig0 + 1 266 289 ENDDO … … 269 292 pksurcp = ppk(1,jjp1,l) / cpp 270 293 zplay(ig0,l) = preff * pksurcp ** unskap 271 ztfi (ig0,l) = pteta(1,jjp1,l) * pksurcp 272 pcvgt(ig0,l) = pdteta(1,jjp1,l) * pksurcp/ pmasse(1,jjp1,l) 273 274 ENDDO 275 276 c 43.bis traceurs 294 ! pcvgt(ig0,l) = pdteta(1,jjp1,l) * pksurcp/ pmasse(1,jjp1,l) 295 296 ENDDO 297 298 c 43.bis traceurs (tous intensifs) 277 299 c --------------- 278 300 c … … 290 312 zqfi(ig0,l,iq) = pq(1,jjp1,l,iiq) 291 313 ENDDO 292 ENDDO 293 294 c convergence dynamique pour les traceurs "EAU" 314 ENDDO ! boucle sur traceurs 315 316 !----------------- 317 ! RQ SL 13/10/10: 318 ! Ces calculs ne servent pas. 319 ! Si necessaire, decommenter ces variables et les calculs... 320 ! 321 ! convergence dynamique pour les traceurs "EAU" 295 322 ! Earth-specific treatment of first 2 tracers (water) 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 323 ! if (planet_type=="earth") then 324 ! DO iq=1,2 325 ! DO l=1,llm 326 ! pcvgq(1,l,iq)= pdq(1,1,l,iq) / pmasse(1,1,l) 327 ! ig0 = 2 328 ! DO j=2,jjm 329 ! DO i = 1, iim 330 ! pcvgq(ig0,l,iq) = pdq(i,j,l,iq) / pmasse(i,j,l) 331 ! ig0 = ig0 + 1 332 ! ENDDO 333 ! ENDDO 334 ! pcvgq(ig0,l,iq)= pdq(1,jjp1,l,iq) / pmasse(1,jjp1,l) 335 ! ENDDO 336 ! ENDDO 337 ! endif ! of if (planet_type=="earth") 338 !---------------- 312 339 313 340 c Geopotentiel calcule par rapport a la surface locale: … … 347 374 zufi(ig0+1,l)= 0.5 * 348 375 $ ( pucov(iim,j,l)/cu(iim,j) + pucov(1,j,l)/cu(1,j) ) 349 pcvgu(ig0+1,l)= 0.5 *350 $ ( pducov(iim,j,l)/cu(iim,j) + pducov(1,j,l)/cu(1,j) )376 ! pcvgu(ig0+1,l)= 0.5 * 377 ! $ ( pducov(iim,j,l)/cu(iim,j) + pducov(1,j,l)/cu(1,j) ) 351 378 DO 10 i=2,iim 352 379 zufi(ig0+i,l)= 0.5 * 353 380 $ ( pucov(i-1,j,l)/cu(i-1,j) + pucov(i,j,l)/cu(i,j) ) 354 pcvgu(ig0+i,l)= 0.5 *355 $ ( pducov(i-1,j,l)/cu(i-1,j) + pducov(i,j,l)/cu(i,j) )381 ! pcvgu(ig0+i,l)= 0.5 * 382 ! $ ( pducov(i-1,j,l)/cu(i-1,j) + pducov(i,j,l)/cu(i,j) ) 356 383 10 CONTINUE 357 384 25 CONTINUE … … 369 396 zvfi(ig0+i,l)= 0.5 * 370 397 $ ( pvcov(i,j-1,l)/cv(i,j-1) + pvcov(i,j,l)/cv(i,j) ) 371 pcvgv(ig0+i,l)= 0.5 *372 $ ( pdvcov(i,j-1,l)/cv(i,j-1) + pdvcov(i,j,l)/cv(i,j) )398 c pcvgv(ig0+i,l)= 0.5 * 399 c $ ( pdvcov(i,j-1,l)/cv(i,j-1) + pdvcov(i,j,l)/cv(i,j) ) 373 400 ENDDO 374 401 ENDDO … … 398 425 399 426 zufi(1,l) = SSUM(iim,zcos,1)/pi 400 pcvgu(1,l) = SSUM(iim,zcosbis,1)/pi427 ! pcvgu(1,l) = SSUM(iim,zcosbis,1)/pi 401 428 zvfi(1,l) = SSUM(iim,zsin,1)/pi 402 pcvgv(1,l) = SSUM(iim,zsinbis,1)/pi429 ! pcvgv(1,l) = SSUM(iim,zsinbis,1)/pi 403 430 404 431 ENDDO … … 427 454 428 455 zufi(ngridmx,l) = SSUM(iim,zcos,1)/pi 429 pcvgu(ngridmx,l) = SSUM(iim,zcosbis,1)/pi456 ! pcvgu(ngridmx,l) = SSUM(iim,zcosbis,1)/pi 430 457 zvfi(ngridmx,l) = SSUM(iim,zsin,1)/pi 431 pcvgv(ngridmx,l) = SSUM(iim,zsinbis,1)/pi458 ! pcvgv(ngridmx,l) = SSUM(iim,zsinbis,1)/pi 432 459 433 460 ENDDO … … 449 476 c --------------------- 450 477 451 452 if (planet_type=="earth") then453 478 #ifdef CPP_EARTH 454 479 … … 509 534 zdqfi(:,:,:)=zdqfic(:,:,:)/nsplit_phys 510 535 536 #else 537 ! si il n'y a pas la cle CPP_EARTH 538 539 ! ADAPTATION GCM POUR CP(T) 540 CALL physiq (ngridmx, 541 . llm, 542 . nqtot, 543 . debut, 544 . lafin, 545 . jD_cur, 546 . jH_cur, 547 . dtphys, 548 . zplev, 549 . zplay, 550 . zpk, 551 . zphi, 552 . zphis, 553 . presnivs, 554 . clesphy0, 555 . zufi, 556 . zvfi, 557 . ztfi, 558 . zqfi, 559 . flxwfi, 560 . zdufi, 561 . zdvfi, 562 . zdtfi, 563 . zdqfi, 564 . zdpsrf) 565 511 566 #endif 512 endif !of if (planet_type=="earth")513 567 514 568 500 CONTINUE … … 526 580 c --------------------- 527 581 528 DO l=1,llm 582 ! ADAPTATION GCM POUR CP(T) 583 ztfi=ztfi+zdtfi*dtphys 584 call t2tpot(ngridmx*llm,ztfi,zteta,zpk) 529 585 530 586 DO i=1,iip1 531 pdhfi(i,1,l) = cpp * zdtfi(1,l) / ppk(i, 1 ,l)532 pdhfi(i,jjp1,l) = cpp * zdtfi(ngridmx,l)/ ppk(i,jjp1,l)587 pdhfi(i,1,:) = (zteta(1,:) - pteta(i,1,:))/dtphys 588 pdhfi(i,jjp1,:) = (zteta(ngridmx,:) - pteta(i,jjp1,:))/dtphys 533 589 ENDDO 534 590 … … 536 592 ig0=1+(j-2)*iim 537 593 DO i=1,iim 538 pdhfi(i,j,l) = cpp * zdtfi(ig0+i,l) / ppk(i,j,l)594 pdhfi(i,j,:) = (zteta(ig0+i,:) - pteta(i,j,:))/dtphys 539 595 ENDDO 540 pdhfi(iip1,j,l) = pdhfi(1,j,l) 541 ENDDO 542 543 ENDDO 596 pdhfi(iip1,j,:) = pdhfi(1,j,:) 597 ENDDO 544 598 545 599 … … 563 617 ! ENDDO 564 618 565 c 63. traceurs 619 c 63. traceurs (tous en intensifs) 566 620 c ------------ 567 621 C initialisation des tendances -
trunk/libf/dyn3d/comconst.h
r1 r5 12 12 & ,tau_top_bound, & 13 13 & daylen,year_day,molmass 14 14 COMMON/cpdetvenus/nu_venus,t0_venus 15 15 16 16 INTEGER im,jm,lllm,imp1,jmp1,lllmm1,lllmp1,lcl … … 35 35 REAL molmass ! (g/mol) molar mass of the atmosphere 36 36 37 REAL nu_venus,t0_venus ! coeffs needed for Cp(T), Venus atmosphere 38 37 39 38 40 !----------------------------------------------------------------------- -
trunk/libf/dyn3d/diagedyn.F
r1 r5 196 196 C Compute vertical sum for each atmospheric column 197 197 C ================================================ 198 ! ADAPTATION GCM POUR CP(T) 199 call tpot2t(imjmp1*llm,zh,zt,zpk) 198 200 DO k = 1, llm 199 201 DO i = 1, imjmp1 … … 206 208 $ +zecin(i,k)*zairm(i,k) 207 209 C Air enthalpy 208 zt(i,k)= zh(i,k) * zpk(i,k) / RCPD209 210 zh_dair_col(i) = zh_dair_col(i) 210 $ + RCPD*(1.-zqw(i,k)-zql(i,k)-zqs(i,k))*zairm(i,k)*zt(i,k) 211 < ! ADAPTATION GCM POUR CP(T) 212 $ + cpdet(zt(i,k))*(1.-zqw(i,k)-zql(i,k)-zqs(i,k)) 213 $ *zairm(i,k)*zt(i,k) 211 214 zh_qw_col(i) = zh_qw_col(i) 212 215 $ + zcpvap*zqw(i,k)*zairm(i,k)*zt(i,k) -
trunk/libf/dyn3d/gcm.F
r1 r5 189 189 endif 190 190 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 191 c 192 c Initialisations pour Cp(T) Venus 193 call ini_cpdet 194 c 191 195 c----------------------------------------------------------------------- 192 196 c Choix du calendrier -
trunk/libf/dyn3d/leapfrog.F
r1 r5 87 87 REAL phi(ip1jmp1,llm) ! geopotentiel 88 88 REAL w(ip1jmp1,llm) ! vitesse verticale 89 ! ADAPTATION GCM POUR CP(T) 90 REAL temp(ip1jmp1,llm) ! temperature 91 REAL tsurpk(ip1jmp1,llm) ! cpp*T/pk 89 92 90 93 c variables dynamiques intermediaire pour le transport … … 298 301 c -------------------------------- 299 302 300 CALL geopot ( ip1jmp1, teta , pk , pks, phis , phi ) 303 ! ADAPTATION GCM POUR CP(T) 304 call tpot2t(ijp1llm,teta,temp,pk) 305 tsurpk = cpp*temp/pk 306 CALL geopot ( ip1jmp1, tsurpk , pk , pks, phis , phi ) 301 307 302 308 time = jD_cur + jH_cur 303 309 CALL caldyn 304 $ ( itau,ucov,vcov,teta,ps,masse,pk,pkf, phis ,310 $ ( itau,ucov,vcov,teta,ps,masse,pk,pkf,tsurpk,phis , 305 311 $ phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time ) 306 312 … … 473 479 474 480 c dissipation 481 ! ADAPTATION GCM POUR CP(T) 482 call tpot2t(ijp1llm,teta,temp,pk) 483 475 484 CALL dissip(vcov,ucov,teta,p,dvdis,dudis,dtetadis) 476 485 ucov=ucov+dudis … … 485 494 call covcont(llm,ucov,vcov,ucont,vcont) 486 495 call enercin(vcov,ucov,vcont,ucont,ecin) 487 dtetaecdt= (ecin0-ecin)/ pk 488 c teta=teta+dtetaecdt 496 ! ADAPTATION GCM POUR CP(T) 497 do ij=1,ip1jmp1 498 do l=1,llm 499 dtec = (ecin0(ij,l)-ecin(ij,l))/cpdet(temp(ij,l)) 500 temp(ij,l) = temp(ij,l) + dtec 501 enddo 502 enddo 503 call t2tpot(ijp1llm,temp,ztetaec,pk) 504 dtetaecdt=ztetaec-teta 489 505 dtetadis=dtetadis+dtetaecdt 490 506 endif … … 605 621 if (leapf.or.(.not.leapf.and.(.not.forward))) then 606 622 nbetat = nbetatdem 607 CALL geopot(ip1jmp1,teta,pk,pks,phis,phi) 623 ! ADAPTATION GCM POUR CP(T) 624 call tpot2t(ijp1llm,teta,temp,pk) 625 tsurpk = cpp*temp/pk 626 CALL geopot(ip1jmp1,tsurpk,pk,pks,phis,phi) 608 627 unat=0. 609 628 do l=1,llm … … 723 742 c IF(MOD(itau,iecri*day_step).EQ.0) THEN 724 743 nbetat = nbetatdem 725 CALL geopot(ip1jmp1,teta,pk,pks,phis,phi) 744 ! ADAPTATION GCM POUR CP(T) 745 call tpot2t(ijp1llm,teta,temp,pk) 746 tsurpk = cpp*temp/pk 747 CALL geopot(ip1jmp1,tsurpk,pk,pks,phis,phi) 726 748 unat=0. 727 749 do l=1,llm -
trunk/libf/dyn3d/vlspltqs.F
r1 r5 65 65 REAL rtt,retv,r2es,r3les,r3ies,r4les,r4ies,play 66 66 REAL ptarg,pdelarg,foeew,zdelta 67 REAL tempe(ip1jmp1) 67 ! ADAPTATION GCM POUR CP(T) 68 REAL tempe(ip1jmp1,llm) 68 69 69 70 c fonction psat(T) … … 84 85 c-- approximation: au milieu des couches play(l)=(p(l)+p(l+1))/2 85 86 c pour eviter une exponentielle. 87 88 ! ADAPTATION GCM POUR CP(T) 89 call tpot2t(ip1jmp1*llm,teta,tempe,pk) 86 90 DO l = 1, llm 87 91 DO ij = 1, ip1jmp1 88 tempe(ij) = teta(ij,l) * pk(ij,l) /cpp 89 ENDDO 90 DO ij = 1, ip1jmp1 91 zdelta = MAX( 0., SIGN(1., rtt - tempe(ij)) ) 92 zdelta = MAX( 0., SIGN(1., rtt - tempe(ij,l)) ) 92 93 play = 0.5*(p(ij,l)+p(ij,l+1)) 93 qsat(ij,l) = MIN(0.5, r2es* FOEEW(tempe(ij ),zdelta) / play )94 qsat(ij,l) = MIN(0.5, r2es* FOEEW(tempe(ij,l),zdelta) / play ) 94 95 qsat(ij,l) = qsat(ij,l) / ( 1. - retv * qsat(ij,l) ) 95 96 ENDDO
Note: See TracChangeset
for help on using the changeset viewer.