Ignore:
Timestamp:
Jun 26, 2014, 12:25:31 PM (10 years ago)
Author:
slebonnois
Message:

SL: many bug corrections in phyvenus, some cleaning, and a new ksi matrix format for Venus IR

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.VENUS/libf/phyvenus/physiq.F

    r1160 r1301  
    77     .            paprs,pplay,ppk,pphi,pphis,presnivs,
    88     .            u,v,t,qx,
    9      .            omega,
     9     .            flxmw,
    1010     .            d_u, d_v, d_t, d_qx, d_ps)
    1111
     
    4646c qx------input-R-mass mixing ratio traceurs (kg/kg)
    4747c d_t_dyn-input-R-tendance dynamique pour "t" (K/s)
    48 c omega---input-R-vitesse verticale en Pa/s
     48c flxmw---input-R-flux de masse vertical en kg/s
    4949c
    5050c d_u-----output-R-tendance physique de "u" (m/s/s)
     
    125125      REAL d_t_dyn(klon,klev)
    126126
    127       REAL omega(klon,klev)
     127      REAL flxmw(klon,klev)
    128128
    129129      REAL d_u(klon,klev)
     
    146146c Variables propres a la physique
    147147c
    148       REAL,save,allocatable :: rlev(:,:) ! altitude a chaque niveau (interface inferieure de la couche)
    149148      INTEGER,save :: itap        ! compteur pour la physique
    150149      REAL delp(klon,klev)        ! epaisseur d'une couche
     150      REAL omega(klon,klev)       ! vitesse verticale en Pa/s
     151
    151152     
    152153      INTEGER igwd,idx(klon),itest(klon)
     
    242243c
    243244      REAL zphi(klon,klev)
    244 c
     245      REAL zzlev(klon,klev+1),zzlay(klon,klev),z1,z2
     246
    245247c Variables du changement
    246248c
     
    362364c========================
    363365      IF (debut) THEN
    364          allocate(rlev(klon,klevp1))
    365366         allocate(source(klon,nqmax))
    366367
     
    621622      ENDIF
    622623c====================================================================
     624
     625c Calcule de vitesse verticale a partir de flux de masse verticale
     626      DO k = 1, klev
     627       DO i = 1, klon
     628        omega(i,k) = RG*flxmw(i,k) / airephy(i)
     629       END DO
     630      END DO
     631
    623632c
    624633c Ajouter le geopotentiel du sol:
     
    629638      ENDDO
    630639      ENDDO
     640
     641c   calcul du geopotentiel aux niveaux intercouches
     642c   ponderation des altitudes au niveau des couches en dp/p
     643
     644      DO k=1,klev
     645         DO i=1,klon
     646            zzlay(i,k)=zphi(i,k)/RG
     647         ENDDO
     648      ENDDO
     649      DO i=1,klon
     650         zzlev(i,1)=pphis(i)/RG
     651      ENDDO
     652      DO k=2,klev
     653         DO i=1,klon
     654            z1=(pplay(i,k-1)+paprs(i,k))/(pplay(i,k-1)-paprs(i,k))
     655            z2=(paprs(i,k)  +pplay(i,k))/(paprs(i,k)  -pplay(i,k))
     656            zzlev(i,k)=(z1*zzlay(i,k-1)+z2*zzlay(i,k))/(z1+z2)
     657         ENDDO
     658      ENDDO
     659      DO i=1,klon
     660         zzlev(i,klev+1)=zzlay(i,klev)+(zzlay(i,klev)-zzlev(i,klev))
     661      ENDDO
     662
    631663c====================================================================
    632664c
     
    729761      fder = dlw
    730762
    731 c     print*,"radsol avant clmain=",radsol(klon/2)
    732 c     print*,"solsw avant clmain=",solsw(klon/2)
    733 c     print*,"sollw avant clmain=",sollw(klon/2)
    734 
    735763! ADAPTATION GCM POUR CP(T)
    736764
     
    749777     s            ycoefh,yu1,yv1)
    750778
    751 c     print*,"radsol apres clmain=",radsol(klon/2)
    752 c     print*,"solsw apres clmain=",solsw(klon/2)
    753 c     print*,"sollw apres clmain=",sollw(klon/2)
    754 
    755779CXXX Incrementation des flux
    756780      DO i = 1, klon
     
    770794      ENDDO
    771795      ENDDO
    772 c
    773 c        print*,"d_t_vdf1=",d_t_vdf(1,:)*dtime
    774 c        print*,"d_t_vdf2=",d_t_vdf(klon/2,:)*dtime
    775 c        print*,"d_t_vdf3=",d_t_vdf(klon,:)*dtime
    776 c        print*,"d_u_vdf=",d_u_vdf(klon/2,:)*dtime
    777 c        print*,"d_v_vdf=",d_v_vdf(klon/2,:)*dtime
    778796
    779797C TRACEURS
     
    810828c Incrementer la temperature du sol
    811829c
    812 c     print*,'Tsol avant clmain:',ftsol(1)
    813830      DO i = 1, klon
    814831         ftsol(i) = ftsol(i) + d_ts(i)
    815832      ENDDO
    816 c     print*,'Tsol apres clmain:',ftsol(1)
    817833
    818834c Calculer la derive du flux infrarouge
     
    878894         v_seri(:,:) = v_seri(:,:) + d_v_ajs(:,:)
    879895         d_v_ajs(:,:)= d_v_ajs(:,:)/dtime          ! (m/s)/s
    880       if (iflag_trac.eq.1) then
     896
     897         if (iflag_trac.eq.1) then
    881898           tr_seri(:,:,:) = tr_seri(:,:,:) + d_tr_ajs(:,:,:)
    882899           d_tr_ajs(:,:,:)= d_tr_ajs(:,:,:)/dtime  ! /s
    883       endif
    884 
    885 c        print*,"d_t_ajs1=",d_t_ajs(1,:)*dtime
    886 c        print*,"d_t_ajs2=",d_t_ajs(klon/2,:)*dtime
    887 c        print*,"d_t_ajs3=",d_t_ajs(klon,:)*dtime
    888 c        print*,"d_u_ajs=",d_u_ajs(klon/2,:)*dtime
    889 c        print*,"d_v_ajs=",d_v_ajs(klon/2,:)*dtime
     900         endif
    890901
    891902      endif
     
    919930c     PRINT*,'dtimerad,dtime,radpas',dtimerad,dtime,radpas
    920931           
    921 c     print*,"radsol avant radlwsw=",radsol(klon/2)
    922 c     print*,"solsw avant radlwsw=",solsw(klon/2)
    923 c     print*,"sollw avant radlwsw=",sollw(klon/2)
    924 c     print*,"avant radlwsw"
    925 
    926932      CALL radlwsw
    927      e            (dist, rmu0, fract,
     933     e            (dist, rmu0, fract, zzlev,
    928934     e             paprs, pplay,ftsol, t_seri,
    929935     s             heat,cool,radsol,
     
    932938     s             lwnet, swnet)
    933939
    934 c     print*,"apres radlwsw"
    935 c     print*,"radsol apres radlwsw=",radsol(klon/2)
    936 c     print*,"solsw apres radlwsw=",solsw(klon/2)
    937 c     print*,"sollw apres radlwsw=",sollw(klon/2)
    938940      itaprad = 0
    939941      DO k = 1, klev
    940942      DO i = 1, klon
    941          dtrad(i,k) = heat(i,k)-cool(i,k)
    942          dtrad(i,k) = dtrad(i,k)/RDAY  !K/s
    943       ENDDO
    944       ENDDO
    945 c        print*,"dtrad1=",dtrad(1,:)*dtime
    946 c        print*,"dtrad2=",dtrad(klon/2,:)*dtime
    947 c        print*,"dtrad3=",dtrad(klon,:)*dtime
    948      
     943         dtrad(i,k) = heat(i,k)-cool(i,k)  !K/s
     944      ENDDO
     945      ENDDO
     946
    949947      ENDIF
    950948      itaprad = itaprad + 1
Note: See TracChangeset for help on using the changeset viewer.