source: LMDZ5/trunk/libf/dyn3d/dynetat0.F @ 1641

Last change on this file since 1641 was 1635, checked in by lguez, 12 years ago

In "dynetat0" and "dynredem_*", replaced calls to "nf_get_var*" and
"nf_put_var*" (old NetCDF 77 interface, embedded in a test of
NC_DOUBLE) by calls to "nf90_get_var" and "nf95_put_var". This
required a change of the rank of some variables in those procedures.

Updated the NetCDF95 library, included in "bibio".

Revision tested in sequential and parallel with MPI. Identical
results.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.5 KB
RevLine 
[524]1!
[1403]2! $Id $
[524]3!
[1146]4      SUBROUTINE dynetat0(fichnom,vcov,ucov,
[524]5     .                    teta,q,masse,ps,phis,time)
[1146]6
7      USE infotrac
[1635]8      use netcdf, only: nf90_get_var
[524]9      IMPLICIT NONE
10
11c=======================================================================
12c
13c   Auteur:  P. Le Van / L.Fairhead
14c   -------
15c
16c   objet:
17c   ------
18c
19c   Lecture de l'etat initial
20c
21c=======================================================================
22c-----------------------------------------------------------------------
23c   Declarations:
24c   -------------
25
26#include "dimensions.h"
27#include "paramet.h"
28#include "temps.h"
29#include "comconst.h"
30#include "comvert.h"
[1635]31#include "comgeom2.h"
[524]32#include "ener.h"
33#include "netcdf.inc"
34#include "description.h"
35#include "serre.h"
36#include "logic.h"
[1403]37#include "iniprint.h"
[524]38
39c   Arguments:
40c   ----------
41
42      CHARACTER*(*) fichnom
[1635]43      REAL vcov(iip1, jjm,llm),ucov(iip1, jjp1,llm),teta(iip1, jjp1,llm)
44      REAL q(iip1,jjp1,llm,nqtot),masse(iip1, jjp1,llm)
45      REAL ps(iip1, jjp1),phis(iip1, jjp1)
[524]46
47      REAL time
48
49c   Variables
50c
51      INTEGER length,iq
52      PARAMETER (length = 100)
53      REAL tab_cntrl(length) ! tableau des parametres du run
54      INTEGER ierr, nid, nvarid
55
56c-----------------------------------------------------------------------
57
58c  Ouverture NetCDF du fichier etat initial
59
60      ierr = NF_OPEN (fichnom, NF_NOWRITE,nid)
61      IF (ierr.NE.NF_NOERR) THEN
[1403]62        write(lunout,*)'dynetat0: Pb d''ouverture du fichier start.nc'
63        write(lunout,*)' ierr = ', ierr
[524]64        CALL ABORT
65      ENDIF
66
67c
68      ierr = NF_INQ_VARID (nid, "controle", nvarid)
69      IF (ierr .NE. NF_NOERR) THEN
[1403]70         write(lunout,*)"dynetat0: Le champ <controle> est absent"
[524]71         CALL abort
72      ENDIF
[1635]73      ierr = nf90_get_var(nid, nvarid, tab_cntrl)
[524]74      IF (ierr .NE. NF_NOERR) THEN
[1403]75         write(lunout,*)"dynetat0: Lecture echoue pour <controle>"
[524]76         CALL abort
77      ENDIF
78
79      im         = tab_cntrl(1)
80      jm         = tab_cntrl(2)
81      lllm       = tab_cntrl(3)
82      day_ref    = tab_cntrl(4)
83      annee_ref  = tab_cntrl(5)
84      rad        = tab_cntrl(6)
85      omeg       = tab_cntrl(7)
86      g          = tab_cntrl(8)
87      cpp        = tab_cntrl(9)
88      kappa      = tab_cntrl(10)
89      daysec     = tab_cntrl(11)
90      dtvr       = tab_cntrl(12)
91      etot0      = tab_cntrl(13)
92      ptot0      = tab_cntrl(14)
93      ztot0      = tab_cntrl(15)
94      stot0      = tab_cntrl(16)
95      ang0       = tab_cntrl(17)
96      pa         = tab_cntrl(18)
97      preff      = tab_cntrl(19)
98c
99      clon       = tab_cntrl(20)
100      clat       = tab_cntrl(21)
101      grossismx  = tab_cntrl(22)
102      grossismy  = tab_cntrl(23)
103c
104      IF ( tab_cntrl(24).EQ.1. )  THEN
105        fxyhypb  = . TRUE .
[541]106c        dzoomx   = tab_cntrl(25)
107c        dzoomy   = tab_cntrl(26)
108c        taux     = tab_cntrl(28)
109c        tauy     = tab_cntrl(29)
[524]110      ELSE
111        fxyhypb = . FALSE .
112        ysinus  = . FALSE .
113        IF( tab_cntrl(27).EQ.1. ) ysinus = . TRUE.
114      ENDIF
115
116      day_ini = tab_cntrl(30)
117      itau_dyn = tab_cntrl(31)
[1577]118      start_time = tab_cntrl(32)
[524]119c   .................................................................
120c
121c
[1403]122      write(lunout,*)'dynetat0: rad,omeg,g,cpp,kappa',
123     &               rad,omeg,g,cpp,kappa
[524]124
125      IF(   im.ne.iim           )  THEN
126          PRINT 1,im,iim
127          STOP
128      ELSE  IF( jm.ne.jjm       )  THEN
129          PRINT 2,jm,jjm
130          STOP
131      ELSE  IF( lllm.ne.llm     )  THEN
132          PRINT 3,lllm,llm
133          STOP
134      ENDIF
135
136      ierr = NF_INQ_VARID (nid, "rlonu", nvarid)
137      IF (ierr .NE. NF_NOERR) THEN
[1403]138         write(lunout,*)"dynetat0: Le champ <rlonu> est absent"
[524]139         CALL abort
140      ENDIF
[1635]141      ierr = nf90_get_var(nid, nvarid, rlonu)
[524]142      IF (ierr .NE. NF_NOERR) THEN
[1403]143         write(lunout,*)"dynetat0: Lecture echouee pour <rlonu>"
[524]144         CALL abort
145      ENDIF
146
147      ierr = NF_INQ_VARID (nid, "rlatu", nvarid)
148      IF (ierr .NE. NF_NOERR) THEN
[1403]149         write(lunout,*)"dynetat0: Le champ <rlatu> est absent"
[524]150         CALL abort
151      ENDIF
[1635]152      ierr = nf90_get_var(nid, nvarid, rlatu)
[524]153      IF (ierr .NE. NF_NOERR) THEN
[1403]154         write(lunout,*)"dynetat0: Lecture echouee pour <rlatu>"
[524]155         CALL abort
156      ENDIF
157
158      ierr = NF_INQ_VARID (nid, "rlonv", nvarid)
159      IF (ierr .NE. NF_NOERR) THEN
[1403]160         write(lunout,*)"dynetat0: Le champ <rlonv> est absent"
[524]161         CALL abort
162      ENDIF
[1635]163      ierr = nf90_get_var(nid, nvarid, rlonv)
[524]164      IF (ierr .NE. NF_NOERR) THEN
[1403]165         write(lunout,*)"dynetat0: Lecture echouee pour <rlonv>"
[524]166         CALL abort
167      ENDIF
168
169      ierr = NF_INQ_VARID (nid, "rlatv", nvarid)
170      IF (ierr .NE. NF_NOERR) THEN
[1403]171         write(lunout,*)"dynetat0: Le champ <rlatv> est absent"
[524]172         CALL abort
173      ENDIF
[1635]174      ierr = nf90_get_var(nid, nvarid, rlatv)
[524]175      IF (ierr .NE. NF_NOERR) THEN
[1403]176         write(lunout,*)"dynetat0: Lecture echouee pour rlatv"
[524]177         CALL abort
178      ENDIF
179
180      ierr = NF_INQ_VARID (nid, "cu", nvarid)
181      IF (ierr .NE. NF_NOERR) THEN
[1403]182         write(lunout,*)"dynetat0: Le champ <cu> est absent"
[524]183         CALL abort
184      ENDIF
[1635]185      ierr = nf90_get_var(nid, nvarid, cu)
[524]186      IF (ierr .NE. NF_NOERR) THEN
[1403]187         write(lunout,*)"dynetat0: Lecture echouee pour <cu>"
[524]188         CALL abort
189      ENDIF
190
191      ierr = NF_INQ_VARID (nid, "cv", nvarid)
192      IF (ierr .NE. NF_NOERR) THEN
[1403]193         write(lunout,*)"dynetat0: Le champ <cv> est absent"
[524]194         CALL abort
195      ENDIF
[1635]196      ierr = nf90_get_var(nid, nvarid, cv)
[524]197      IF (ierr .NE. NF_NOERR) THEN
[1403]198         write(lunout,*)"dynetat0: Lecture echouee pour <cv>"
[524]199         CALL abort
200      ENDIF
201
202      ierr = NF_INQ_VARID (nid, "aire", nvarid)
203      IF (ierr .NE. NF_NOERR) THEN
[1403]204         write(lunout,*)"dynetat0: Le champ <aire> est absent"
[524]205         CALL abort
206      ENDIF
[1635]207      ierr = nf90_get_var(nid, nvarid, aire)
[524]208      IF (ierr .NE. NF_NOERR) THEN
[1403]209         write(lunout,*)"dynetat0: Lecture echouee pour <aire>"
[524]210         CALL abort
211      ENDIF
212
213      ierr = NF_INQ_VARID (nid, "phisinit", nvarid)
214      IF (ierr .NE. NF_NOERR) THEN
[1403]215         write(lunout,*)"dynetat0: Le champ <phisinit> est absent"
[524]216         CALL abort
217      ENDIF
[1635]218      ierr = nf90_get_var(nid, nvarid, phis)
[524]219      IF (ierr .NE. NF_NOERR) THEN
[1403]220         write(lunout,*)"dynetat0: Lecture echouee pour <phisinit>"
[524]221         CALL abort
222      ENDIF
223
224      ierr = NF_INQ_VARID (nid, "temps", nvarid)
225      IF (ierr .NE. NF_NOERR) THEN
[1403]226         write(lunout,*)"dynetat0: Le champ <temps> est absent"
[524]227         CALL abort
228      ENDIF
[1635]229      ierr = nf90_get_var(nid, nvarid, time)
[524]230      IF (ierr .NE. NF_NOERR) THEN
[1403]231         write(lunout,*)"dynetat0: Lecture echouee <temps>"
[524]232         CALL abort
233      ENDIF
234
235      ierr = NF_INQ_VARID (nid, "ucov", nvarid)
236      IF (ierr .NE. NF_NOERR) THEN
[1403]237         write(lunout,*)"dynetat0: Le champ <ucov> est absent"
[524]238         CALL abort
239      ENDIF
[1635]240      ierr = nf90_get_var(nid, nvarid, ucov)
[524]241      IF (ierr .NE. NF_NOERR) THEN
[1403]242         write(lunout,*)"dynetat0: Lecture echouee pour <ucov>"
[524]243         CALL abort
244      ENDIF
245 
246      ierr = NF_INQ_VARID (nid, "vcov", nvarid)
247      IF (ierr .NE. NF_NOERR) THEN
[1403]248         write(lunout,*)"dynetat0: Le champ <vcov> est absent"
[524]249         CALL abort
250      ENDIF
[1635]251      ierr = nf90_get_var(nid, nvarid, vcov)
[524]252      IF (ierr .NE. NF_NOERR) THEN
[1403]253         write(lunout,*)"dynetat0: Lecture echouee pour <vcov>"
[524]254         CALL abort
255      ENDIF
256
257      ierr = NF_INQ_VARID (nid, "teta", nvarid)
258      IF (ierr .NE. NF_NOERR) THEN
[1403]259         write(lunout,*)"dynetat0: Le champ <teta> est absent"
[524]260         CALL abort
261      ENDIF
[1635]262      ierr = nf90_get_var(nid, nvarid, teta)
[524]263      IF (ierr .NE. NF_NOERR) THEN
[1403]264         write(lunout,*)"dynetat0: Lecture echouee pour <teta>"
[524]265         CALL abort
266      ENDIF
267
268
[1146]269      IF(nqtot.GE.1) THEN
270      DO iq=1,nqtot
[524]271        ierr =  NF_INQ_VARID (nid, tname(iq), nvarid)
272        IF (ierr .NE. NF_NOERR) THEN
[1421]273           write(lunout,*)"dynetat0: Le traceur <"//trim(tname(iq))//
[1403]274     &                    "> est absent"
275           write(lunout,*)"          Il est donc initialise a zero"
[1635]276           q(:,:,:,iq)=0.
[524]277        ELSE
[1635]278           ierr = NF90_GET_VAR(nid, nvarid, q(:,:,:,iq))
[524]279          IF (ierr .NE. NF_NOERR) THEN
[1403]280            write(lunout,*)"dynetat0: Lecture echouee pour "//tname(iq)
281            CALL abort
[524]282          ENDIF
283        ENDIF
284      ENDDO
285      ENDIF
286
287      ierr = NF_INQ_VARID (nid, "masse", nvarid)
288      IF (ierr .NE. NF_NOERR) THEN
[1403]289         write(lunout,*)"dynetat0: Le champ <masse> est absent"
[524]290         CALL abort
291      ENDIF
[1635]292      ierr = nf90_get_var(nid, nvarid, masse)
[524]293      IF (ierr .NE. NF_NOERR) THEN
[1403]294         write(lunout,*)"dynetat0: Lecture echouee pour <masse>"
[524]295         CALL abort
296      ENDIF
297
298      ierr = NF_INQ_VARID (nid, "ps", nvarid)
299      IF (ierr .NE. NF_NOERR) THEN
[1403]300         write(lunout,*)"dynetat0: Le champ <ps> est absent"
[524]301         CALL abort
302      ENDIF
[1635]303      ierr = nf90_get_var(nid, nvarid, ps)
[524]304      IF (ierr .NE. NF_NOERR) THEN
[1403]305         write(lunout,*)"dynetat0: Lecture echouee pour <ps>"
[524]306         CALL abort
307      ENDIF
308
309      ierr = NF_CLOSE(nid)
310
311       day_ini=day_ini+INT(time)
312       time=time-INT(time)
313
314  1   FORMAT(//10x,'la valeur de im =',i4,2x,'lue sur le fichier de dem
315     *arrage est differente de la valeur parametree iim =',i4//)
316   2  FORMAT(//10x,'la valeur de jm =',i4,2x,'lue sur le fichier de dem
317     *arrage est differente de la valeur parametree jjm =',i4//)
318   3  FORMAT(//10x,'la valeur de lmax =',i4,2x,'lue sur le fichier dema
319     *rrage est differente de la valeur parametree llm =',i4//)
320   4  FORMAT(//10x,'la valeur de dtrv =',i4,2x,'lue sur le fichier dema
321     *rrage est differente de la valeur  dtinteg =',i4//)
322
323      RETURN
324      END
Note: See TracBrowser for help on using the repository browser.