source: LMDZ6/branches/IPSLCM6.0.15/libf/phylmd/Dust/cltrac_spl.F @ 3158

Last change on this file since 3158 was 2630, checked in by fhourdin, 8 years ago

Importation du modèle d'aérosols de Boucher, Escribano et al.

File size: 5.4 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"
29      REAL dtime
30      REAL coef(klon,klev)
31      REAL yu1(klon), yv1(klon)
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======================================================================
48c CHECKING VALUES
49!      print *,'CHECKING VALUES IN CLTRAC (INI)'
50!      print *,'d_tr = ',sum(d_tr),MINVAL(d_tr),MAXVAL(d_tr)
51!      print *,'flux = ',sum(flux),MINVAL(flux),MAXVAL(flux)
52!      print *,'tr = ',sum(tr),MINVAL(tr),MAXVAL(tr)
53c======================================================================
54      DO k = 1, klev
55      DO i = 1, klon
56         local_tr(i,k) = tr(i,k)
57         delp(i,k) = paprs(i,k)-paprs(i,k+1)
58      ENDDO
59      ENDDO
60c======================================================================
61      DO i = 1, klon
62         zx_alf1(i) = (paprs(i,1)-pplay(i,2))/(pplay(i,1)-pplay(i,2))
63         zx_alf2(i) = 1.0 - zx_alf1(i)
64         zx_flux(i) =  -flux(i)*dtime*RG
65c--pour le moment le flux est prescrit
66         cdrag(i) = 0.0
67c         cdrag(i) =  coef(i,1) * (1.0+SQRT(yu1(i)**2+yv1(i)**2))
68c     .                * pplay(i,1)/(RD*t(i,1))
69         tr0(i) = 0.0
70         zx_coef(i,1) = cdrag(i)*dtime*RG
71      ENDDO
72c======================================================================
73      DO k = 2, klev
74      DO i = 1, klon
75         zx_coef(i,k) = coef(i,k)*RG/(pplay(i,k-1)-pplay(i,k))
76     .                  *(paprs(i,k)*2/(t(i,k)+t(i,k-1))/RD)**2
77         zx_coef(i,k) = zx_coef(i,k)*dtime*RG
78      ENDDO
79      ENDDO
80c======================================================================
81      DO i = 1, klon
82         zx_buf(i) = delp(i,1) + zx_coef(i,1)*zx_alf1(i) + zx_coef(i,2)
83         zx_ctr(i,2) = (local_tr(i,1)*delp(i,1)+
84     .                  zx_coef(i,1)*tr0(i)-zx_flux(i))/zx_buf(i)
85         zx_dtr(i,2) = (zx_coef(i,2)-zx_alf2(i)*zx_coef(i,1)) /
86     .                  zx_buf(i)
87      ENDDO
88c
89      DO k = 3, klev
90      DO i = 1, klon
91         zx_buf(i) = delp(i,k-1) + zx_coef(i,k)
92     .                  + zx_coef(i,k-1)*(1.-zx_dtr(i,k-1))
93         zx_ctr(i,k) = (local_tr(i,k-1)*delp(i,k-1)
94     .                  +zx_coef(i,k-1)*zx_ctr(i,k-1) )/zx_buf(i)
95         zx_dtr(i,k) = zx_coef(i,k)/zx_buf(i)
96      ENDDO
97      ENDDO
98      DO i = 1, klon
99         local_tr(i,klev) = ( local_tr(i,klev)*delp(i,klev)
100     .                        +zx_coef(i,klev)*zx_ctr(i,klev) )
101     .                   / ( delp(i,klev) + zx_coef(i,klev)
102     .                       -zx_coef(i,klev)*zx_dtr(i,klev) )
103      ENDDO
104      DO k = klev-1, 1, -1
105      DO i = 1, klon
106         local_tr(i,k) = zx_ctr(i,k+1) + zx_dtr(i,k+1)*local_tr(i,k+1)
107      ENDDO
108      ENDDO
109c======================================================================
110!      print *,'CHECKING VALUES IN CLTRAC (FIN)'
111!      print *,'local_tr = ',sum(local_tr),MINVAL(local_tr),
112!     .                                    MAXVAL(local_tr)
113!      print *,'zx_ctr = ',sum(zx_ctr),MINVAL(zx_ctr),MAXVAL(zx_ctr)
114!      print *,'zx_dtr = ',sum(zx_dtr),MINVAL(zx_dtr),MAXVAL(zx_dtr)
115!      print *,'tr = ',sum(tr),MINVAL(tr),MAXVAL(tr)
116c======================================================================
117c== flux_tr est le flux de traceur (positif vers bas)
118c      DO i = 1, klon
119c         flux_tr(i,1) = zx_coef(i,1)/(RG*dtime)
120c      ENDDO
121c      DO k = 2, klev
122c      DO i = 1, klon
123c         flux_tr(i,k) = zx_coef(i,k)/(RG*dtime)
124c     .               * (local_tr(i,k)-local_tr(i,k-1))
125c      ENDDO
126c      ENDDO
127c======================================================================
128      DO k = 1, klev
129      DO i = 1, klon
130         d_tr(i,k) = local_tr(i,k) - tr(i,k)
131      ENDDO
132      ENDDO
133!      print *,'CHECKING VALUES IN CLTRAC (END)'
134!      print *,'d_tr = ',sum(d_tr),MINVAL(d_tr),MAXVAL(d_tr)
135c
136      RETURN
137      END
Note: See TracBrowser for help on using the repository browser.