source: LMDZ5/branches/testing/libf/dyn3d/dynredem.F @ 2028

Last change on this file since 2028 was 1999, checked in by Laurent Fairhead, 11 years ago

Merged trunk changes r1920:1997 into testing branch

  • 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: 19.9 KB
RevLine 
[524]1!
[1279]2! $Id: dynredem.F 1999 2014-03-20 09:57:19Z fhourdin $
[524]3!
4c
[1146]5      SUBROUTINE dynredem0(fichnom,iday_end,phis)
[1279]6#ifdef CPP_IOIPSL
[524]7      USE IOIPSL
[1279]8#endif
[1146]9      USE infotrac
[1669]10      use netcdf95, only: NF95_PUT_VAR
[1403]11 
[524]12      IMPLICIT NONE
13c=======================================================================
14c Ecriture du fichier de redemarrage sous format NetCDF (initialisation)
15c=======================================================================
16c   Declarations:
17c   -------------
18#include "dimensions.h"
19#include "paramet.h"
20#include "comconst.h"
21#include "comvert.h"
[1669]22#include "comgeom2.h"
[524]23#include "temps.h"
24#include "ener.h"
25#include "logic.h"
26#include "netcdf.inc"
27#include "description.h"
28#include "serre.h"
[1403]29#include "iniprint.h"
[524]30
31c   Arguments:
32c   ----------
33      INTEGER iday_end
[1669]34      REAL phis(iip1, jjp1)
[524]35      CHARACTER*(*) fichnom
36
37c   Local:
38c   ------
39      INTEGER iq,l
40      INTEGER length
41      PARAMETER (length = 100)
42      REAL tab_cntrl(length) ! tableau des parametres du run
43      INTEGER ierr
44      character*20 modname
45      character*80 abort_message
46
47c   Variables locales pour NetCDF:
48c
49      INTEGER dims2(2), dims3(3), dims4(4)
50      INTEGER idim_index
51      INTEGER idim_rlonu, idim_rlonv, idim_rlatu, idim_rlatv
52      INTEGER idim_s, idim_sig
53      INTEGER idim_tim
54      INTEGER nid,nvarid
55
56      REAL zan0,zjulian,hours
57      INTEGER yyears0,jjour0, mmois0
58      character*30 unites
59
60
61c-----------------------------------------------------------------------
[1279]62      modname='dynredem0'
[524]63
[1279]64#ifdef CPP_IOIPSL
[524]65      call ymds2ju(annee_ref, 1, iday_end, 0.0, zjulian)
66      call ju2ymds(zjulian, yyears0, mmois0, jjour0, hours)
[1279]67#else
68! set yyears0, mmois0, jjour0 to 0,1,1 (hours is not used)
69      yyears0=0
70      mmois0=1
71      jjour0=1
72#endif       
[524]73
74      DO l=1,length
75       tab_cntrl(l) = 0.
76      ENDDO
[1403]77       tab_cntrl(1)  = REAL(iim)
78       tab_cntrl(2)  = REAL(jjm)
79       tab_cntrl(3)  = REAL(llm)
80       tab_cntrl(4)  = REAL(day_ref)
81       tab_cntrl(5)  = REAL(annee_ref)
[524]82       tab_cntrl(6)  = rad
83       tab_cntrl(7)  = omeg
84       tab_cntrl(8)  = g
85       tab_cntrl(9)  = cpp
86       tab_cntrl(10) = kappa
87       tab_cntrl(11) = daysec
88       tab_cntrl(12) = dtvr
89       tab_cntrl(13) = etot0
90       tab_cntrl(14) = ptot0
91       tab_cntrl(15) = ztot0
92       tab_cntrl(16) = stot0
93       tab_cntrl(17) = ang0
94       tab_cntrl(18) = pa
95       tab_cntrl(19) = preff
96c
97c    .....    parametres  pour le zoom      ......   
98
99       tab_cntrl(20)  = clon
100       tab_cntrl(21)  = clat
101       tab_cntrl(22)  = grossismx
102       tab_cntrl(23)  = grossismy
103c
104      IF ( fxyhypb )   THEN
105       tab_cntrl(24) = 1.
106       tab_cntrl(25) = dzoomx
107       tab_cntrl(26) = dzoomy
108       tab_cntrl(27) = 0.
109       tab_cntrl(28) = taux
110       tab_cntrl(29) = tauy
111      ELSE
112       tab_cntrl(24) = 0.
113       tab_cntrl(25) = dzoomx
114       tab_cntrl(26) = dzoomy
115       tab_cntrl(27) = 0.
116       tab_cntrl(28) = 0.
117       tab_cntrl(29) = 0.
118       IF( ysinus )  tab_cntrl(27) = 1.
119      ENDIF
120
[1403]121       tab_cntrl(30) = REAL(iday_end)
122       tab_cntrl(31) = REAL(itau_dyn + itaufin)
[1665]123c start_time: start_time of simulation (not necessarily 0.)
124       tab_cntrl(32) = start_time
[524]125c
126c    .........................................................
127c
128c Creation du fichier:
129c
130      ierr = NF_CREATE(fichnom, NF_CLOBBER, nid)
131      IF (ierr.NE.NF_NOERR) THEN
[1403]132         write(lunout,*)"dynredem0: Pb d ouverture du fichier "
133     &                  //trim(fichnom)
134         write(lunout,*)' ierr = ', ierr
[1999]135         CALL ABORT_GCM("DYNREDEM0", "", 1)
[524]136      ENDIF
137c
138c Preciser quelques attributs globaux:
139c
140      ierr = NF_PUT_ATT_TEXT (nid, NF_GLOBAL, "title", 27,
141     .                       "Fichier demmarage dynamique")
142c
143c Definir les dimensions du fichiers:
144c
145      ierr = NF_DEF_DIM (nid, "index", length, idim_index)
146      ierr = NF_DEF_DIM (nid, "rlonu", iip1, idim_rlonu)
147      ierr = NF_DEF_DIM (nid, "rlatu", jjp1, idim_rlatu)
148      ierr = NF_DEF_DIM (nid, "rlonv", iip1, idim_rlonv)
149      ierr = NF_DEF_DIM (nid, "rlatv", jjm, idim_rlatv)
150      ierr = NF_DEF_DIM (nid, "sigs", llm, idim_s)
151      ierr = NF_DEF_DIM (nid, "sig", llmp1, idim_sig)
152      ierr = NF_DEF_DIM (nid, "temps", NF_UNLIMITED, idim_tim)
153c
154      ierr = NF_ENDDEF(nid) ! sortir du mode de definition
155c
156c Definir et enregistrer certains champs invariants:
157c
158      ierr = NF_REDEF (nid)
[690]159cIM 220306 BEG
160#ifdef NC_DOUBLE
161      ierr = NF_DEF_VAR (nid,"controle",NF_DOUBLE,1,idim_index,nvarid)
162#else
[524]163      ierr = NF_DEF_VAR (nid,"controle",NF_FLOAT,1,idim_index,nvarid)
[690]164#endif
165cIM 220306 END
[524]166      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
167     .                       "Parametres de controle")
168      ierr = NF_ENDDEF(nid)
[1669]169      call NF95_PUT_VAR(nid,nvarid,tab_cntrl)
[524]170c
171      ierr = NF_REDEF (nid)
[690]172cIM 220306 BEG
173#ifdef NC_DOUBLE
174      ierr = NF_DEF_VAR (nid,"rlonu",NF_DOUBLE,1,idim_rlonu,nvarid)
175#else
[524]176      ierr = NF_DEF_VAR (nid,"rlonu",NF_FLOAT,1,idim_rlonu,nvarid)
[690]177#endif
178cIM 220306 END
[524]179      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 23,
180     .                       "Longitudes des points U")
181      ierr = NF_ENDDEF(nid)
[1669]182      call NF95_PUT_VAR(nid,nvarid,rlonu)
[524]183c
184      ierr = NF_REDEF (nid)
[690]185cIM 220306 BEG
186#ifdef NC_DOUBLE
187      ierr = NF_DEF_VAR (nid,"rlatu",NF_DOUBLE,1,idim_rlatu,nvarid)
188#else
[524]189      ierr = NF_DEF_VAR (nid,"rlatu",NF_FLOAT,1,idim_rlatu,nvarid)
[690]190#endif
191cIM 220306 END
[524]192      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
193     .                       "Latitudes des points U")
194      ierr = NF_ENDDEF(nid)
[1669]195      call NF95_PUT_VAR (nid,nvarid,rlatu)
[524]196c
197      ierr = NF_REDEF (nid)
[690]198cIM 220306 BEG
199#ifdef NC_DOUBLE
200      ierr = NF_DEF_VAR (nid,"rlonv",NF_DOUBLE,1,idim_rlonv,nvarid)
201#else
[524]202      ierr = NF_DEF_VAR (nid,"rlonv",NF_FLOAT,1,idim_rlonv,nvarid)
[690]203#endif
204cIM 220306 END
[524]205      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 23,
206     .                       "Longitudes des points V")
207      ierr = NF_ENDDEF(nid)
[1669]208      call NF95_PUT_VAR(nid,nvarid,rlonv)
[524]209c
210      ierr = NF_REDEF (nid)
[690]211cIM 220306 BEG
212#ifdef NC_DOUBLE
213      ierr = NF_DEF_VAR (nid,"rlatv",NF_DOUBLE,1,idim_rlatv,nvarid)
214#else
[524]215      ierr = NF_DEF_VAR (nid,"rlatv",NF_FLOAT,1,idim_rlatv,nvarid)
[690]216#endif
217cIM 220306 END
[524]218      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
219     .                       "Latitudes des points V")
220      ierr = NF_ENDDEF(nid)
[1669]221      call NF95_PUT_VAR(nid,nvarid,rlatv)
[524]222c
223      ierr = NF_REDEF (nid)
[690]224cIM 220306 BEG
225#ifdef NC_DOUBLE
226      ierr = NF_DEF_VAR (nid,"nivsigs",NF_DOUBLE,1,idim_s,nvarid)
227#else
[524]228      ierr = NF_DEF_VAR (nid,"nivsigs",NF_FLOAT,1,idim_s,nvarid)
[690]229#endif
230cIM 220306 END
[524]231      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 28,
232     .                       "Numero naturel des couches s")
233      ierr = NF_ENDDEF(nid)
[1669]234      call NF95_PUT_VAR(nid,nvarid,nivsigs)
[524]235c
236      ierr = NF_REDEF (nid)
[690]237cIM 220306 BEG
238#ifdef NC_DOUBLE
239      ierr = NF_DEF_VAR (nid,"nivsig",NF_DOUBLE,1,idim_sig,nvarid)
240#else
[524]241      ierr = NF_DEF_VAR (nid,"nivsig",NF_FLOAT,1,idim_sig,nvarid)
[690]242#endif
243cIM 220306 END
[524]244      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 32,
245     .                       "Numero naturel des couches sigma")
246      ierr = NF_ENDDEF(nid)
[1669]247      call NF95_PUT_VAR(nid,nvarid,nivsig)
[524]248c
249      ierr = NF_REDEF (nid)
[690]250cIM 220306 BEG
251#ifdef NC_DOUBLE
252      ierr = NF_DEF_VAR (nid,"ap",NF_DOUBLE,1,idim_sig,nvarid)
253#else
[524]254      ierr = NF_DEF_VAR (nid,"ap",NF_FLOAT,1,idim_sig,nvarid)
[690]255#endif
256cIM 220306 END
[524]257      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 26,
258     .                       "Coefficient A pour hybride")
259      ierr = NF_ENDDEF(nid)
[1669]260      call NF95_PUT_VAR(nid,nvarid,ap)
[524]261c
262      ierr = NF_REDEF (nid)
[690]263cIM 220306 BEG
264#ifdef NC_DOUBLE
265      ierr = NF_DEF_VAR (nid,"bp",NF_DOUBLE,1,idim_sig,nvarid)
266#else
[524]267      ierr = NF_DEF_VAR (nid,"bp",NF_FLOAT,1,idim_sig,nvarid)
[690]268#endif
269cIM 220306 END
[524]270      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 26,
271     .                       "Coefficient B pour hybride")
272      ierr = NF_ENDDEF(nid)
[1669]273      call NF95_PUT_VAR(nid,nvarid,bp)
[524]274c
275      ierr = NF_REDEF (nid)
[690]276cIM 220306 BEG
277#ifdef NC_DOUBLE
278      ierr = NF_DEF_VAR (nid,"presnivs",NF_DOUBLE,1,idim_s,nvarid)
279#else
[524]280      ierr = NF_DEF_VAR (nid,"presnivs",NF_FLOAT,1,idim_s,nvarid)
[690]281#endif
282cIM 220306 END
[524]283      ierr = NF_ENDDEF(nid)
[1669]284      call NF95_PUT_VAR(nid,nvarid,presnivs)
[524]285c
286c Coefficients de passage cov. <-> contra. <--> naturel
287c
288      ierr = NF_REDEF (nid)
289      dims2(1) = idim_rlonu
290      dims2(2) = idim_rlatu
[690]291cIM 220306 BEG
292#ifdef NC_DOUBLE
293      ierr = NF_DEF_VAR (nid,"cu",NF_DOUBLE,2,dims2,nvarid)
294#else
[524]295      ierr = NF_DEF_VAR (nid,"cu",NF_FLOAT,2,dims2,nvarid)
[690]296#endif
297cIM 220306 END
[524]298      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 29,
299     .                       "Coefficient de passage pour U")
300      ierr = NF_ENDDEF(nid)
[1669]301      call NF95_PUT_VAR(nid,nvarid,cu)
[524]302c
303      ierr = NF_REDEF (nid)
304      dims2(1) = idim_rlonv
305      dims2(2) = idim_rlatv
[690]306cIM 220306 BEG
307#ifdef NC_DOUBLE
308      ierr = NF_DEF_VAR (nid,"cv",NF_DOUBLE,2,dims2,nvarid)
309#else
[524]310      ierr = NF_DEF_VAR (nid,"cv",NF_FLOAT,2,dims2,nvarid)
[690]311#endif
312cIM 220306 END
[524]313      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 29,
314     .                       "Coefficient de passage pour V")
315      ierr = NF_ENDDEF(nid)
[1669]316      call NF95_PUT_VAR(nid,nvarid,cv)
[524]317c
318c Aire de chaque maille:
319c
320      ierr = NF_REDEF (nid)
321      dims2(1) = idim_rlonv
322      dims2(2) = idim_rlatu
[690]323cIM 220306 BEG
324#ifdef NC_DOUBLE
325      ierr = NF_DEF_VAR (nid,"aire",NF_DOUBLE,2,dims2,nvarid)
326#else
[524]327      ierr = NF_DEF_VAR (nid,"aire",NF_FLOAT,2,dims2,nvarid)
[690]328#endif
329cIM 220306 END
[524]330      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
331     .                       "Aires de chaque maille")
332      ierr = NF_ENDDEF(nid)
[1669]333      call NF95_PUT_VAR(nid,nvarid,aire)
[524]334c
335c Geopentiel au sol:
336c
337      ierr = NF_REDEF (nid)
338      dims2(1) = idim_rlonv
339      dims2(2) = idim_rlatu
[690]340cIM 220306 BEG
341#ifdef NC_DOUBLE
342      ierr = NF_DEF_VAR (nid,"phisinit",NF_DOUBLE,2,dims2,nvarid)
343#else
[524]344      ierr = NF_DEF_VAR (nid,"phisinit",NF_FLOAT,2,dims2,nvarid)
[690]345#endif
346cIM 220306 END
[524]347      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 19,
348     .                       "Geopotentiel au sol")
349      ierr = NF_ENDDEF(nid)
[1669]350      call NF95_PUT_VAR(nid,nvarid,phis)
[524]351c
352c Definir les variables pour pouvoir les enregistrer plus tard:
353c
354      ierr = NF_REDEF (nid) ! entrer dans le mode de definition
355c
[690]356cIM 220306 BEG
357#ifdef NC_DOUBLE
358      ierr = NF_DEF_VAR (nid,"temps",NF_DOUBLE,1,idim_tim,nvarid)
359#else
[524]360      ierr = NF_DEF_VAR (nid,"temps",NF_FLOAT,1,idim_tim,nvarid)
[690]361#endif
362cIM 220306 END
[524]363      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 19,
364     .                       "Temps de simulation")
365      write(unites,200)yyears0,mmois0,jjour0
366200   format('days since ',i4,'-',i2.2,'-',i2.2,' 00:00:00')
367      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "units", 30,
368     .                         unites)
369
370c
371      dims4(1) = idim_rlonu
372      dims4(2) = idim_rlatu
373      dims4(3) = idim_s
374      dims4(4) = idim_tim
[690]375cIM 220306 BEG
376#ifdef NC_DOUBLE
377      ierr = NF_DEF_VAR (nid,"ucov",NF_DOUBLE,4,dims4,nvarid)
378#else
[524]379      ierr = NF_DEF_VAR (nid,"ucov",NF_FLOAT,4,dims4,nvarid)
[690]380#endif
381cIM 220306 END
[524]382      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 9,
383     .                       "Vitesse U")
384c
385      dims4(1) = idim_rlonv
386      dims4(2) = idim_rlatv
387      dims4(3) = idim_s
388      dims4(4) = idim_tim
[690]389cIM 220306 BEG
390#ifdef NC_DOUBLE
391      ierr = NF_DEF_VAR (nid,"vcov",NF_DOUBLE,4,dims4,nvarid)
392#else
[524]393      ierr = NF_DEF_VAR (nid,"vcov",NF_FLOAT,4,dims4,nvarid)
[690]394#endif
395cIM 220306 END
[524]396      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 9,
397     .                       "Vitesse V")
398c
399      dims4(1) = idim_rlonv
400      dims4(2) = idim_rlatu
401      dims4(3) = idim_s
402      dims4(4) = idim_tim
[690]403cIM 220306 BEG
404#ifdef NC_DOUBLE
405      ierr = NF_DEF_VAR (nid,"teta",NF_DOUBLE,4,dims4,nvarid)
406#else
[524]407      ierr = NF_DEF_VAR (nid,"teta",NF_FLOAT,4,dims4,nvarid)
[690]408#endif
409cIM 220306 END
[524]410      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 11,
411     .                       "Temperature")
412c
413      dims4(1) = idim_rlonv
414      dims4(2) = idim_rlatu
415      dims4(3) = idim_s
416      dims4(4) = idim_tim
[1146]417      IF(nqtot.GE.1) THEN
418      DO iq=1,nqtot
[690]419cIM 220306 BEG
420#ifdef NC_DOUBLE
421      ierr = NF_DEF_VAR (nid,tname(iq),NF_DOUBLE,4,dims4,nvarid)
422#else
[524]423      ierr = NF_DEF_VAR (nid,tname(iq),NF_FLOAT,4,dims4,nvarid)
[690]424#endif
425cIM 220306 END
[524]426      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 12,ttext(iq))
427      ENDDO
428      ENDIF
429c
430      dims4(1) = idim_rlonv
431      dims4(2) = idim_rlatu
432      dims4(3) = idim_s
433      dims4(4) = idim_tim
[690]434cIM 220306 BEG
435#ifdef NC_DOUBLE
436      ierr = NF_DEF_VAR (nid,"masse",NF_DOUBLE,4,dims4,nvarid)
437#else
[524]438      ierr = NF_DEF_VAR (nid,"masse",NF_FLOAT,4,dims4,nvarid)
[690]439#endif
440cIM 220306 END
[524]441      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 12,
442     .                       "C est quoi ?")
443c
444      dims3(1) = idim_rlonv
445      dims3(2) = idim_rlatu
446      dims3(3) = idim_tim
[690]447cIM 220306 BEG
448#ifdef NC_DOUBLE
449      ierr = NF_DEF_VAR (nid,"ps",NF_DOUBLE,3,dims3,nvarid)
450#else
[524]451      ierr = NF_DEF_VAR (nid,"ps",NF_FLOAT,3,dims3,nvarid)
[690]452#endif
453cIM 220306 END
[524]454      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 15,
455     .                       "Pression au sol")
456c
457      ierr = NF_ENDDEF(nid) ! sortir du mode de definition
458      ierr = NF_CLOSE(nid) ! fermer le fichier
459
[1403]460      write(lunout,*)'dynredem0: iim,jjm,llm,iday_end',
461     &               iim,jjm,llm,iday_end
462      write(lunout,*)'dynredem0: rad,omeg,g,cpp,kappa',
463     &        rad,omeg,g,cpp,kappa
[524]464
465      RETURN
466      END
467      SUBROUTINE dynredem1(fichnom,time,
[1146]468     .                     vcov,ucov,teta,q,masse,ps)
469      USE infotrac
[1403]470      USE control_mod
[1669]471      use netcdf, only: NF90_get_VAR
472      use netcdf95, only: NF95_PUT_VAR
[1403]473 
[524]474      IMPLICIT NONE
475c=================================================================
476c  Ecriture du fichier de redemarrage sous format NetCDF
477c=================================================================
478#include "dimensions.h"
479#include "paramet.h"
480#include "description.h"
481#include "netcdf.inc"
482#include "comvert.h"
483#include "comgeom.h"
[541]484#include "temps.h"
[1403]485#include "iniprint.h"
[524]486
[1403]487
[1146]488      INTEGER l
[1669]489      REAL vcov(iip1,jjm,llm),ucov(iip1, jjp1,llm)
490      REAL teta(iip1, jjp1,llm)                   
491      REAL ps(iip1, jjp1),masse(iip1, jjp1,llm)                   
492      REAL q(iip1, jjp1, llm, nqtot)
[524]493      CHARACTER*(*) fichnom
494     
495      REAL time
[822]496      INTEGER nid, nvarid, nid_trac, nvarid_trac
497      REAL trac_tmp(ip1jmp1,llm)     
498      INTEGER ierr, ierr_file
[524]499      INTEGER iq
[541]500      INTEGER length
501      PARAMETER (length = 100)
502      REAL tab_cntrl(length) ! tableau des parametres du run
[524]503      character*20 modname
504      character*80 abort_message
505c
506      INTEGER nb
507      SAVE nb
508      DATA nb / 0 /
509
510      modname = 'dynredem1'
511      ierr = NF_OPEN(fichnom, NF_WRITE, nid)
512      IF (ierr .NE. NF_NOERR) THEN
[1403]513         write(lunout,*)"dynredem1: Pb. d ouverture "//trim(fichnom)
[1999]514         call abort_gcm("dynredem1", "", 1)
[524]515      ENDIF
516
517c  Ecriture/extension de la coordonnee temps
518
519      nb = nb + 1
520      ierr = NF_INQ_VARID(nid, "temps", nvarid)
521      IF (ierr .NE. NF_NOERR) THEN
[1403]522         write(lunout,*) NF_STRERROR(ierr)
[524]523         abort_message='Variable temps n est pas definie'
524         CALL abort_gcm(modname,abort_message,ierr)
525      ENDIF
[1669]526      call NF95_PUT_VAR(nid,nvarid,time,start=(/nb/))
[1403]527      write(lunout,*) "dynredem1: Enregistrement pour ", nb, time
[524]528
[541]529c
530c  Re-ecriture du tableau de controle, itaufin n'est plus defini quand
531c  on passe dans dynredem0
532      ierr = NF_INQ_VARID (nid, "controle", nvarid)
533      IF (ierr .NE. NF_NOERR) THEN
534         abort_message="dynredem1: Le champ <controle> est absent"
535         ierr = 1
536         CALL abort_gcm(modname,abort_message,ierr)
537      ENDIF
[1669]538      ierr = NF90_GET_VAR(nid, nvarid, tab_cntrl)
[1403]539       tab_cntrl(31) = REAL(itau_dyn + itaufin)
[1669]540      call NF95_PUT_VAR(nid,nvarid,tab_cntrl)
[541]541
[524]542c  Ecriture des champs
543c
544      ierr = NF_INQ_VARID(nid, "ucov", nvarid)
545      IF (ierr .NE. NF_NOERR) THEN
[1403]546         abort_message="Variable ucov n est pas definie"
547         ierr=1
548         CALL abort_gcm(modname,abort_message,ierr)
[524]549      ENDIF
[1669]550      call NF95_PUT_VAR(nid,nvarid,ucov)
[524]551
552      ierr = NF_INQ_VARID(nid, "vcov", nvarid)
553      IF (ierr .NE. NF_NOERR) THEN
[1403]554         abort_message="Variable vcov n est pas definie"
555         ierr=1
556         CALL abort_gcm(modname,abort_message,ierr)
[524]557      ENDIF
[1669]558      call NF95_PUT_VAR(nid,nvarid,vcov)
[524]559
560      ierr = NF_INQ_VARID(nid, "teta", nvarid)
561      IF (ierr .NE. NF_NOERR) THEN
[1403]562         abort_message="Variable teta n est pas definie"
563         ierr=1
564         CALL abort_gcm(modname,abort_message,ierr)
[524]565      ENDIF
[1669]566      call NF95_PUT_VAR(nid,nvarid,teta)
[524]567
[1664]568      IF (type_trac == 'inca') THEN
[822]569! Ajout Anne pour lecture valeurs traceurs dans un fichier start_trac.nc
[960]570         ierr_file = NF_OPEN ("start_trac.nc", NF_NOWRITE,nid_trac)
571         IF (ierr_file .NE.NF_NOERR) THEN
[1403]572            write(lunout,*)'dynredem1: Pb d''ouverture du fichier',
573     &                     ' start_trac.nc'
574            write(lunout,*)' ierr = ', ierr_file
[960]575         ENDIF
576      END IF
[822]577
[1146]578      IF(nqtot.GE.1) THEN
579      do iq=1,nqtot
[960]580
[1664]581         IF (type_trac /= 'inca') THEN
[960]582            ierr = NF_INQ_VARID(nid, tname(iq), nvarid)
[822]583            IF (ierr .NE. NF_NOERR) THEN
[1403]584               abort_message="Variable  tname(iq) n est pas definie"
585               ierr=1
586               CALL abort_gcm(modname,abort_message,ierr)
[960]587            ENDIF
[1669]588            call NF95_PUT_VAR(nid,nvarid,q(:,:,:,iq))
[1664]589        ELSE ! type_trac = inca
[960]590! lecture de la valeur du traceur dans start_trac.nc
591           IF (ierr_file .ne. 2) THEN
592             ierr = NF_INQ_VARID (nid_trac, tname(iq), nvarid_trac)
593             IF (ierr .NE. NF_NOERR) THEN
[1403]594                write(lunout,*) "dynredem1: ",trim(tname(iq)),
595     &                          " est absent de start_trac.nc"
[960]596                ierr = NF_INQ_VARID(nid, tname(iq), nvarid)
597                IF (ierr .NE. NF_NOERR) THEN
[1403]598                   abort_message="dynredem1: Variable "//
599     &                     trim(tname(iq))//" n est pas definie"
600                   ierr=1
601                   CALL abort_gcm(modname,abort_message,ierr)
[960]602                ENDIF
[1669]603                call NF95_PUT_VAR(nid,nvarid,q(:,:,:,iq))
[960]604               
605             ELSE
[1403]606                write(lunout,*) "dynredem1: ",trim(tname(iq)),
607     &              " est present dans start_trac.nc"
[1669]608               ierr = NF90_GET_VAR(nid_trac, nvarid_trac, trac_tmp)
[960]609                IF (ierr .NE. NF_NOERR) THEN
[1403]610                   abort_message="dynredem1: Lecture echouee pour"//
611     &                    trim(tname(iq))
612                   ierr=1
613                   CALL abort_gcm(modname,abort_message,ierr)
[960]614                ENDIF
615                ierr = NF_INQ_VARID(nid, tname(iq), nvarid)
616                IF (ierr .NE. NF_NOERR) THEN
[1403]617                   abort_message="dynredem1: Variable "//
618     &                trim(tname(iq))//" n est pas definie"
619                   ierr=1
620                   CALL abort_gcm(modname,abort_message,ierr)
[960]621                ENDIF
[1669]622                call NF95_PUT_VAR(nid, nvarid, trac_tmp)
[960]623               
624             ENDIF ! IF (ierr .NE. NF_NOERR)
[822]625! fin lecture du traceur
[960]626          ELSE                  ! si il n'y a pas de fichier start_trac.nc
[822]627!             print *, 'il n y a pas de fichier start_trac'
628             ierr = NF_INQ_VARID(nid, tname(iq), nvarid)
629             IF (ierr .NE. NF_NOERR) THEN
[1403]630                abort_message="dynredem1: Variable "//
631     &                trim(tname(iq))//" n est pas definie"
632                   ierr=1
633                   CALL abort_gcm(modname,abort_message,ierr)
[822]634             ENDIF
[1669]635             call NF95_PUT_VAR(nid,nvarid,q(:,:,:,iq))
[960]636          ENDIF ! (ierr_file .ne. 2)
[1664]637       END IF   !type_trac
[960]638     
[524]639      ENDDO
640      ENDIF
641c
642      ierr = NF_INQ_VARID(nid, "masse", nvarid)
643      IF (ierr .NE. NF_NOERR) THEN
[1403]644         abort_message="dynredem1: Variable masse n est pas definie"
645         ierr=1
646         CALL abort_gcm(modname,abort_message,ierr)
[524]647      ENDIF
[1669]648      call NF95_PUT_VAR(nid,nvarid,masse)
[524]649c
650      ierr = NF_INQ_VARID(nid, "ps", nvarid)
651      IF (ierr .NE. NF_NOERR) THEN
[1403]652         abort_message="dynredem1: Variable ps n est pas definie"
653         ierr=1
654         CALL abort_gcm(modname,abort_message,ierr)
[524]655      ENDIF
[1669]656      call NF95_PUT_VAR(nid,nvarid,ps)
[524]657
658      ierr = NF_CLOSE(nid)
659c
660      RETURN
661      END
662
Note: See TracBrowser for help on using the repository browser.