source: dynamico_lmdz/aquaplanet/LMDZ5/libf/phylmd/read_pstoke0.F90.obsolete @ 3831

Last change on this file since 3831 was 3816, checked in by millour, 10 years ago

Further cleanup and adaptations:

  • setup iniphusiq to pass on information from dyn to phys.
  • infis (now module inifi_mod) transfers the information and for now also storesthe information. Thus modules control_mod_phys, comconst_phy_mod, comgeom2_phy_mod and temps_phy_mod are now useless.
  • removed q_sat_phy, and put q_sat in misc, since it is quite general.
  • moved information on horizontal and vertical grid to module comgeomphy.F90

EM

File size: 14.6 KB
Line 
1
2! $Id: read_pstoke0.F90 1992 2014-03-05 13:19:12Z lguez $
3
4
5
6SUBROUTINE read_pstoke0(irec, zrec, zkon, zkev, airefi, phisfi, t, mfu, mfd, &
7    en_u, de_u, en_d, de_d, coefh, fm_therm, en_therm, frac_impa, frac_nucl, &
8    pyu1, pyv1, ftsol, psrf)
9
10  ! ******************************************************************************
11  ! Frederic HOURDIN, Abderrahmane IDELKADI
12  ! Lecture des parametres physique stockes online necessaires pour
13  ! recalculer offline le transport des traceurs sur la meme grille que
14  ! online
15  ! A FAIRE : une seule routine au lieu de 2 (lectflux, redecoupe)!
16  ! ******************************************************************************
17
18  USE netcdf
19  USE dimphy
20  USE control_phy_mod
21  USE indice_sol_mod
22
23  IMPLICIT NONE
24
25  include "netcdf.inc"
26  include "dimensions.h"
27  include "description.h"
28
29  INTEGER kon, kev, zkon, zkev
30  PARAMETER (kon=iim*(jjm-1)+2, kev=llm)
31  REAL phisfi(kon)
32  REAL phisfi2(iim, jjm+1), airefi2(iim, jjm+1)
33
34  REAL mfu(kon, kev), mfd(kon, kev)
35  REAL en_u(kon, kev), de_u(kon, kev)
36  REAL en_d(kon, kev), de_d(kon, kev)
37  REAL coefh(kon, kev)
38
39  ! abd 25 11 02
40  ! Thermiques
41  REAL fm_therm(kon, kev), en_therm(kon, kev)
42  REAL t(kon, kev)
43
44  REAL mfu2(iim, jjm+1, kev), mfd2(iim, jjm+1, kev)
45  REAL en_u2(iim, jjm+1, kev), de_u2(iim, jjm+1, kev)
46  REAL en_d2(iim, jjm+1, kev), de_d2(iim, jjm+1, kev)
47  REAL coefh2(iim, jjm+1, kev)
48  REAL t2(iim, jjm+1, kev)
49  ! Thermiques
50  REAL fm_therm2(iim, jjm+1, kev)
51  REAL en_therm2(iim, jjm+1, kev)
52
53  REAL pl(kev)
54  INTEGER irec
55  INTEGER xid, yid, zid, tid
56  INTEGER zrec, zim, zjm
57  INTEGER ncrec, nckon, nckev, ncim, ncjm
58
59  REAL airefi(kon)
60  CHARACTER *20 namedim
61
62  ! !! attention !!
63  ! attention il y a aussi le pb de def kon
64  ! dim de phis??
65
66  REAL frac_impa(kon, kev), frac_nucl(kon, kev)
67  REAL frac_impa2(iim, jjm+1, kev), frac_nucl2(iim, jjm+1, kev)
68  REAL pyu1(kon), pyv1(kon)
69  REAL pyu12(iim, jjm+1), pyv12(iim, jjm+1)
70  REAL ftsol(kon, nbsrf)
71  REAL psrf(kon, nbsrf)
72  REAL ftsol1(kon), ftsol2(kon), ftsol3(kon), ftsol4(kon)
73  REAL psrf1(kon), psrf2(kon), psrf3(kon), psrf4(kon)
74  REAL ftsol12(iim, jjm+1), ftsol22(iim, jjm+1), ftsol32(iim, jjm+1), &
75    ftsol42(iim, jjm+1)
76  REAL psrf12(iim, jjm+1), psrf22(iim, jjm+1), psrf32(iim, jjm+1), &
77    psrf42(iim, jjm+1)
78
79  INTEGER ncidp
80  SAVE ncidp
81  INTEGER varidmfu, varidmfd, varidps, varidenu, variddeu
82  INTEGER varidt
83  INTEGER varidend, varidded, varidch, varidfi, varidfn
84  ! therm
85  INTEGER varidfmth, varidenth
86  INTEGER varidyu1, varidyv1, varidpl, varidai, varididvt
87  INTEGER varidfts1, varidfts2, varidfts3, varidfts4
88  INTEGER varidpsr1, varidpsr2, varidpsr3, varidpsr4
89  SAVE varidmfu, varidmfd, varidps, varidenu, variddeu
90  SAVE varidt
91  SAVE varidend, varidded, varidch, varidfi, varidfn
92  ! therm
93  SAVE varidfmth, varidenth
94  SAVE varidyu1, varidyv1, varidpl, varidai, varididvt
95  SAVE varidfts1, varidfts2, varidfts3, varidfts4
96  SAVE varidpsr1, varidpsr2, varidpsr3, varidpsr4
97
98  INTEGER l, i
99  INTEGER start(4), count(4), status
100  REAL rcode
101  LOGICAL first
102  SAVE first
103  DATA first/.TRUE./
104
105
106
107  ! ---------------------------------------------
108  ! Initialisation de la lecture des fichiers
109  ! ---------------------------------------------
110
111  IF (irec==0) THEN
112
113    rcode = nf90_open('phystoke.nc', nf90_nowrite, ncidp)
114
115    rcode = nf90_inq_varid(ncidp, 'phis', varidps)
116    PRINT *, 'ncidp,varidps', ncidp, varidps
117
118    rcode = nf90_inq_varid(ncidp, 'sig_s', varidpl)
119    PRINT *, 'ncidp,varidpl', ncidp, varidpl
120
121    rcode = nf90_inq_varid(ncidp, 'aire', varidai)
122    PRINT *, 'ncidp,varidai', ncidp, varidai
123
124    rcode = nf90_inq_varid(ncidp, 't', varidt)
125    PRINT *, 'ncidp,varidt', ncidp, varidt
126
127    rcode = nf90_inq_varid(ncidp, 'mfu', varidmfu)
128    PRINT *, 'ncidp,varidmfu', ncidp, varidmfu
129
130    rcode = nf90_inq_varid(ncidp, 'mfd', varidmfd)
131    PRINT *, 'ncidp,varidmfd', ncidp, varidmfd
132
133    rcode = nf90_inq_varid(ncidp, 'en_u', varidenu)
134    PRINT *, 'ncidp,varidenu', ncidp, varidenu
135
136    rcode = nf90_inq_varid(ncidp, 'de_u', variddeu)
137    PRINT *, 'ncidp,variddeu', ncidp, variddeu
138
139    rcode = nf90_inq_varid(ncidp, 'en_d', varidend)
140    PRINT *, 'ncidp,varidend', ncidp, varidend
141
142    rcode = nf90_inq_varid(ncidp, 'de_d', varidded)
143    PRINT *, 'ncidp,varidded', ncidp, varidded
144
145    rcode = nf90_inq_varid(ncidp, 'coefh', varidch)
146    PRINT *, 'ncidp,varidch', ncidp, varidch
147
148    ! Thermiques
149    rcode = nf90_inq_varid(ncidp, 'fm_th', varidfmth)
150    PRINT *, 'ncidp,varidfmth', ncidp, varidfmth
151
152    rcode = nf90_inq_varid(ncidp, 'en_th', varidenth)
153    PRINT *, 'ncidp,varidenth', ncidp, varidenth
154
155    rcode = nf90_inq_varid(ncidp, 'frac_impa', varidfi)
156    PRINT *, 'ncidp,varidfi', ncidp, varidfi
157
158    rcode = nf90_inq_varid(ncidp, 'frac_nucl', varidfn)
159    PRINT *, 'ncidp,varidfn', ncidp, varidfn
160
161    rcode = nf90_inq_varid(ncidp, 'pyu1', varidyu1)
162    PRINT *, 'ncidp,varidyu1', ncidp, varidyu1
163
164    rcode = nf90_inq_varid(ncidp, 'pyv1', varidyv1)
165    PRINT *, 'ncidp,varidyv1', ncidp, varidyv1
166
167    rcode = nf90_inq_varid(ncidp, 'ftsol1', varidfts1)
168    PRINT *, 'ncidp,varidfts1', ncidp, varidfts1
169
170    rcode = nf90_inq_varid(ncidp, 'ftsol2', varidfts2)
171    PRINT *, 'ncidp,varidfts2', ncidp, varidfts2
172
173    rcode = nf90_inq_varid(ncidp, 'ftsol3', varidfts3)
174    PRINT *, 'ncidp,varidfts3', ncidp, varidfts3
175
176    rcode = nf90_inq_varid(ncidp, 'ftsol4', varidfts4)
177    PRINT *, 'ncidp,varidfts4', ncidp, varidfts4
178
179    rcode = nf90_inq_varid(ncidp, 'psrf1', varidpsr1)
180    PRINT *, 'ncidp,varidpsr1', ncidp, varidpsr1
181
182    rcode = nf90_inq_varid(ncidp, 'psrf2', varidpsr2)
183    PRINT *, 'ncidp,varidpsr2', ncidp, varidpsr2
184
185    rcode = nf90_inq_varid(ncidp, 'psrf3', varidpsr3)
186    PRINT *, 'ncidp,varidpsr3', ncidp, varidpsr3
187
188    rcode = nf90_inq_varid(ncidp, 'psrf4', varidpsr4)
189    PRINT *, 'ncidp,varidpsr4', ncidp, varidpsr4
190
191    ! ID pour les dimensions
192
193    status = nf_inq_dimid(ncidp, 'y', yid)
194    status = nf_inq_dimid(ncidp, 'x', xid)
195    status = nf_inq_dimid(ncidp, 'sig_s', zid)
196    status = nf_inq_dimid(ncidp, 'time_counter', tid)
197
198    ! lecture des dimensions
199
200    status = nf_inq_dim(ncidp, yid, namedim, ncjm)
201    status = nf_inq_dim(ncidp, xid, namedim, ncim)
202    status = nf_inq_dim(ncidp, zid, namedim, nckev)
203    status = nf_inq_dim(ncidp, tid, namedim, ncrec)
204
205    zrec = ncrec
206    zkev = nckev
207    zim = ncim
208    zjm = ncjm
209
210    zkon = zim*(zjm-2) + 2
211
212    WRITE (*, *) 'read_pstoke : zrec = ', zrec
213    WRITE (*, *) 'read_pstoke : kev = ', zkev
214    WRITE (*, *) 'read_pstoke : zim = ', zim
215    WRITE (*, *) 'read_pstoke : zjm = ', zjm
216    WRITE (*, *) 'read_pstoke : kon = ', zkon
217
218    ! niveaux de pression
219
220    status = nf_get_vara_real(ncidp, varidpl, 1, kev, pl)
221
222    ! lecture de aire et phis
223
224    start(1) = 1
225    start(2) = 1
226    start(3) = 1
227    start(4) = 0
228
229    count(1) = zim
230    count(2) = zjm
231    count(3) = 1
232    count(4) = 0
233
234
235    ! **** Geopotentiel au sol ***************************************
236    ! phis
237#ifdef NC_DOUBLE
238    status = nf_get_vara_double(ncidp, varidps, start, count, phisfi2)
239#else
240    status = nf_get_vara_real(ncidp, varidps, start, count, phisfi2)
241#endif
242    CALL gr_ecrit_fi(1, kon, iim, jjm+1, phisfi2, phisfi)
243
244    ! **** Aires des mails aux sol ************************************
245    ! aire
246#ifdef NC_DOUBLE
247    status = nf_get_vara_double(ncidp, varidai, start, count, airefi2)
248#else
249    status = nf_get_vara_real(ncidp, varidai, start, count, airefi2)
250#endif
251    CALL gr_ecrit_fi(1, kon, iim, jjm+1, airefi2, airefi)
252  ELSE
253
254    PRINT *, 'ok1'
255
256    ! ---------------------
257    ! lecture des champs
258    ! ---------------------
259
260    PRINT *, 'WARNING!!! Il n y a pas de test de coherence'
261    PRINT *, 'sur le nombre de niveaux verticaux dans le fichier nc'
262
263    start(1) = 1
264    start(2) = 1
265    start(3) = 1
266    start(4) = irec
267
268    count(1) = zim
269    count(2) = zjm
270    count(3) = kev
271    count(4) = 1
272
273    ! **** Temperature ********************************************
274    ! A FAIRE : Es-ce necessaire ?
275
276    ! abder t
277#ifdef NC_DOUBLE
278    status = nf_get_vara_double(ncidp, varidt, start, count, t2)
279#else
280    status = nf_get_vara_real(ncidp, varidt, start, count, t2)
281#endif
282    CALL gr_ecrit_fi(kev, kon, iim, jjm+1, t2, t)
283
284    ! **** Flux pour la convection (Tiedtk)
285    ! ********************************************
286    ! mfu
287#ifdef NC_DOUBLE
288    status = nf_get_vara_double(ncidp, varidmfu, start, count, mfu2)
289#else
290    status = nf_get_vara_real(ncidp, varidmfu, start, count, mfu2)
291#endif
292    CALL gr_ecrit_fi(kev, kon, iim, jjm+1, mfu2, mfu)
293
294    ! mfd
295#ifdef NC_DOUBLE
296    status = nf_get_vara_double(ncidp, varidmfd, start, count, mfd2)
297#else
298    status = nf_get_vara_real(ncidp, varidmfd, start, count, mfd2)
299#endif
300    CALL gr_ecrit_fi(kev, kon, iim, jjm+1, mfd2, mfd)
301
302    ! en_u
303#ifdef NC_DOUBLE
304    status = nf_get_vara_double(ncidp, varidenu, start, count, en_u2)
305#else
306    status = nf_get_vara_real(ncidp, varidenu, start, count, en_u2)
307#endif
308    CALL gr_ecrit_fi(kev, kon, iim, jjm+1, en_u2, en_u)
309
310    ! de_u
311#ifdef NC_DOUBLE
312    status = nf_get_vara_double(ncidp, variddeu, start, count, de_u2)
313#else
314    status = nf_get_vara_real(ncidp, variddeu, start, count, de_u2)
315#endif
316    CALL gr_ecrit_fi(kev, kon, iim, jjm+1, de_u2, de_u)
317
318    ! en_d
319#ifdef NC_DOUBLE
320    status = nf_get_vara_double(ncidp, varidend, start, count, en_d2)
321#else
322    status = nf_get_vara_real(ncidp, varidend, start, count, en_d2)
323#endif
324    CALL gr_ecrit_fi(kev, kon, iim, jjm+1, en_d2, en_d)
325
326    ! de_d
327#ifdef NC_DOUBLE
328    status = nf_get_vara_double(ncidp, varidded, start, count, de_d2)
329#else
330    status = nf_get_vara_real(ncidp, varidded, start, count, de_d2)
331#endif
332    CALL gr_ecrit_fi(kev, kon, iim, jjm+1, de_d2, de_d)
333
334    ! **** Coefficient de mellange turbulent
335    ! *******************************************
336    ! coefh
337    PRINT *, 'LECTURE de coefh a irec =', irec
338#ifdef NC_DOUBLE
339    status = nf_get_vara_double(ncidp, varidch, start, count, coefh2)
340#else
341    status = nf_get_vara_real(ncidp, varidch, start, count, coefh2)
342#endif
343    CALL gr_ecrit_fi(kev, kon, iim, jjm+1, coefh2, coefh)
344    ! call dump2d(iip1,jjp1,coefh2(1,2),'COEFH2READ   ')
345    ! call dump2d(iim ,jjm ,coefh (2,2),'COEFH2READ   ')
346
347    ! **** Flux ascendants et entrant dans le thermique
348    ! **********************************
349    ! Thermiques
350    PRINT *, 'LECTURE de fm_therm a irec =', irec
351#ifdef NC_DOUBLE
352    status = nf_get_vara_double(ncidp, varidfmth, start, count, fm_therm2)
353#else
354    status = nf_get_vara_real(ncidp, varidfmth, start, count, fm_therm2)
355#endif
356    CALL gr_ecrit_fi(kev, kon, iim, jjm+1, fm_therm2, fm_therm)
357    PRINT *, 'LECTURE de en_therm a irec =', irec
358#ifdef NC_DOUBLE
359    status = nf_get_vara_double(ncidp, varidenth, start, count, en_therm2)
360#else
361    status = nf_get_vara_real(ncidp, varidenth, start, count, en_therm2)
362#endif
363    CALL gr_ecrit_fi(kev, kon, iim, jjm+1, en_therm2, en_therm)
364
365    ! **** Coefficients de lessivage
366    ! *******************************************
367    ! frac_impa
368#ifdef NC_DOUBLE
369    status = nf_get_vara_double(ncidp, varidfi, start, count, frac_impa2)
370#else
371    status = nf_get_vara_real(ncidp, varidfi, start, count, frac_impa2)
372#endif
373    CALL gr_ecrit_fi(kev, kon, iim, jjm+1, frac_impa2, frac_impa)
374
375    ! frac_nucl
376
377#ifdef NC_DOUBLE
378    status = nf_get_vara_double(ncidp, varidfn, start, count, frac_nucl2)
379#else
380    status = nf_get_vara_real(ncidp, varidfn, start, count, frac_nucl2)
381#endif
382    CALL gr_ecrit_fi(kev, kon, iim, jjm+1, frac_nucl2, frac_nucl)
383
384    ! **** Vents aux sol ********************************************
385
386    start(3) = irec
387    start(4) = 0
388    count(3) = 1
389    count(4) = 0
390
391    ! pyu1
392    PRINT *, 'LECTURE de yu1 a irec =', irec
393#ifdef NC_DOUBLE
394    status = nf_get_vara_double(ncidp, varidyu1, start, count, pyu12)
395#else
396    status = nf_get_vara_real(ncidp, varidyu1, start, count, pyu12)
397#endif
398    CALL gr_ecrit_fi(1, kon, iim, jjm+1, pyu12, pyu1)
399
400    ! pyv1
401    PRINT *, 'LECTURE de yv1 a irec =', irec
402#ifdef NC_DOUBLE
403    status = nf_get_vara_double(ncidp, varidyv1, start, count, pyv12)
404#else
405    status = nf_get_vara_real(ncidp, varidyv1, start, count, pyv12)
406#endif
407    CALL gr_ecrit_fi(1, kon, iim, jjm+1, pyv12, pyv1)
408
409    ! **** Temerature au sol ********************************************
410    ! ftsol1
411    PRINT *, 'LECTURE de ftsol1 a irec =', irec
412#ifdef NC_DOUBLE
413    status = nf_get_vara_double(ncidp, varidfts1, start, count, ftsol12)
414#else
415    status = nf_get_vara_real(ncidp, varidfts1, start, count, ftsol12)
416#endif
417    CALL gr_ecrit_fi(1, kon, iim, jjm+1, ftsol12, ftsol1)
418
419    ! ftsol2
420    PRINT *, 'LECTURE de ftsol2 a irec =', irec
421#ifdef NC_DOUBLE
422    status = nf_get_vara_double(ncidp, varidfts2, start, count, ftsol22)
423#else
424    status = nf_get_vara_real(ncidp, varidfts2, start, count, ftsol22)
425#endif
426    CALL gr_ecrit_fi(1, kon, iim, jjm+1, ftsol22, ftsol2)
427
428    ! ftsol3
429    PRINT *, 'LECTURE de ftsol3 a irec =', irec
430#ifdef NC_DOUBLE
431    status = nf_get_vara_double(ncidp, varidfts3, start, count, ftsol32)
432#else
433    status = nf_get_vara_real(ncidp, varidfts3, start, count, ftsol32)
434#endif
435    CALL gr_ecrit_fi(1, kon, iim, jjm+1, ftsol32, ftsol3)
436
437    ! ftsol4
438#ifdef NC_DOUBLE
439    status = nf_get_vara_double(ncidp, varidfts4, start, count, ftsol42)
440#else
441    status = nf_get_vara_real(ncidp, varidfts4, start, count, ftsol42)
442#endif
443    CALL gr_ecrit_fi(1, kon, iim, jjm+1, ftsol42, ftsol4)
444
445    ! **** Nature sol ********************************************
446    ! psrf1
447#ifdef NC_DOUBLE
448    status = nf_get_vara_double(ncidp, varidpsr1, start, count, psrf12)
449#else
450    status = nf_get_vara_real(ncidp, varidpsr1, start, count, psrf12)
451#endif
452    ! call dump2d(iip1-1,jjm+1,psrf12,'PSRF1NC')
453    CALL gr_ecrit_fi(1, kon, iim, jjm+1, psrf12, psrf1)
454
455    ! psrf2
456#ifdef NC_DOUBLE
457    status = nf_get_vara_double(ncidp, varidpsr2, start, count, psrf22)
458#else
459    status = nf_get_vara_real(ncidp, varidpsr2, start, count, psrf22)
460#endif
461    ! call dump2d(iip1-1,jjm+1,psrf22,'PSRF2NC')
462    CALL gr_ecrit_fi(1, kon, iim, jjm+1, psrf22, psrf2)
463
464    ! psrf3
465#ifdef NC_DOUBLE
466    status = nf_get_vara_double(ncidp, varidpsr3, start, count, psrf32)
467#else
468    status = nf_get_vara_real(ncidp, varidpsr3, start, count, psrf32)
469#endif
470    CALL gr_ecrit_fi(1, kon, iim, jjm+1, psrf32, psrf3)
471
472    ! psrf4
473#ifdef NC_DOUBLE
474    status = nf_get_vara_double(ncidp, varidpsr4, start, count, psrf42)
475#else
476    status = nf_get_vara_real(ncidp, varidpsr4, start, count, psrf42)
477#endif
478    CALL gr_ecrit_fi(1, kon, iim, jjm+1, psrf42, psrf4)
479
480    DO i = 1, kon
481
482      psrf(i, 1) = psrf1(i)
483      psrf(i, 2) = psrf2(i)
484      psrf(i, 3) = psrf3(i)
485      ! test abderr
486      ! print*,'Dans read_pstoke psrf3 =',psrf3(i),i
487      psrf(i, 4) = psrf4(i)
488
489      ftsol(i, 1) = ftsol1(i)
490      ftsol(i, 2) = ftsol2(i)
491      ftsol(i, 3) = ftsol3(i)
492      ftsol(i, 4) = ftsol4(i)
493
494    END DO
495
496  END IF
497
498  RETURN
499
500END SUBROUTINE read_pstoke0
501
Note: See TracBrowser for help on using the repository browser.