source: LMDZ4/branches/LMDZ4-dev/libf/phylmd/read_pstoke0.F @ 1137

Last change on this file since 1137 was 1135, checked in by lguez, 16 years ago

Translated calls using NetCDF 2.4 interface to calls using NetCDF 3.6
Fortran 90 interface.

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