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

Last change on this file since 2271 was 2271, checked in by musat, 9 years ago

Corrections for standard level pressure outputs hist*NMC.nc by XIOS and IOIPSL.
For XIOS one need to specify a default_value="1.e+20" in the field_def_lmdz.xml and
a detect_missing_value=".true." in the file_def_histins_lmdz.xml,
file_def_histday_lmdz.xml, etc files.

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