Changeset 5


Ignore:
Timestamp:
Oct 14, 2010, 3:18:14 PM (14 years ago)
Author:
slebonnois
Message:
  • Ajout des fichiers .def Venus et Titan (tels qu'ils sont utilisés

actuellement) dans les deftanks.

  • Ajout d'une doc sur Cp(T).
  • Modifications dans dyn3d concernant Cp(T), cf le log (v5) dans chantiers
  • Premières modifs de l'appel à la physique dans dyn3d/calfis, cf log (v5)
  • Elimination des cpdet.* dans phytitan et phyvenus (remplacés par cpdet.F

dans dyn3d).

Location:
trunk
Files:
16 added
10 deleted
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/libf/dyn3d/caldyn.F

    r1 r5  
    55c
    66      SUBROUTINE caldyn
    7      $ (itau,ucov,vcov,teta,ps,masse,pk,pkf,phis ,
     7     $ (itau,ucov,vcov,teta,ps,masse,pk,pkf,tsurpk,phis ,
    88     $  phi,conser,du,dv,dteta,dp,w,pbaru,pbarv,time )
    99
     
    4040      REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm)
    4141      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)
    4344      REAL vcont(ip1jm,llm),ucont(ip1jmp1,llm)
    4445      REAL phi(ip1jmp1,llm),masse(ip1jmp1,llm)
     
    5758      REAL bern(ip1jmp1,llm)
    5859      REAL massebxy(ip1jm,llm)
    59    
     60      REAL temp(ip1jmp1,llm)
    6061
    6162      INTEGER   ij,l
     
    8485      CALL enercin ( vcov   , ucov  , vcont     , ucont  , ecin  )
    8586      CALL bernoui ( ip1jmp1, llm   , phi       , ecin   , bern  )
    86       CALL dudv2   ( teta  , pkf   , bern      , du     , dv    )
     87      CALL dudv2   ( tsurpk , pkf   , bern      , du     , dv    )
    8788
    8889
     
    115116      IF( conser )  THEN
    116117        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)
    118119
    119120      ENDIF
  • trunk/libf/dyn3d/caldyn0.F

    r1 r5  
    3636      REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm)
    3737      REAL ps(ip1jmp1),phis(ip1jmp1)
    38       REAL pk(iip1,jjp1,llm)
     38      REAL pk(ip1jmp1,llm)
    3939      REAL vcont(ip1jm,llm),ucont(ip1jmp1,llm)
    4040      REAL phi(ip1jmp1,llm),masse(ip1jmp1,llm)
     
    5151      REAL bern(ip1jmp1,llm)
    5252      REAL massebxy(ip1jm,llm), dp(ip1jmp1)
    53    
     53      REAL temp(ip1jmp1,llm),tsurpk(ip1jmp1,llm)
    5454
    5555      INTEGER   ij,l
     
    8383      ENDDO
    8484
     85! ADAPTATION GCM POUR CP(T)
     86      CALL tpot2t(ip1jmp1*llm,teta,temp,pk)
     87      tsurpk = cpp*temp/pk
     88
    8589        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)
    8791
    8892      RETURN
  • trunk/libf/dyn3d/calfis.F

    r1 r5  
    7575c        pdufi          tendency for the natural zonal velocity (ms-1)
    7676c        pdvfi          tendency for the natural meridional velocity
    77 c        pdhfi          tendency for the potential temperature
     77c        pdhfi          tendency for the potential temperature (K/s)
    7878c        pdtsfi         tendency for the surface temperature
    7979c
     
    143143      REAL zufi(ngridmx,llm), zvfi(ngridmx,llm)
    144144      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)
     148c
     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)
    148154c
    149155      REAL zdufi(ngridmx,llm),zdvfi(ngridmx,llm)
     
    221227
    222228
    223 c   42. pression intercouches :
     229c   42. pression intercouches et fonction d'Exner:
    224230c
    225231c   -----------------------------------------------------------------
     
    232238       unskap   = 1./ kappa
    233239c
    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)
    235244        zplev( 1,l ) = pp(1,1,l)
    236245        ig0 = 2
    237246          DO j = 2, jjm
    238247             DO i =1, iim
     248              zpk(   ig0,l ) = ppk(i,j,l)
     249              zteta( ig0,l ) = pteta(i,j,l)
    239250              zplev( ig0,l ) = pp(i,j,l)
    240251              ig0 = ig0 +1
    241252             ENDDO
    242253          ENDDO
     254        zpk(   ngridmx,l ) = ppk(1,jjp1,l)
     255        zteta( ngridmx,l ) = pteta(1,jjp1,l)
    243256        zplev( ngridmx,l ) = pp(1,jjp1,l)
    244257      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)
    245267c
    246268c
     
    249271c   ---------------------------------------------------------------
    250272
     273! ADAPTATION GCM POUR CP(T)
     274         call tpot2t(ngridmx*llm,zteta,ztfi,zpk)
     275
    251276      DO l=1,llm
    252277
    253278         pksurcp     =  ppk(1,1,l) / cpp
    254279         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)
    257281         ig0         = 2
    258282
     
    261285              pksurcp        = ppk(i,j,l) / cpp
    262286              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)
    265288              ig0            = ig0 + 1
    266289            ENDDO
     
    269292         pksurcp       = ppk(1,jjp1,l) / cpp
    270293         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
     298c   43.bis traceurs (tous intensifs)
    277299c   ---------------
    278300c
     
    290312            zqfi(ig0,l,iq) = pq(1,jjp1,l,iiq)
    291313         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"
    295322! Earth-specific treatment of first 2 tracers (water)
    296        if (planet_type=="earth") then
    297         DO iq=1,2
    298          DO l=1,llm
    299             pcvgq(1,l,iq)= pdq(1,1,l,iq) / pmasse(1,1,l)
    300             ig0          = 2
    301             DO j=2,jjm
    302                DO i = 1, iim
    303                   pcvgq(ig0,l,iq) = pdq(i,j,l,iq) / pmasse(i,j,l)
    304                   ig0             = ig0 + 1
    305                ENDDO
    306             ENDDO
    307             pcvgq(ig0,l,iq)= pdq(1,jjp1,l,iq) / pmasse(1,jjp1,l)
    308          ENDDO
    309         ENDDO
    310        endif ! of if (planet_type=="earth")
    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!----------------
    312339
    313340c   Geopotentiel calcule par rapport a la surface locale:
     
    347374            zufi(ig0+1,l)= 0.5 *
    348375     $      ( 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) )
    351378            DO 10 i=2,iim
    352379               zufi(ig0+i,l)= 0.5 *
    353380     $         ( 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) )
    35638310         CONTINUE
    35738425      CONTINUE
     
    369396               zvfi(ig0+i,l)= 0.5 *
    370397     $         ( 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) )
     398c               pcvgv(ig0+i,l)= 0.5 *
     399c     $         ( pdvcov(i,j-1,l)/cv(i,j-1) + pdvcov(i,j,l)/cv(i,j) )
    373400            ENDDO
    374401         ENDDO
     
    398425
    399426         zufi(1,l)  = SSUM(iim,zcos,1)/pi
    400          pcvgu(1,l) = SSUM(iim,zcosbis,1)/pi
     427!         pcvgu(1,l) = SSUM(iim,zcosbis,1)/pi
    401428         zvfi(1,l)  = SSUM(iim,zsin,1)/pi
    402          pcvgv(1,l) = SSUM(iim,zsinbis,1)/pi
     429!         pcvgv(1,l) = SSUM(iim,zsinbis,1)/pi
    403430
    404431      ENDDO
     
    427454
    428455         zufi(ngridmx,l)  = SSUM(iim,zcos,1)/pi
    429          pcvgu(ngridmx,l) = SSUM(iim,zcosbis,1)/pi
     456!         pcvgu(ngridmx,l) = SSUM(iim,zcosbis,1)/pi
    430457         zvfi(ngridmx,l)  = SSUM(iim,zsin,1)/pi
    431          pcvgv(ngridmx,l) = SSUM(iim,zsinbis,1)/pi
     458!         pcvgv(ngridmx,l) = SSUM(iim,zsinbis,1)/pi
    432459
    433460      ENDDO
     
    449476c   ---------------------
    450477
    451 
    452       if (planet_type=="earth") then
    453478#ifdef CPP_EARTH
    454479
     
    509534      zdqfi(:,:,:)=zdqfic(:,:,:)/nsplit_phys
    510535
     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
    511566#endif
    512       endif !of if (planet_type=="earth")
    513567
    514568500   CONTINUE
     
    526580c   ---------------------
    527581
    528       DO l=1,llm
     582! ADAPTATION GCM POUR CP(T)
     583         ztfi=ztfi+zdtfi*dtphys
     584      call t2tpot(ngridmx*llm,ztfi,zteta,zpk)
    529585
    530586         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
    533589         ENDDO
    534590
     
    536592            ig0=1+(j-2)*iim
    537593            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
    539595            ENDDO
    540                pdhfi(iip1,j,l) =  pdhfi(1,j,l)
    541          ENDDO
    542 
    543       ENDDO
     596               pdhfi(iip1,j,:) =  pdhfi(1,j,:)
     597         ENDDO
    544598
    545599
     
    563617!      ENDDO
    564618
    565 c   63. traceurs
     619c   63. traceurs (tous en intensifs)
    566620c   ------------
    567621C     initialisation des tendances
  • trunk/libf/dyn3d/comconst.h

    r1 r5  
    1212     &                   ,tau_top_bound,                                &
    1313     & daylen,year_day,molmass
    14 
     14      COMMON/cpdetvenus/nu_venus,t0_venus
    1515
    1616      INTEGER im,jm,lllm,imp1,jmp1,lllmm1,lllmp1,lcl
     
    3535      REAL molmass ! (g/mol) molar mass of the atmosphere
    3636
     37      REAL nu_venus,t0_venus ! coeffs needed for Cp(T), Venus atmosphere
     38
    3739
    3840!-----------------------------------------------------------------------
  • trunk/libf/dyn3d/diagedyn.F

    r1 r5  
    196196C     Compute vertical sum for each atmospheric column
    197197C     ================================================
     198! ADAPTATION GCM POUR CP(T)
     199      call tpot2t(imjmp1*llm,zh,zt,zpk)
    198200      DO k = 1, llm
    199201        DO i = 1, imjmp1
     
    206208     $        +zecin(i,k)*zairm(i,k)
    207209C         Air enthalpy
    208           zt(i,k)= zh(i,k) * zpk(i,k) / RCPD
    209210          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)
    211214          zh_qw_col(i) = zh_qw_col(i)
    212215     $        + zcpvap*zqw(i,k)*zairm(i,k)*zt(i,k)
  • trunk/libf/dyn3d/gcm.F

    r1 r5  
    189189      endif
    190190!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     191c
     192c Initialisations pour Cp(T) Venus
     193      call ini_cpdet
     194c
    191195c-----------------------------------------------------------------------
    192196c   Choix du calendrier
  • trunk/libf/dyn3d/leapfrog.F

    r1 r5  
    8787      REAL phi(ip1jmp1,llm)                  ! geopotentiel
    8888      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 
    8992
    9093c variables dynamiques intermediaire pour le transport
     
    298301c   --------------------------------
    299302
    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   )
    301307
    302308      time = jD_cur + jH_cur
    303309      CALL caldyn
    304      $  ( itau,ucov,vcov,teta,ps,masse,pk,pkf,phis ,
     310     $  ( itau,ucov,vcov,teta,ps,masse,pk,pkf,tsurpk,phis ,
    305311     $    phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time )
    306312
     
    473479
    474480c   dissipation
     481! ADAPTATION GCM POUR CP(T)
     482        call tpot2t(ijp1llm,teta,temp,pk)
     483
    475484        CALL dissip(vcov,ucov,teta,p,dvdis,dudis,dtetadis)
    476485        ucov=ucov+dudis
     
    485494            call covcont(llm,ucov,vcov,ucont,vcont)
    486495            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
    489505            dtetadis=dtetadis+dtetaecdt
    490506        endif
     
    605621             if (leapf.or.(.not.leapf.and.(.not.forward))) then
    606622              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)
    608627              unat=0.
    609628              do l=1,llm
     
    723742c              IF(MOD(itau,iecri*day_step).EQ.0) THEN
    724743                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)
    726748                unat=0.
    727749                do l=1,llm
  • trunk/libf/dyn3d/vlspltqs.F

    r1 r5  
    6565      REAL rtt,retv,r2es,r3les,r3ies,r4les,r4ies,play
    6666      REAL ptarg,pdelarg,foeew,zdelta
    67       REAL tempe(ip1jmp1)
     67! ADAPTATION GCM POUR CP(T)
     68      REAL tempe(ip1jmp1,llm)
    6869
    6970c    fonction psat(T)
     
    8485c-- approximation: au milieu des couches play(l)=(p(l)+p(l+1))/2
    8586c   pour eviter une exponentielle.
     87
     88! ADAPTATION GCM POUR CP(T)
     89        call tpot2t(ip1jmp1*llm,teta,tempe,pk)
    8690        DO l = 1, llm
    8791         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)) )
    9293          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 )
    9495          qsat(ij,l) = qsat(ij,l) / ( 1. - retv * qsat(ij,l) )
    9596         ENDDO
Note: See TracChangeset for help on using the changeset viewer.