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

Last change on this file since 602 was 524, checked in by lmdzadmin, 20 years ago

Initial revision

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