source: trunk/LMDZ.VENUS/libf/phyvenus/clmain_ideal.F @ 3461

Last change on this file since 3461 was 2135, checked in by slebonnois, 6 years ago

SL, Venus: new keys for flexibility cp0/cp(T) and Held-Suarez type physics

File size: 9.6 KB
Line 
1!
2! $Header: /home/cvsroot/LMDZ4/libf/phylmd/clmain.F,v 1.3 2005/02/07 16:41:35 fairhead Exp $
3!
4c
5c
6      SUBROUTINE clmain_ideal(dtime,itap,
7     .                  t,u,v,
8     .                  rmu0,
9     .                  ts,
10     .                  ftsoil,
11     .                  paprs,pplay,ppk,radsol,albe,
12     .                  solsw, sollw, sollwdown, fder,
13     .                  rlon, rlat, cufi, cvfi,
14     .                  debut, lafin,
15     .                  d_t,d_u,d_v,d_ts,
16     .                  flux_t,flux_u,flux_v,cdragh,cdragm,
17     .                  dflux_t,
18     .                  zcoefh,zu1,zv1)
19
20c---------------------------------------------------------------
21c POUR VENUS
22c
23c Routine pour une Couche Limite ultra-simple:
24c  - Rayleigh friction dans la couche la plus basse, tau=3Ed=2.6e5s
25c  - Kedd=0.15 m^2/s
26
27c S Lebonnois, 10/11/08
28c---------------------------------------------------------------
29      USE ioipsl
30      use dimphy
31      use mod_grid_phy_lmdz, only: nbp_lev
32      IMPLICIT none
33c======================================================================
34c Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
35c Objet: interface de "couche limite" (diffusion verticale)
36c Arguments:
37c dtime----input-R- interval du temps (secondes)
38c itap-----input-I- numero du pas de temps
39c t--------input-R- temperature (K)
40c u--------input-R- vitesse u
41c v--------input-R- vitesse v
42c ts-------input-R- temperature du sol (en Kelvin)
43c paprs----input-R- pression a intercouche (Pa)
44c pplay----input-R- pression au milieu de couche (Pa)
45c radsol---input-R- flux radiatif net (positif vers le sol) en W/m**2
46c rlat-----input-R- latitude en degree
47c cufi-----input-R- resolution des mailles en x (m)
48c cvfi-----input-R- resolution des mailles en y (m)
49c
50c d_t------output-R- le changement pour "t"
51c d_u------output-R- le changement pour "u"
52c d_v------output-R- le changement pour "v"
53c d_ts-----output-R- le changement pour "ts"
54c flux_t---output-R- flux de chaleur sensible (CpT) J/m**2/s (W/m**2)
55c                    (orientation positive vers le bas)
56c flux_u---output-R- tension du vent X: (kg m/s)/(m**2 s) ou Pascal
57c flux_v---output-R- tension du vent Y: (kg m/s)/(m**2 s) ou Pascal
58c dflux_t derive du flux sensible
59cAA on rajoute en output yu1 et yv1 qui sont les vents dans
60cAA la premiere couche
61c======================================================================
62c$$$ PB ajout pour soil
63#include "dimsoil.h"
64#include "iniprint.h"
65#include "clesphys.h"
66#include "compbl.h"
67c
68      REAL dtime
69      integer itap
70      REAL t(klon,klev)
71      REAL u(klon,klev), v(klon,klev)
72      REAL paprs(klon,klev+1), pplay(klon,klev), radsol(klon)
73! ADAPTATION GCM POUR CP(T)
74      real ppk(klon,klev)
75      REAL rlon(klon), rlat(klon), cufi(klon), cvfi(klon)
76      REAL d_t(klon, klev)
77      REAL d_u(klon, klev), d_v(klon, klev)
78      REAL flux_t(klon,klev)
79      REAL dflux_t(klon)
80
81      REAL flux_u(klon,klev), flux_v(klon,klev)
82      REAL cdragh(klon), cdragm(klon)
83      real rmu0(klon)         ! cosinus de l'angle solaire zenithal
84      LOGICAL debut, lafin
85c
86      REAL ts(klon)
87      REAL d_ts(klon)
88      REAL albe(klon)
89C
90      REAL fder(klon)
91      REAL sollw(klon), solsw(klon), sollwdown(klon)
92cAA
93      REAL zcoefh(klon,klev)
94      REAL zu1(klon)
95      REAL zv1(klon)
96cAA
97c$$$ PB ajout pour soil
98      REAL ftsoil(klon,nsoilmx)
99      REAL ytsoil(klon,nsoilmx)
100c======================================================================
101      EXTERNAL clqh, clvent, coefkz
102c======================================================================
103      REAL yts(klon)
104      REAL yalb(klon)
105      REAL yu1(klon), yv1(klon)
106      real ysollw(klon), ysolsw(klon), ysollwdown(klon)
107      real yfder(klon), ytaux(klon), ytauy(klon)
108      REAL yrads(klon)
109C
110      REAL y_d_ts(klon)
111      REAL y_d_t(klon, klev)
112      REAL y_d_u(klon, klev), y_d_v(klon, klev)
113      REAL y_flux_t(klon,klev)
114      REAL y_flux_u(klon,klev), y_flux_v(klon,klev)
115      REAL y_dflux_t(klon)
116      REAL ycoefh(klon,klev), ycoefm(klon,klev)
117      REAL yu(klon,klev), yv(klon,klev)
118      REAL yt(klon,klev)
119      REAL ypaprs(klon,klev+1), ypplay(klon,klev), ydelp(klon,klev)
120c
121      REAL ycoefm0(klon,klev), ycoefh0(klon,klev)
122
123      real yzlay(klon,klev),yzlev(klon,klev+1)
124      real yteta(klon,klev)
125      real ykmm(klon,klev+1),ykmn(klon,klev+1)
126      real ykmq(klon,klev+1)
127      real yustar(klon),y_cd_m(klon),y_cd_h(klon)
128c
129#include "YOMCST.h"
130      REAL u1lay(klon), v1lay(klon)
131      REAL delp(klon,klev)
132      INTEGER i, k
133      INTEGER ni(klon), knon, j
134     
135c======================================================================
136      REAL zx_alf1, zx_alf2 !valeur ambiante par extrapola.
137c======================================================================
138c
139      LOGICAL zxli ! utiliser un jeu de fonctions simples
140      PARAMETER (zxli=.FALSE.)
141c
142      REAL zt, zdelta, zcor
143C
144      real taurelax
145
146c=========================================================
147c DEBUT
148c=========================================================
149         
150      DO k = 1, klev   ! epaisseur de couche
151      DO i = 1, klon
152         delp(i,k) = paprs(i,k)-paprs(i,k+1)
153      ENDDO
154      ENDDO
155      DO i = 1, klon  ! vent de la premiere couche
156ccc         zx_alf1 = (paprs(i,1)-pplay(i,2))/(pplay(i,1)-pplay(i,2))
157         zx_alf1 = 1.0
158         zx_alf2 = 1.0 - zx_alf1
159         u1lay(i) = u(i,1)*zx_alf1 + u(i,2)*zx_alf2
160         v1lay(i) = v(i,1)*zx_alf1 + v(i,2)*zx_alf2
161      ENDDO
162c
163c initialisation:
164c
165      DO i = 1, klon
166         cdragh(i) = 0.0
167         cdragm(i) = 0.0
168         dflux_t(i) = 0.0
169         zu1(i) = 0.0
170         zv1(i) = 0.0
171      ENDDO
172      yts = 0.0
173      yalb = 0.0
174      yfder = 0.0
175      ytaux = 0.0
176      ytauy = 0.0
177      ysolsw = 0.0
178      ysollw = 0.0
179      ysollwdown = 0.0
180      yu1 = 0.0
181      yv1 = 0.0
182      yrads = 0.0
183      ypaprs = 0.0
184      ypplay = 0.0
185      ydelp = 0.0
186      yu = 0.0
187      yv = 0.0
188      yt = 0.0
189      y_flux_u = 0.0
190      y_flux_v = 0.0
191      y_d_ts = 0.0
192      y_d_t = 0.0
193      y_d_u = 0.0
194      y_d_v = 0.0
195      y_flux_t = 0.0
196C$$ PB
197      y_dflux_t = 0.0
198      ytsoil = 999999.
199      DO i = 1, klon
200         d_ts(i) = 0.0
201      ENDDO
202      flux_t = 0.
203      flux_u = 0.
204      flux_v = 0.
205      DO k = 1, klev
206      DO i = 1, klon
207         d_t(i,k) = 0.0
208         d_u(i,k) = 0.0
209         d_v(i,k) = 0.0
210         zcoefh(i,k) = 0.0
211      ENDDO
212      ENDDO
213c
214c chercher les indices:
215      DO j = 1, klon
216         ni(j) = j
217      ENDDO
218      knon = klon
219
220      DO j = 1, knon
221      i = ni(j)
222        yts(j) = ts(i)
223        yalb(j) = albe(i)
224        yfder(j) = fder(i)
225        ytaux(j) = flux_u(i,1)
226        ytauy(j) = flux_v(i,1)
227        ysolsw(j) = solsw(i)
228        ysollw(j) = sollw(i)
229        ysollwdown(j) = sollwdown(i)
230        yu1(j) = u1lay(i)
231        yv1(j) = v1lay(i)
232        yrads(j) =  ysolsw(j)+ ysollw(j)
233        ypaprs(j,klev+1) = paprs(i,klev+1)
234      END DO
235C
236c$$$ PB ajour pour soil
237      DO k = 1, nsoilmx
238        DO j = 1, knon
239          i = ni(j)
240          ytsoil(j,k) = ftsoil(i,k)
241        END DO 
242      END DO
243      DO k = 1, klev
244      DO j = 1, knon
245      i = ni(j)
246        ypaprs(j,k) = paprs(i,k)
247        ypplay(j,k) = pplay(i,k)
248        ydelp(j,k) = delp(i,k)
249        yu(j,k) = u(i,k)
250        yv(j,k) = v(i,k)
251        yt(j,k) = t(i,k)
252      ENDDO
253      ENDDO
254c
255c
256cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
257c RAYLEIGH FRICTION (implicit scheme) dans 1ere couche
258c Ref: thèse de C. Lee Oxford 2006
259cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
260
261      taurelax = 2.6e5
262      yu1 = yu1 / (1+dtime/taurelax)
263      yv1 = yv1 / (1+dtime/taurelax)
264      yu(:,1) = yu(:,1) / (1+dtime/taurelax)
265      yv(:,1) = yv(:,1) / (1+dtime/taurelax)
266
267cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
268c Coefficient de diffusion verticale
269cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
270
271      ycoefm = 0.15
272
273cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
274c calculer la diffusion des vitesses "u" et "v"
275cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
276
277      CALL clvent(knon,dtime,yu1,yv1,ycoefm,yt,yu,ypaprs,ypplay,ydelp,
278     s            y_d_u,y_flux_u)
279      CALL clvent(knon,dtime,yu1,yv1,ycoefm,yt,yv,ypaprs,ypplay,ydelp,
280     s            y_d_v,y_flux_v)
281
282c pour le couplage
283      ytaux = y_flux_u(:,1)
284      ytauy = y_flux_v(:,1)
285
286cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
287c pas de diffusion de "q" et de "h"
288cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
289
290      ycoefh = 0.
291
292c=========================
293c FIN: tendances
294c=========================
295
296      DO j = 1, knon
297         i = ni(j)
298         d_ts(i) = y_d_ts(j)
299         albe(i) = yalb(j)
300         cdragh(i) = cdragh(i) + ycoefh(j,1)
301         cdragm(i) = cdragm(i) + ycoefm(j,1)
302         dflux_t(i) = dflux_t(i) + y_dflux_t(j)
303         zu1(i) = zu1(i) + yu1(j)
304         zv1(i) = zv1(i) + yv1(j)
305      END DO
306
307c$$$ PB ajout pour soil
308      DO k = 1, nsoilmx
309        DO j = 1, knon
310         i = ni(j)
311         ftsoil(i, k) = ytsoil(j,k)
312        ENDDO
313      END DO
314     
315      DO k = 1, klev
316        DO j = 1, knon
317         i = ni(j)
318         flux_t(i,k) = y_flux_t(j,k)
319         flux_u(i,k) = y_flux_u(j,k)
320         flux_v(i,k) = y_flux_v(j,k)
321         d_t(i,k) = d_t(i,k) + y_d_t(j,k)
322         d_u(i,k) = d_u(i,k) + y_d_u(j,k)
323         d_v(i,k) = d_v(i,k) + y_d_v(j,k)
324         zcoefh(i,k) = zcoefh(i,k) + ycoefh(j,k)
325        ENDDO
326      ENDDO
327
328c --------------------
329c TEST!!!!! PAS DE MELANGE PAR TURBULENCE !!!
330c       d_u = 0.
331c       d_v = 0.
332c       flux_u = 0.
333c       flux_v = 0.
334c --------------------
335
336c     print*,"y_d_t apres clqh=",y_d_t(klon/2,:)
337
338      RETURN
339      END
340
Note: See TracBrowser for help on using the repository browser.