source: codes/icosagcm/branches/SATURN_DYNAMICO/LMDZ.COMMON/libf/dyn3dpar/dynredem_p.F @ 298

Last change on this file since 298 was 298, checked in by milmd, 10 years ago

Less output messages are written. On 20000 cores it is better. In LMDZ, only master of MPI and OpenMP can write.

File size: 25.1 KB
Line 
1!
2! $Id: dynredem_p.F 1635 2012-07-12 11:37:16Z lguez $
3!
4c
5      SUBROUTINE dynredem0_p(fichnom,iday_end,phis)
6#ifdef CPP_IOIPSL
7      USE IOIPSL
8#endif
9      USE parallel_lmdz
10      USE infotrac
11      use netcdf95, only: NF95_PUT_VAR
12      use control_mod, only : planet_type
13      use mod_phys_lmdz_para, only : is_master
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 "comconst.h"
24#include "comvert.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 "serre.h"
32#include "iniprint.h"
33
34c   Arguments:
35c   ----------
36      INTEGER iday_end
37      REAL phis(iip1, jjp1)
38      CHARACTER*(*) fichnom
39
40c   Local:
41c   ------
42      INTEGER iq,l
43      INTEGER length
44      PARAMETER (length = 100)
45      REAL tab_cntrl(length) ! tableau des parametres du run
46      INTEGER ierr
47      character*20 modname
48      character*80 abort_message
49
50c   Variables locales pour NetCDF:
51c
52      INTEGER dims2(2), dims3(3), dims4(4)
53      INTEGER idim_index
54      INTEGER idim_rlonu, idim_rlonv, idim_rlatu, idim_rlatv
55      INTEGER idim_s, idim_sig
56      INTEGER idim_tim
57      INTEGER nid,nvarid
58
59      REAL zan0,zjulian,hours
60      INTEGER yyears0,jjour0, mmois0
61      character*30 unites
62
63      character(len=12) :: start_file_type="earth" ! default start file type
64      INTEGER idecal
65
66c-----------------------------------------------------------------------
67      if (mpi_rank==0) then
68     
69      modname='dynredem0_p'
70
71#ifdef CPP_IOIPSL
72      call ymds2ju(annee_ref, 1, iday_end, 0.0, zjulian)
73      call ju2ymds(zjulian, yyears0, mmois0, jjour0, hours)
74#else
75! set yyears0, mmois0, jjour0 to 0,1,1 (hours is not used)
76      yyears0=0
77      mmois0=1
78      jjour0=1
79#endif       
80
81      !!! AS: idecal is a hack to be able to read planeto starts...
82      !!!     .... while keeping everything OK for LMDZ EARTH
83      if ((planet_type.eq."generic").or.(planet_type.eq."mars")) then
84          if (is_master) write(lunout,*) trim(modname),
85     &          ' : Planeto-like start file'
86          start_file_type="planeto"
87          idecal = 4
88      else
89          if (is_master) write(lunout,*) trim(modname),
90     &          ' : Earth-like start file'
91          idecal = 5
92      endif
93
94      DO l=1,length
95       tab_cntrl(l) = 0.
96      ENDDO
97       tab_cntrl(1)  = REAL(iim)
98       tab_cntrl(2)  = REAL(jjm)
99       tab_cntrl(3)  = REAL(llm)
100       if (start_file_type.eq."earth") then
101         tab_cntrl(4)=REAL(day_ref)
102       else
103         !tab_cntrl(4)=REAL(day_end)
104         tab_cntrl(4)=REAL(iday_end)
105       endif
106       tab_cntrl(5)  = REAL(annee_ref)
107       tab_cntrl(idecal+1)  = rad
108       tab_cntrl(idecal+2)  = omeg
109       tab_cntrl(idecal+3)  = g
110       tab_cntrl(idecal+4)  = cpp
111       tab_cntrl(idecal+5) = kappa
112       tab_cntrl(idecal+6) = daysec
113       tab_cntrl(idecal+7) = dtvr
114       tab_cntrl(idecal+8) = etot0
115       tab_cntrl(idecal+9) = ptot0
116       tab_cntrl(idecal+10) = ztot0
117       tab_cntrl(idecal+11) = stot0
118       tab_cntrl(idecal+12) = ang0
119       tab_cntrl(idecal+13) = pa
120       tab_cntrl(idecal+14) = preff
121c
122c    .....    parametres  pour le zoom      ......   
123
124       tab_cntrl(idecal+15)  = clon
125       tab_cntrl(idecal+16)  = clat
126       tab_cntrl(idecal+17)  = grossismx
127       tab_cntrl(idecal+18)  = grossismy
128c
129      IF ( fxyhypb )   THEN
130       tab_cntrl(idecal+19) = 1.
131       tab_cntrl(idecal+20) = dzoomx
132       tab_cntrl(idecal+21) = dzoomy
133       tab_cntrl(idecal+22) = 0.
134       tab_cntrl(idecal+23) = taux
135       tab_cntrl(idecal+24) = tauy
136      ELSE
137       tab_cntrl(idecal+19) = 0.
138       tab_cntrl(idecal+20) = dzoomx
139       tab_cntrl(idecal+21) = dzoomy
140       tab_cntrl(idecal+22) = 0.
141       tab_cntrl(idecal+23) = 0.
142       tab_cntrl(idecal+24) = 0.
143       IF( ysinus )  tab_cntrl(idecal+22) = 1.
144      ENDIF
145
146      if (start_file_type.eq."earth") then
147       tab_cntrl(idecal+25) = REAL(iday_end)
148       tab_cntrl(idecal+26) = REAL(itau_dyn + itaufin)
149c start_time: start_time of simulation (not necessarily 0.)
150       tab_cntrl(idecal+27) = start_time
151      endif
152
153      if (planet_type=="mars") then ! For Mars only
154        tab_cntrl(29)=hour_ini
155      endif
156c
157c    .........................................................
158c
159c Creation du fichier:
160c
161      ierr = NF_CREATE(fichnom, NF_CLOBBER, nid)
162      IF (ierr.NE.NF_NOERR) THEN
163         WRITE(6,*)" Pb d ouverture du fichier "//fichnom
164         WRITE(6,*)' ierr = ', ierr
165         CALL ABORT
166      ENDIF
167c
168c Preciser quelques attributs globaux:
169c
170      ierr = NF_PUT_ATT_TEXT (nid, NF_GLOBAL, "title", 27,
171     .                       "Fichier demmarage dynamique")
172c
173c Definir les dimensions du fichiers:
174c
175      if (start_file_type.eq."earth") then
176        ierr = NF_DEF_DIM (nid, "index", length, idim_index)
177        ierr = NF_DEF_DIM (nid, "rlonu", iip1, idim_rlonu)
178        ierr = NF_DEF_DIM (nid, "rlatu", jjp1, idim_rlatu)
179        ierr = NF_DEF_DIM (nid, "rlonv", iip1, idim_rlonv)
180        ierr = NF_DEF_DIM (nid, "rlatv", jjm, idim_rlatv)
181        ierr = NF_DEF_DIM (nid, "sigs", llm, idim_s)
182        ierr = NF_DEF_DIM (nid, "sig", llmp1, idim_sig)
183        ierr = NF_DEF_DIM (nid, "temps", NF_UNLIMITED, idim_tim)
184      else
185        ierr = NF_DEF_DIM (nid, "index", length, idim_index)
186        ierr = NF_DEF_DIM (nid, "rlonu", iip1, idim_rlonu)
187        ierr = NF_DEF_DIM (nid, "latitude", jjp1, idim_rlatu)
188        ierr = NF_DEF_DIM (nid, "longitude", iip1, idim_rlonv)
189        ierr = NF_DEF_DIM (nid, "rlatv", jjm, idim_rlatv)
190        ierr = NF_DEF_DIM (nid, "altitude", llm, idim_s)
191        ierr = NF_DEF_DIM (nid, "interlayer", llmp1, idim_sig)
192        ierr = NF_DEF_DIM (nid, "Time", NF_UNLIMITED, idim_tim)
193      endif
194c
195      ierr = NF_ENDDEF(nid) ! sortir du mode de definition
196c
197c Definir et enregistrer certains champs invariants:
198c
199      ierr = NF_REDEF (nid)
200cIM 220306 BEG
201#ifdef NC_DOUBLE
202      ierr = NF_DEF_VAR (nid,"controle",NF_DOUBLE,1,idim_index,nvarid)
203#else
204      ierr = NF_DEF_VAR (nid,"controle",NF_FLOAT,1,idim_index,nvarid)
205#endif
206cIM 220306 END
207      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
208     .                       "Parametres de controle")
209      ierr = NF_ENDDEF(nid)
210      call NF95_PUT_VAR(nid,nvarid,tab_cntrl)
211c
212      ierr = NF_REDEF (nid)
213cIM 220306 BEG
214#ifdef NC_DOUBLE
215      ierr = NF_DEF_VAR (nid,"rlonu",NF_DOUBLE,1,idim_rlonu,nvarid)
216#else
217      ierr = NF_DEF_VAR (nid,"rlonu",NF_FLOAT,1,idim_rlonu,nvarid)
218#endif
219cIM 220306 END
220      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 23,
221     .                       "Longitudes des points U")
222      ierr = NF_ENDDEF(nid)
223      call NF95_PUT_VAR(nid,nvarid,rlonu)
224c
225      ierr = NF_REDEF (nid)
226cIM 220306 BEG
227#ifdef NC_DOUBLE
228      ierr = NF_DEF_VAR (nid,"rlatu",NF_DOUBLE,1,idim_rlatu,nvarid)
229#else
230      ierr = NF_DEF_VAR (nid,"rlatu",NF_FLOAT,1,idim_rlatu,nvarid)
231#endif
232cIM 220306 END
233      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
234     .                       "Latitudes des points U")
235      ierr = NF_ENDDEF(nid)
236      call NF95_PUT_VAR (nid,nvarid,rlatu)
237c
238      ierr = NF_REDEF (nid)
239cIM 220306 BEG
240#ifdef NC_DOUBLE
241      ierr = NF_DEF_VAR (nid,"rlonv",NF_DOUBLE,1,idim_rlonv,nvarid)
242#else
243      ierr = NF_DEF_VAR (nid,"rlonv",NF_FLOAT,1,idim_rlonv,nvarid)
244#endif
245cIM 220306 END
246      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 23,
247     .                       "Longitudes des points V")
248      ierr = NF_ENDDEF(nid)
249      call NF95_PUT_VAR(nid,nvarid,rlonv)
250c
251      ierr = NF_REDEF (nid)
252cIM 220306 BEG
253#ifdef NC_DOUBLE
254      ierr = NF_DEF_VAR (nid,"rlatv",NF_DOUBLE,1,idim_rlatv,nvarid)
255#else
256      ierr = NF_DEF_VAR (nid,"rlatv",NF_FLOAT,1,idim_rlatv,nvarid)
257#endif
258cIM 220306 END
259      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
260     .                       "Latitudes des points V")
261      ierr = NF_ENDDEF(nid)
262      call NF95_PUT_VAR(nid,nvarid,rlatv)
263c
264      if (start_file_type.eq."earth") then
265        ierr = NF_REDEF (nid)
266cIM 220306 BEG
267#ifdef NC_DOUBLE
268        ierr = NF_DEF_VAR (nid,"nivsigs",NF_DOUBLE,1,idim_s,nvarid)
269#else
270        ierr = NF_DEF_VAR (nid,"nivsigs",NF_FLOAT,1,idim_s,nvarid)
271#endif
272cIM 220306 END
273        ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 28,
274     .                       "Numero naturel des couches s")
275        ierr = NF_ENDDEF(nid)
276        call NF95_PUT_VAR(nid,nvarid,nivsigs)
277c
278        ierr = NF_REDEF (nid)
279cIM 220306 BEG
280#ifdef NC_DOUBLE
281        ierr = NF_DEF_VAR (nid,"nivsig",NF_DOUBLE,1,idim_sig,nvarid)
282#else
283        ierr = NF_DEF_VAR (nid,"nivsig",NF_FLOAT,1,idim_sig,nvarid)
284#endif
285cIM 220306 END
286        ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 32,
287     .                       "Numero naturel des couches sigma")
288        ierr = NF_ENDDEF(nid)
289        call NF95_PUT_VAR(nid,nvarid,nivsig)
290      endif ! of if (start_file_type.eq."earth")
291c
292      ierr = NF_REDEF (nid)
293cIM 220306 BEG
294#ifdef NC_DOUBLE
295      ierr = NF_DEF_VAR (nid,"ap",NF_DOUBLE,1,idim_sig,nvarid)
296#else
297      ierr = NF_DEF_VAR (nid,"ap",NF_FLOAT,1,idim_sig,nvarid)
298#endif
299cIM 220306 END
300      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 26,
301     .                       "Coefficient A pour hybride")
302      ierr = NF_ENDDEF(nid)
303      call NF95_PUT_VAR(nid,nvarid,ap)
304c
305      ierr = NF_REDEF (nid)
306cIM 220306 BEG
307#ifdef NC_DOUBLE
308      ierr = NF_DEF_VAR (nid,"bp",NF_DOUBLE,1,idim_sig,nvarid)
309#else
310      ierr = NF_DEF_VAR (nid,"bp",NF_FLOAT,1,idim_sig,nvarid)
311#endif
312cIM 220306 END
313      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 26,
314     .                       "Coefficient B pour hybride")
315      ierr = NF_ENDDEF(nid)
316      call NF95_PUT_VAR(nid,nvarid,bp)
317c
318      if (start_file_type.ne."earth") then
319        ierr = NF_REDEF (nid)
320cIM 220306 BEG
321#ifdef NC_DOUBLE
322        ierr = NF_DEF_VAR (nid,"aps",NF_DOUBLE,1,idim_s,nvarid)
323#else
324        ierr = NF_DEF_VAR (nid,"aps",NF_FLOAT,1,idim_s,nvarid)
325#endif
326cIM 220306 END
327        ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 37,
328     .                       "Coef AS: hybrid pressure at midlayers")
329        ierr = NF_ENDDEF(nid)
330        call NF95_PUT_VAR(nid,nvarid,aps)
331c
332        ierr = NF_REDEF (nid)
333cIM 220306 BEG
334#ifdef NC_DOUBLE
335        ierr = NF_DEF_VAR (nid,"bps",NF_DOUBLE,1,idim_s,nvarid)
336#else
337        ierr = NF_DEF_VAR (nid,"bps",NF_FLOAT,1,idim_s,nvarid)
338#endif
339cIM 220306 END
340        ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 34,
341     .                       "Coef BS: hybrid sigma at midlayers")
342        ierr = NF_ENDDEF(nid)
343        call NF95_PUT_VAR(nid,nvarid,bps)
344      endif ! of if (start_file_type.ne."earth")
345c
346      ierr = NF_REDEF (nid)
347cIM 220306 BEG
348#ifdef NC_DOUBLE
349      ierr = NF_DEF_VAR (nid,"presnivs",NF_DOUBLE,1,idim_s,nvarid)
350#else
351      ierr = NF_DEF_VAR (nid,"presnivs",NF_FLOAT,1,idim_s,nvarid)
352#endif
353cIM 220306 END
354      ierr = NF_ENDDEF(nid)
355      call NF95_PUT_VAR(nid,nvarid,presnivs)
356c
357      if (start_file_type.ne."earth") then
358        ierr = NF_REDEF (nid)
359#ifdef NC_DOUBLE
360        ierr = NF_DEF_VAR(nid,"latitude",NF_DOUBLE,1,idim_rlatu,nvarid)
361#else
362        ierr = NF_DEF_VAR(nid,"latitude",NF_FLOAT,1,idim_rlatu,nvarid)
363#endif
364        ierr =NF_PUT_ATT_TEXT(nid,nvarid,'units',13,"degrees_north")
365        ierr = NF_PUT_ATT_TEXT (nid,nvarid,"long_name", 14,
366     .        "North latitude")
367        ierr = NF_ENDDEF(nid)
368        call NF95_PUT_VAR(nid,nvarid,rlatu*180/pi)
369c
370        ierr = NF_REDEF (nid)
371#ifdef NC_DOUBLE
372        ierr=NF_DEF_VAR(nid,"longitude",NF_DOUBLE,1,idim_rlonv,nvarid)
373#else
374        ierr=NF_DEF_VAR(nid,"longitude",NF_FLOAT,1,idim_rlonv,nvarid)
375#endif
376        ierr = NF_PUT_ATT_TEXT (nid,nvarid,"long_name", 14,
377     .        "East longitude")
378        ierr = NF_PUT_ATT_TEXT(nid,nvarid,'units',12,"degrees_east")
379        ierr = NF_ENDDEF(nid)
380        call NF95_PUT_VAR(nid,nvarid,rlonv*180/pi)
381c
382        ierr = NF_REDEF (nid)
383#ifdef NC_DOUBLE
384        ierr = NF_DEF_VAR (nid, "altitude", NF_DOUBLE, 1,
385     .       idim_s,nvarid)
386#else
387        ierr = NF_DEF_VAR (nid, "altitude", NF_FLOAT, 1,
388     .       idim_s,nvarid)
389#endif
390        ierr = NF_PUT_ATT_TEXT(nid,nvarid,"long_name",10,"pseudo-alt")
391        ierr = NF_PUT_ATT_TEXT (nid,nvarid,'units',2,"km")
392        ierr = NF_PUT_ATT_TEXT (nid,nvarid,'positive',2,"up")
393        ierr = NF_ENDDEF(nid)
394        call NF95_PUT_VAR(nid,nvarid,pseudoalt)
395      endif ! of if (start_file_type.ne."earth")
396c
397c Coefficients de passage cov. <-> contra. <--> naturel
398c
399      ierr = NF_REDEF (nid)
400      dims2(1) = idim_rlonu
401      dims2(2) = idim_rlatu
402cIM 220306 BEG
403#ifdef NC_DOUBLE
404      ierr = NF_DEF_VAR (nid,"cu",NF_DOUBLE,2,dims2,nvarid)
405#else
406      ierr = NF_DEF_VAR (nid,"cu",NF_FLOAT,2,dims2,nvarid)
407#endif
408cIM 220306 END
409      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 29,
410     .                       "Coefficient de passage pour U")
411      ierr = NF_ENDDEF(nid)
412      call NF95_PUT_VAR(nid,nvarid,cu)
413c
414      ierr = NF_REDEF (nid)
415      dims2(1) = idim_rlonv
416      dims2(2) = idim_rlatv
417cIM 220306 BEG
418#ifdef NC_DOUBLE
419      ierr = NF_DEF_VAR (nid,"cv",NF_DOUBLE,2,dims2,nvarid)
420#else
421      ierr = NF_DEF_VAR (nid,"cv",NF_FLOAT,2,dims2,nvarid)
422#endif
423cIM 220306 END
424      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 29,
425     .                       "Coefficient de passage pour V")
426      ierr = NF_ENDDEF(nid)
427      call NF95_PUT_VAR(nid,nvarid,cv)
428c
429c Aire de chaque maille:
430c
431      ierr = NF_REDEF (nid)
432      dims2(1) = idim_rlonv
433      dims2(2) = idim_rlatu
434cIM 220306 BEG
435#ifdef NC_DOUBLE
436      ierr = NF_DEF_VAR (nid,"aire",NF_DOUBLE,2,dims2,nvarid)
437#else
438      ierr = NF_DEF_VAR (nid,"aire",NF_FLOAT,2,dims2,nvarid)
439#endif
440cIM 220306 END
441      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
442     .                       "Aires de chaque maille")
443      ierr = NF_ENDDEF(nid)
444      call NF95_PUT_VAR(nid,nvarid,aire)
445c
446c Geopentiel au sol:
447c
448      ierr = NF_REDEF (nid)
449      dims2(1) = idim_rlonv
450      dims2(2) = idim_rlatu
451cIM 220306 BEG
452#ifdef NC_DOUBLE
453      ierr = NF_DEF_VAR (nid,"phisinit",NF_DOUBLE,2,dims2,nvarid)
454#else
455      ierr = NF_DEF_VAR (nid,"phisinit",NF_FLOAT,2,dims2,nvarid)
456#endif
457cIM 220306 END
458      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 19,
459     .                       "Geopotentiel au sol")
460      ierr = NF_ENDDEF(nid)
461      call NF95_PUT_VAR(nid,nvarid,phis)
462c
463c Definir les variables pour pouvoir les enregistrer plus tard:
464c
465      ierr = NF_REDEF (nid) ! entrer dans le mode de definition
466c
467      if (start_file_type.eq."earth") then
468cIM 220306 BEG
469#ifdef NC_DOUBLE
470        ierr = NF_DEF_VAR (nid,"temps",NF_DOUBLE,1,idim_tim,nvarid)
471#else
472        ierr = NF_DEF_VAR (nid,"temps",NF_FLOAT,1,idim_tim,nvarid)
473#endif
474cIM 220306 END
475      else ! start_file_type=="planeto"
476#ifdef NC_DOUBLE
477        ierr = NF_DEF_VAR (nid,"Time",NF_DOUBLE,1,idim_tim,nvarid)
478#else
479        ierr = NF_DEF_VAR (nid,"Time",NF_FLOAT,1,idim_tim,nvarid)
480#endif
481      endif ! of if (start_file_type.eq."earth")
482      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 19,
483     .                       "Temps de simulation")
484      write(unites,200)yyears0,mmois0,jjour0
485200   format('days since ',i4,'-',i2.2,'-',i2.2,' 00:00:00')
486      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "units", 30,
487     .                         unites)
488
489c
490      dims4(1) = idim_rlonu
491      dims4(2) = idim_rlatu
492      dims4(3) = idim_s
493      dims4(4) = idim_tim
494cIM 220306 BEG
495#ifdef NC_DOUBLE
496      ierr = NF_DEF_VAR (nid,"ucov",NF_DOUBLE,4,dims4,nvarid)
497#else
498      ierr = NF_DEF_VAR (nid,"ucov",NF_FLOAT,4,dims4,nvarid)
499#endif
500cIM 220306 END
501      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 9,
502     .                       "Vitesse U")
503c
504      dims4(1) = idim_rlonv
505      dims4(2) = idim_rlatv
506      dims4(3) = idim_s
507      dims4(4) = idim_tim
508cIM 220306 BEG
509#ifdef NC_DOUBLE
510      ierr = NF_DEF_VAR (nid,"vcov",NF_DOUBLE,4,dims4,nvarid)
511#else
512      ierr = NF_DEF_VAR (nid,"vcov",NF_FLOAT,4,dims4,nvarid)
513#endif
514cIM 220306 END
515      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 9,
516     .                       "Vitesse V")
517c
518      dims4(1) = idim_rlonv
519      dims4(2) = idim_rlatu
520      dims4(3) = idim_s
521      dims4(4) = idim_tim
522cIM 220306 BEG
523#ifdef NC_DOUBLE
524      ierr = NF_DEF_VAR (nid,"teta",NF_DOUBLE,4,dims4,nvarid)
525#else
526      ierr = NF_DEF_VAR (nid,"teta",NF_FLOAT,4,dims4,nvarid)
527#endif
528cIM 220306 END
529      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 11,
530     .                       "Temperature")
531c
532      dims4(1) = idim_rlonv
533      dims4(2) = idim_rlatu
534      dims4(3) = idim_s
535      dims4(4) = idim_tim
536
537      DO iq=1,nqtot
538cIM 220306 BEG
539#ifdef NC_DOUBLE
540      ierr = NF_DEF_VAR (nid,tname(iq),NF_DOUBLE,4,dims4,nvarid)
541#else
542      ierr = NF_DEF_VAR (nid,tname(iq),NF_FLOAT,4,dims4,nvarid)
543#endif
544cIM 220306 END
545      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 12,ttext(iq))
546      ENDDO
547c
548      dims4(1) = idim_rlonv
549      dims4(2) = idim_rlatu
550      dims4(3) = idim_s
551      dims4(4) = idim_tim
552cIM 220306 BEG
553#ifdef NC_DOUBLE
554      ierr = NF_DEF_VAR (nid,"masse",NF_DOUBLE,4,dims4,nvarid)
555#else
556      ierr = NF_DEF_VAR (nid,"masse",NF_FLOAT,4,dims4,nvarid)
557#endif
558cIM 220306 END
559      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 12,
560     .                       "C est quoi ?")
561c
562      dims3(1) = idim_rlonv
563      dims3(2) = idim_rlatu
564      dims3(3) = idim_tim
565cIM 220306 BEG
566#ifdef NC_DOUBLE
567      ierr = NF_DEF_VAR (nid,"ps",NF_DOUBLE,3,dims3,nvarid)
568#else
569      ierr = NF_DEF_VAR (nid,"ps",NF_FLOAT,3,dims3,nvarid)
570#endif
571cIM 220306 END
572      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 15,
573     .                       "Pression au sol")
574c
575      ierr = NF_ENDDEF(nid) ! sortir du mode de definition
576      ierr = NF_CLOSE(nid) ! fermer le fichier
577
578      if (is_master) PRINT*,'iim,jjm,llm,iday_end',iim,jjm,llm,iday_end
579      if (is_master) PRINT*,'rad,omeg,g,cpp,kappa',
580     ,        rad,omeg,g,cpp,kappa
581
582      endif  ! mpi_rank==0
583      RETURN
584      END
585
586!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
587
588      SUBROUTINE dynredem1_p(fichnom,time,
589     .                     vcov,ucov,teta,q,masse,ps)
590      USE parallel_lmdz
591      USE infotrac
592      USE control_mod, only : planet_type
593      use netcdf, only: NF90_get_VAR
594      use netcdf95, only: NF95_PUT_VAR
595
596      IMPLICIT NONE
597c=================================================================
598c  Ecriture du fichier de redemarrage sous format NetCDF
599c=================================================================
600#include "dimensions.h"
601#include "paramet.h"
602#include "description.h"
603#include "netcdf.inc"
604#include "comvert.h"
605#include "comgeom.h"
606#include "temps.h"
607#include "iniprint.h"
608
609      INTEGER l
610      REAL vcov(iip1,jjm,llm),ucov(iip1, jjp1,llm) 
611      REAL teta(iip1, jjp1,llm)                   
612      REAL ps(iip1, jjp1),masse(iip1, jjp1,llm)                   
613      REAL q(iip1, jjp1, llm, nqtot)
614      CHARACTER*(*) fichnom
615     
616      REAL time
617      INTEGER nid, nvarid, nid_trac, nvarid_trac
618      REAL trac_tmp(ip1jmp1,llm)     
619      INTEGER ierr, ierr_file 
620      INTEGER iq
621      INTEGER length
622      PARAMETER (length = 100)
623      REAL tab_cntrl(length) ! tableau des parametres du run
624      character(len=*),parameter :: modname='dynredem1'
625      character*80 abort_message
626c
627      INTEGER nb
628      SAVE nb
629      DATA nb / 0 /
630
631      logical exist_file
632      character(len=12) :: start_file_type="earth" ! default start file type
633
634      if ((planet_type.eq."generic").or.(planet_type.eq."mars")) then
635          write(lunout,*) trim(modname),' : Planeto-like start file'
636          start_file_type="planeto"
637      else
638          write(lunout,*) trim(modname),' : Earth-like start file'
639      endif
640
641      call Gather_Field(ucov,ip1jmp1,llm,0)
642      call Gather_Field(vcov,ip1jm,llm,0)
643      call Gather_Field(teta,ip1jmp1,llm,0)
644      call Gather_Field(masse,ip1jmp1,llm,0)
645      call Gather_Field(ps,ip1jmp1,1,0)
646     
647      do iq=1,nqtot
648        call Gather_Field(q(:,:,:,iq),ip1jmp1,llm,0)
649      enddo
650     
651     
652      if (mpi_rank==0) then
653     
654      ierr = NF_OPEN(fichnom, NF_WRITE, nid)
655      IF (ierr .NE. NF_NOERR) THEN
656         PRINT*, "dynredem1: Pb. d ouverture "//trim(fichnom)
657         CALL abort
658      ENDIF
659
660c  Ecriture/extension de la coordonnee temps
661
662      nb = nb + 1
663      if (start_file_type.eq."earth") then
664        ierr = NF_INQ_VARID(nid, "temps", nvarid)
665        IF (ierr .NE. NF_NOERR) THEN
666          write(lunout,*) NF_STRERROR(ierr)
667          abort_message='Variable temps n est pas definie'
668          CALL abort_gcm(modname,abort_message,ierr)
669        ENDIF
670      else
671        ierr = NF_INQ_VARID(nid,"Time", nvarid)
672        IF (ierr .NE. NF_NOERR) THEN
673          write(lunout,*) NF_STRERROR(ierr)
674          abort_message='Variable Time not found'
675          CALL abort_gcm(modname,abort_message,ierr)
676        ENDIF
677      endif ! of if (start_file_type.eq."earth")
678      call NF95_PUT_VAR(nid,nvarid,time,start=(/nb/))
679      PRINT*, "Enregistrement pour ", nb, time
680
681c
682c  Re-ecriture du tableau de controle, itaufin n'est plus defini quand
683c  on passe dans dynredem0
684      ierr = NF_INQ_VARID (nid, "controle", nvarid)
685      IF (ierr .NE. NF_NOERR) THEN
686         abort_message="dynredem1: Le champ <controle> est absent"
687         ierr = 1
688         CALL abort_gcm(modname,abort_message,ierr)
689      ENDIF
690      ierr = NF90_GET_VAR(nid, nvarid, tab_cntrl)
691      if (start_file_type=="earth") then
692        tab_cntrl(31) = REAL(itau_dyn + itaufin)
693      else
694        tab_cntrl(31) = 0
695      endif
696      call NF95_PUT_VAR(nid,nvarid,tab_cntrl)
697
698c  Ecriture des champs
699c
700      ierr = NF_INQ_VARID(nid, "ucov", nvarid)
701      IF (ierr .NE. NF_NOERR) THEN
702         PRINT*, "Variable ucov n est pas definie"
703         CALL abort
704      ENDIF
705      call NF95_PUT_VAR(nid,nvarid,ucov,start=(/1,1,1,nb/))
706
707      ierr = NF_INQ_VARID(nid, "vcov", nvarid)
708      IF (ierr .NE. NF_NOERR) THEN
709         PRINT*, "Variable vcov n est pas definie"
710         CALL abort
711      ENDIF
712      call NF95_PUT_VAR(nid,nvarid,vcov,start=(/1,1,1,nb/))
713
714      ierr = NF_INQ_VARID(nid, "teta", nvarid)
715      IF (ierr .NE. NF_NOERR) THEN
716         PRINT*, "Variable teta n est pas definie"
717         CALL abort
718      ENDIF
719      call NF95_PUT_VAR(nid,nvarid,teta,start=(/1,1,1,nb/))
720
721      IF (type_trac == 'inca') THEN
722! Ajout Anne pour lecture valeurs traceurs dans un fichier start_trac.nc
723         inquire(FILE="start_trac.nc", EXIST=exist_file)
724         print *, "EXIST", exist_file
725         if (exist_file) then
726            ierr_file = NF_OPEN ("start_trac.nc", NF_NOWRITE,nid_trac)
727            IF (ierr_file .NE.NF_NOERR) THEN
728               write(6,*)' Pb d''ouverture du fichier start_trac.nc'
729               write(6,*)' ierr = ', ierr_file
730            ENDIF
731         else
732            ierr_file = 2
733         endif
734      END IF
735
736      do iq=1,nqtot
737
738         IF (type_trac /= 'inca') THEN
739            ierr = NF_INQ_VARID(nid, tname(iq), nvarid)
740            IF (ierr .NE. NF_NOERR) THEN
741               PRINT*, "Variable  tname(iq) n est pas definie"
742               CALL abort
743            ENDIF
744            call NF95_PUT_VAR(nid,nvarid,q(:,:,:,iq),start=(/1,1,1,nb/))
745        ELSE ! type_trac = inca
746! lecture de la valeur du traceur dans start_trac.nc
747           IF (ierr_file .ne. 2) THEN
748             ierr = NF_INQ_VARID (nid_trac, tname(iq), nvarid_trac)
749             IF (ierr .NE. NF_NOERR) THEN
750                PRINT*, tname(iq),"est absent de start_trac.nc"
751                ierr = NF_INQ_VARID(nid, tname(iq), nvarid)
752                IF (ierr .NE. NF_NOERR) THEN
753                   PRINT*, "Variable ", tname(iq)," n est pas definie"
754                   CALL abort
755                ENDIF
756                call NF95_PUT_VAR(nid,nvarid,q(:,:,:,iq))
757               
758             ELSE
759                PRINT*, tname(iq), "est present dans start_trac.nc"
760               ierr = NF90_GET_VAR(nid_trac, nvarid_trac, trac_tmp)
761                IF (ierr .NE. NF_NOERR) THEN
762                   PRINT*, "Lecture echouee pour", tname(iq)
763                   CALL abort
764                ENDIF
765                ierr = NF_INQ_VARID(nid, tname(iq), nvarid)
766                IF (ierr .NE. NF_NOERR) THEN
767                   PRINT*, "Variable ", tname(iq)," n est pas definie"
768                   CALL abort
769                ENDIF
770                call NF95_PUT_VAR(nid, nvarid, trac_tmp)
771               
772             ENDIF ! IF (ierr .NE. NF_NOERR)
773! fin lecture du traceur
774          ELSE                  ! si il n'y a pas de fichier start_trac.nc
775!             print *, 'il n y a pas de fichier start_trac'
776             ierr = NF_INQ_VARID(nid, tname(iq), nvarid)
777             IF (ierr .NE. NF_NOERR) THEN
778                PRINT*, "Variable  tname(iq) n est pas definie"
779                CALL abort
780             ENDIF
781             call NF95_PUT_VAR(nid,nvarid,q(:,:,:,iq),
782     &                  start=(/1,1,1,nb/))
783          ENDIF ! (ierr_file .ne. 2)
784       END IF   !type_trac
785     
786      ENDDO
787
788
789
790c
791      ierr = NF_INQ_VARID(nid, "masse", nvarid)
792      IF (ierr .NE. NF_NOERR) THEN
793         PRINT*, "Variable masse n est pas definie"
794         CALL abort
795      ENDIF
796      call NF95_PUT_VAR(nid,nvarid,masse,start=(/1,1,1,nb/))
797c
798      ierr = NF_INQ_VARID(nid, "ps", nvarid)
799      IF (ierr .NE. NF_NOERR) THEN
800         PRINT*, "Variable ps n est pas definie"
801         CALL abort
802      ENDIF
803      call NF95_PUT_VAR(nid,nvarid,ps,start=(/1,1,nb/))
804
805      ierr = NF_CLOSE(nid)
806c
807      endif ! mpi_rank==0
808     
809      RETURN
810      END
811
Note: See TracBrowser for help on using the repository browser.