source: LMDZ4/branches/LMDZ4-dev/libf/phylmd/cvltr.F90 @ 1248

Last change on this file since 1248 was 1191, checked in by jghattas, 15 years ago

Reecriture de phytrac et les routines concernes (Anthony Jamelot)

  • les suffix change de F -> F90 (nflxtr.F90,cltracrn.F90,initrrnpb.F90,cvltr.F90,minmaxqfi.F90,cltrac.F90,phytrac.F90)

Traitement d'un nouveau traceur berelium (optionel, toujours pour des
tests)(Anthony Jamelot)

  • radiornpb.F change du nom pour radio_decay.F90 car il traite maintenant tout les traceurs radioactives
  • ajoute init_be.F90

Nouveau interface dans phytrac pour serparer les calculs et appels
specifique a INCA avec les traitements des traceurs specifiques au LMDZ
(JG)

  • ajoute tracinca_mod.F90 pour les appeles a INCA
  • ajoute traclmdz_mod.F90 pour les calculs des traceurs specifiques a LMDZ
  • enleve fichier restartrac et ajoute la variable trs dans restartphy.nc

La convergence numerique a etait rompue uniquement pour les traceurs
LMDZ RN et PB.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.7 KB
Line 
1!
2! $Id $
3!
4SUBROUTINE cvltr(pdtime,da, phi, mp,paprs,pplay,x,upd,dnd,dx)
5  USE dimphy
6  IMPLICIT NONE
7!=====================================================================
8! Objet : convection des traceurs / KE
9! Auteurs: M-A Filiberti and J-Y Grandpeix
10!=====================================================================
11
12  include "YOMCST.h"
13  include "YOECUMF.h"
14
15! Entree
16  REAL,INTENT(IN)                           :: pdtime
17  REAL,DIMENSION(klon,klev),INTENT(IN)      :: da
18  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: phi
19  REAL,DIMENSION(klon,klev),INTENT(IN)      :: mp
20  REAL,DIMENSION(klon,klev+1),INTENT(IN)    :: paprs ! pression aux 1/2 couches (bas en haut)
21  REAL,DIMENSION(klon,klev),INTENT(IN)      :: pplay ! pression pour le milieu de chaque couche
22  REAL,DIMENSION(klon,klev),INTENT(IN)      :: x     ! q de traceur (bas en haut)
23  REAL,DIMENSION(klon,klev),INTENT(IN)      :: upd   ! saturated updraft mass flux
24  REAL,DIMENSION(klon,klev),INTENT(IN)      :: dnd   ! saturated downdraft mass flux
25
26! Sortie
27  REAL,DIMENSION(klon,klev),INTENT(OUT) :: dx ! tendance de traceur  (bas en haut)
28
29! Variables locales     
30  REAL,DIMENSION(klon,klev)       :: zed
31  REAL,DIMENSION(klon,klev,klev)  :: zmd
32  REAL,DIMENSION(klon,klev,klev)  :: za
33  REAL,DIMENSION(klon,klev)       :: zmfd,zmfa
34  REAL,DIMENSION(klon,klev)       :: zmfp,zmfu
35  INTEGER                         :: i,k,j
36
37! =========================================
38! calcul des tendances liees au downdraft
39! =========================================
40  zed(:,:)=0.
41  zmfd(:,:)=0.
42  zmfa(:,:)=0.
43  zmfu(:,:)=0.
44  zmfp(:,:)=0.
45  zmd(:,:,:)=0.
46  za(:,:,:)=0.
47! entrainement
48  DO k=1,klev-1
49     DO i=1,klon
50        zed(i,k)=max(0.,mp(i,k)-mp(i,k+1))
51     END DO
52  END DO
53
54! calcul de la matrice d echange
55! matrice de distribution de la masse entrainee en k
56
57  DO k=1,klev
58     DO i=1,klon
59        zmd(i,k,k)=zed(i,k)
60     END DO
61  END DO
62  DO k=2,klev
63     DO j=k-1,1,-1
64        DO i=1,klon
65           if(mp(i,j+1).ne.0) then
66              zmd(i,j,k)=zmd(i,j+1,k)*min(1.,mp(i,j)/mp(i,j+1))
67           ENDif
68        END DO
69     END DO
70  END DO
71  DO k=1,klev
72     DO j=1,klev-1
73        DO i=1,klon
74           za(i,j,k)=max(0.,zmd(i,j+1,k)-zmd(i,j,k))
75        END DO
76     END DO
77  END DO
78!
79! rajout du terme lie a l ascendance induite
80!
81  DO j=2,klev
82     DO i=1,klon
83        za(i,j,j-1)=za(i,j,j-1)+mp(i,j)
84     END DO
85  END DO
86!
87! tendances
88!           
89  DO k=1,klev
90     DO j=1,klev
91        DO i=1,klon
92           zmfd(i,j)=zmfd(i,j)+za(i,j,k)*(x(i,k)-x(i,j))
93        END DO
94     END DO
95  END DO
96!
97! =========================================
98! calcul des tendances liees aux flux satures
99! =========================================
100  DO j=1,klev
101     DO i=1,klon
102        zmfa(i,j)=da(i,j)*(x(i,1)-x(i,j))
103     END DO
104  END DO
105  DO k=1,klev
106     DO j=1,klev
107        DO i=1,klon
108           zmfp(i,j)=zmfp(i,j)+phi(i,j,k)*(x(i,k)-x(i,j))
109        END DO
110     END DO
111  END DO
112  DO j=1,klev-1
113     DO i=1,klon
114        zmfu(i,j)=max(0.,upd(i,j+1)+dnd(i,j+1))*(x(i,j+1)-x(i,j))
115     END DO
116  END DO
117  DO j=2,klev
118     DO i=1,klon
119        zmfu(i,j)=zmfu(i,j)+min(0.,upd(i,j)+dnd(i,j))*(x(i,j)-x(i,j-1))
120     END DO
121  END DO
122
123! =========================================
124! calcul final des tendances
125! =========================================
126  DO k=1, klev
127     DO i=1, klon
128        dx(i,k)=(zmfd(i,k)+zmfu(i,k)       &
129             +zmfa(i,k)+zmfp(i,k))*pdtime  &
130             *RG/(paprs(i,k)-paprs(i,k+1))
131        !          print*,'dx',k,dx(i,k)
132     ENDDO
133  ENDDO
134
135! test de conservation du traceur
136!      conserv=0.
137!      DO k=1, klev
138!        DO i=1, klon
139!         conserv=conserv+dx(i,k)*   &
140!        (paprs(i,k)-paprs(i,k+1))/RG
141!        ENDDO
142!      ENDDO
143!      print *,'conserv',conserv
144     
145END SUBROUTINE cvltr
Note: See TracBrowser for help on using the repository browser.