source: LMDZ4/trunk/libf/phylmd/cltrac.F @ 955

Last change on this file since 955 was 766, checked in by Laurent Fairhead, 18 years ago

Merge entre la version V3_conv et le HEAD
YM, JG, LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.4 KB
Line 
1!
2! $Header$
3!
4      SUBROUTINE cltrac(dtime,coef,t,tr,flux,paprs,pplay,delp,
5     s                  d_tr)
6      USE dimphy
7      IMPLICIT none
8c======================================================================
9c Auteur(s): O. Boucher (LOA/LMD) date: 19961127
10c            inspire de clvent
11c Objet: diffusion verticale de traceurs avec flux fixe a la surface
12c        ou/et flux du type c-drag
13c======================================================================
14c Arguments:
15c dtime----input-R- intervalle du temps (en second)
16c coef-----input-R- le coefficient d'echange (m**2/s) l>1
17c t--------input-R- temperature (K)
18c tr-------input-R- la q. de traceurs
19c flux-----input-R- le flux de traceurs a la surface
20c paprs----input-R- pression a inter-couche (Pa)
21c pplay----input-R- pression au milieu de couche (Pa)
22c delp-----input-R- epaisseur de couche (Pa)
23c cdrag----input-R- cdrag pour le flux de surface (non active)
24c tr0------input-R- traceurs a la surface ou dans l'ocean (non active)
25c d_tr-----output-R- le changement de tr
26c flux_tr--output-R- flux de tr
27c======================================================================
28cym#include "dimensions.h"
29cym#include "dimphy.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
121      RETURN
122      END
Note: See TracBrowser for help on using the repository browser.