source: LMDZ6/branches/Amaury_dev/libf/phylmd/calcul_STDlev.h @ 5116

Last change on this file since 5116 was 5116, checked in by abarral, 4 months ago

rename modules properly lmdz_*
move ismin, ismax, minmax into new lmdz_libmath.f90
(lint) uppercase fortran keywords

  • 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        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      zx_tmp_fi3d(:,:)=wo(:,:,1) * dobson_u * 1e3 / zmasse / rmo3 * rmd
111        CALL plevel_new(klon,klev,nlevSTD,.FALSE.,pplay,rlevSTD, &
112                   zx_tmp_fi3d,O3STD)
113
114      if (read_climoz == 2) THEN
115      zx_tmp_fi3d(:,:)=wo(:,:,2) * dobson_u * 1e3 / zmasse / rmo3 * rmd
116        CALL plevel_new(klon,klev,nlevSTD,.FALSE.,pplay,rlevSTD, &
117                   zx_tmp_fi3d,O3daySTD)
118      endif
119
120        DO l=1, klev
121        DO i=1, klon
122         zx_tmp_fi3d(i,l)=paprs(i,l)
123        ENDDO !i
124        ENDDO !l
125        CALL plevel_new(klon,klev,nlevSTD,.TRUE.,zx_tmp_fi3d,rlevSTD, &
126                   omega,wlevSTD)
127
128!IM on somme les valeurs toutes les freq_calNMC secondes
129!IM on moyenne a la fin du mois, du jour ou toutes les 6h
130
131       IF (.not. ok_all_xml) THEN
132        CALL undefSTD(itap, read_climoz)
133        CALL moy_undefSTD(itap,itapm1)
134       ENDIF
135
136       CALL plevel(klon,klev,.TRUE.,pplay,50000., &
137                    zphi/RG,geo500)
138
139!IM on interpole a chaque pas de temps le SWup(clr) et SWdn(clr) a 200 hPa
140
141      CALL plevel(klon,klevp1,.TRUE.,paprs,20000., &
142           swdn0,SWdn200clr)
143      CALL plevel(klon,klevp1,.FALSE.,paprs,20000., &
144           swdn,SWdn200)
145      CALL plevel(klon,klevp1,.FALSE.,paprs,20000., &
146           swup0,SWup200clr)
147      CALL plevel(klon,klevp1,.FALSE.,paprs,20000., &
148           swup,SWup200)
149
150      CALL plevel(klon,klevp1,.FALSE.,paprs,20000., &
151           lwdn0,LWdn200clr)
152      CALL plevel(klon,klevp1,.FALSE.,paprs,20000., &
153           lwdn,LWdn200)
154      CALL plevel(klon,klevp1,.FALSE.,paprs,20000., &
155           lwup0,LWup200clr)
156      CALL plevel(klon,klevp1,.FALSE.,paprs,20000., &
157           lwup,LWup200)
158
159      twriteSTD(:,:,1)=tsumSTD(:,:,1)
160      qwriteSTD(:,:,1)=qsumSTD(:,:,1)
161      rhwriteSTD(:,:,1)=rhsumSTD(:,:,1)
162      phiwriteSTD(:,:,1)=phisumSTD(:,:,1)
163      uwriteSTD(:,:,1)=usumSTD(:,:,1)
164      vwriteSTD(:,:,1)=vsumSTD(:,:,1)
165      wwriteSTD(:,:,1)=wsumSTD(:,:,1)
166
167      twriteSTD(:,:,2)=tsumSTD(:,:,2)
168      qwriteSTD(:,:,2)=qsumSTD(:,:,2)
169      rhwriteSTD(:,:,2)=rhsumSTD(:,:,2)
170      phiwriteSTD(:,:,2)=phisumSTD(:,:,2)
171      uwriteSTD(:,:,2)=usumSTD(:,:,2)
172      vwriteSTD(:,:,2)=vsumSTD(:,:,2)
173      wwriteSTD(:,:,2)=wsumSTD(:,:,2)
174
175      twriteSTD(:,:,3)=tlevSTD(:,:)
176      qwriteSTD(:,:,3)=qlevSTD(:,:)
177      rhwriteSTD(:,:,3)=rhlevSTD(:,:)
178      phiwriteSTD(:,:,3)=philevSTD(:,:)
179      uwriteSTD(:,:,3)=ulevSTD(:,:)
180      vwriteSTD(:,:,3)=vlevSTD(:,:)
181      wwriteSTD(:,:,3)=wlevSTD(:,:)
182
183      twriteSTD(:,:,4)=tlevSTD(:,:)
184      qwriteSTD(:,:,4)=qlevSTD(:,:)
185      rhwriteSTD(:,:,4)=rhlevSTD(:,:)
186      phiwriteSTD(:,:,4)=philevSTD(:,:)
187      uwriteSTD(:,:,4)=ulevSTD(:,:)
188      vwriteSTD(:,:,4)=vlevSTD(:,:)
189      wwriteSTD(:,:,4)=wlevSTD(:,:)
190
191!IM initialisation 5eme fichier de sortie
192      twriteSTD(:,:,5)=tlevSTD(:,:)
193      qwriteSTD(:,:,5)=qlevSTD(:,:)
194      rhwriteSTD(:,:,5)=rhlevSTD(:,:)
195      phiwriteSTD(:,:,5)=philevSTD(:,:)
196      uwriteSTD(:,:,5)=ulevSTD(:,:)
197      vwriteSTD(:,:,5)=vlevSTD(:,:)
198      wwriteSTD(:,:,5)=wlevSTD(:,:)
199
200!IM initialisation 6eme fichier de sortie
201      twriteSTD(:,:,6)=tlevSTD(:,:)
202      qwriteSTD(:,:,6)=qlevSTD(:,:)
203      rhwriteSTD(:,:,6)=rhlevSTD(:,:)
204      phiwriteSTD(:,:,6)=philevSTD(:,:)
205      uwriteSTD(:,:,6)=ulevSTD(:,:)
206      vwriteSTD(:,:,6)=vlevSTD(:,:)
207      wwriteSTD(:,:,6)=wlevSTD(:,:)
208!IM for NMC files
209      DO n=1, nlevSTD3
210       DO k=1, nlevSTD
211        IF(rlevSTD3(n).EQ.rlevSTD(k)) THEN
212         twriteSTD3(:,n)=tlevSTD(:,k)
213         qwriteSTD3(:,n)=qlevSTD(:,k)
214         rhwriteSTD3(:,n)=rhlevSTD(:,k)
215         phiwriteSTD3(:,n)=philevSTD(:,k)
216         uwriteSTD3(:,n)=ulevSTD(:,k)
217         vwriteSTD3(:,n)=vlevSTD(:,k)
218         wwriteSTD3(:,n)=wlevSTD(:,k)
219        endif !rlevSTD3(n).EQ.rlevSTD(k)
220       ENDDO
221      ENDDO
222
223      DO n=1, nlevSTD8
224       DO k=1, nlevSTD
225        IF(rlevSTD8(n).EQ.rlevSTD(k)) THEN
226         tnondefSTD8(:,n)=tnondef(:,k,2)
227         twriteSTD8(:,n)=tsumSTD(:,k,2)
228         qwriteSTD8(:,n)=qsumSTD(:,k,2)
229         rhwriteSTD8(:,n)=rhsumSTD(:,k,2)
230         phiwriteSTD8(:,n)=phisumSTD(:,k,2)
231         uwriteSTD8(:,n)=usumSTD(:,k,2)
232         vwriteSTD8(:,n)=vsumSTD(:,k,2)
233         wwriteSTD8(:,n)=wsumSTD(:,k,2)
234        endif !rlevSTD8(n).EQ.rlevSTD(k)
235       ENDDO
236      ENDDO
Note: See TracBrowser for help on using the repository browser.