My Project
 All Classes Files Functions Variables Macros
calcul_STDlev.h
Go to the documentation of this file.
1 c
2 c $Header$
3 c
4 cIM on initialise les variables
5 c
6  missing_val=nf90_fill_real
7 c
8 cIM freq_moyNMC = frequences auxquelles on moyenne les champs accumules
9 cIM sur les niveaux de pression standard du NMC
10  DO n=1, nout
12  ENDDO
13 c
14  CALL ini_undefSTD(itap,freq_outNMC)
15 c
16 cIM on interpole les champs sur les niveaux STD de pression
17 cIM a chaque pas de temps de la physique
18 c
19 c-------------------------------------------------------c
20 c positionnement de l'argument logique a .false. c
21 c pour ne pas recalculer deux fois la meme chose ! c
22 c a cet effet un appel a plevel_new a ete deplace c
23 c a la fin de la serie d'appels c
24 c la boucle 'DO k=1, nlevSTD' a ete internalisee c
25 c dans plevel_new, d'ou la creation de cette routine... c
26 c-------------------------------------------------------c
27 c
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)
34 c
35 
36 c
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)
43 c
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)
51 c
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)
59 c
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)
67 c
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)
75 c
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)
83 c
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)
91 c
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)
99 c
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)
107 c
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 
116 c
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)
120 c
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
126 c
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)
134 c
135 cIM on somme les valeurs toutes les freq_calNMC secondes
136 c
137  CALL undefSTD(itap,freq_calNMC, read_climoz)
138 c
139 cIM on moyenne a la fin du mois ou du jour (toutes les freq_outNMC secondes)
140 c
141  CALL moy_undefSTD(itap,freq_outNMC,freq_moyNMC)
142 c
143  CALL plevel(klon,klev,.true.,pplay,50000.,
144  & zphi/RG,geo500)
145 
146 cIM on interpole a chaque pas de temps le SWup(clr) et SWdn(clr) a 200 hPa
147 c
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)
156 c
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)
165 c
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(:,:)
197 c
198 cIM 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(:,:)
206 c
207 cIM 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(:,:)
215 cIM 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
229 c
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