source: LMDZ5/trunk/libf/phylmd/calcul_STDlev.h @ 1829

Last change on this file since 1829 was 1694, checked in by musat, 12 years ago

Un peu de nettoyage pour le calcul aux niveaux de pression fixes.
IM

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.7 KB
Line 
1c
2c $Header$
3c
4cIM on initialise les variables
5c
6        missing_val=nf90_fill_real
7c
8cIM freq_moyNMC = frequences auxquelles on moyenne les champs accumules
9cIM               sur les niveaux de pression standard du NMC
10      DO n=1, nout
11       freq_moyNMC(n)=freq_outNMC(n)/freq_calNMC(n)
12      ENDDO
13c
14        CALL ini_undefSTD(itap,freq_outNMC)
15c
16cIM on interpole les champs sur les niveaux STD de pression
17cIM a chaque pas de temps de la physique
18c
19c-------------------------------------------------------c
20c positionnement de l'argument logique a .false.        c
21c pour ne pas recalculer deux fois la meme chose !      c
22c a cet effet un appel a plevel_new a ete deplace       c
23c a la fin de la serie d'appels                         c
24c la boucle 'DO k=1, nlevSTD' a ete internalisee        c
25c dans plevel_new, d'ou la creation de cette routine... c
26c-------------------------------------------------------c
27c
28        CALL plevel_new(klon,klev,nlevSTD,.true.,pplay,rlevSTD,
29     &              t_seri,tlevSTD)
30        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
31     &             u_seri,ulevSTD)
32        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
33     &             v_seri,vlevSTD)
34c
35
36c
37        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
38     &             zphi/RG,philevSTD)
39        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
40     &             qx(:,:,ivap),qlevSTD)
41        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
42     &             zx_rh*100.,rhlevSTD)
43c
44        DO l=1, klev
45         DO i=1, klon
46          zx_tmp_fi3d(i,l)=u_seri(i,l)*v_seri(i,l)
47         ENDDO !i
48        ENDDO !l
49        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
50     &             zx_tmp_fi3d,uvSTD)
51c
52        DO l=1, klev
53         DO i=1, klon
54          zx_tmp_fi3d(i,l)=v_seri(i,l)*q_seri(i,l)
55         ENDDO !i
56        ENDDO !l
57        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
58     &             zx_tmp_fi3d,vqSTD)
59c
60        DO l=1, klev
61         DO i=1, klon
62          zx_tmp_fi3d(i,l)=v_seri(i,l)*t_seri(i,l)
63         ENDDO !i
64        ENDDO !l
65        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
66     &             zx_tmp_fi3d,vTSTD)
67c
68        DO l=1, klev
69         DO i=1, klon
70          zx_tmp_fi3d(i,l)=omega(i,l)*qx(i,l,ivap)
71         ENDDO !i
72        ENDDO !l
73        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
74     &             zx_tmp_fi3d,wqSTD)
75c
76        DO l=1, klev
77         DO i=1, klon
78          zx_tmp_fi3d(i,l)=v_seri(i,l)*zphi(i,l)/RG
79         ENDDO !i
80        ENDDO !l
81        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
82     &             zx_tmp_fi3d,vphiSTD)
83c
84        DO l=1, klev
85         DO i=1, klon
86          zx_tmp_fi3d(i,l)=omega(i,l)*t_seri(i,l)
87         ENDDO !i
88        ENDDO !l
89        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
90     &             zx_tmp_fi3d,wTSTD)
91c
92        DO l=1, klev
93         DO i=1, klon
94          zx_tmp_fi3d(i,l)=u_seri(i,l)*u_seri(i,l)
95         ENDDO !i
96        ENDDO !l
97        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
98     &             zx_tmp_fi3d,u2STD)
99c
100        DO l=1, klev
101         DO i=1, klon
102          zx_tmp_fi3d(i,l)=v_seri(i,l)*v_seri(i,l)
103         ENDDO !i
104        ENDDO !l
105        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
106     &             zx_tmp_fi3d,v2STD)
107c
108        DO l=1, klev
109         DO i=1, klon
110          zx_tmp_fi3d(i,l)=t_seri(i,l)*t_seri(i,l)
111         ENDDO !i
112        ENDDO !l
113        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
114     &             zx_tmp_fi3d,T2STD)
115
116c
117      zx_tmp_fi3d(:,:)=wo(:,:,1) * dobson_u * 1e3 / zmasse / rmo3 * rmd
118        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
119     &             zx_tmp_fi3d,O3STD)
120c
121      if (read_climoz == 2) THEN
122      zx_tmp_fi3d(:,:)=wo(:,:,2) * dobson_u * 1e3 / zmasse / rmo3 * rmd
123        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
124     &             zx_tmp_fi3d,O3daySTD)
125      endif
126c
127        DO l=1, klev
128        DO i=1, klon
129         zx_tmp_fi3d(i,l)=paprs(i,l)
130        ENDDO !i
131        ENDDO !l
132        CALL plevel_new(klon,klev,nlevSTD,.true.,zx_tmp_fi3d,rlevSTD,
133     &             omega,wlevSTD)
134c
135cIM on somme les valeurs toutes les freq_calNMC secondes
136c
137       CALL undefSTD(itap,freq_calNMC, read_climoz)
138c
139cIM on moyenne a la fin du mois ou du jour (toutes les freq_outNMC secondes)
140c
141       CALL moy_undefSTD(itap,freq_outNMC,freq_moyNMC)
142c
143       CALL plevel(klon,klev,.true.,pplay,50000.,
144     &              zphi/RG,geo500)
145
146cIM on interpole a chaque pas de temps le SWup(clr) et SWdn(clr) a 200 hPa
147c
148      CALL plevel(klon,klevp1,.true.,paprs,20000.,
149     $     swdn0,SWdn200clr)
150      CALL plevel(klon,klevp1,.false.,paprs,20000.,
151     $     swdn,SWdn200)
152      CALL plevel(klon,klevp1,.false.,paprs,20000.,
153     $     swup0,SWup200clr)
154      CALL plevel(klon,klevp1,.false.,paprs,20000.,
155     $     swup,SWup200)
156c
157      CALL plevel(klon,klevp1,.false.,paprs,20000.,
158     $     lwdn0,LWdn200clr)
159      CALL plevel(klon,klevp1,.false.,paprs,20000.,
160     $     lwdn,LWdn200)
161      CALL plevel(klon,klevp1,.false.,paprs,20000.,
162     $     lwup0,LWup200clr)
163      CALL plevel(klon,klevp1,.false.,paprs,20000.,
164     $     lwup,LWup200)
165c
166      twriteSTD(:,:,1)=tsumSTD(:,:,1)
167      qwriteSTD(:,:,1)=qsumSTD(:,:,1)
168      rhwriteSTD(:,:,1)=rhsumSTD(:,:,1)
169      phiwriteSTD(:,:,1)=phisumSTD(:,:,1)
170      uwriteSTD(:,:,1)=usumSTD(:,:,1)
171      vwriteSTD(:,:,1)=vsumSTD(:,:,1)
172      wwriteSTD(:,:,1)=wsumSTD(:,:,1)
173
174      twriteSTD(:,:,2)=tsumSTD(:,:,2)
175      qwriteSTD(:,:,2)=qsumSTD(:,:,2)
176      rhwriteSTD(:,:,2)=rhsumSTD(:,:,2)
177      phiwriteSTD(:,:,2)=phisumSTD(:,:,2)
178      uwriteSTD(:,:,2)=usumSTD(:,:,2)
179      vwriteSTD(:,:,2)=vsumSTD(:,:,2)
180      wwriteSTD(:,:,2)=wsumSTD(:,:,2)
181
182      twriteSTD(:,:,3)=tlevSTD(:,:)
183      qwriteSTD(:,:,3)=qlevSTD(:,:)
184      rhwriteSTD(:,:,3)=rhlevSTD(:,:)
185      phiwriteSTD(:,:,3)=philevSTD(:,:)
186      uwriteSTD(:,:,3)=ulevSTD(:,:)
187      vwriteSTD(:,:,3)=vlevSTD(:,:)
188      wwriteSTD(:,:,3)=wlevSTD(:,:)
189
190      twriteSTD(:,:,4)=tlevSTD(:,:)
191      qwriteSTD(:,:,4)=qlevSTD(:,:)
192      rhwriteSTD(:,:,4)=rhlevSTD(:,:)
193      phiwriteSTD(:,:,4)=philevSTD(:,:)
194      uwriteSTD(:,:,4)=ulevSTD(:,:)
195      vwriteSTD(:,:,4)=vlevSTD(:,:)
196      wwriteSTD(:,:,4)=wlevSTD(:,:)
197c
198cIM initialisation 5eme fichier de sortie
199      twriteSTD(:,:,5)=tlevSTD(:,:)
200      qwriteSTD(:,:,5)=qlevSTD(:,:)
201      rhwriteSTD(:,:,5)=rhlevSTD(:,:)
202      phiwriteSTD(:,:,5)=philevSTD(:,:)
203      uwriteSTD(:,:,5)=ulevSTD(:,:)
204      vwriteSTD(:,:,5)=vlevSTD(:,:)
205      wwriteSTD(:,:,5)=wlevSTD(:,:)
206c
207cIM initialisation 6eme fichier de sortie
208      twriteSTD(:,:,6)=tlevSTD(:,:)
209      qwriteSTD(:,:,6)=qlevSTD(:,:)
210      rhwriteSTD(:,:,6)=rhlevSTD(:,:)
211      phiwriteSTD(:,:,6)=philevSTD(:,:)
212      uwriteSTD(:,:,6)=ulevSTD(:,:)
213      vwriteSTD(:,:,6)=vlevSTD(:,:)
214      wwriteSTD(:,:,6)=wlevSTD(:,:)
215cIM for NMC files
216      DO n=1, nlevSTD3
217       DO k=1, nlevSTD
218        if(rlevSTD3(n).EQ.rlevSTD(k)) THEN
219         twriteSTD3(:,n)=tlevSTD(:,k)
220         qwriteSTD3(:,n)=qlevSTD(:,k)
221         rhwriteSTD3(:,n)=rhlevSTD(:,k)
222         phiwriteSTD3(:,n)=philevSTD(:,k)
223         uwriteSTD3(:,n)=ulevSTD(:,k)
224         vwriteSTD3(:,n)=vlevSTD(:,k)
225         wwriteSTD3(:,n)=wlevSTD(:,k)
226        endif !rlevSTD3(n).EQ.rlevSTD(k)
227       ENDDO
228      ENDDO
229c
230      DO n=1, nlevSTD8
231       DO k=1, nlevSTD
232        if(rlevSTD8(n).EQ.rlevSTD(k)) THEN
233         tnondefSTD8(:,n)=tnondef(:,k,2)
234         twriteSTD8(:,n)=tsumSTD(:,k,2)
235         qwriteSTD8(:,n)=qsumSTD(:,k,2)
236         rhwriteSTD8(:,n)=rhsumSTD(:,k,2)
237         phiwriteSTD8(:,n)=phisumSTD(:,k,2)
238         uwriteSTD8(:,n)=usumSTD(:,k,2)
239         vwriteSTD8(:,n)=vsumSTD(:,k,2)
240         wwriteSTD8(:,n)=wsumSTD(:,k,2)
241        endif !rlevSTD8(n).EQ.rlevSTD(k)
242       ENDDO
243      ENDDO
Note: See TracBrowser for help on using the repository browser.