6 SUBROUTINE read_pstoke(irec, zrec, zklono, zklevo, airefi, phisfi, t, mfu, &
7 mfd, en_u, de_u, en_d, de_d, coefh, fm_therm, en_therm, frac_impa, &
8 frac_nucl, pyu1, pyv1, ftsol, psrf)
28 INTEGER klono, klevo, imo, jmo
32 REAL,
ALLOCATABLE :: phisfi2(:,:)
33 REAL,
ALLOCATABLE :: airefi2(:,:)
45 REAL,
ALLOCATABLE :: mfu2(:,:,:)
46 REAL,
ALLOCATABLE :: mfd2(:,:,:)
47 REAL,
ALLOCATABLE :: en_u2(:,:,:)
48 REAL,
ALLOCATABLE :: de_u2(:,:,:)
49 REAL,
ALLOCATABLE :: en_d2(:,:,:)
50 REAL,
ALLOCATABLE :: de_d2(:,:,:)
51 REAL,
ALLOCATABLE :: coefh2(:,:,:)
52 REAL,
ALLOCATABLE :: fm_therm2(:,:,:)
53 REAL,
ALLOCATABLE :: en_therm2(:,:,:)
55 REAL,
ALLOCATABLE :: pl(:)
57 INTEGER xid, yid, zid, tid
58 REAL zrec, zklono, zklevo, zim, zjm
59 INTEGER ncrec, ncklono, ncklevo, ncim, ncjm
71 REAL,
ALLOCATABLE :: frac_impa2(:,:,:)
72 REAL,
ALLOCATABLE :: frac_nucl2(:,:,:)
75 REAL,
ALLOCATABLE :: pyu12(:,:), pyv12(:,:)
78 REAL,
ALLOCATABLE :: ftsol1(:),ftsol2(:)
79 REAL,
ALLOCATABLE :: ftsol3(:),ftsol4(:)
80 REAL,
ALLOCATABLE :: psrf1(:), psrf2(:)
81 REAL,
ALLOCATABLE :: psrf3(:), psrf4(:)
82 REAL,
ALLOCATABLE :: ftsol12(:,:)
83 REAL,
ALLOCATABLE :: ftsol22(:,:)
84 REAL,
ALLOCATABLE :: ftsol32(:,:)
85 REAL,
ALLOCATABLE :: ftsol42(:,:)
86 REAL,
ALLOCATABLE :: psrf12(:,:)
87 REAL,
ALLOCATABLE :: psrf22(:,:)
88 REAL,
ALLOCATABLE :: psrf32(:,:)
89 REAL,
ALLOCATABLE :: psrf42(:,:)
91 REAL,
ALLOCATABLE :: t2(:,:,:)
93 INTEGER,
SAVE :: varidt
94 INTEGER,
SAVE :: varidmfu, varidmfd, varidps, varidenu, variddeu
95 INTEGER,
SAVE :: varidend, varidded, varidch, varidfi, varidfn
96 INTEGER,
SAVE :: varidfmth, varidenth
97 INTEGER,
SAVE :: varidyu1, varidyv1, varidpl, varidai, varididvt
98 INTEGER,
SAVE :: varidfts1, varidfts2, varidfts3, varidfts4
99 INTEGER,
SAVE :: varidpsr1, varidpsr2, varidpsr3, varidpsr4
102 INTEGER start(4), count(4), status
104 LOGICAL,
SAVE :: first=.
true.
112 ALLOCATE(phisfi2(imo,jmo+1))
113 ALLOCATE(airefi2(imo, jmo+1))
114 ALLOCATE(mfu2(imo, jmo+1, klevo))
115 ALLOCATE(mfd2(imo, jmo+1, klevo))
116 ALLOCATE(en_u2(imo, jmo+1, klevo))
117 ALLOCATE(de_u2(imo, jmo+1, klevo))
118 ALLOCATE(en_d2(imo, jmo+1, klevo))
119 ALLOCATE(de_d2(imo, jmo+1, klevo))
120 ALLOCATE(coefh2(imo, jmo+1, klevo))
121 ALLOCATE(fm_therm2(imo, jmo+1, klevo))
122 ALLOCATE(en_therm2(imo, jmo+1, klevo))
124 ALLOCATE(frac_impa2(imo, jmo+1, klevo))
125 ALLOCATE(frac_nucl2(imo, jmo+1, klevo))
126 ALLOCATE(pyu12(imo, jmo+1), pyv12(imo, jmo+1))
127 ALLOCATE(ftsol1(klono), ftsol2(klono))
128 ALLOCATE(ftsol3(klono), ftsol4(klono))
129 ALLOCATE(psrf1(klono), psrf2(klono))
130 ALLOCATE(psrf3(klono), psrf4(klono))
131 ALLOCATE(ftsol12(imo, jmo+1))
132 ALLOCATE(ftsol22(imo, jmo+1))
133 ALLOCATE(ftsol32(imo, jmo+1))
134 ALLOCATE(ftsol42(imo, jmo+1))
135 ALLOCATE(psrf12(imo, jmo+1))
136 ALLOCATE(psrf22(imo, jmo+1))
137 ALLOCATE(psrf32(imo, jmo+1))
138 ALLOCATE(psrf42(imo, jmo+1))
139 ALLOCATE(t2(imo, jmo+1, klevo))
147 rcode = nf90_open(
'phystoke.nc', nf90_nowrite, ncidp)
149 rcode = nf90_inq_varid(ncidp,
'phis', varidps)
150 print *,
'ncidp,varidps', ncidp, varidps
152 rcode = nf90_inq_varid(ncidp,
'sig_s', varidpl)
153 print *,
'ncidp,varidpl', ncidp, varidpl
155 rcode = nf90_inq_varid(ncidp,
'aire', varidai)
156 print *,
'ncidp,varidai', ncidp, varidai
159 rcode = nf90_inq_varid(ncidp,
't', varidt)
160 print *,
'ncidp,varidt', ncidp, varidt
162 rcode = nf90_inq_varid(ncidp,
'mfu', varidmfu)
163 print *,
'ncidp,varidmfu', ncidp, varidmfu
165 rcode = nf90_inq_varid(ncidp,
'mfd', varidmfd)
166 print *,
'ncidp,varidmfd', ncidp, varidmfd
168 rcode = nf90_inq_varid(ncidp,
'en_u', varidenu)
169 print *,
'ncidp,varidenu', ncidp, varidenu
171 rcode = nf90_inq_varid(ncidp,
'de_u', variddeu)
172 print *,
'ncidp,variddeu', ncidp, variddeu
174 rcode = nf90_inq_varid(ncidp,
'en_d', varidend)
175 print *,
'ncidp,varidend', ncidp, varidend
177 rcode = nf90_inq_varid(ncidp,
'de_d', varidded)
178 print *,
'ncidp,varidded', ncidp, varidded
180 rcode = nf90_inq_varid(ncidp,
'coefh', varidch)
181 print *,
'ncidp,varidch', ncidp, varidch
184 rcode = nf90_inq_varid(ncidp,
'fm_th', varidfmth)
185 print *,
'ncidp,varidfmth', ncidp, varidfmth
187 rcode = nf90_inq_varid(ncidp,
'en_th', varidenth)
188 print *,
'ncidp,varidenth', ncidp, varidenth
190 rcode = nf90_inq_varid(ncidp,
'frac_impa', varidfi)
191 print *,
'ncidp,varidfi', ncidp, varidfi
193 rcode = nf90_inq_varid(ncidp,
'frac_nucl', varidfn)
194 print *,
'ncidp,varidfn', ncidp, varidfn
196 rcode = nf90_inq_varid(ncidp,
'pyu1', varidyu1)
197 print *,
'ncidp,varidyu1', ncidp, varidyu1
199 rcode = nf90_inq_varid(ncidp,
'pyv1', varidyv1)
200 print *,
'ncidp,varidyv1', ncidp, varidyv1
202 rcode = nf90_inq_varid(ncidp,
'ftsol1', varidfts1)
203 print *,
'ncidp,varidfts1', ncidp, varidfts1
205 rcode = nf90_inq_varid(ncidp,
'ftsol2', varidfts2)
206 print *,
'ncidp,varidfts2', ncidp, varidfts2
208 rcode = nf90_inq_varid(ncidp,
'ftsol3', varidfts3)
209 print *,
'ncidp,varidfts3', ncidp, varidfts3
211 rcode = nf90_inq_varid(ncidp,
'ftsol4', varidfts4)
212 print *,
'ncidp,varidfts4', ncidp, varidfts4
214 rcode = nf90_inq_varid(ncidp,
'psrf1', varidpsr1)
215 print *,
'ncidp,varidpsr1', ncidp, varidpsr1
217 rcode = nf90_inq_varid(ncidp,
'psrf2', varidpsr2)
218 print *,
'ncidp,varidpsr2', ncidp, varidpsr2
220 rcode = nf90_inq_varid(ncidp,
'psrf3', varidpsr3)
221 print *,
'ncidp,varidpsr3', ncidp, varidpsr3
223 rcode = nf90_inq_varid(ncidp,
'psrf4', varidpsr4)
224 print *,
'ncidp,varidpsr4', ncidp, varidpsr4
228 status = nf_inq_dimid(ncidp,
'y', yid)
229 status = nf_inq_dimid(ncidp,
'x', xid)
230 status = nf_inq_dimid(ncidp,
'sig_s', zid)
231 status = nf_inq_dimid(ncidp,
'time_counter', tid)
235 status = nf_inq_dim(ncidp, yid, namedim, ncjm)
236 status = nf_inq_dim(ncidp, xid, namedim, ncim)
237 status = nf_inq_dim(ncidp, zid, namedim, ncklevo)
238 status = nf_inq_dim(ncidp, tid, namedim, ncrec)
245 zklono = zim*(zjm-2) + 2
247 WRITE (*, *)
'read_pstoke : zrec = ', zrec
248 WRITE (*, *)
'read_pstoke : zklevo = ', zklevo
249 WRITE (*, *)
'read_pstoke : zim = ', zim
250 WRITE (*, *)
'read_pstoke : zjm = ', zjm
251 WRITE (*, *)
'read_pstoke : zklono = ', zklono
255 status = nf_get_vara_double(ncidp, varidpl, 1, zklevo, pl)
257 status = nf_get_vara_real(ncidp, varidpl, 1, zklevo, pl)
274 status = nf_get_vara_double(ncidp, varidps, start, count, phisfi2)
276 status = nf_get_vara_real(ncidp, varidps, start, count, phisfi2)
278 CALL gr_ecrit_fi(1, klono, imo, jmo+1, phisfi2, phisfi)
282 status = nf_get_vara_double(ncidp, varidai, start, count, airefi2)
284 status = nf_get_vara_real(ncidp, varidai, start, count, airefi2)
286 CALL gr_ecrit_fi(1, klono, imo, jmo+1, airefi2, airefi)
295 print *,
'WARNING!!! Il n y a pas de test de coherence'
296 print *,
'sur le nombre de niveaux verticaux dans le fichier nc'
312 status = nf_get_vara_double(ncidp, varidfi, start, count, frac_impa2)
314 status = nf_get_vara_real(ncidp, varidfi, start, count, frac_impa2)
316 CALL gr_ecrit_fi(klevo, klono, imo, jmo+1, frac_impa2, frac_impa)
320 status = nf_get_vara_double(ncidp, varidfn, start, count, frac_nucl2)
322 status = nf_get_vara_real(ncidp, varidfn, start, count, frac_nucl2)
324 CALL gr_ecrit_fi(klevo, klono, imo, jmo+1, frac_nucl2, frac_nucl)
329 status = nf_get_vara_double(ncidp, varidt, start, count, t2)
331 status = nf_get_vara_real(ncidp, varidt, start, count, t2)
333 CALL gr_ecrit_fi(klevo, klono, imo, jmo+1, t2, t)
338 status = nf_get_vara_double(ncidp, varidmfu, start, count, mfu2)
340 status = nf_get_vara_real(ncidp, varidmfu, start, count, mfu2)
342 CALL gr_ecrit_fi(klevo, klono, imo, jmo+1, mfu2, mfu)
346 status = nf_get_vara_double(ncidp, varidmfd, start, count, mfd2)
348 status = nf_get_vara_real(ncidp, varidmfd, start, count, mfd2)
350 CALL gr_ecrit_fi(klevo, klono, imo, jmo+1, mfd2, mfd)
354 status = nf_get_vara_double(ncidp, varidenu, start, count, en_u2)
356 status = nf_get_vara_real(ncidp, varidenu, start, count, en_u2)
358 CALL gr_ecrit_fi(klevo, klono, imo, jmo+1, en_u2, en_u)
362 status = nf_get_vara_double(ncidp, variddeu, start, count, de_u2)
364 status = nf_get_vara_real(ncidp, variddeu, start, count, de_u2)
366 CALL gr_ecrit_fi(klevo, klono, imo, jmo+1, de_u2, de_u)
370 status = nf_get_vara_double(ncidp, varidend, start, count, en_d2)
372 status = nf_get_vara_real(ncidp, varidend, start, count, en_d2)
374 CALL gr_ecrit_fi(klevo, klono, imo, jmo+1, en_d2, en_d)
378 status = nf_get_vara_double(ncidp, varidded, start, count, de_d2)
380 status = nf_get_vara_real(ncidp, varidded, start, count, de_d2)
382 CALL gr_ecrit_fi(klevo, klono, imo, jmo+1, de_d2, de_d)
388 status = nf_get_vara_double(ncidp, varidch, start, count, coefh2)
390 status = nf_get_vara_real(ncidp, varidch, start, count, coefh2)
392 CALL gr_ecrit_fi(klevo, klono, imo, jmo+1, coefh2, coefh)
398 status = nf_get_vara_double(ncidp, varidfmth, start, count, fm_therm2)
400 status = nf_get_vara_real(ncidp, varidfmth, start, count, fm_therm2)
402 CALL gr_ecrit_fi(klevo, klono, imo, jmo+1, fm_therm2, fm_therm)
405 status = nf_get_vara_double(ncidp, varidenth, start, count, en_therm2)
407 status = nf_get_vara_real(ncidp, varidenth, start, count, en_therm2)
409 CALL gr_ecrit_fi(klevo, klono, imo, jmo+1, en_therm2, en_therm)
419 status = nf_get_vara_double(ncidp, varidyu1, start, count, pyu12)
421 status = nf_get_vara_real(ncidp, varidyu1, start, count, pyu12)
423 CALL gr_ecrit_fi(1, klono, imo, jmo+1, pyu12, pyu1)
427 status = nf_get_vara_double(ncidp, varidyv1, start, count, pyv12)
429 status = nf_get_vara_real(ncidp, varidyv1, start, count, pyv12)
431 CALL gr_ecrit_fi(1, klono, imo, jmo+1, pyv12, pyv1)
436 status = nf_get_vara_double(ncidp, varidfts1, start, count, ftsol12)
438 status = nf_get_vara_real(ncidp, varidfts1, start, count, ftsol12)
440 CALL gr_ecrit_fi(1, klono, imo, jmo+1, ftsol12, ftsol1)
444 status = nf_get_vara_double(ncidp, varidfts2, start, count, ftsol22)
446 status = nf_get_vara_real(ncidp, varidfts2, start, count, ftsol22)
448 CALL gr_ecrit_fi(1, klono, imo, jmo+1, ftsol22, ftsol2)
452 status = nf_get_vara_double(ncidp, varidfts3, start, count, ftsol32)
454 status = nf_get_vara_real(ncidp, varidfts3, start, count, ftsol32)
456 CALL gr_ecrit_fi(1, klono, imo, jmo+1, ftsol32, ftsol3)
460 status = nf_get_vara_double(ncidp, varidfts4, start, count, ftsol42)
462 status = nf_get_vara_real(ncidp, varidfts4, start, count, ftsol42)
464 CALL gr_ecrit_fi(1, klono, imo, jmo+1, ftsol42, ftsol4)
469 status = nf_get_vara_double(ncidp, varidpsr1, start, count, psrf12)
471 status = nf_get_vara_real(ncidp, varidpsr1, start, count, psrf12)
473 CALL gr_ecrit_fi(1, klono, imo, jmo+1, psrf12, psrf1)
477 status = nf_get_vara_double(ncidp, varidpsr2, start, count, psrf22)
479 status = nf_get_vara_real(ncidp, varidpsr2, start, count, psrf22)
481 CALL gr_ecrit_fi(1, klono, imo, jmo+1, psrf22, psrf2)
485 status = nf_get_vara_double(ncidp, varidpsr3, start, count, psrf32)
487 status = nf_get_vara_real(ncidp, varidpsr3, start, count, psrf32)
489 CALL gr_ecrit_fi(1, klono, imo, jmo+1, psrf32, psrf3)
493 status = nf_get_vara_double(ncidp, varidpsr4, start, count, psrf42)
495 status = nf_get_vara_real(ncidp, varidpsr4, start, count, psrf42)
497 CALL gr_ecrit_fi(1, klono, imo, jmo+1, psrf42, psrf4)
501 psrf(i, 1) = psrf1(i)
502 psrf(i, 2) = psrf2(i)
503 psrf(i, 3) = psrf3(i)
504 psrf(i, 4) = psrf4(i)
506 ftsol(i, 1) = ftsol1(i)
507 ftsol(i, 2) = ftsol2(i)
508 ftsol(i, 3) = ftsol3(i)
509 ftsol(i, 4) = ftsol4(i)
subroutine read_pstoke(irec, zrec, zklono, zklevo, airefi, phisfi, t, mfu, mfd, en_u, de_u, en_d, de_d, coefh, fm_therm, en_therm, frac_impa, frac_nucl, pyu1, pyv1, ftsol, psrf)
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true