source: codes/icosagcm/branches/SATURN_DYNAMICO/LMDZ.COMMON/config/ppsrc/phys/writediagsoil.f90 @ 224

Last change on this file since 224 was 224, checked in by ymipsl, 10 years ago
File size: 68.9 KB
Line 
1subroutine writediagsoil(ngrid,name,title,units,dimpx,px)
2
3! Write variable 'name' to NetCDF file 'diagsoil.nc'.
4! The variable may be 3D (lon,lat,depth) subterranean field,
5! a 2D (lon,lat) surface field, or a simple scalar (0D variable).
6!
7! Calls to 'writediagsoil' can originate from anywhere in the program;
8! An initialisation of variable 'name' is done if it is the first time
9! that this routine is called with given 'name'; otherwise data is appended
10! (yielding the sought time series of the variable)
11
12! Modifs: Aug.2010 Ehouarn: enforce outputs to be real*4
13
14use comsoil_h, only: nsoilmx
15use control_mod, only: ecritphy, day_step, iphysiq
16use mod_phys_lmdz_para, only : is_mpi_root, is_master, gather
17use mod_grid_phy_lmdz, only : klon_glo, Grid1Dto2D_glo
18
19implicit none
20
21!-----------------------------------------------------------------------
22!   INCLUDE 'dimensions.h'
23!
24!   dimensions.h contient les dimensions du modele
25!   ndm est tel que iim=2**ndm
26!-----------------------------------------------------------------------
27
28      INTEGER iim,jjm,llm,ndm
29
30      PARAMETER (iim= 128,jjm=96,llm=64,ndm=1)
31
32!-----------------------------------------------------------------------
33!
34! $Header$
35!
36!
37!  ATTENTION!!!!: ce fichier include est compatible format fixe/format libre
38!                 veillez  n'utiliser que des ! pour les commentaires
39!                 et  bien positionner les & des lignes de continuation
40!                 (les placer en colonne 6 et en colonne 73)
41!
42!
43!-----------------------------------------------------------------------
44!   INCLUDE 'paramet.h'
45
46      INTEGER  iip1,iip2,iip3,jjp1,llmp1,llmp2,llmm1
47      INTEGER  kftd,ip1jm,ip1jmp1,ip1jmi1,ijp1llm
48      INTEGER  ijmllm,mvar
49      INTEGER jcfil,jcfllm
50
51      PARAMETER( iip1= iim+1,iip2=iim+2,iip3=iim+3                       &
52     &    ,jjp1=jjm+1-1/jjm)
53      PARAMETER( llmp1 = llm+1,  llmp2 = llm+2, llmm1 = llm-1 )
54      PARAMETER( kftd  = iim/2 -ndm )
55      PARAMETER( ip1jm  = iip1*jjm,  ip1jmp1= iip1*jjp1 )
56      PARAMETER( ip1jmi1= ip1jm - iip1 )
57      PARAMETER( ijp1llm= ip1jmp1 * llm, ijmllm= ip1jm * llm )
58      PARAMETER( mvar= ip1jmp1*( 2*llm+1) + ijmllm )
59      PARAMETER( jcfil=jjm/2+5, jcfllm=jcfil*llm )
60
61!-----------------------------------------------------------------------
62!     NetCDF-3.
63!
64! netcdf version 3 fortran interface:
65!
66
67!
68! external netcdf data types:
69!
70      integer nf_byte
71      integer nf_int1
72      integer nf_char
73      integer nf_short
74      integer nf_int2
75      integer nf_int
76      integer nf_float
77      integer nf_real
78      integer nf_double
79
80      parameter (nf_byte = 1)
81      parameter (nf_int1 = nf_byte)
82      parameter (nf_char = 2)
83      parameter (nf_short = 3)
84      parameter (nf_int2 = nf_short)
85      parameter (nf_int = 4)
86      parameter (nf_float = 5)
87      parameter (nf_real = nf_float)
88      parameter (nf_double = 6)
89
90!
91! default fill values:
92!
93      integer           nf_fill_byte
94      integer           nf_fill_int1
95      integer           nf_fill_char
96      integer           nf_fill_short
97      integer           nf_fill_int2
98      integer           nf_fill_int
99      real              nf_fill_float
100      real              nf_fill_real
101      doubleprecision   nf_fill_double
102
103      parameter (nf_fill_byte = -127)
104      parameter (nf_fill_int1 = nf_fill_byte)
105      parameter (nf_fill_char = 0)
106      parameter (nf_fill_short = -32767)
107      parameter (nf_fill_int2 = nf_fill_short)
108      parameter (nf_fill_int = -2147483647)
109      parameter (nf_fill_float = 9.9692099683868690e+36)
110      parameter (nf_fill_real = nf_fill_float)
111      parameter (nf_fill_double = 9.9692099683868690d+36)
112
113!
114! mode flags for opening and creating a netcdf dataset:
115!
116      integer nf_nowrite
117      integer nf_write
118      integer nf_clobber
119      integer nf_noclobber
120      integer nf_fill
121      integer nf_nofill
122      integer nf_lock
123      integer nf_share
124      integer nf_64bit_offset
125      integer nf_sizehint_default
126      integer nf_align_chunk
127      integer nf_format_classic
128      integer nf_format_64bit
129
130      parameter (nf_nowrite = 0)
131      parameter (nf_write = 1)
132      parameter (nf_clobber = 0)
133      parameter (nf_noclobber = 4)
134      parameter (nf_fill = 0)
135      parameter (nf_nofill = 256)
136      parameter (nf_lock = 1024)
137      parameter (nf_share = 2048)
138      parameter (nf_64bit_offset = 512)
139      parameter (nf_sizehint_default = 0)
140      parameter (nf_align_chunk = -1)
141      parameter (nf_format_classic = 1)
142      parameter (nf_format_64bit = 2)
143
144!
145! size argument for defining an unlimited dimension:
146!
147      integer nf_unlimited
148      parameter (nf_unlimited = 0)
149
150!
151! global attribute id:
152!
153      integer nf_global
154      parameter (nf_global = 0)
155
156!
157! implementation limits:
158!
159      integer nf_max_dims
160      integer nf_max_attrs
161      integer nf_max_vars
162      integer nf_max_name
163      integer nf_max_var_dims
164
165      parameter (nf_max_dims = 1024)
166      parameter (nf_max_attrs = 8192)
167      parameter (nf_max_vars = 8192)
168      parameter (nf_max_name = 256)
169      parameter (nf_max_var_dims = nf_max_dims)
170
171!
172! error codes:
173!
174      integer nf_noerr
175      integer nf_ebadid
176      integer nf_eexist
177      integer nf_einval
178      integer nf_eperm
179      integer nf_enotindefine
180      integer nf_eindefine
181      integer nf_einvalcoords
182      integer nf_emaxdims
183      integer nf_enameinuse
184      integer nf_enotatt
185      integer nf_emaxatts
186      integer nf_ebadtype
187      integer nf_ebaddim
188      integer nf_eunlimpos
189      integer nf_emaxvars
190      integer nf_enotvar
191      integer nf_eglobal
192      integer nf_enotnc
193      integer nf_ests
194      integer nf_emaxname
195      integer nf_eunlimit
196      integer nf_enorecvars
197      integer nf_echar
198      integer nf_eedge
199      integer nf_estride
200      integer nf_ebadname
201      integer nf_erange
202      integer nf_enomem
203      integer nf_evarsize
204      integer nf_edimsize
205      integer nf_etrunc
206
207      parameter (nf_noerr = 0)
208      parameter (nf_ebadid = -33)
209      parameter (nf_eexist = -35)
210      parameter (nf_einval = -36)
211      parameter (nf_eperm = -37)
212      parameter (nf_enotindefine = -38)
213      parameter (nf_eindefine = -39)
214      parameter (nf_einvalcoords = -40)
215      parameter (nf_emaxdims = -41)
216      parameter (nf_enameinuse = -42)
217      parameter (nf_enotatt = -43)
218      parameter (nf_emaxatts = -44)
219      parameter (nf_ebadtype = -45)
220      parameter (nf_ebaddim = -46)
221      parameter (nf_eunlimpos = -47)
222      parameter (nf_emaxvars = -48)
223      parameter (nf_enotvar = -49)
224      parameter (nf_eglobal = -50)
225      parameter (nf_enotnc = -51)
226      parameter (nf_ests = -52)
227      parameter (nf_emaxname = -53)
228      parameter (nf_eunlimit = -54)
229      parameter (nf_enorecvars = -55)
230      parameter (nf_echar = -56)
231      parameter (nf_eedge = -57)
232      parameter (nf_estride = -58)
233      parameter (nf_ebadname = -59)
234      parameter (nf_erange = -60)
235      parameter (nf_enomem = -61)
236      parameter (nf_evarsize = -62)
237      parameter (nf_edimsize = -63)
238      parameter (nf_etrunc = -64)
239!
240! error handling modes:
241!
242      integer  nf_fatal
243      integer nf_verbose
244
245      parameter (nf_fatal = 1)
246      parameter (nf_verbose = 2)
247
248!
249! miscellaneous routines:
250!
251      character*80   nf_inq_libvers
252      external       nf_inq_libvers
253
254      character*80   nf_strerror
255!                         (integer             ncerr)
256      external       nf_strerror
257
258      logical        nf_issyserr
259!                         (integer             ncerr)
260      external       nf_issyserr
261
262!
263! control routines:
264!
265      integer         nf_inq_base_pe
266!                         (integer             ncid,
267!                          integer             pe)
268      external        nf_inq_base_pe
269
270      integer         nf_set_base_pe
271!                         (integer             ncid,
272!                          integer             pe)
273      external        nf_set_base_pe
274
275      integer         nf_create
276!                         (character*(*)       path,
277!                          integer             cmode,
278!                          integer             ncid)
279      external        nf_create
280
281      integer         nf__create
282!                         (character*(*)       path,
283!                          integer             cmode,
284!                          integer             initialsz,
285!                          integer             chunksizehint,
286!                          integer             ncid)
287      external        nf__create
288
289      integer         nf__create_mp
290!                         (character*(*)       path,
291!                          integer             cmode,
292!                          integer             initialsz,
293!                          integer             basepe,
294!                          integer             chunksizehint,
295!                          integer             ncid)
296      external        nf__create_mp
297
298      integer         nf_open
299!                         (character*(*)       path,
300!                          integer             mode,
301!                          integer             ncid)
302      external        nf_open
303
304      integer         nf__open
305!                         (character*(*)       path,
306!                          integer             mode,
307!                          integer             chunksizehint,
308!                          integer             ncid)
309      external        nf__open
310
311      integer         nf__open_mp
312!                         (character*(*)       path,
313!                          integer             mode,
314!                          integer             basepe,
315!                          integer             chunksizehint,
316!                          integer             ncid)
317      external        nf__open_mp
318
319      integer         nf_set_fill
320!                         (integer             ncid,
321!                          integer             fillmode,
322!                          integer             old_mode)
323      external        nf_set_fill
324
325      integer         nf_set_default_format
326!                          (integer             format,
327!                          integer             old_format)
328      external        nf_set_default_format
329
330      integer         nf_redef
331!                         (integer             ncid)
332      external        nf_redef
333
334      integer         nf_enddef
335!                         (integer             ncid)
336      external        nf_enddef
337
338      integer         nf__enddef
339!                         (integer             ncid,
340!                          integer             h_minfree,
341!                          integer             v_align,
342!                          integer             v_minfree,
343!                          integer             r_align)
344      external        nf__enddef
345
346      integer         nf_sync
347!                         (integer             ncid)
348      external        nf_sync
349
350      integer         nf_abort
351!                         (integer             ncid)
352      external        nf_abort
353
354      integer         nf_close
355!                         (integer             ncid)
356      external        nf_close
357
358      integer         nf_delete
359!                         (character*(*)       ncid)
360      external        nf_delete
361
362!
363! general inquiry routines:
364!
365
366      integer         nf_inq
367!                         (integer             ncid,
368!                          integer             ndims,
369!                          integer             nvars,
370!                          integer             ngatts,
371!                          integer             unlimdimid)
372      external        nf_inq
373
374      integer         nf_inq_ndims
375!                         (integer             ncid,
376!                          integer             ndims)
377      external        nf_inq_ndims
378
379      integer         nf_inq_nvars
380!                         (integer             ncid,
381!                          integer             nvars)
382      external        nf_inq_nvars
383
384      integer         nf_inq_natts
385!                         (integer             ncid,
386!                          integer             ngatts)
387      external        nf_inq_natts
388
389      integer         nf_inq_unlimdim
390!                         (integer             ncid,
391!                          integer             unlimdimid)
392      external        nf_inq_unlimdim
393
394      integer         nf_inq_format
395!                         (integer             ncid,
396!                          integer             format)
397      external        nf_inq_format
398
399!
400! dimension routines:
401!
402
403      integer         nf_def_dim
404!                         (integer             ncid,
405!                          character(*)        name,
406!                          integer             len,
407!                          integer             dimid)
408      external        nf_def_dim
409
410      integer         nf_inq_dimid
411!                         (integer             ncid,
412!                          character(*)        name,
413!                          integer             dimid)
414      external        nf_inq_dimid
415
416      integer         nf_inq_dim
417!                         (integer             ncid,
418!                          integer             dimid,
419!                          character(*)        name,
420!                          integer             len)
421      external        nf_inq_dim
422
423      integer         nf_inq_dimname
424!                         (integer             ncid,
425!                          integer             dimid,
426!                          character(*)        name)
427      external        nf_inq_dimname
428
429      integer         nf_inq_dimlen
430!                         (integer             ncid,
431!                          integer             dimid,
432!                          integer             len)
433      external        nf_inq_dimlen
434
435      integer         nf_rename_dim
436!                         (integer             ncid,
437!                          integer             dimid,
438!                          character(*)        name)
439      external        nf_rename_dim
440
441!
442! general attribute routines:
443!
444
445      integer         nf_inq_att
446!                         (integer             ncid,
447!                          integer             varid,
448!                          character(*)        name,
449!                          integer             xtype,
450!                          integer             len)
451      external        nf_inq_att
452
453      integer         nf_inq_attid
454!                         (integer             ncid,
455!                          integer             varid,
456!                          character(*)        name,
457!                          integer             attnum)
458      external        nf_inq_attid
459
460      integer         nf_inq_atttype
461!                         (integer             ncid,
462!                          integer             varid,
463!                          character(*)        name,
464!                          integer             xtype)
465      external        nf_inq_atttype
466
467      integer         nf_inq_attlen
468!                         (integer             ncid,
469!                          integer             varid,
470!                          character(*)        name,
471!                          integer             len)
472      external        nf_inq_attlen
473
474      integer         nf_inq_attname
475!                         (integer             ncid,
476!                          integer             varid,
477!                          integer             attnum,
478!                          character(*)        name)
479      external        nf_inq_attname
480
481      integer         nf_copy_att
482!                         (integer             ncid_in,
483!                          integer             varid_in,
484!                          character(*)        name,
485!                          integer             ncid_out,
486!                          integer             varid_out)
487      external        nf_copy_att
488
489      integer         nf_rename_att
490!                         (integer             ncid,
491!                          integer             varid,
492!                          character(*)        curname,
493!                          character(*)        newname)
494      external        nf_rename_att
495
496      integer         nf_del_att
497!                         (integer             ncid,
498!                          integer             varid,
499!                          character(*)        name)
500      external        nf_del_att
501
502!
503! attribute put/get routines:
504!
505
506      integer         nf_put_att_text
507!                         (integer             ncid,
508!                          integer             varid,
509!                          character(*)        name,
510!                          integer             len,
511!                          character(*)        text)
512      external        nf_put_att_text
513
514      integer         nf_get_att_text
515!                         (integer             ncid,
516!                          integer             varid,
517!                          character(*)        name,
518!                          character(*)        text)
519      external        nf_get_att_text
520
521      integer         nf_put_att_int1
522!                         (integer             ncid,
523!                          integer             varid,
524!                          character(*)        name,
525!                          integer             xtype,
526!                          integer             len,
527!                          nf_int1_t           i1vals(1))
528      external        nf_put_att_int1
529
530      integer         nf_get_att_int1
531!                         (integer             ncid,
532!                          integer             varid,
533!                          character(*)        name,
534!                          nf_int1_t           i1vals(1))
535      external        nf_get_att_int1
536
537      integer         nf_put_att_int2
538!                         (integer             ncid,
539!                          integer             varid,
540!                          character(*)        name,
541!                          integer             xtype,
542!                          integer             len,
543!                          nf_int2_t           i2vals(1))
544      external        nf_put_att_int2
545
546      integer         nf_get_att_int2
547!                         (integer             ncid,
548!                          integer             varid,
549!                          character(*)        name,
550!                          nf_int2_t           i2vals(1))
551      external        nf_get_att_int2
552
553      integer         nf_put_att_int
554!                         (integer             ncid,
555!                          integer             varid,
556!                          character(*)        name,
557!                          integer             xtype,
558!                          integer             len,
559!                          integer             ivals(1))
560      external        nf_put_att_int
561
562      integer         nf_get_att_int
563!                         (integer             ncid,
564!                          integer             varid,
565!                          character(*)        name,
566!                          integer             ivals(1))
567      external        nf_get_att_int
568
569      integer         nf_put_att_real
570!                         (integer             ncid,
571!                          integer             varid,
572!                          character(*)        name,
573!                          integer             xtype,
574!                          integer             len,
575!                          real                rvals(1))
576      external        nf_put_att_real
577
578      integer         nf_get_att_real
579!                         (integer             ncid,
580!                          integer             varid,
581!                          character(*)        name,
582!                          real                rvals(1))
583      external        nf_get_att_real
584
585      integer         nf_put_att_double
586!                         (integer             ncid,
587!                          integer             varid,
588!                          character(*)        name,
589!                          integer             xtype,
590!                          integer             len,
591!                          double              dvals(1))
592      external        nf_put_att_double
593
594      integer         nf_get_att_double
595!                         (integer             ncid,
596!                          integer             varid,
597!                          character(*)        name,
598!                          double              dvals(1))
599      external        nf_get_att_double
600
601!
602! general variable routines:
603!
604
605      integer         nf_def_var
606!                         (integer             ncid,
607!                          character(*)        name,
608!                          integer             datatype,
609!                          integer             ndims,
610!                          integer             dimids(1),
611!                          integer             varid)
612      external        nf_def_var
613
614      integer         nf_inq_var
615!                         (integer             ncid,
616!                          integer             varid,
617!                          character(*)        name,
618!                          integer             datatype,
619!                          integer             ndims,
620!                          integer             dimids(1),
621!                          integer             natts)
622      external        nf_inq_var
623
624      integer         nf_inq_varid
625!                         (integer             ncid,
626!                          character(*)        name,
627!                          integer             varid)
628      external        nf_inq_varid
629
630      integer         nf_inq_varname
631!                         (integer             ncid,
632!                          integer             varid,
633!                          character(*)        name)
634      external        nf_inq_varname
635
636      integer         nf_inq_vartype
637!                         (integer             ncid,
638!                          integer             varid,
639!                          integer             xtype)
640      external        nf_inq_vartype
641
642      integer         nf_inq_varndims
643!                         (integer             ncid,
644!                          integer             varid,
645!                          integer             ndims)
646      external        nf_inq_varndims
647
648      integer         nf_inq_vardimid
649!                         (integer             ncid,
650!                          integer             varid,
651!                          integer             dimids(1))
652      external        nf_inq_vardimid
653
654      integer         nf_inq_varnatts
655!                         (integer             ncid,
656!                          integer             varid,
657!                          integer             natts)
658      external        nf_inq_varnatts
659
660      integer         nf_rename_var
661!                         (integer             ncid,
662!                          integer             varid,
663!                          character(*)        name)
664      external        nf_rename_var
665
666      integer         nf_copy_var
667!                         (integer             ncid_in,
668!                          integer             varid,
669!                          integer             ncid_out)
670      external        nf_copy_var
671
672!
673! entire variable put/get routines:
674!
675
676      integer         nf_put_var_text
677!                         (integer             ncid,
678!                          integer             varid,
679!                          character(*)        text)
680      external        nf_put_var_text
681
682      integer         nf_get_var_text
683!                         (integer             ncid,
684!                          integer             varid,
685!                          character(*)        text)
686      external        nf_get_var_text
687
688      integer         nf_put_var_int1
689!                         (integer             ncid,
690!                          integer             varid,
691!                          nf_int1_t           i1vals(1))
692      external        nf_put_var_int1
693
694      integer         nf_get_var_int1
695!                         (integer             ncid,
696!                          integer             varid,
697!                          nf_int1_t           i1vals(1))
698      external        nf_get_var_int1
699
700      integer         nf_put_var_int2
701!                         (integer             ncid,
702!                          integer             varid,
703!                          nf_int2_t           i2vals(1))
704      external        nf_put_var_int2
705
706      integer         nf_get_var_int2
707!                         (integer             ncid,
708!                          integer             varid,
709!                          nf_int2_t           i2vals(1))
710      external        nf_get_var_int2
711
712      integer         nf_put_var_int
713!                         (integer             ncid,
714!                          integer             varid,
715!                          integer             ivals(1))
716      external        nf_put_var_int
717
718      integer         nf_get_var_int
719!                         (integer             ncid,
720!                          integer             varid,
721!                          integer             ivals(1))
722      external        nf_get_var_int
723
724      integer         nf_put_var_real
725!                         (integer             ncid,
726!                          integer             varid,
727!                          real                rvals(1))
728      external        nf_put_var_real
729
730      integer         nf_get_var_real
731!                         (integer             ncid,
732!                          integer             varid,
733!                          real                rvals(1))
734      external        nf_get_var_real
735
736      integer         nf_put_var_double
737!                         (integer             ncid,
738!                          integer             varid,
739!                          doubleprecision     dvals(1))
740      external        nf_put_var_double
741
742      integer         nf_get_var_double
743!                         (integer             ncid,
744!                          integer             varid,
745!                          doubleprecision     dvals(1))
746      external        nf_get_var_double
747
748!
749! single variable put/get routines:
750!
751
752      integer         nf_put_var1_text
753!                         (integer             ncid,
754!                          integer             varid,
755!                          integer             index(1),
756!                          character*1         text)
757      external        nf_put_var1_text
758
759      integer         nf_get_var1_text
760!                         (integer             ncid,
761!                          integer             varid,
762!                          integer             index(1),
763!                          character*1         text)
764      external        nf_get_var1_text
765
766      integer         nf_put_var1_int1
767!                         (integer             ncid,
768!                          integer             varid,
769!                          integer             index(1),
770!                          nf_int1_t           i1val)
771      external        nf_put_var1_int1
772
773      integer         nf_get_var1_int1
774!                         (integer             ncid,
775!                          integer             varid,
776!                          integer             index(1),
777!                          nf_int1_t           i1val)
778      external        nf_get_var1_int1
779
780      integer         nf_put_var1_int2
781!                         (integer             ncid,
782!                          integer             varid,
783!                          integer             index(1),
784!                          nf_int2_t           i2val)
785      external        nf_put_var1_int2
786
787      integer         nf_get_var1_int2
788!                         (integer             ncid,
789!                          integer             varid,
790!                          integer             index(1),
791!                          nf_int2_t           i2val)
792      external        nf_get_var1_int2
793
794      integer         nf_put_var1_int
795!                         (integer             ncid,
796!                          integer             varid,
797!                          integer             index(1),
798!                          integer             ival)
799      external        nf_put_var1_int
800
801      integer         nf_get_var1_int
802!                         (integer             ncid,
803!                          integer             varid,
804!                          integer             index(1),
805!                          integer             ival)
806      external        nf_get_var1_int
807
808      integer         nf_put_var1_real
809!                         (integer             ncid,
810!                          integer             varid,
811!                          integer             index(1),
812!                          real                rval)
813      external        nf_put_var1_real
814
815      integer         nf_get_var1_real
816!                         (integer             ncid,
817!                          integer             varid,
818!                          integer             index(1),
819!                          real                rval)
820      external        nf_get_var1_real
821
822      integer         nf_put_var1_double
823!                         (integer             ncid,
824!                          integer             varid,
825!                          integer             index(1),
826!                          doubleprecision     dval)
827      external        nf_put_var1_double
828
829      integer         nf_get_var1_double
830!                         (integer             ncid,
831!                          integer             varid,
832!                          integer             index(1),
833!                          doubleprecision     dval)
834      external        nf_get_var1_double
835
836!
837! variable array put/get routines:
838!
839
840      integer         nf_put_vara_text
841!                         (integer             ncid,
842!                          integer             varid,
843!                          integer             start(1),
844!                          integer             count(1),
845!                          character(*)        text)
846      external        nf_put_vara_text
847
848      integer         nf_get_vara_text
849!                         (integer             ncid,
850!                          integer             varid,
851!                          integer             start(1),
852!                          integer             count(1),
853!                          character(*)        text)
854      external        nf_get_vara_text
855
856      integer         nf_put_vara_int1
857!                         (integer             ncid,
858!                          integer             varid,
859!                          integer             start(1),
860!                          integer             count(1),
861!                          nf_int1_t           i1vals(1))
862      external        nf_put_vara_int1
863
864      integer         nf_get_vara_int1
865!                         (integer             ncid,
866!                          integer             varid,
867!                          integer             start(1),
868!                          integer             count(1),
869!                          nf_int1_t           i1vals(1))
870      external        nf_get_vara_int1
871
872      integer         nf_put_vara_int2
873!                         (integer             ncid,
874!                          integer             varid,
875!                          integer             start(1),
876!                          integer             count(1),
877!                          nf_int2_t           i2vals(1))
878      external        nf_put_vara_int2
879
880      integer         nf_get_vara_int2
881!                         (integer             ncid,
882!                          integer             varid,
883!                          integer             start(1),
884!                          integer             count(1),
885!                          nf_int2_t           i2vals(1))
886      external        nf_get_vara_int2
887
888      integer         nf_put_vara_int
889!                         (integer             ncid,
890!                          integer             varid,
891!                          integer             start(1),
892!                          integer             count(1),
893!                          integer             ivals(1))
894      external        nf_put_vara_int
895
896      integer         nf_get_vara_int
897!                         (integer             ncid,
898!                          integer             varid,
899!                          integer             start(1),
900!                          integer             count(1),
901!                          integer             ivals(1))
902      external        nf_get_vara_int
903
904      integer         nf_put_vara_real
905!                         (integer             ncid,
906!                          integer             varid,
907!                          integer             start(1),
908!                          integer             count(1),
909!                          real                rvals(1))
910      external        nf_put_vara_real
911
912      integer         nf_get_vara_real
913!                         (integer             ncid,
914!                          integer             varid,
915!                          integer             start(1),
916!                          integer             count(1),
917!                          real                rvals(1))
918      external        nf_get_vara_real
919
920      integer         nf_put_vara_double
921!                         (integer             ncid,
922!                          integer             varid,
923!                          integer             start(1),
924!                          integer             count(1),
925!                          doubleprecision     dvals(1))
926      external        nf_put_vara_double
927
928      integer         nf_get_vara_double
929!                         (integer             ncid,
930!                          integer             varid,
931!                          integer             start(1),
932!                          integer             count(1),
933!                          doubleprecision     dvals(1))
934      external        nf_get_vara_double
935
936!
937! strided variable put/get routines:
938!
939
940      integer         nf_put_vars_text
941!                         (integer             ncid,
942!                          integer             varid,
943!                          integer             start(1),
944!                          integer             count(1),
945!                          integer             stride(1),
946!                          character(*)        text)
947      external        nf_put_vars_text
948
949      integer         nf_get_vars_text
950!                         (integer             ncid,
951!                          integer             varid,
952!                          integer             start(1),
953!                          integer             count(1),
954!                          integer             stride(1),
955!                          character(*)        text)
956      external        nf_get_vars_text
957
958      integer         nf_put_vars_int1
959!                         (integer             ncid,
960!                          integer             varid,
961!                          integer             start(1),
962!                          integer             count(1),
963!                          integer             stride(1),
964!                          nf_int1_t           i1vals(1))
965      external        nf_put_vars_int1
966
967      integer         nf_get_vars_int1
968!                         (integer             ncid,
969!                          integer             varid,
970!                          integer             start(1),
971!                          integer             count(1),
972!                          integer             stride(1),
973!                          nf_int1_t           i1vals(1))
974      external        nf_get_vars_int1
975
976      integer         nf_put_vars_int2
977!                         (integer             ncid,
978!                          integer             varid,
979!                          integer             start(1),
980!                          integer             count(1),
981!                          integer             stride(1),
982!                          nf_int2_t           i2vals(1))
983      external        nf_put_vars_int2
984
985      integer         nf_get_vars_int2
986!                         (integer             ncid,
987!                          integer             varid,
988!                          integer             start(1),
989!                          integer             count(1),
990!                          integer             stride(1),
991!                          nf_int2_t           i2vals(1))
992      external        nf_get_vars_int2
993
994      integer         nf_put_vars_int
995!                         (integer             ncid,
996!                          integer             varid,
997!                          integer             start(1),
998!                          integer             count(1),
999!                          integer             stride(1),
1000!                          integer             ivals(1))
1001      external        nf_put_vars_int
1002
1003      integer         nf_get_vars_int
1004!                         (integer             ncid,
1005!                          integer             varid,
1006!                          integer             start(1),
1007!                          integer             count(1),
1008!                          integer             stride(1),
1009!                          integer             ivals(1))
1010      external        nf_get_vars_int
1011
1012      integer         nf_put_vars_real
1013!                         (integer             ncid,
1014!                          integer             varid,
1015!                          integer             start(1),
1016!                          integer             count(1),
1017!                          integer             stride(1),
1018!                          real                rvals(1))
1019      external        nf_put_vars_real
1020
1021      integer         nf_get_vars_real
1022!                         (integer             ncid,
1023!                          integer             varid,
1024!                          integer             start(1),
1025!                          integer             count(1),
1026!                          integer             stride(1),
1027!                          real                rvals(1))
1028      external        nf_get_vars_real
1029
1030      integer         nf_put_vars_double
1031!                         (integer             ncid,
1032!                          integer             varid,
1033!                          integer             start(1),
1034!                          integer             count(1),
1035!                          integer             stride(1),
1036!                          doubleprecision     dvals(1))
1037      external        nf_put_vars_double
1038
1039      integer         nf_get_vars_double
1040!                         (integer             ncid,
1041!                          integer             varid,
1042!                          integer             start(1),
1043!                          integer             count(1),
1044!                          integer             stride(1),
1045!                          doubleprecision     dvals(1))
1046      external        nf_get_vars_double
1047
1048!
1049! mapped variable put/get routines:
1050!
1051
1052      integer         nf_put_varm_text
1053!                         (integer             ncid,
1054!                          integer             varid,
1055!                          integer             start(1),
1056!                          integer             count(1),
1057!                          integer             stride(1),
1058!                          integer             imap(1),
1059!                          character(*)        text)
1060      external        nf_put_varm_text
1061
1062      integer         nf_get_varm_text
1063!                         (integer             ncid,
1064!                          integer             varid,
1065!                          integer             start(1),
1066!                          integer             count(1),
1067!                          integer             stride(1),
1068!                          integer             imap(1),
1069!                          character(*)        text)
1070      external        nf_get_varm_text
1071
1072      integer         nf_put_varm_int1
1073!                         (integer             ncid,
1074!                          integer             varid,
1075!                          integer             start(1),
1076!                          integer             count(1),
1077!                          integer             stride(1),
1078!                          integer             imap(1),
1079!                          nf_int1_t           i1vals(1))
1080      external        nf_put_varm_int1
1081
1082      integer         nf_get_varm_int1
1083!                         (integer             ncid,
1084!                          integer             varid,
1085!                          integer             start(1),
1086!                          integer             count(1),
1087!                          integer             stride(1),
1088!                          integer             imap(1),
1089!                          nf_int1_t           i1vals(1))
1090      external        nf_get_varm_int1
1091
1092      integer         nf_put_varm_int2
1093!                         (integer             ncid,
1094!                          integer             varid,
1095!                          integer             start(1),
1096!                          integer             count(1),
1097!                          integer             stride(1),
1098!                          integer             imap(1),
1099!                          nf_int2_t           i2vals(1))
1100      external        nf_put_varm_int2
1101
1102      integer         nf_get_varm_int2
1103!                         (integer             ncid,
1104!                          integer             varid,
1105!                          integer             start(1),
1106!                          integer             count(1),
1107!                          integer             stride(1),
1108!                          integer             imap(1),
1109!                          nf_int2_t           i2vals(1))
1110      external        nf_get_varm_int2
1111
1112      integer         nf_put_varm_int
1113!                         (integer             ncid,
1114!                          integer             varid,
1115!                          integer             start(1),
1116!                          integer             count(1),
1117!                          integer             stride(1),
1118!                          integer             imap(1),
1119!                          integer             ivals(1))
1120      external        nf_put_varm_int
1121
1122      integer         nf_get_varm_int
1123!                         (integer             ncid,
1124!                          integer             varid,
1125!                          integer             start(1),
1126!                          integer             count(1),
1127!                          integer             stride(1),
1128!                          integer             imap(1),
1129!                          integer             ivals(1))
1130      external        nf_get_varm_int
1131
1132      integer         nf_put_varm_real
1133!                         (integer             ncid,
1134!                          integer             varid,
1135!                          integer             start(1),
1136!                          integer             count(1),
1137!                          integer             stride(1),
1138!                          integer             imap(1),
1139!                          real                rvals(1))
1140      external        nf_put_varm_real
1141
1142      integer         nf_get_varm_real
1143!                         (integer             ncid,
1144!                          integer             varid,
1145!                          integer             start(1),
1146!                          integer             count(1),
1147!                          integer             stride(1),
1148!                          integer             imap(1),
1149!                          real                rvals(1))
1150      external        nf_get_varm_real
1151
1152      integer         nf_put_varm_double
1153!                         (integer             ncid,
1154!                          integer             varid,
1155!                          integer             start(1),
1156!                          integer             count(1),
1157!                          integer             stride(1),
1158!                          integer             imap(1),
1159!                          doubleprecision     dvals(1))
1160      external        nf_put_varm_double
1161
1162      integer         nf_get_varm_double
1163!                         (integer             ncid,
1164!                          integer             varid,
1165!                          integer             start(1),
1166!                          integer             count(1),
1167!                          integer             stride(1),
1168!                          integer             imap(1),
1169!                          doubleprecision     dvals(1))
1170      external        nf_get_varm_double
1171
1172
1173!     NetCDF-2.
1174!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1175! begin netcdf 2.4 backward compatibility:
1176!
1177
1178!     
1179! functions in the fortran interface
1180!
1181      integer nccre
1182      integer ncopn
1183      integer ncddef
1184      integer ncdid
1185      integer ncvdef
1186      integer ncvid
1187      integer nctlen
1188      integer ncsfil
1189
1190      external nccre
1191      external ncopn
1192      external ncddef
1193      external ncdid
1194      external ncvdef
1195      external ncvid
1196      external nctlen
1197      external ncsfil
1198
1199
1200      integer ncrdwr
1201      integer nccreat
1202      integer ncexcl
1203      integer ncindef
1204      integer ncnsync
1205      integer nchsync
1206      integer ncndirty
1207      integer nchdirty
1208      integer nclink
1209      integer ncnowrit
1210      integer ncwrite
1211      integer ncclob
1212      integer ncnoclob
1213      integer ncglobal
1214      integer ncfill
1215      integer ncnofill
1216      integer maxncop
1217      integer maxncdim
1218      integer maxncatt
1219      integer maxncvar
1220      integer maxncnam
1221      integer maxvdims
1222      integer ncnoerr
1223      integer ncebadid
1224      integer ncenfile
1225      integer nceexist
1226      integer nceinval
1227      integer nceperm
1228      integer ncenotin
1229      integer nceindef
1230      integer ncecoord
1231      integer ncemaxds
1232      integer ncename
1233      integer ncenoatt
1234      integer ncemaxat
1235      integer ncebadty
1236      integer ncebadd
1237      integer ncests
1238      integer nceunlim
1239      integer ncemaxvs
1240      integer ncenotvr
1241      integer nceglob
1242      integer ncenotnc
1243      integer ncfoobar
1244      integer ncsyserr
1245      integer ncfatal
1246      integer ncverbos
1247      integer ncentool
1248
1249
1250!
1251! netcdf data types:
1252!
1253      integer ncbyte
1254      integer ncchar
1255      integer ncshort
1256      integer nclong
1257      integer ncfloat
1258      integer ncdouble
1259
1260      parameter(ncbyte = 1)
1261      parameter(ncchar = 2)
1262      parameter(ncshort = 3)
1263      parameter(nclong = 4)
1264      parameter(ncfloat = 5)
1265      parameter(ncdouble = 6)
1266
1267!     
1268!     masks for the struct nc flag field; passed in as 'mode' arg to
1269!     nccreate and ncopen.
1270!     
1271
1272!     read/write, 0 => readonly
1273      parameter(ncrdwr = 1)
1274!     in create phase, cleared by ncendef
1275      parameter(nccreat = 2)
1276!     on create destroy existing file
1277      parameter(ncexcl = 4)
1278!     in define mode, cleared by ncendef
1279      parameter(ncindef = 8)
1280!     synchronise numrecs on change (x'10')
1281      parameter(ncnsync = 16)
1282!     synchronise whole header on change (x'20')
1283      parameter(nchsync = 32)
1284!     numrecs has changed (x'40')
1285      parameter(ncndirty = 64) 
1286!     header info has changed (x'80')
1287      parameter(nchdirty = 128)
1288!     prefill vars on endef and increase of record, the default behavior
1289      parameter(ncfill = 0)
1290!     do not fill vars on endef and increase of record (x'100')
1291      parameter(ncnofill = 256)
1292!     isa link (x'8000')
1293      parameter(nclink = 32768)
1294
1295!     
1296!     'mode' arguments for nccreate and ncopen
1297!     
1298      parameter(ncnowrit = 0)
1299      parameter(ncwrite = ncrdwr)
1300      parameter(ncclob = nf_clobber)
1301      parameter(ncnoclob = nf_noclobber)
1302
1303!     
1304!     'size' argument to ncdimdef for an unlimited dimension
1305!     
1306      integer ncunlim
1307      parameter(ncunlim = 0)
1308
1309!     
1310!     attribute id to put/get a global attribute
1311!     
1312      parameter(ncglobal  = 0)
1313
1314!     
1315!     advisory maximums:
1316!     
1317      parameter(maxncop = 64)
1318      parameter(maxncdim = 1024)
1319      parameter(maxncatt = 8192)
1320      parameter(maxncvar = 8192)
1321!     not enforced
1322      parameter(maxncnam = 256)
1323      parameter(maxvdims = maxncdim)
1324
1325!     
1326!     global netcdf error status variable
1327!     initialized in error.c
1328!     
1329
1330!     no error
1331      parameter(ncnoerr = nf_noerr)
1332!     not a netcdf id
1333      parameter(ncebadid = nf_ebadid)
1334!     too many netcdfs open
1335      parameter(ncenfile = -31)   ! nc_syserr
1336!     netcdf file exists && ncnoclob
1337      parameter(nceexist = nf_eexist)
1338!     invalid argument
1339      parameter(nceinval = nf_einval)
1340!     write to read only
1341      parameter(nceperm = nf_eperm)
1342!     operation not allowed in data mode
1343      parameter(ncenotin = nf_enotindefine )   
1344!     operation not allowed in define mode
1345      parameter(nceindef = nf_eindefine)   
1346!     coordinates out of domain
1347      parameter(ncecoord = nf_einvalcoords)
1348!     maxncdims exceeded
1349      parameter(ncemaxds = nf_emaxdims)
1350!     string match to name in use
1351      parameter(ncename = nf_enameinuse)   
1352!     attribute not found
1353      parameter(ncenoatt = nf_enotatt)
1354!     maxncattrs exceeded
1355      parameter(ncemaxat = nf_emaxatts)
1356!     not a netcdf data type
1357      parameter(ncebadty = nf_ebadtype)
1358!     invalid dimension id
1359      parameter(ncebadd = nf_ebaddim)
1360!     ncunlimited in the wrong index
1361      parameter(nceunlim = nf_eunlimpos)
1362!     maxncvars exceeded
1363      parameter(ncemaxvs = nf_emaxvars)
1364!     variable not found
1365      parameter(ncenotvr = nf_enotvar)
1366!     action prohibited on ncglobal varid
1367      parameter(nceglob = nf_eglobal)
1368!     not a netcdf file
1369      parameter(ncenotnc = nf_enotnc)
1370      parameter(ncests = nf_ests)
1371      parameter (ncentool = nf_emaxname) 
1372      parameter(ncfoobar = 32)
1373      parameter(ncsyserr = -31)
1374
1375!     
1376!     global options variable. used to determine behavior of error handler.
1377!     initialized in lerror.c
1378!     
1379      parameter(ncfatal = 1)
1380      parameter(ncverbos = 2)
1381
1382!
1383!     default fill values.  these must be the same as in the c interface.
1384!
1385      integer filbyte
1386      integer filchar
1387      integer filshort
1388      integer fillong
1389      real filfloat
1390      doubleprecision fildoub
1391
1392      parameter (filbyte = -127)
1393      parameter (filchar = 0)
1394      parameter (filshort = -32767)
1395      parameter (fillong = -2147483647)
1396      parameter (filfloat = 9.9692099683868690e+36)
1397      parameter (fildoub = 9.9692099683868690d+36)
1398
1399!     NetCDF-4.
1400!     This is part of netCDF-4. Copyright 2006, UCAR, See COPYRIGHT
1401!     file for distribution information.
1402
1403!     Netcdf version 4 fortran interface.
1404
1405!     $Id: netcdf4.inc,v 1.28 2010/05/25 13:53:02 ed Exp $
1406
1407!     New netCDF-4 types.
1408      integer nf_ubyte
1409      integer nf_ushort
1410      integer nf_uint
1411      integer nf_int64
1412      integer nf_uint64
1413      integer nf_string
1414      integer nf_vlen
1415      integer nf_opaque
1416      integer nf_enum
1417      integer nf_compound
1418
1419      parameter (nf_ubyte = 7)
1420      parameter (nf_ushort = 8)
1421      parameter (nf_uint = 9)
1422      parameter (nf_int64 = 10)
1423      parameter (nf_uint64 = 11)
1424      parameter (nf_string = 12)
1425      parameter (nf_vlen = 13)
1426      parameter (nf_opaque = 14)
1427      parameter (nf_enum = 15)
1428      parameter (nf_compound = 16)
1429
1430!     New netCDF-4 fill values.
1431      integer           nf_fill_ubyte
1432      integer           nf_fill_ushort
1433!      real              nf_fill_uint
1434!      real              nf_fill_int64
1435!      real              nf_fill_uint64
1436      parameter (nf_fill_ubyte = 255)
1437      parameter (nf_fill_ushort = 65535)
1438
1439!     New constants.
1440      integer nf_format_netcdf4
1441      parameter (nf_format_netcdf4 = 3)
1442
1443      integer nf_format_netcdf4_classic
1444      parameter (nf_format_netcdf4_classic = 4)
1445
1446      integer nf_netcdf4
1447      parameter (nf_netcdf4 = 4096)
1448
1449      integer nf_classic_model
1450      parameter (nf_classic_model = 256)
1451
1452      integer nf_chunk_seq
1453      parameter (nf_chunk_seq = 0)
1454      integer nf_chunk_sub
1455      parameter (nf_chunk_sub = 1)
1456      integer nf_chunk_sizes
1457      parameter (nf_chunk_sizes = 2)
1458
1459      integer nf_endian_native
1460      parameter (nf_endian_native = 0)
1461      integer nf_endian_little
1462      parameter (nf_endian_little = 1)
1463      integer nf_endian_big
1464      parameter (nf_endian_big = 2)
1465
1466!     For NF_DEF_VAR_CHUNKING
1467      integer nf_chunked
1468      parameter (nf_chunked = 0)
1469      integer nf_contiguous
1470      parameter (nf_contiguous = 1)
1471
1472!     For NF_DEF_VAR_FLETCHER32
1473      integer nf_nochecksum
1474      parameter (nf_nochecksum = 0)
1475      integer nf_fletcher32
1476      parameter (nf_fletcher32 = 1)
1477
1478!     For NF_DEF_VAR_DEFLATE
1479      integer nf_noshuffle
1480      parameter (nf_noshuffle = 0)
1481      integer nf_shuffle
1482      parameter (nf_shuffle = 1)
1483
1484!     For NF_DEF_VAR_SZIP
1485      integer nf_szip_ec_option_mask
1486      parameter (nf_szip_ec_option_mask = 4)
1487      integer nf_szip_nn_option_mask
1488      parameter (nf_szip_nn_option_mask = 32)
1489
1490!     For parallel I/O.
1491      integer nf_mpiio     
1492      parameter (nf_mpiio = 8192)
1493      integer nf_mpiposix
1494      parameter (nf_mpiposix = 16384)
1495      integer nf_pnetcdf
1496      parameter (nf_pnetcdf = 32768)
1497
1498!     For NF_VAR_PAR_ACCESS.
1499      integer nf_independent
1500      parameter (nf_independent = 0)
1501      integer nf_collective
1502      parameter (nf_collective = 1)
1503
1504!     New error codes.
1505      integer nf_ehdferr        ! Error at HDF5 layer.
1506      parameter (nf_ehdferr = -101)
1507      integer nf_ecantread      ! Can't read.
1508      parameter (nf_ecantread = -102)
1509      integer nf_ecantwrite     ! Can't write.
1510      parameter (nf_ecantwrite = -103)
1511      integer nf_ecantcreate    ! Can't create.
1512      parameter (nf_ecantcreate = -104)
1513      integer nf_efilemeta      ! Problem with file metadata.
1514      parameter (nf_efilemeta = -105)
1515      integer nf_edimmeta       ! Problem with dimension metadata.
1516      parameter (nf_edimmeta = -106)
1517      integer nf_eattmeta       ! Problem with attribute metadata.
1518      parameter (nf_eattmeta = -107)
1519      integer nf_evarmeta       ! Problem with variable metadata.
1520      parameter (nf_evarmeta = -108)
1521      integer nf_enocompound    ! Not a compound type.
1522      parameter (nf_enocompound = -109)
1523      integer nf_eattexists     ! Attribute already exists.
1524      parameter (nf_eattexists = -110)
1525      integer nf_enotnc4        ! Attempting netcdf-4 operation on netcdf-3 file.   
1526      parameter (nf_enotnc4 = -111)
1527      integer nf_estrictnc3     ! Attempting netcdf-4 operation on strict nc3 netcdf-4 file.   
1528      parameter (nf_estrictnc3 = -112)
1529      integer nf_enotnc3        ! Attempting netcdf-3 operation on netcdf-4 file.   
1530      parameter (nf_enotnc3 = -113)
1531      integer nf_enopar         ! Parallel operation on file opened for non-parallel access.   
1532      parameter (nf_enopar = -114)
1533      integer nf_eparinit       ! Error initializing for parallel access.   
1534      parameter (nf_eparinit = -115)
1535      integer nf_ebadgrpid      ! Bad group ID.   
1536      parameter (nf_ebadgrpid = -116)
1537      integer nf_ebadtypid      ! Bad type ID.   
1538      parameter (nf_ebadtypid = -117)
1539      integer nf_etypdefined    ! Type has already been defined and may not be edited.
1540      parameter (nf_etypdefined = -118)
1541      integer nf_ebadfield      ! Bad field ID.   
1542      parameter (nf_ebadfield = -119)
1543      integer nf_ebadclass      ! Bad class.   
1544      parameter (nf_ebadclass = -120)
1545      integer nf_emaptype       ! Mapped access for atomic types only.   
1546      parameter (nf_emaptype = -121)
1547      integer nf_elatefill      ! Attempt to define fill value when data already exists.
1548      parameter (nf_elatefill = -122)
1549      integer nf_elatedef       ! Attempt to define var properties, like deflate, after enddef.
1550      parameter (nf_elatedef = -123)
1551      integer nf_edimscale      ! Probem with HDF5 dimscales.
1552      parameter (nf_edimscale = -124)
1553      integer nf_enogrp       ! No group found.
1554      parameter (nf_enogrp = -125)
1555
1556
1557!     New functions.
1558
1559!     Parallel I/O.
1560      integer nf_create_par
1561      external nf_create_par
1562
1563      integer nf_open_par
1564      external nf_open_par
1565
1566      integer nf_var_par_access
1567      external nf_var_par_access
1568
1569!     Functions to handle groups.
1570      integer nf_inq_ncid
1571      external nf_inq_ncid
1572
1573      integer nf_inq_grps
1574      external nf_inq_grps
1575
1576      integer nf_inq_grpname
1577      external nf_inq_grpname
1578
1579      integer nf_inq_grpname_full
1580      external nf_inq_grpname_full
1581
1582      integer nf_inq_grpname_len
1583      external nf_inq_grpname_len
1584
1585      integer nf_inq_grp_parent
1586      external nf_inq_grp_parent
1587
1588      integer nf_inq_grp_ncid
1589      external nf_inq_grp_ncid
1590
1591      integer nf_inq_grp_full_ncid
1592      external nf_inq_grp_full_ncid
1593
1594      integer nf_inq_varids
1595      external nf_inq_varids
1596
1597      integer nf_inq_dimids
1598      external nf_inq_dimids
1599
1600      integer nf_def_grp
1601      external nf_def_grp
1602
1603!     New options for netCDF variables.
1604      integer nf_def_var_deflate
1605      external nf_def_var_deflate
1606
1607      integer nf_inq_var_deflate
1608      external nf_inq_var_deflate
1609
1610      integer nf_def_var_fletcher32
1611      external nf_def_var_fletcher32
1612
1613      integer nf_inq_var_fletcher32
1614      external nf_inq_var_fletcher32
1615
1616      integer nf_def_var_chunking
1617      external nf_def_var_chunking
1618
1619      integer nf_inq_var_chunking
1620      external nf_inq_var_chunking
1621
1622      integer nf_def_var_fill
1623      external nf_def_var_fill
1624
1625      integer nf_inq_var_fill
1626      external nf_inq_var_fill
1627
1628      integer nf_def_var_endian
1629      external nf_def_var_endian
1630
1631      integer nf_inq_var_endian
1632      external nf_inq_var_endian
1633
1634!     User defined types.
1635      integer nf_inq_typeids
1636      external nf_inq_typeids
1637
1638      integer nf_inq_typeid
1639      external nf_inq_typeid
1640
1641      integer nf_inq_type
1642      external nf_inq_type
1643
1644      integer nf_inq_user_type
1645      external nf_inq_user_type
1646
1647!     User defined types - compound types.
1648      integer nf_def_compound
1649      external nf_def_compound
1650
1651      integer nf_insert_compound
1652      external nf_insert_compound
1653
1654      integer nf_insert_array_compound
1655      external nf_insert_array_compound
1656
1657      integer nf_inq_compound
1658      external nf_inq_compound
1659
1660      integer nf_inq_compound_name
1661      external nf_inq_compound_name
1662
1663      integer nf_inq_compound_size
1664      external nf_inq_compound_size
1665
1666      integer nf_inq_compound_nfields
1667      external nf_inq_compound_nfields
1668
1669      integer nf_inq_compound_field
1670      external nf_inq_compound_field
1671
1672      integer nf_inq_compound_fieldname
1673      external nf_inq_compound_fieldname
1674
1675      integer nf_inq_compound_fieldindex
1676      external nf_inq_compound_fieldindex
1677
1678      integer nf_inq_compound_fieldoffset
1679      external nf_inq_compound_fieldoffset
1680
1681      integer nf_inq_compound_fieldtype
1682      external nf_inq_compound_fieldtype
1683
1684      integer nf_inq_compound_fieldndims
1685      external nf_inq_compound_fieldndims
1686
1687      integer nf_inq_compound_fielddim_sizes
1688      external nf_inq_compound_fielddim_sizes
1689
1690!     User defined types - variable length arrays.
1691      integer nf_def_vlen
1692      external nf_def_vlen
1693
1694      integer nf_inq_vlen
1695      external nf_inq_vlen
1696
1697      integer nf_free_vlen
1698      external nf_free_vlen
1699
1700!     User defined types - enums.
1701      integer nf_def_enum
1702      external nf_def_enum
1703
1704      integer nf_insert_enum
1705      external nf_insert_enum
1706
1707      integer nf_inq_enum
1708      external nf_inq_enum
1709
1710      integer nf_inq_enum_member
1711      external nf_inq_enum_member
1712
1713      integer nf_inq_enum_ident
1714      external nf_inq_enum_ident
1715
1716!     User defined types - opaque.
1717      integer nf_def_opaque
1718      external nf_def_opaque
1719
1720      integer nf_inq_opaque
1721      external nf_inq_opaque
1722
1723!     Write and read attributes of any type, including user defined
1724!     types.
1725      integer nf_put_att
1726      external nf_put_att
1727      integer nf_get_att
1728      external nf_get_att
1729
1730!     Write and read variables of any type, including user defined
1731!     types.
1732      integer nf_put_var
1733      external nf_put_var
1734      integer nf_put_var1
1735      external nf_put_var1
1736      integer nf_put_vara
1737      external nf_put_vara
1738      integer nf_put_vars
1739      external nf_put_vars
1740      integer nf_get_var
1741      external nf_get_var
1742      integer nf_get_var1
1743      external nf_get_var1
1744      integer nf_get_vara
1745      external nf_get_vara
1746      integer nf_get_vars
1747      external nf_get_vars
1748
1749!     64-bit int functions.
1750      integer nf_put_var1_int64
1751      external nf_put_var1_int64
1752      integer nf_put_vara_int64
1753      external nf_put_vara_int64
1754      integer nf_put_vars_int64
1755      external nf_put_vars_int64
1756      integer nf_put_varm_int64
1757      external nf_put_varm_int64
1758      integer nf_put_var_int64
1759      external nf_put_var_int64
1760      integer nf_get_var1_int64
1761      external nf_get_var1_int64
1762      integer nf_get_vara_int64
1763      external nf_get_vara_int64
1764      integer nf_get_vars_int64
1765      external nf_get_vars_int64
1766      integer nf_get_varm_int64
1767      external nf_get_varm_int64
1768      integer nf_get_var_int64
1769      external nf_get_var_int64
1770
1771!     For helping F77 users with VLENs.
1772      integer nf_get_vlen_element
1773      external nf_get_vlen_element
1774      integer nf_put_vlen_element
1775      external nf_put_vlen_element
1776
1777!     For dealing with file level chunk cache.
1778      integer nf_set_chunk_cache
1779      external nf_set_chunk_cache
1780      integer nf_get_chunk_cache
1781      external nf_get_chunk_cache
1782
1783!     For dealing with per variable chunk cache.
1784      integer nf_set_var_chunk_cache
1785      external nf_set_var_chunk_cache
1786      integer nf_get_var_chunk_cache
1787      external nf_get_var_chunk_cache
1788
1789! Arguments:
1790integer,intent(in) :: ngrid ! number of (horizontal) points of physics grid
1791! i.e. ngrid = 2+(jjm-1)*iim - 1/jjm
1792character(len=*),intent(in) :: name ! 'name' of the variable
1793character(len=*),intent(in) :: title ! 'long_name' attribute of the variable
1794character(len=*),intent(in) :: units ! 'units' attribute of the variable
1795integer,intent(in) :: dimpx ! dimension of the variable (3,2 or 0)
1796real,dimension(ngrid,nsoilmx),intent(in) :: px ! variable
1797! Note: nsoilmx is a parameter set in 'comsoil_h'
1798
1799! Local variables:
1800real*4,dimension(iip1,jjp1,nsoilmx) :: data3 ! to store 3D data
1801! Note iip1,jjp1 known from paramet.h; nsoilmx known from comsoil_h
1802real*4,dimension(iip1,jjp1) :: data2 ! to store 2D data
1803real*4 :: data0 ! to store 0D data
1804integer :: i,j,l ! for loops
1805integer :: ig0
1806
1807real*4,save :: date ! time counter (in elapsed days)
1808integer,save :: isample ! sample rate at which data is to be written to output
1809integer,save :: ntime=0 ! counter to internally store time steps
1810character(len=20),save :: firstname="1234567890"
1811integer,save :: zitau=0
1812
1813character(len=30) :: filename="diagsoil.nc"
1814
1815! NetCDF stuff:
1816integer :: nid ! NetCDF output file ID
1817integer :: varid ! NetCDF ID of a variable
1818integer :: ierr ! NetCDF routines return code
1819integer,dimension(4) :: id ! NetCDF IDs of the dimensions of the variable
1820integer,dimension(4) :: edges,corners
1821
1822! Added to work in parallel mode
1823real dx3_glop(klon_glo,nsoilmx)
1824real dx3_glo(iim,jjp1,nsoilmx) ! to store a global 3D data set
1825real dx2_glop(klon_glo)
1826real dx2_glo(iim,jjp1)     ! to store a global 2D (surface) data set
1827real px2(ngrid)
1828
1829! 1. Initialization step
1830if (firstname.eq."1234567890") then
1831  ! Store 'name' as 'firstname'
1832  firstname=name
1833  ! From now on, if 'name'.eq.'firstname', then it is a new time cycle
1834
1835  ! just to be sure, check that firstnom is large enough to hold nom
1836  if (len_trim(firstname).lt.len_trim(name)) then
1837    write(*,*) "writediagsoil: Error !!!"
1838    write(*,*) "   firstname string not long enough!!"
1839    write(*,*) "   increase its size to at least ",len_trim(name)
1840    stop
1841  endif
1842 
1843  ! Set output sample rate
1844  isample=ecritphy ! same as for diagfi outputs
1845  ! Note ecritphy is known from control.h
1846 
1847  ! Create output NetCDF file
1848  if (is_master) then
1849   ierr=NF_CREATE(filename,NF_CLOBBER,nid)
1850   if (ierr.ne.NF_NOERR) then
1851    write(*,*)'writediagsoil: Error, failed creating file '//trim(filename)
1852    stop
1853   endif
1854  endif ! of if (is_master)
1855
1856  ! Define dimensions and axis attributes
1857  call iniwritesoil(nid,ngrid)
1858 
1859  ! set zitau to -1 to be compatible with zitau incrementation step below
1860  zitau=-1
1861 
1862else
1863  ! If not an initialization call, simply open the NetCDF file
1864  if (is_master) then
1865   ierr=NF_OPEN(filename,NF_WRITE,nid)
1866  endif
1867endif ! of if (firstname.eq."1234567890")
1868
1869! 2. Increment local time counter, if necessary
1870if (name.eq.firstname) then
1871  ! if we run across 'firstname', then it is a new time step
1872  zitau=zitau+iphysiq
1873  ! Note iphysiq is known from control.h
1874endif
1875
1876! 3. Write data, if the time index matches the sample rate
1877if (mod(zitau+1,isample).eq.0) then
1878
1879! 3.1 If first call at this date, update 'time' variable
1880  if (name.eq.firstname) then
1881    ntime=ntime+1
1882    date=float(zitau+1)/float(day_step)
1883    ! Note: day_step is known from control.h
1884   
1885    if (is_master) then
1886     ! Get NetCDF ID for "time"
1887     ierr=NF_INQ_VARID(nid,"time",varid)
1888     ! Add the current value of date to the "time" array
1889!#ifdef 1
1890!     ierr=NF_PUT_VARA_DOUBLE(nid,varid,ntime,1,date)
1891!#else
1892     ierr=NF_PUT_VARA_REAL(nid,varid,ntime,1,date)
1893!#endif
1894     if (ierr.ne.NF_NOERR) then
1895      write(*,*)"writediagsoil: Failed writing date to time variable"
1896      stop
1897     endif
1898    endif ! of if (is_master)
1899  endif ! of if (name.eq.firstname)
1900
1901! 3.2 Write the variable to the NetCDF file
1902if (dimpx.eq.3) then ! Case of a 3D variable
1903  ! A. Recast data along 'dynamics' grid
1904  ! gather field on a "global" (without redundant longitude) array
1905  call Gather(px,dx3_glop)
1906!$OMP MASTER
1907  if (is_mpi_root) then
1908    call Grid1Dto2D_glo(dx3_glop,dx3_glo)
1909    ! copy dx3_glo() to dx3(:) and add redundant longitude
1910    data3(1:iim,:,:)=dx3_glo(1:iim,:,:)
1911    data3(iip1,:,:)=data3(1,:,:)
1912  endif
1913!$OMP END MASTER
1914!$OMP BARRIER
1915 
1916  ! B. Write (append) the variable to the NetCDF file
1917  if (is_master) then
1918  ! B.1. Get the ID of the variable
1919  ierr=NF_INQ_VARID(nid,name,varid)
1920  if (ierr.ne.NF_NOERR) then
1921    ! If we failed geting the variable's ID, we assume it is because
1922    ! the variable doesn't exist yet and must be created.
1923    ! Start by obtaining corresponding dimensions IDs
1924    ierr=NF_INQ_DIMID(nid,"longitude",id(1))
1925    ierr=NF_INQ_DIMID(nid,"latitude",id(2))
1926    ierr=NF_INQ_DIMID(nid,"depth",id(3))
1927    ierr=NF_INQ_DIMID(nid,"time",id(4))
1928    ! Tell the world about it
1929    write(*,*) "====================="
1930    write(*,*) "writediagsoil: creating variable "//trim(name)
1931    call def_var(nid,name,title,units,4,id,varid,ierr)
1932  endif ! of if (ierr.ne.NF_NOERR)
1933 
1934  ! B.2. Prepare things to be able to write/append the variable
1935  corners(1)=1
1936  corners(2)=1
1937  corners(3)=1
1938  corners(4)=ntime
1939 
1940  edges(1)=iip1
1941  edges(2)=jjp1
1942  edges(3)=nsoilmx
1943  edges(4)=1
1944 
1945  ! B.3. Write the slab of data
1946!#ifdef 1
1947!  ierr=NF_PUT_VARA_DOUBLE(nid,varid,corners,edges,data3)
1948!#else
1949  ierr=NF_PUT_VARA_REAL(nid,varid,corners,edges,data3)
1950!#endif
1951  if (ierr.ne.NF_NOERR) then
1952    write(*,*) "writediagsoil: Error: Failed writing "//trim(name)//&
1953               " to file "//trim(filename)//" at time",date
1954  endif
1955  endif ! of if (is_master)
1956
1957elseif (dimpx.eq.2) then ! Case of a 2D variable
1958
1959  ! A. Recast data along 'dynamics' grid
1960  ! gather field on a "global" (without redundant longitude) array
1961  px2(:)=px(:,1)
1962  call Gather(px2,dx2_glop)
1963!$OMP MASTER
1964  if (is_mpi_root) then
1965    call Grid1Dto2D_glo(dx2_glop,dx2_glo)
1966    ! copy dx3_glo() to dx3(:) and add redundant longitude
1967    data2(1:iim,:)=dx2_glo(1:iim,:)
1968    data2(iip1,:)=data2(1,:)
1969  endif
1970!$OMP END MASTER
1971!$OMP BARRIER
1972
1973  ! B. Write (append) the variable to the NetCDF file
1974  if (is_master) then
1975  ! B.1. Get the ID of the variable
1976  ierr=NF_INQ_VARID(nid,name,varid)
1977  if (ierr.ne.NF_NOERR) then
1978    ! If we failed geting the variable's ID, we assume it is because
1979    ! the variable doesn't exist yet and must be created.
1980    ! Start by obtaining corresponding dimensions IDs
1981    ierr=NF_INQ_DIMID(nid,"longitude",id(1))
1982    ierr=NF_INQ_DIMID(nid,"latitude",id(2))
1983    ierr=NF_INQ_DIMID(nid,"time",id(3))
1984    ! Tell the world about it
1985    write(*,*) "====================="
1986    write(*,*) "writediagsoil: creating variable "//trim(name)
1987    call def_var(nid,name,title,units,3,id,varid,ierr)
1988  endif ! of if (ierr.ne.NF_NOERR)
1989
1990  ! B.2. Prepare things to be able to write/append the variable
1991  corners(1)=1
1992  corners(2)=1
1993  corners(3)=ntime
1994 
1995  edges(1)=iip1
1996  edges(2)=jjp1
1997  edges(3)=1
1998 
1999  ! B.3. Write the slab of data
2000!#ifdef 1
2001!  ierr=NF_PUT_VARA_DOUBLE(nid,varid,corners,edges,data2)
2002!#else
2003  ierr=NF_PUT_VARA_REAL(nid,varid,corners,edges,data2)
2004!#endif
2005  if (ierr.ne.NF_NOERR) then
2006    write(*,*) "writediagsoil: Error: Failed writing "//trim(name)//&
2007               " to file "//trim(filename)//" at time",date
2008  endif
2009  endif ! of if (is_master)
2010
2011elseif (dimpx.eq.0) then ! Case of a 0D variable
2012  write(*,*) "writediagsoil: dimps==0 case not implemented in // mode!!"
2013  stop
2014  ! A. Copy data value
2015  data0=px(1,1)
2016
2017  ! B. Write (append) the variable to the NetCDF file
2018  ! B.1. Get the ID of the variable
2019  ierr=NF_INQ_VARID(nid,name,varid)
2020  if (ierr.ne.NF_NOERR) then
2021    ! If we failed geting the variable's ID, we assume it is because
2022    ! the variable doesn't exist yet and must be created.
2023    ! Start by obtaining corresponding dimensions IDs
2024    ierr=NF_INQ_DIMID(nid,"time",id(1))
2025    ! Tell the world about it
2026    write(*,*) "====================="
2027    write(*,*) "writediagsoil: creating variable "//trim(name)
2028    call def_var(nid,name,title,units,1,id,varid,ierr)
2029  endif ! of if (ierr.ne.NF_NOERR)
2030
2031  ! B.2. Prepare things to be able to write/append the variable
2032  corners(1)=ntime
2033 
2034  edges(1)=1
2035
2036  ! B.3. Write the data
2037!#ifdef 1
2038!  ierr=NF_PUT_VARA_DOUBLE(nid,varid,corners,edges,data0)
2039!#else
2040  ierr=NF_PUT_VARA_REAL(nid,varid,corners,edges,data0)
2041!#endif
2042  if (ierr.ne.NF_NOERR) then
2043    write(*,*) "writediagsoil: Error: Failed writing "//trim(name)//&
2044               " to file "//trim(filename)//" at time",date
2045  endif
2046
2047endif ! of if (dimpx.eq.3) elseif (dimpx.eq.2) ...
2048endif ! of if (mod(zitau+1,isample).eq.0)
2049
2050! 4. Close the NetCDF file
2051if (is_master) then
2052  ierr=NF_CLOSE(nid)
2053endif
2054
2055end subroutine writediagsoil
Note: See TracBrowser for help on using the repository browser.