source: LMDZ6/branches/IPSL-CM6A-MR/libf/phylmd/calcul_STDlev.h @ 5441

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