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

Last change on this file since 3556 was 1530, checked in by emillour, 9 years ago

Venus and Titan GCMs:
Updates in the physics to keep up with updates in LMDZ5 (up to
LMDZ5 trunk, rev 2350) concerning dynamics/physics separation:

  • Adapted makelmdz and makelmdz_fcm script to stop if trying to compile 1d model or newstart or start2archive in parallel.
  • got rid of references to "dimensions.h" in physics. Within physics packages, use nbp_lon (=iim), nbp_lat (=jjmp1) and nbp_lev (=llm) from module mod_grid_phy_lmdz (in phy_common) instead. Only partially done for Titan, because of many hard-coded commons; a necessary first step will be to clean these up (using modules).

EM

File size: 4.5 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      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
120c ATTENTION SHUNTE!!!!!!
121
122c      DO k = 1, klev
123c      DO i = 1, klon
124c         d_tr(i,k) = 0.
125c      ENDDO
126c      ENDDO
127
128      RETURN
129      END
Note: See TracBrowser for help on using the repository browser.