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

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

Cleanup in the dynamics: turn comvert.h into module comvert_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 2600 2016-07-23 05:45:38Z 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 comvert_mod, ONLY: ap,bp,aps,bps,presnivs,pseudoalt,pa,preff,
12     &                        nivsig,nivsigs
13      USE comconst_mod, ONLY: cpp, daysec, dtvr, g, kappa, omeg, rad
14      USE serre_mod, ONLY: clon,clat,grossismx,grossismy,dzoomx,dzoomy,
15     &                     taux,tauy
16 
17      IMPLICIT NONE
18c=======================================================================
19c Ecriture du fichier de redemarrage sous format NetCDF (initialisation)
20c=======================================================================
21c   Declarations:
22c   -------------
23#include "dimensions.h"
24#include "paramet.h"
25#include "comgeom2.h"
26#include "temps.h"
27#include "ener.h"
28#include "logic.h"
29#include "netcdf.inc"
30#include "description.h"
31#include "iniprint.h"
32
33c   Arguments:
34c   ----------
35      INTEGER iday_end
36      REAL phis(iip1, jjp1)
37      CHARACTER*(*) fichnom
38
39c   Local:
40c   ------
41      INTEGER iq,l
42      INTEGER length
43      PARAMETER (length = 100)
44      REAL tab_cntrl(length) ! tableau des parametres du run
45      INTEGER ierr
46      character*20 modname
47      character*80 abort_message
48
49c   Variables locales pour NetCDF:
50c
51      INTEGER dims2(2), dims3(3), dims4(4)
52      INTEGER idim_index
53      INTEGER idim_rlonu, idim_rlonv, idim_rlatu, idim_rlatv
54      INTEGER idim_s, idim_sig
55      INTEGER idim_tim
56      INTEGER nid,nvarid
57
58      REAL zan0,zjulian,hours
59      INTEGER yyears0,jjour0, mmois0
60      character*30 unites
61
62
63c-----------------------------------------------------------------------
64      modname='dynredem0'
65
66#ifdef CPP_IOIPSL
67      call ymds2ju(annee_ref, 1, iday_end, 0.0, zjulian)
68      call ju2ymds(zjulian, yyears0, mmois0, jjour0, hours)
69#else
70! set yyears0, mmois0, jjour0 to 0,1,1 (hours is not used)
71      yyears0=0
72      mmois0=1
73      jjour0=1
74#endif       
75
76      DO l=1,length
77       tab_cntrl(l) = 0.
78      ENDDO
79       tab_cntrl(1)  = REAL(iim)
80       tab_cntrl(2)  = REAL(jjm)
81       tab_cntrl(3)  = REAL(llm)
82       tab_cntrl(4)  = REAL(day_ref)
83       tab_cntrl(5)  = REAL(annee_ref)
84       tab_cntrl(6)  = rad
85       tab_cntrl(7)  = omeg
86       tab_cntrl(8)  = g
87       tab_cntrl(9)  = cpp
88       tab_cntrl(10) = kappa
89       tab_cntrl(11) = daysec
90       tab_cntrl(12) = dtvr
91       tab_cntrl(13) = etot0
92       tab_cntrl(14) = ptot0
93       tab_cntrl(15) = ztot0
94       tab_cntrl(16) = stot0
95       tab_cntrl(17) = ang0
96       tab_cntrl(18) = pa
97       tab_cntrl(19) = preff
98c
99c    .....    parametres  pour le zoom      ......   
100
101       tab_cntrl(20)  = clon
102       tab_cntrl(21)  = clat
103       tab_cntrl(22)  = grossismx
104       tab_cntrl(23)  = grossismy
105c
106      IF ( fxyhypb )   THEN
107       tab_cntrl(24) = 1.
108       tab_cntrl(25) = dzoomx
109       tab_cntrl(26) = dzoomy
110       tab_cntrl(27) = 0.
111       tab_cntrl(28) = taux
112       tab_cntrl(29) = tauy
113      ELSE
114       tab_cntrl(24) = 0.
115       tab_cntrl(25) = dzoomx
116       tab_cntrl(26) = dzoomy
117       tab_cntrl(27) = 0.
118       tab_cntrl(28) = 0.
119       tab_cntrl(29) = 0.
120       IF( ysinus )  tab_cntrl(27) = 1.
121      ENDIF
122
123       tab_cntrl(30) = REAL(iday_end)
124       tab_cntrl(31) = REAL(itau_dyn + itaufin)
125c start_time: start_time of simulation (not necessarily 0.)
126       tab_cntrl(32) = start_time
127c
128c    .........................................................
129c
130c Creation du fichier:
131c
132      ierr = NF_CREATE(fichnom, NF_CLOBBER, nid)
133      IF (ierr.NE.NF_NOERR) THEN
134         write(lunout,*)"dynredem0: Pb d ouverture du fichier "
135     &                  //trim(fichnom)
136         write(lunout,*)' ierr = ', ierr
137         CALL ABORT_GCM("DYNREDEM0", "", 1)
138      ENDIF
139c
140c Preciser quelques attributs globaux:
141c
142      ierr = NF_PUT_ATT_TEXT (nid, NF_GLOBAL, "title", 27,
143     .                       "Fichier demmarage dynamique")
144c
145c Definir les dimensions du fichiers:
146c
147      ierr = NF_DEF_DIM (nid, "index", length, idim_index)
148      ierr = NF_DEF_DIM (nid, "rlonu", iip1, idim_rlonu)
149      ierr = NF_DEF_DIM (nid, "rlatu", jjp1, idim_rlatu)
150      ierr = NF_DEF_DIM (nid, "rlonv", iip1, idim_rlonv)
151      ierr = NF_DEF_DIM (nid, "rlatv", jjm, idim_rlatv)
152      ierr = NF_DEF_DIM (nid, "sigs", llm, idim_s)
153      ierr = NF_DEF_DIM (nid, "sig", llmp1, idim_sig)
154      ierr = NF_DEF_DIM (nid, "temps", NF_UNLIMITED, idim_tim)
155c
156      ierr = NF_ENDDEF(nid) ! sortir du mode de definition
157c
158c Definir et enregistrer certains champs invariants:
159c
160      ierr = NF_REDEF (nid)
161cIM 220306 BEG
162#ifdef NC_DOUBLE
163      ierr = NF_DEF_VAR (nid,"controle",NF_DOUBLE,1,idim_index,nvarid)
164#else
165      ierr = NF_DEF_VAR (nid,"controle",NF_FLOAT,1,idim_index,nvarid)
166#endif
167cIM 220306 END
168      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
169     .                       "Parametres de controle")
170      ierr = NF_ENDDEF(nid)
171      call NF95_PUT_VAR(nid,nvarid,tab_cntrl)
172c
173      ierr = NF_REDEF (nid)
174cIM 220306 BEG
175#ifdef NC_DOUBLE
176      ierr = NF_DEF_VAR (nid,"rlonu",NF_DOUBLE,1,idim_rlonu,nvarid)
177#else
178      ierr = NF_DEF_VAR (nid,"rlonu",NF_FLOAT,1,idim_rlonu,nvarid)
179#endif
180cIM 220306 END
181      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 23,
182     .                       "Longitudes des points U")
183      ierr = NF_ENDDEF(nid)
184      call NF95_PUT_VAR(nid,nvarid,rlonu)
185c
186      ierr = NF_REDEF (nid)
187cIM 220306 BEG
188#ifdef NC_DOUBLE
189      ierr = NF_DEF_VAR (nid,"rlatu",NF_DOUBLE,1,idim_rlatu,nvarid)
190#else
191      ierr = NF_DEF_VAR (nid,"rlatu",NF_FLOAT,1,idim_rlatu,nvarid)
192#endif
193cIM 220306 END
194      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
195     .                       "Latitudes des points U")
196      ierr = NF_ENDDEF(nid)
197      call NF95_PUT_VAR (nid,nvarid,rlatu)
198c
199      ierr = NF_REDEF (nid)
200cIM 220306 BEG
201#ifdef NC_DOUBLE
202      ierr = NF_DEF_VAR (nid,"rlonv",NF_DOUBLE,1,idim_rlonv,nvarid)
203#else
204      ierr = NF_DEF_VAR (nid,"rlonv",NF_FLOAT,1,idim_rlonv,nvarid)
205#endif
206cIM 220306 END
207      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 23,
208     .                       "Longitudes des points V")
209      ierr = NF_ENDDEF(nid)
210      call NF95_PUT_VAR(nid,nvarid,rlonv)
211c
212      ierr = NF_REDEF (nid)
213cIM 220306 BEG
214#ifdef NC_DOUBLE
215      ierr = NF_DEF_VAR (nid,"rlatv",NF_DOUBLE,1,idim_rlatv,nvarid)
216#else
217      ierr = NF_DEF_VAR (nid,"rlatv",NF_FLOAT,1,idim_rlatv,nvarid)
218#endif
219cIM 220306 END
220      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
221     .                       "Latitudes des points V")
222      ierr = NF_ENDDEF(nid)
223      call NF95_PUT_VAR(nid,nvarid,rlatv)
224c
225      ierr = NF_REDEF (nid)
226cIM 220306 BEG
227#ifdef NC_DOUBLE
228      ierr = NF_DEF_VAR (nid,"nivsigs",NF_DOUBLE,1,idim_s,nvarid)
229#else
230      ierr = NF_DEF_VAR (nid,"nivsigs",NF_FLOAT,1,idim_s,nvarid)
231#endif
232cIM 220306 END
233      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 28,
234     .                       "Numero naturel des couches s")
235      ierr = NF_ENDDEF(nid)
236      call NF95_PUT_VAR(nid,nvarid,nivsigs)
237c
238      ierr = NF_REDEF (nid)
239cIM 220306 BEG
240#ifdef NC_DOUBLE
241      ierr = NF_DEF_VAR (nid,"nivsig",NF_DOUBLE,1,idim_sig,nvarid)
242#else
243      ierr = NF_DEF_VAR (nid,"nivsig",NF_FLOAT,1,idim_sig,nvarid)
244#endif
245cIM 220306 END
246      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 32,
247     .                       "Numero naturel des couches sigma")
248      ierr = NF_ENDDEF(nid)
249      call NF95_PUT_VAR(nid,nvarid,nivsig)
250c
251      ierr = NF_REDEF (nid)
252cIM 220306 BEG
253#ifdef NC_DOUBLE
254      ierr = NF_DEF_VAR (nid,"ap",NF_DOUBLE,1,idim_sig,nvarid)
255#else
256      ierr = NF_DEF_VAR (nid,"ap",NF_FLOAT,1,idim_sig,nvarid)
257#endif
258cIM 220306 END
259      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 26,
260     .                       "Coefficient A pour hybride")
261      ierr = NF_ENDDEF(nid)
262      call NF95_PUT_VAR(nid,nvarid,ap)
263c
264      ierr = NF_REDEF (nid)
265cIM 220306 BEG
266#ifdef NC_DOUBLE
267      ierr = NF_DEF_VAR (nid,"bp",NF_DOUBLE,1,idim_sig,nvarid)
268#else
269      ierr = NF_DEF_VAR (nid,"bp",NF_FLOAT,1,idim_sig,nvarid)
270#endif
271cIM 220306 END
272      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 26,
273     .                       "Coefficient B pour hybride")
274      ierr = NF_ENDDEF(nid)
275      call NF95_PUT_VAR(nid,nvarid,bp)
276c
277      ierr = NF_REDEF (nid)
278cIM 220306 BEG
279#ifdef NC_DOUBLE
280      ierr = NF_DEF_VAR (nid,"presnivs",NF_DOUBLE,1,idim_s,nvarid)
281#else
282      ierr = NF_DEF_VAR (nid,"presnivs",NF_FLOAT,1,idim_s,nvarid)
283#endif
284cIM 220306 END
285      ierr = NF_ENDDEF(nid)
286      call NF95_PUT_VAR(nid,nvarid,presnivs)
287c
288c Coefficients de passage cov. <-> contra. <--> naturel
289c
290      ierr = NF_REDEF (nid)
291      dims2(1) = idim_rlonu
292      dims2(2) = idim_rlatu
293cIM 220306 BEG
294#ifdef NC_DOUBLE
295      ierr = NF_DEF_VAR (nid,"cu",NF_DOUBLE,2,dims2,nvarid)
296#else
297      ierr = NF_DEF_VAR (nid,"cu",NF_FLOAT,2,dims2,nvarid)
298#endif
299cIM 220306 END
300      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 29,
301     .                       "Coefficient de passage pour U")
302      ierr = NF_ENDDEF(nid)
303      call NF95_PUT_VAR(nid,nvarid,cu)
304c
305      ierr = NF_REDEF (nid)
306      dims2(1) = idim_rlonv
307      dims2(2) = idim_rlatv
308cIM 220306 BEG
309#ifdef NC_DOUBLE
310      ierr = NF_DEF_VAR (nid,"cv",NF_DOUBLE,2,dims2,nvarid)
311#else
312      ierr = NF_DEF_VAR (nid,"cv",NF_FLOAT,2,dims2,nvarid)
313#endif
314cIM 220306 END
315      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 29,
316     .                       "Coefficient de passage pour V")
317      ierr = NF_ENDDEF(nid)
318      call NF95_PUT_VAR(nid,nvarid,cv)
319c
320c Aire de chaque maille:
321c
322      ierr = NF_REDEF (nid)
323      dims2(1) = idim_rlonv
324      dims2(2) = idim_rlatu
325cIM 220306 BEG
326#ifdef NC_DOUBLE
327      ierr = NF_DEF_VAR (nid,"aire",NF_DOUBLE,2,dims2,nvarid)
328#else
329      ierr = NF_DEF_VAR (nid,"aire",NF_FLOAT,2,dims2,nvarid)
330#endif
331cIM 220306 END
332      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
333     .                       "Aires de chaque maille")
334      ierr = NF_ENDDEF(nid)
335      call NF95_PUT_VAR(nid,nvarid,aire)
336c
337c Geopentiel au sol:
338c
339      ierr = NF_REDEF (nid)
340      dims2(1) = idim_rlonv
341      dims2(2) = idim_rlatu
342cIM 220306 BEG
343#ifdef NC_DOUBLE
344      ierr = NF_DEF_VAR (nid,"phisinit",NF_DOUBLE,2,dims2,nvarid)
345#else
346      ierr = NF_DEF_VAR (nid,"phisinit",NF_FLOAT,2,dims2,nvarid)
347#endif
348cIM 220306 END
349      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 19,
350     .                       "Geopotentiel au sol")
351      ierr = NF_ENDDEF(nid)
352      call NF95_PUT_VAR(nid,nvarid,phis)
353c
354c Definir les variables pour pouvoir les enregistrer plus tard:
355c
356      ierr = NF_REDEF (nid) ! entrer dans le mode de definition
357c
358cIM 220306 BEG
359#ifdef NC_DOUBLE
360      ierr = NF_DEF_VAR (nid,"temps",NF_DOUBLE,1,idim_tim,nvarid)
361#else
362      ierr = NF_DEF_VAR (nid,"temps",NF_FLOAT,1,idim_tim,nvarid)
363#endif
364cIM 220306 END
365      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 19,
366     .                       "Temps de simulation")
367      write(unites,200)yyears0,mmois0,jjour0
368200   format('days since ',i4,'-',i2.2,'-',i2.2,' 00:00:00')
369      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "units", 30,
370     .                         unites)
371
372c
373      dims4(1) = idim_rlonu
374      dims4(2) = idim_rlatu
375      dims4(3) = idim_s
376      dims4(4) = idim_tim
377cIM 220306 BEG
378#ifdef NC_DOUBLE
379      ierr = NF_DEF_VAR (nid,"ucov",NF_DOUBLE,4,dims4,nvarid)
380#else
381      ierr = NF_DEF_VAR (nid,"ucov",NF_FLOAT,4,dims4,nvarid)
382#endif
383cIM 220306 END
384      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 9,
385     .                       "Vitesse U")
386c
387      dims4(1) = idim_rlonv
388      dims4(2) = idim_rlatv
389      dims4(3) = idim_s
390      dims4(4) = idim_tim
391cIM 220306 BEG
392#ifdef NC_DOUBLE
393      ierr = NF_DEF_VAR (nid,"vcov",NF_DOUBLE,4,dims4,nvarid)
394#else
395      ierr = NF_DEF_VAR (nid,"vcov",NF_FLOAT,4,dims4,nvarid)
396#endif
397cIM 220306 END
398      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 9,
399     .                       "Vitesse V")
400c
401      dims4(1) = idim_rlonv
402      dims4(2) = idim_rlatu
403      dims4(3) = idim_s
404      dims4(4) = idim_tim
405cIM 220306 BEG
406#ifdef NC_DOUBLE
407      ierr = NF_DEF_VAR (nid,"teta",NF_DOUBLE,4,dims4,nvarid)
408#else
409      ierr = NF_DEF_VAR (nid,"teta",NF_FLOAT,4,dims4,nvarid)
410#endif
411cIM 220306 END
412      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 11,
413     .                       "Temperature")
414c
415      dims4(1) = idim_rlonv
416      dims4(2) = idim_rlatu
417      dims4(3) = idim_s
418      dims4(4) = idim_tim
419      IF(nqtot.GE.1) THEN
420      DO iq=1,nqtot
421cIM 220306 BEG
422#ifdef NC_DOUBLE
423      ierr = NF_DEF_VAR (nid,tname(iq),NF_DOUBLE,4,dims4,nvarid)
424#else
425      ierr = NF_DEF_VAR (nid,tname(iq),NF_FLOAT,4,dims4,nvarid)
426#endif
427cIM 220306 END
428      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 12,ttext(iq))
429      ENDDO
430      ENDIF
431c
432      dims4(1) = idim_rlonv
433      dims4(2) = idim_rlatu
434      dims4(3) = idim_s
435      dims4(4) = idim_tim
436cIM 220306 BEG
437#ifdef NC_DOUBLE
438      ierr = NF_DEF_VAR (nid,"masse",NF_DOUBLE,4,dims4,nvarid)
439#else
440      ierr = NF_DEF_VAR (nid,"masse",NF_FLOAT,4,dims4,nvarid)
441#endif
442cIM 220306 END
443      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 12,
444     .                       "C est quoi ?")
445c
446      dims3(1) = idim_rlonv
447      dims3(2) = idim_rlatu
448      dims3(3) = idim_tim
449cIM 220306 BEG
450#ifdef NC_DOUBLE
451      ierr = NF_DEF_VAR (nid,"ps",NF_DOUBLE,3,dims3,nvarid)
452#else
453      ierr = NF_DEF_VAR (nid,"ps",NF_FLOAT,3,dims3,nvarid)
454#endif
455cIM 220306 END
456      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 15,
457     .                       "Pression au sol")
458c
459      ierr = NF_ENDDEF(nid) ! sortir du mode de definition
460      ierr = NF_CLOSE(nid) ! fermer le fichier
461
462      write(lunout,*)'dynredem0: iim,jjm,llm,iday_end',
463     &               iim,jjm,llm,iday_end
464      write(lunout,*)'dynredem0: rad,omeg,g,cpp,kappa',
465     &        rad,omeg,g,cpp,kappa
466
467      RETURN
468      END
469      SUBROUTINE dynredem1(fichnom,time,
470     .                     vcov,ucov,teta,q,masse,ps)
471      USE infotrac
472      USE control_mod
473      use netcdf, only: NF90_get_VAR
474      use netcdf95, only: NF95_PUT_VAR
475 
476      IMPLICIT NONE
477c=================================================================
478c  Ecriture du fichier de redemarrage sous format NetCDF
479c=================================================================
480#include "dimensions.h"
481#include "paramet.h"
482#include "description.h"
483#include "netcdf.inc"
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.