source: trunk/LMDZ.VENUS/libf/phyvenus/cltrac.F @ 1453

Last change on this file since 1453 was 1442, checked in by slebonnois, 9 years ago

SL: update of the Venus GCM, + corrections on routines used for newstart/start2archive for Titan and Venus, + some modifications on tools

File size: 4.6 KB
Line 
1!
2! $Header: /home/cvsroot/LMDZ4/libf/phylmd/cltrac.F,v 1.1.1.1 2004/05/19 12:53:07 lmdzadmin Exp $
3!
4      SUBROUTINE cltrac(dtime,coef,t,tr,flux,paprs,pplay,delp,
5     s                  d_tr)
6
7      use dimphy
8      IMPLICIT none
9c======================================================================
10c Auteur(s): O. Boucher (LOA/LMD) date: 19961127
11c            inspire de clvent
12c Objet: diffusion verticale de traceurs avec flux fixe a la surface
13c        ou/et flux du type c-drag
14c======================================================================
15c Arguments:
16c dtime----input-R- intervalle du temps (en second)
17c coef-----input-R- le coefficient d'echange (m**2/s) l>1
18c t--------input-R- temperature (K)
19c tr-------input-R- la q. de traceurs
20c flux-----input-R- le flux de traceurs a la surface
21c paprs----input-R- pression a inter-couche (Pa)
22c pplay----input-R- pression au milieu de couche (Pa)
23c delp-----input-R- epaisseur de couche (Pa)
24c cdrag----input-R- cdrag pour le flux de surface (non active)
25c tr0------input-R- traceurs a la surface ou dans l'ocean (non active)
26c d_tr-----output-R- le changement de tr
27c flux_tr--output-R- flux de tr
28c======================================================================
29#include "dimensions.h"
30      REAL dtime
31      REAL coef(klon,klev)
32      REAL t(klon,klev), tr(klon,klev)
33      REAL paprs(klon,klev+1), pplay(klon,klev), delp(klon,klev)
34      REAL d_tr(klon,klev)
35      REAL flux(klon), cdrag(klon), tr0(klon)
36c      REAL flux_tr(klon,klev)
37c======================================================================
38#include "YOMCST.h"
39c======================================================================
40      INTEGER i, k
41      REAL zx_ctr(klon,2:klev)
42      REAL zx_dtr(klon,2:klev)
43      REAL zx_buf(klon)
44      REAL zx_coef(klon,klev)
45      REAL local_tr(klon,klev)
46      REAL zx_alf1(klon), zx_alf2(klon), zx_flux(klon)
47c======================================================================
48      DO k = 1, klev
49      DO i = 1, klon
50         local_tr(i,k) = tr(i,k)
51      ENDDO
52      ENDDO
53c
54
55c======================================================================
56      DO i = 1, klon
57         zx_alf1(i) = (paprs(i,1)-pplay(i,2))/(pplay(i,1)-pplay(i,2))
58         zx_alf2(i) = 1.0 - zx_alf1(i)
59         zx_flux(i) =  -flux(i)*dtime*RG
60c--pour le moment le flux est prescrit
61c--cdrag et zx_coef(1) vaut 0
62         cdrag(i) = 0.0
63         tr0(i) = 0.0
64         zx_coef(i,1) = cdrag(i)*dtime*RG
65      ENDDO
66c======================================================================
67      DO k = 2, klev
68      DO i = 1, klon
69         zx_coef(i,k) = coef(i,k)*RG/(pplay(i,k-1)-pplay(i,k))
70     .                  *(paprs(i,k)*2/(t(i,k)+t(i,k-1))/RD)**2
71         zx_coef(i,k) = zx_coef(i,k)*dtime*RG
72      ENDDO
73      ENDDO
74c======================================================================
75      DO i = 1, klon
76         zx_buf(i) = delp(i,1) + zx_coef(i,1)*zx_alf1(i) + zx_coef(i,2)
77         zx_ctr(i,2) = (local_tr(i,1)*delp(i,1)+
78     .                  zx_coef(i,1)*tr0(i)-zx_flux(i))/zx_buf(i)
79         zx_dtr(i,2) = (zx_coef(i,2)-zx_alf2(i)*zx_coef(i,1)) /
80     .                  zx_buf(i)
81      ENDDO
82c
83      DO k = 3, klev
84      DO i = 1, klon
85         zx_buf(i) = delp(i,k-1) + zx_coef(i,k)
86     .                  + zx_coef(i,k-1)*(1.-zx_dtr(i,k-1))
87         zx_ctr(i,k) = (local_tr(i,k-1)*delp(i,k-1)
88     .                  +zx_coef(i,k-1)*zx_ctr(i,k-1) )/zx_buf(i)
89         zx_dtr(i,k) = zx_coef(i,k)/zx_buf(i)
90      ENDDO
91      ENDDO
92      DO i = 1, klon
93         local_tr(i,klev) = ( local_tr(i,klev)*delp(i,klev)
94     .                        +zx_coef(i,klev)*zx_ctr(i,klev) )
95     .                   / ( delp(i,klev) + zx_coef(i,klev)
96     .                       -zx_coef(i,klev)*zx_dtr(i,klev) )
97      ENDDO
98      DO k = klev-1, 1, -1
99      DO i = 1, klon
100         local_tr(i,k) = zx_ctr(i,k+1) + zx_dtr(i,k+1)*local_tr(i,k+1)
101      ENDDO
102      ENDDO
103c======================================================================
104c== flux_tr est le flux de traceur (positif vers bas)
105c      DO i = 1, klon
106c         flux_tr(i,1) = zx_coef(i,1)/(RG*dtime)
107c      ENDDO
108c      DO k = 2, klev
109c      DO i = 1, klon
110c         flux_tr(i,k) = zx_coef(i,k)/(RG*dtime)
111c     .               * (local_tr(i,k)-local_tr(i,k-1))
112c      ENDDO
113c      ENDDO
114c======================================================================
115      DO k = 1, klev
116      DO i = 1, klon
117         d_tr(i,k) = local_tr(i,k) - tr(i,k)
118      ENDDO
119      ENDDO
120c
121c ATTENTION SHUNTE!!!!!!
122
123c      DO k = 1, klev
124c      DO i = 1, klon
125c         d_tr(i,k) = 0.
126c      ENDDO
127c      ENDDO
128
129      RETURN
130      END
Note: See TracBrowser for help on using the repository browser.