source: LMDZ5/trunk/libf/dyn3dpar/dynredem.F @ 2598

Last change on this file since 2598 was 2598, checked in by Ehouarn Millour, 8 years ago

Cleanup in the dynamics: turn serre.h into module serre_mod.F90
EM

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