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

Last change on this file since 2198 was 1912, checked in by musat, 11 years ago

1) Modifications pour faire des simulations par an avec un calendrier realiste (365 jours ou autre).

Il faut mettre une frequence de sortie de -1 (variable phys_out_filetimesteps dans config.def) pour
que IOIPSL calcule les moyennes mensuels en prenant en compte des longuers variables de chaque
mois. Par exemple, pour le fichier histmth (1er fichier) et histmthNMC (7eme).
phys_out_filetimesteps= -1 1day 6hr 6hr 6hr 1d -1 1day 6hr

2) Corrections titres variables niveaux de pression des fichiers histmth, histday, etc

  • 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.