source: lmdz_wrf/WRFV3/lmdz/calcul_STDlev.h @ 1

Last change on this file since 1 was 1, checked in by lfita, 10 years ago
  • -- --- Opening of the WRF+LMDZ coupling repository --- -- -

WRF: version v3.3
LMDZ: version v1818

More details in:

File size: 8.5 KB
Line 
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
11       freq_moyNMC(n)=freq_outNMC(n)/freq_calNMC(n)
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
Note: See TracBrowser for help on using the repository browser.