source: LMDZ4/branches/LMDZ4-dev-20091210/libf/phylmd/calcul_STDlev.h @ 5440

Last change on this file since 5440 was 1090, checked in by yann meurdesoif, 16 years ago

Optimisation Othman bouizi : plevel

YM

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 11.2 KB
Line 
1c
2c $Header$
3c
4c
5cIM on initialise les champs en debut du jour ou du mois
6c
7        CALL ini_undefSTD(nlevSTD,itap,
8     $           dtime,ecrit_day,ecrit_mth,
9     $                    tnondef,tsumSTD)
10        CALL ini_undefSTD(nlevSTD,itap,
11     $           dtime,ecrit_day,ecrit_mth,
12     $                    tnondef,usumSTD)
13        CALL ini_undefSTD(nlevSTD,itap,
14     $           dtime,ecrit_day,ecrit_mth,
15     $                    tnondef,vsumSTD)
16        CALL ini_undefSTD(nlevSTD,itap,
17     $           dtime,ecrit_day,ecrit_mth,
18     $                    tnondef,wsumSTD)
19        CALL ini_undefSTD(nlevSTD,itap,
20     $           dtime,ecrit_day,ecrit_mth,
21     $                    tnondef,phisumSTD)
22        CALL ini_undefSTD(nlevSTD,itap,
23     $           dtime,ecrit_day,ecrit_mth,
24     $                    tnondef,qsumSTD)
25        CALL ini_undefSTD(nlevSTD,itap,
26     $           dtime,ecrit_day,ecrit_mth,
27     $                    tnondef,rhsumSTD)
28        CALL ini_undefSTD(nlevSTD,itap,
29     $           dtime,ecrit_day,ecrit_mth,
30     $                    tnondef,uvsumSTD)
31        CALL ini_undefSTD(nlevSTD,itap,
32     $           dtime,ecrit_day,ecrit_mth,
33     $                    tnondef,vqsumSTD)
34        CALL ini_undefSTD(nlevSTD,itap,
35     $           dtime,ecrit_day,ecrit_mth,
36     $                    tnondef,vTsumSTD)
37        CALL ini_undefSTD(nlevSTD,itap,
38     $           dtime,ecrit_day,ecrit_mth,
39     $                    tnondef,wqsumSTD)
40        CALL ini_undefSTD(nlevSTD,itap,
41     $           dtime,ecrit_day,ecrit_mth,
42     $                    tnondef,vphisumSTD)
43        CALL ini_undefSTD(nlevSTD,itap,
44     $           dtime,ecrit_day,ecrit_mth,
45     $                    tnondef,wTsumSTD)
46        CALL ini_undefSTD(nlevSTD,itap,
47     $           dtime,ecrit_day,ecrit_mth,
48     $                    tnondef,u2sumSTD)
49        CALL ini_undefSTD(nlevSTD,itap,
50     $           dtime,ecrit_day,ecrit_mth,
51     $                    tnondef,v2sumSTD)
52        CALL ini_undefSTD(nlevSTD,itap,
53     $           dtime,ecrit_day,ecrit_mth,
54     $                    tnondef,T2sumSTD)
55c
56cIM on interpole sur les niveaux STD de pression a chaque pas de temps de la physique
57c
58c-------------------------------------------------------c
59c positionnement de l'argument logique a .false.        c
60c pour ne pas recalculer deux fois la meme chose !      c
61c a cet effet un appel a plevel_new a ete deplace       c
62c a la fin de la serie d'appels                         c
63c la boucle 'DO k=1, nlevSTD' a ete internalisee        c
64c dans plevel_new, d'ou la creation de cette routine... c
65c-------------------------------------------------------c
66c
67        CALL plevel_new(klon,klev,nlevSTD,.true.,pplay,rlevSTD,
68     &              t_seri,tlevSTD)
69        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
70     &             u_seri,ulevSTD)
71        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
72     &             v_seri,vlevSTD)
73c
74
75c
76        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
77     &             zphi/RG,philevSTD)
78        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
79     &             qx(:,:,ivap),qlevSTD)
80        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
81     &             zx_rh*100.,rhlevSTD)
82c
83        DO l=1, klev
84         DO i=1, klon
85          zx_tmp_fi3d(i,l)=u_seri(i,l)*v_seri(i,l)
86         ENDDO !i
87        ENDDO !l
88        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
89     &             zx_tmp_fi3d,uvSTD)
90c
91        DO l=1, klev
92         DO i=1, klon
93          zx_tmp_fi3d(i,l)=v_seri(i,l)*q_seri(i,l)
94         ENDDO !i
95        ENDDO !l
96        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
97     &             zx_tmp_fi3d,vqSTD)
98c
99        DO l=1, klev
100         DO i=1, klon
101          zx_tmp_fi3d(i,l)=v_seri(i,l)*t_seri(i,l)
102         ENDDO !i
103        ENDDO !l
104        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
105     &             zx_tmp_fi3d,vTSTD)
106c
107        DO l=1, klev
108         DO i=1, klon
109          zx_tmp_fi3d(i,l)=omega(i,l)*qx(i,l,ivap)
110         ENDDO !i
111        ENDDO !l
112        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
113     &             zx_tmp_fi3d,wqSTD)
114c
115        DO l=1, klev
116         DO i=1, klon
117          zx_tmp_fi3d(i,l)=v_seri(i,l)*zphi(i,l)/RG
118         ENDDO !i
119        ENDDO !l
120        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
121     &             zx_tmp_fi3d,vphiSTD)
122c
123        DO l=1, klev
124         DO i=1, klon
125          zx_tmp_fi3d(i,l)=omega(i,l)*t_seri(i,l)
126         ENDDO !i
127        ENDDO !l
128        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
129     &             zx_tmp_fi3d,wTSTD)
130c
131        DO l=1, klev
132         DO i=1, klon
133          zx_tmp_fi3d(i,l)=u_seri(i,l)*u_seri(i,l)
134         ENDDO !i
135        ENDDO !l
136        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
137     &             zx_tmp_fi3d,u2STD)
138c
139        DO l=1, klev
140         DO i=1, klon
141          zx_tmp_fi3d(i,l)=v_seri(i,l)*v_seri(i,l)
142         ENDDO !i
143        ENDDO !l
144        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
145     &             zx_tmp_fi3d,v2STD)
146c
147        DO l=1, klev
148         DO i=1, klon
149          zx_tmp_fi3d(i,l)=t_seri(i,l)*t_seri(i,l)
150         ENDDO !i
151        ENDDO !l
152        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
153     &             zx_tmp_fi3d,T2STD)
154
155
156        DO l=1, klev
157        DO i=1, klon
158         zx_tmp_fi3d(i,l)=paprs(i,l)
159        ENDDO !i
160        ENDDO !l
161        CALL plevel_new(klon,klev,nlevSTD,.true.,zx_tmp_fi3d,rlevSTD,
162     &             omega,wlevSTD)
163
164c
165cIM on somme les valeurs definies a chaque pas de temps de la physique ou
166cIM toutes les 6 heures
167c
168       oknondef(1:klon,1:nlevSTD,1:nout)=.TRUE.
169       CALL undefSTD(nlevSTD,itap,tlevSTD,
170     $               dtime,ecrit_hf,
171     $               oknondef,tnondef,tsumSTD)
172c
173       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
174       CALL undefSTD(nlevSTD,itap,ulevSTD,
175     $           dtime,ecrit_hf,
176     $               oknondef,tnondef,usumSTD)
177c
178       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
179       CALL undefSTD(nlevSTD,itap,vlevSTD,
180     $           dtime,ecrit_hf,
181     $               oknondef,tnondef,vsumSTD)
182c
183       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
184       CALL undefSTD(nlevSTD,itap,wlevSTD,
185     $           dtime,ecrit_hf,
186     $               oknondef,tnondef,wsumSTD)
187c
188       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
189       CALL undefSTD(nlevSTD,itap,philevSTD,
190     $           dtime,ecrit_hf,
191     $               oknondef,tnondef,phisumSTD)
192c
193       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
194       CALL undefSTD(nlevSTD,itap,qlevSTD,
195     $           dtime,ecrit_hf,
196     $               oknondef,tnondef,qsumSTD)
197c
198       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
199       CALL undefSTD(nlevSTD,itap,rhlevSTD,
200     $           dtime,ecrit_hf,
201     $               oknondef,tnondef,rhsumSTD)
202c
203       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
204       CALL undefSTD(nlevSTD,itap,uvSTD,
205     $           dtime,ecrit_hf,
206     $               oknondef,tnondef,uvsumSTD)
207c
208       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
209       CALL undefSTD(nlevSTD,itap,vqSTD,
210     $           dtime,ecrit_hf,
211     $               oknondef,tnondef,vqsumSTD)
212c
213       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
214       CALL undefSTD(nlevSTD,itap,vTSTD,
215     $           dtime,ecrit_hf,
216     $               oknondef,tnondef,vTsumSTD)
217c
218       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
219       CALL undefSTD(nlevSTD,itap,wqSTD,
220     $           dtime,ecrit_hf,
221     $               oknondef,tnondef,wqsumSTD)
222c
223       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
224       CALL undefSTD(nlevSTD,itap,vphiSTD,
225     $           dtime,ecrit_hf,
226     $               oknondef,tnondef,vphisumSTD)
227c
228       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
229       CALL undefSTD(nlevSTD,itap,wTSTD,
230     $           dtime,ecrit_hf,
231     $               oknondef,tnondef,wTsumSTD)
232c
233       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
234       CALL undefSTD(nlevSTD,itap,u2STD,
235     $           dtime,ecrit_hf,
236     $               oknondef,tnondef,u2sumSTD)
237c
238       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
239       CALL undefSTD(nlevSTD,itap,v2STD,
240     $           dtime,ecrit_hf,
241     $               oknondef,tnondef,v2sumSTD)
242c
243       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
244       CALL undefSTD(nlevSTD,itap,T2STD,
245     $           dtime,ecrit_hf,
246     $               oknondef,tnondef,T2sumSTD)
247c
248cIM on moyenne a la fin du jour ou du mois
249c
250       CALL moy_undefSTD(nlevSTD,itap,
251     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
252     $                   tnondef,tsumSTD)
253c
254       CALL moy_undefSTD(nlevSTD,itap,
255     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
256     $                   tnondef,usumSTD)
257c
258       CALL moy_undefSTD(nlevSTD,itap,
259     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
260     $                   tnondef,vsumSTD)
261c
262       CALL moy_undefSTD(nlevSTD,itap,
263     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
264     $                   tnondef,wsumSTD)
265c
266       CALL moy_undefSTD(nlevSTD,itap,
267     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
268     $                   tnondef,phisumSTD)
269c
270       CALL moy_undefSTD(nlevSTD,itap,
271     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
272     $                   tnondef,qsumSTD)
273c
274       CALL moy_undefSTD(nlevSTD,itap,
275     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
276     $                   tnondef,rhsumSTD)
277c
278       CALL moy_undefSTD(nlevSTD,itap,
279     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
280     $                   tnondef,uvsumSTD)
281c
282       CALL moy_undefSTD(nlevSTD,itap,
283     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
284     $                   tnondef,vqsumSTD)
285c
286       CALL moy_undefSTD(nlevSTD,itap,
287     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
288     $                   tnondef,vTsumSTD)
289c
290       CALL moy_undefSTD(nlevSTD,itap,
291     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
292     $                   tnondef,wqsumSTD)
293c
294       CALL moy_undefSTD(nlevSTD,itap,
295     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
296     $                   tnondef,vphisumSTD)
297c
298       CALL moy_undefSTD(nlevSTD,itap,
299     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
300     $                   tnondef,wTsumSTD)
301c
302       CALL moy_undefSTD(nlevSTD,itap,
303     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
304     $                   tnondef,u2sumSTD)
305c
306       CALL moy_undefSTD(nlevSTD,itap,
307     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
308     $                   tnondef,v2sumSTD)
309c
310       CALL moy_undefSTD(nlevSTD,itap,
311     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
312     $                   tnondef,T2sumSTD)
313c
314cIM interpolation a chaque pas de temps du SWup(clr) et SWdn(clr) a 200 hPa
315c
316      CALL plevel(klon,klevp1,.true.,paprs,20000.,
317     $     swdn0,SWdn200clr)
318      CALL plevel(klon,klevp1,.false.,paprs,20000.,
319     $     swdn,SWdn200)
320      CALL plevel(klon,klevp1,.false.,paprs,20000.,
321     $     swup0,SWup200clr)
322      CALL plevel(klon,klevp1,.false.,paprs,20000.,
323     $     swup,SWup200)
324c
325      CALL plevel(klon,klevp1,.false.,paprs,20000.,
326     $     lwdn0,LWdn200clr)
327      CALL plevel(klon,klevp1,.false.,paprs,20000.,
328     $     lwdn,LWdn200)
329      CALL plevel(klon,klevp1,.false.,paprs,20000.,
330     $     lwup0,LWup200clr)
331      CALL plevel(klon,klevp1,.false.,paprs,20000.,
332     $     lwup,LWup200)
333c
Note: See TracBrowser for help on using the repository browser.