source: LMDZ5/branches/LMDZ5_SPLA/libf/phylmd/cltrac_spl.F @ 5434

Last change on this file since 5434 was 2175, checked in by jescribano, 10 years ago

SPLA code included for first time

File size: 5.5 KB
Line 
1      SUBROUTINE cltrac_spl(dtime,coef,yu1,yv1,t,tr,
2     .                     flux,paprs,pplay,d_tr)
3
4      USE dimphy
5      IMPLICIT none
6c======================================================================
7c Auteur(s): O. Boucher (LOA/LMD) date: 19961127
8c            inspire de clvent
9c Objet: diffusion verticale de traceurs avec flux fixe a la surface
10c        ou/et flux du type c-drag
11c======================================================================
12c Arguments:
13c dtime----input-R- intervalle du temps (en second)
14c coef-----input-R- le coefficient d'echange (m**2/s) l>1
15c yu1------input-R- le vent dans le 1iere couche
16c yv1------input-R- le vent dans le 1iere couche
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======================================================================
28#include "dimensions.h"
29c#include "../phylmd/dimphy.h"
30      REAL dtime
31      REAL coef(klon,klev)
32      REAL yu1(klon), yv1(klon)
33      REAL t(klon,klev), tr(klon,klev)
34      REAL paprs(klon,klev+1), pplay(klon,klev), delp(klon,klev)
35      REAL d_tr(klon,klev)
36      REAL flux(klon), cdrag(klon), tr0(klon)
37c      REAL flux_tr(klon,klev)
38c======================================================================
39#include "../phylmd/YOMCST.h"
40c======================================================================
41      INTEGER i, k
42      REAL zx_ctr(klon,2:klev)
43      REAL zx_dtr(klon,2:klev)
44      REAL zx_buf(klon)
45      REAL zx_coef(klon,klev)
46      REAL local_tr(klon,klev)
47      REAL zx_alf1(klon), zx_alf2(klon), zx_flux(klon)
48c======================================================================
49c CHECKING VALUES
50!      print *,'CHECKING VALUES IN CLTRAC (INI)'
51!      print *,'d_tr = ',sum(d_tr),MINVAL(d_tr),MAXVAL(d_tr)
52!      print *,'flux = ',sum(flux),MINVAL(flux),MAXVAL(flux)
53!      print *,'tr = ',sum(tr),MINVAL(tr),MAXVAL(tr)
54c======================================================================
55      DO k = 1, klev
56      DO i = 1, klon
57         local_tr(i,k) = tr(i,k)
58         delp(i,k) = paprs(i,k)-paprs(i,k+1)
59      ENDDO
60      ENDDO
61c======================================================================
62      DO i = 1, klon
63         zx_alf1(i) = (paprs(i,1)-pplay(i,2))/(pplay(i,1)-pplay(i,2))
64         zx_alf2(i) = 1.0 - zx_alf1(i)
65         zx_flux(i) =  -flux(i)*dtime*RG
66c--pour le moment le flux est prescrit
67         cdrag(i) = 0.0
68c         cdrag(i) =  coef(i,1) * (1.0+SQRT(yu1(i)**2+yv1(i)**2))
69c     .                * pplay(i,1)/(RD*t(i,1))
70         tr0(i) = 0.0
71         zx_coef(i,1) = cdrag(i)*dtime*RG
72      ENDDO
73c======================================================================
74      DO k = 2, klev
75      DO i = 1, klon
76         zx_coef(i,k) = coef(i,k)*RG/(pplay(i,k-1)-pplay(i,k))
77     .                  *(paprs(i,k)*2/(t(i,k)+t(i,k-1))/RD)**2
78         zx_coef(i,k) = zx_coef(i,k)*dtime*RG
79      ENDDO
80      ENDDO
81c======================================================================
82      DO i = 1, klon
83         zx_buf(i) = delp(i,1) + zx_coef(i,1)*zx_alf1(i) + zx_coef(i,2)
84         zx_ctr(i,2) = (local_tr(i,1)*delp(i,1)+
85     .                  zx_coef(i,1)*tr0(i)-zx_flux(i))/zx_buf(i)
86         zx_dtr(i,2) = (zx_coef(i,2)-zx_alf2(i)*zx_coef(i,1)) /
87     .                  zx_buf(i)
88      ENDDO
89c
90      DO k = 3, klev
91      DO i = 1, klon
92         zx_buf(i) = delp(i,k-1) + zx_coef(i,k)
93     .                  + zx_coef(i,k-1)*(1.-zx_dtr(i,k-1))
94         zx_ctr(i,k) = (local_tr(i,k-1)*delp(i,k-1)
95     .                  +zx_coef(i,k-1)*zx_ctr(i,k-1) )/zx_buf(i)
96         zx_dtr(i,k) = zx_coef(i,k)/zx_buf(i)
97      ENDDO
98      ENDDO
99      DO i = 1, klon
100         local_tr(i,klev) = ( local_tr(i,klev)*delp(i,klev)
101     .                        +zx_coef(i,klev)*zx_ctr(i,klev) )
102     .                   / ( delp(i,klev) + zx_coef(i,klev)
103     .                       -zx_coef(i,klev)*zx_dtr(i,klev) )
104      ENDDO
105      DO k = klev-1, 1, -1
106      DO i = 1, klon
107         local_tr(i,k) = zx_ctr(i,k+1) + zx_dtr(i,k+1)*local_tr(i,k+1)
108      ENDDO
109      ENDDO
110c======================================================================
111!      print *,'CHECKING VALUES IN CLTRAC (FIN)'
112!      print *,'local_tr = ',sum(local_tr),MINVAL(local_tr),
113!     .                                    MAXVAL(local_tr)
114!      print *,'zx_ctr = ',sum(zx_ctr),MINVAL(zx_ctr),MAXVAL(zx_ctr)
115!      print *,'zx_dtr = ',sum(zx_dtr),MINVAL(zx_dtr),MAXVAL(zx_dtr)
116!      print *,'tr = ',sum(tr),MINVAL(tr),MAXVAL(tr)
117c======================================================================
118c== flux_tr est le flux de traceur (positif vers bas)
119c      DO i = 1, klon
120c         flux_tr(i,1) = zx_coef(i,1)/(RG*dtime)
121c      ENDDO
122c      DO k = 2, klev
123c      DO i = 1, klon
124c         flux_tr(i,k) = zx_coef(i,k)/(RG*dtime)
125c     .               * (local_tr(i,k)-local_tr(i,k-1))
126c      ENDDO
127c      ENDDO
128c======================================================================
129      DO k = 1, klev
130      DO i = 1, klon
131         d_tr(i,k) = local_tr(i,k) - tr(i,k)
132      ENDDO
133      ENDDO
134!      print *,'CHECKING VALUES IN CLTRAC (END)'
135!      print *,'d_tr = ',sum(d_tr),MINVAL(d_tr),MAXVAL(d_tr)
136c
137      RETURN
138      END
Note: See TracBrowser for help on using the repository browser.