source: LMDZ5/branches/LF-private/libf/phylmd/calcul_STDlev.h @ 5456

Last change on this file since 5456 was 1862, checked in by lguez, 11 years ago

Converted physiq.F to free source form (on mandate of the United Poihl).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.8 KB
Line 
1!
2! $Header$
3!
4!IM on initialise les variables
5!
6        missing_val=nf90_fill_real
7!
8!IM freq_moyNMC = frequences auxquelles on moyenne les champs accumules
9!IM               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
13!
14        CALL ini_undefSTD(itap,freq_outNMC)
15!
16!IM on interpole les champs sur les niveaux STD de pression
17!IM a chaque pas de temps de la physique
18!
19!-------------------------------------------------------c
20! positionnement de l'argument logique a .false.        c
21! pour ne pas recalculer deux fois la meme chose !      c
22! a cet effet un appel a plevel_new a ete deplace       c
23! a la fin de la serie d'appels                         c
24! la boucle 'DO k=1, nlevSTD' a ete internalisee        c
25! dans plevel_new, d'ou la creation de cette routine... c
26!-------------------------------------------------------c
27!
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!
35
36!
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!
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!
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!
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!
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!
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!
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!
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!
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!
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!
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!
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!
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!
135!IM on somme les valeurs toutes les freq_calNMC secondes
136!
137       CALL undefSTD(itap,freq_calNMC, read_climoz)
138!
139!IM on moyenne a la fin du mois ou du jour (toutes les freq_outNMC secondes)
140!
141       CALL moy_undefSTD(itap,freq_outNMC,freq_moyNMC)
142!
143       CALL plevel(klon,klev,.true.,pplay,50000., &
144                    zphi/RG,geo500)
145
146!IM on interpole a chaque pas de temps le SWup(clr) et SWdn(clr) a 200 hPa
147!
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!
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!
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!
198!IM 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!
207!IM 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!IM 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!
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.