source: LMDZ5/trunk/libf/dynredem_loc.F @ 1630

Last change on this file since 1630 was 1630, checked in by Laurent Fairhead, 12 years ago

Importation initiale du répertoire dyn3dmem


Initial import of dyn3dmem directory

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