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

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