source: codes/icosagcm/branches/SATURN_DYNAMICO/LMDZ.COMMON/config/ppsrc/phys/writediagspecIR.f @ 224

Last change on this file since 224 was 224, checked in by ymipsl, 10 years ago
File size: 78.8 KB
Line 
1      subroutine writediagspecIR(ngrid,nom,titre,unite,dimpx,px)
2
3!  Ecriture de variables diagnostiques au choix dans la physique
4!  dans un fichier NetCDF nomme  'diagfi'. Ces variables peuvent etre
5!  3d (ex : temperature), 2d (ex : temperature de surface), ou
6!  0d (pour un scalaire qui ne depend que du temps : ex : la longitude
7!  solaire)
8!  Dans la version 2000, la periode d'ecriture est celle de
9!  "ecritphy " regle dans le fichier de controle de run :  run.def
10!
11!    writediagfi peut etre appele de n'importe quelle subroutine
12!    de la physique, plusieurs fois. L'initialisation et la creation du
13!    fichier se fait au tout premier appel.
14!
15! WARNING : les variables dynamique (u,v,t,q,ps)
16!  sauvees par writediagfi avec une
17! date donnee sont legerement differentes que dans le fichier histoire car
18! on ne leur a pas encore ajoute de la dissipation et de la physique !!!
19! IL est  RECOMMANDE d'ajouter les tendance physique a ces variables
20! avant l'ecriture dans diagfi (cf. physiq.F)
21
22!
23!  parametres (input) :
24!  ----------
25!      ngrid : nombres de point ou est calcule la physique
26!                (ngrid = 2+(jjm-1)*iim - 1/jjm)
27!                 (= nlon ou klon dans la physique terrestre)
28!     
29!      unit : unite logique du fichier de sortie (toujours la meme)
30!      nom  : nom de la variable a sortir (chaine de caracteres)
31!      titre: titre de la variable (chaine de caracteres)
32!      unite : unite de la variable (chaine de caracteres)
33!      px : variable a sortir (real 0, 2, ou 3d)
34!      dimpx : dimension de px : 0, 2, ou 3 dimensions
35!
36!=================================================================
37!
38!      This is a modified version that accepts spectrally varying input
39!      RW (2010)
40!
41!=================================================================
42 
43! Addition by RW (2010) to allow OLR to be saved in .nc format
44      use radinc_h, only : L_NSPECTI
45!      USE surfdat_h, only : phisfi
46
47      use mod_phys_lmdz_para, only : is_mpi_root, is_master, gather
48      use mod_grid_phy_lmdz, only : klon_glo, Grid1Dto2D_glo
49
50      use control_mod, only: ecritphy, iphysiq, day_step
51
52      implicit none
53
54! Commons
55!-----------------------------------------------------------------------
56!   INCLUDE 'dimensions.h'
57!
58!   dimensions.h contient les dimensions du modele
59!   ndm est tel que iim=2**ndm
60!-----------------------------------------------------------------------
61
62      INTEGER iim,jjm,llm,ndm
63
64      PARAMETER (iim= 128,jjm=96,llm=64,ndm=1)
65
66!-----------------------------------------------------------------------
67!-----------------------------------------------------------------------
68!   INCLUDE 'dimphys.h'
69
70! ngridmx : number of horizontal grid points
71! note: the -1/jjm term will be 0; unless jj=1
72      integer, parameter :: ngridmx = (2+(jjm-1)*iim - 1/jjm)   
73! nlayermx : number of atmospheric layers
74      integer, parameter :: nlayermx = llm 
75! nsoilmx : number of subterranean layers ! nsoilmx is now in comsoil_h
76      !integer, parameter :: nsoilmx = 4 ! for a test
77      !integer, parameter :: nsoilmx = 18 ! for z1=0.0002 m, depth = 18 m => mars case
78      !integer, parameter :: nsoilmx = 13 ! for z1=0.03 m, depth = 104.8 m => earth case
79!-----------------------------------------------------------------------
80
81!
82! $Header$
83!
84!
85!  ATTENTION!!!!: ce fichier include est compatible format fixe/format libre
86!                 veillez  n'utiliser que des ! pour les commentaires
87!                 et  bien positionner les & des lignes de continuation
88!                 (les placer en colonne 6 et en colonne 73)
89!
90!
91!-----------------------------------------------------------------------
92!   INCLUDE 'paramet.h'
93
94      INTEGER  iip1,iip2,iip3,jjp1,llmp1,llmp2,llmm1
95      INTEGER  kftd,ip1jm,ip1jmp1,ip1jmi1,ijp1llm
96      INTEGER  ijmllm,mvar
97      INTEGER jcfil,jcfllm
98
99      PARAMETER( iip1= iim+1,iip2=iim+2,iip3=iim+3                       &
100     &    ,jjp1=jjm+1-1/jjm)
101      PARAMETER( llmp1 = llm+1,  llmp2 = llm+2, llmm1 = llm-1 )
102      PARAMETER( kftd  = iim/2 -ndm )
103      PARAMETER( ip1jm  = iip1*jjm,  ip1jmp1= iip1*jjp1 )
104      PARAMETER( ip1jmi1= ip1jm - iip1 )
105      PARAMETER( ijp1llm= ip1jmp1 * llm, ijmllm= ip1jm * llm )
106      PARAMETER( mvar= ip1jmp1*( 2*llm+1) + ijmllm )
107      PARAMETER( jcfil=jjm/2+5, jcfllm=jcfil*llm )
108
109!-----------------------------------------------------------------------
110!#include "control.h"
111!
112! $Id: comvert.h 1654 2012-09-24 15:07:18Z aslmd $
113!
114!-----------------------------------------------------------------------
115!   INCLUDE 'comvert.h'
116
117      COMMON/comvertr/ap(llm+1),bp(llm+1),presnivs(llm),dpres(llm),     &
118     &               pa,preff,nivsigs(llm),nivsig(llm+1),               &
119     &               aps(llm),bps(llm),scaleheight,pseudoalt(llm)
120
121      common/comverti/disvert_type, pressure_exner
122
123      real ap     ! hybrid pressure contribution at interlayers
124      real bp     ! hybrid sigma contribution at interlayer
125      real presnivs ! (reference) pressure at mid-layers
126      real dpres
127      real pa     ! reference pressure (Pa) at which hybrid coordinates
128                  ! become purely pressure
129      real preff  ! reference surface pressure (Pa)
130      real nivsigs
131      real nivsig
132      real aps    ! hybrid pressure contribution at mid-layers
133      real bps    ! hybrid sigma contribution at mid-layers
134      real scaleheight ! atmospheric (reference) scale height (km)
135      real pseudoalt ! pseudo-altitude of model levels (km), based on presnivs(),
136                     ! preff and scaleheight
137
138      integer disvert_type ! type of vertical discretization:
139                           ! 1: Earth (default for planet_type==earth),
140                           !     automatic generation
141                           ! 2: Planets (default for planet_type!=earth),
142                           !     using 'z2sig.def' (or 'esasig.def) file
143
144      logical pressure_exner
145!     compute pressure inside layers using Exner function, else use mean
146!     of pressure values at interfaces
147
148 !-----------------------------------------------------------------------
149!
150! $Header$
151!
152!CDK comgeom
153      COMMON/comgeom/                                                   &
154     & cu(ip1jmp1),cv(ip1jm),unscu2(ip1jmp1),unscv2(ip1jm),             &
155     & aire(ip1jmp1),airesurg(ip1jmp1),aireu(ip1jmp1),                  &
156     & airev(ip1jm),unsaire(ip1jmp1),apoln,apols,                       &
157     & unsairez(ip1jm),airuscv2(ip1jm),airvscu2(ip1jm),                 &
158     & aireij1(ip1jmp1),aireij2(ip1jmp1),aireij3(ip1jmp1),              &
159     & aireij4(ip1jmp1),alpha1(ip1jmp1),alpha2(ip1jmp1),                &
160     & alpha3(ip1jmp1),alpha4(ip1jmp1),alpha1p2(ip1jmp1),               &
161     & alpha1p4(ip1jmp1),alpha2p3(ip1jmp1),alpha3p4(ip1jmp1),           &
162     & fext(ip1jm),constang(ip1jmp1),rlatu(jjp1),rlatv(jjm),            &
163     & rlonu(iip1),rlonv(iip1),cuvsurcv(ip1jm),cvsurcuv(ip1jm),         &
164     & cvusurcu(ip1jmp1),cusurcvu(ip1jmp1),cuvscvgam1(ip1jm),           &
165     & cuvscvgam2(ip1jm),cvuscugam1(ip1jmp1),                           &
166     & cvuscugam2(ip1jmp1),cvscuvgam(ip1jm),cuscvugam(ip1jmp1),         &
167     & unsapolnga1,unsapolnga2,unsapolsga1,unsapolsga2,                 &
168     & unsair_gam1(ip1jmp1),unsair_gam2(ip1jmp1),unsairz_gam(ip1jm),    &
169     & aivscu2gam(ip1jm),aiuscv2gam(ip1jm),xprimu(iip1),xprimv(iip1)
170
171!
172        REAL                                                            &
173     & cu,cv,unscu2,unscv2,aire,airesurg,aireu,airev,unsaire,apoln     ,&
174     & apols,unsairez,airuscv2,airvscu2,aireij1,aireij2,aireij3,aireij4,&
175     & alpha1,alpha2,alpha3,alpha4,alpha1p2,alpha1p4,alpha2p3,alpha3p4 ,&
176     & fext,constang,rlatu,rlatv,rlonu,rlonv,cuvscvgam1,cuvscvgam2     ,&
177     & cvuscugam1,cvuscugam2,cvscuvgam,cuscvugam,unsapolnga1,unsapolnga2&
178     & ,unsapolsga1,unsapolsga2,unsair_gam1,unsair_gam2,unsairz_gam    ,&
179     & aivscu2gam ,aiuscv2gam,cuvsurcv,cvsurcuv,cvusurcu,cusurcvu,xprimu&
180     & , xprimv
181!
182!     NetCDF-3.
183!
184! netcdf version 3 fortran interface:
185!
186
187!
188! external netcdf data types:
189!
190      integer nf_byte
191      integer nf_int1
192      integer nf_char
193      integer nf_short
194      integer nf_int2
195      integer nf_int
196      integer nf_float
197      integer nf_real
198      integer nf_double
199
200      parameter (nf_byte = 1)
201      parameter (nf_int1 = nf_byte)
202      parameter (nf_char = 2)
203      parameter (nf_short = 3)
204      parameter (nf_int2 = nf_short)
205      parameter (nf_int = 4)
206      parameter (nf_float = 5)
207      parameter (nf_real = nf_float)
208      parameter (nf_double = 6)
209
210!
211! default fill values:
212!
213      integer           nf_fill_byte
214      integer           nf_fill_int1
215      integer           nf_fill_char
216      integer           nf_fill_short
217      integer           nf_fill_int2
218      integer           nf_fill_int
219      real              nf_fill_float
220      real              nf_fill_real
221      doubleprecision   nf_fill_double
222
223      parameter (nf_fill_byte = -127)
224      parameter (nf_fill_int1 = nf_fill_byte)
225      parameter (nf_fill_char = 0)
226      parameter (nf_fill_short = -32767)
227      parameter (nf_fill_int2 = nf_fill_short)
228      parameter (nf_fill_int = -2147483647)
229      parameter (nf_fill_float = 9.9692099683868690e+36)
230      parameter (nf_fill_real = nf_fill_float)
231      parameter (nf_fill_double = 9.9692099683868690d+36)
232
233!
234! mode flags for opening and creating a netcdf dataset:
235!
236      integer nf_nowrite
237      integer nf_write
238      integer nf_clobber
239      integer nf_noclobber
240      integer nf_fill
241      integer nf_nofill
242      integer nf_lock
243      integer nf_share
244      integer nf_64bit_offset
245      integer nf_sizehint_default
246      integer nf_align_chunk
247      integer nf_format_classic
248      integer nf_format_64bit
249
250      parameter (nf_nowrite = 0)
251      parameter (nf_write = 1)
252      parameter (nf_clobber = 0)
253      parameter (nf_noclobber = 4)
254      parameter (nf_fill = 0)
255      parameter (nf_nofill = 256)
256      parameter (nf_lock = 1024)
257      parameter (nf_share = 2048)
258      parameter (nf_64bit_offset = 512)
259      parameter (nf_sizehint_default = 0)
260      parameter (nf_align_chunk = -1)
261      parameter (nf_format_classic = 1)
262      parameter (nf_format_64bit = 2)
263
264!
265! size argument for defining an unlimited dimension:
266!
267      integer nf_unlimited
268      parameter (nf_unlimited = 0)
269
270!
271! global attribute id:
272!
273      integer nf_global
274      parameter (nf_global = 0)
275
276!
277! implementation limits:
278!
279      integer nf_max_dims
280      integer nf_max_attrs
281      integer nf_max_vars
282      integer nf_max_name
283      integer nf_max_var_dims
284
285      parameter (nf_max_dims = 1024)
286      parameter (nf_max_attrs = 8192)
287      parameter (nf_max_vars = 8192)
288      parameter (nf_max_name = 256)
289      parameter (nf_max_var_dims = nf_max_dims)
290
291!
292! error codes:
293!
294      integer nf_noerr
295      integer nf_ebadid
296      integer nf_eexist
297      integer nf_einval
298      integer nf_eperm
299      integer nf_enotindefine
300      integer nf_eindefine
301      integer nf_einvalcoords
302      integer nf_emaxdims
303      integer nf_enameinuse
304      integer nf_enotatt
305      integer nf_emaxatts
306      integer nf_ebadtype
307      integer nf_ebaddim
308      integer nf_eunlimpos
309      integer nf_emaxvars
310      integer nf_enotvar
311      integer nf_eglobal
312      integer nf_enotnc
313      integer nf_ests
314      integer nf_emaxname
315      integer nf_eunlimit
316      integer nf_enorecvars
317      integer nf_echar
318      integer nf_eedge
319      integer nf_estride
320      integer nf_ebadname
321      integer nf_erange
322      integer nf_enomem
323      integer nf_evarsize
324      integer nf_edimsize
325      integer nf_etrunc
326
327      parameter (nf_noerr = 0)
328      parameter (nf_ebadid = -33)
329      parameter (nf_eexist = -35)
330      parameter (nf_einval = -36)
331      parameter (nf_eperm = -37)
332      parameter (nf_enotindefine = -38)
333      parameter (nf_eindefine = -39)
334      parameter (nf_einvalcoords = -40)
335      parameter (nf_emaxdims = -41)
336      parameter (nf_enameinuse = -42)
337      parameter (nf_enotatt = -43)
338      parameter (nf_emaxatts = -44)
339      parameter (nf_ebadtype = -45)
340      parameter (nf_ebaddim = -46)
341      parameter (nf_eunlimpos = -47)
342      parameter (nf_emaxvars = -48)
343      parameter (nf_enotvar = -49)
344      parameter (nf_eglobal = -50)
345      parameter (nf_enotnc = -51)
346      parameter (nf_ests = -52)
347      parameter (nf_emaxname = -53)
348      parameter (nf_eunlimit = -54)
349      parameter (nf_enorecvars = -55)
350      parameter (nf_echar = -56)
351      parameter (nf_eedge = -57)
352      parameter (nf_estride = -58)
353      parameter (nf_ebadname = -59)
354      parameter (nf_erange = -60)
355      parameter (nf_enomem = -61)
356      parameter (nf_evarsize = -62)
357      parameter (nf_edimsize = -63)
358      parameter (nf_etrunc = -64)
359!
360! error handling modes:
361!
362      integer  nf_fatal
363      integer nf_verbose
364
365      parameter (nf_fatal = 1)
366      parameter (nf_verbose = 2)
367
368!
369! miscellaneous routines:
370!
371      character*80   nf_inq_libvers
372      external       nf_inq_libvers
373
374      character*80   nf_strerror
375!                         (integer             ncerr)
376      external       nf_strerror
377
378      logical        nf_issyserr
379!                         (integer             ncerr)
380      external       nf_issyserr
381
382!
383! control routines:
384!
385      integer         nf_inq_base_pe
386!                         (integer             ncid,
387!                          integer             pe)
388      external        nf_inq_base_pe
389
390      integer         nf_set_base_pe
391!                         (integer             ncid,
392!                          integer             pe)
393      external        nf_set_base_pe
394
395      integer         nf_create
396!                         (character*(*)       path,
397!                          integer             cmode,
398!                          integer             ncid)
399      external        nf_create
400
401      integer         nf__create
402!                         (character*(*)       path,
403!                          integer             cmode,
404!                          integer             initialsz,
405!                          integer             chunksizehint,
406!                          integer             ncid)
407      external        nf__create
408
409      integer         nf__create_mp
410!                         (character*(*)       path,
411!                          integer             cmode,
412!                          integer             initialsz,
413!                          integer             basepe,
414!                          integer             chunksizehint,
415!                          integer             ncid)
416      external        nf__create_mp
417
418      integer         nf_open
419!                         (character*(*)       path,
420!                          integer             mode,
421!                          integer             ncid)
422      external        nf_open
423
424      integer         nf__open
425!                         (character*(*)       path,
426!                          integer             mode,
427!                          integer             chunksizehint,
428!                          integer             ncid)
429      external        nf__open
430
431      integer         nf__open_mp
432!                         (character*(*)       path,
433!                          integer             mode,
434!                          integer             basepe,
435!                          integer             chunksizehint,
436!                          integer             ncid)
437      external        nf__open_mp
438
439      integer         nf_set_fill
440!                         (integer             ncid,
441!                          integer             fillmode,
442!                          integer             old_mode)
443      external        nf_set_fill
444
445      integer         nf_set_default_format
446!                          (integer             format,
447!                          integer             old_format)
448      external        nf_set_default_format
449
450      integer         nf_redef
451!                         (integer             ncid)
452      external        nf_redef
453
454      integer         nf_enddef
455!                         (integer             ncid)
456      external        nf_enddef
457
458      integer         nf__enddef
459!                         (integer             ncid,
460!                          integer             h_minfree,
461!                          integer             v_align,
462!                          integer             v_minfree,
463!                          integer             r_align)
464      external        nf__enddef
465
466      integer         nf_sync
467!                         (integer             ncid)
468      external        nf_sync
469
470      integer         nf_abort
471!                         (integer             ncid)
472      external        nf_abort
473
474      integer         nf_close
475!                         (integer             ncid)
476      external        nf_close
477
478      integer         nf_delete
479!                         (character*(*)       ncid)
480      external        nf_delete
481
482!
483! general inquiry routines:
484!
485
486      integer         nf_inq
487!                         (integer             ncid,
488!                          integer             ndims,
489!                          integer             nvars,
490!                          integer             ngatts,
491!                          integer             unlimdimid)
492      external        nf_inq
493
494      integer         nf_inq_ndims
495!                         (integer             ncid,
496!                          integer             ndims)
497      external        nf_inq_ndims
498
499      integer         nf_inq_nvars
500!                         (integer             ncid,
501!                          integer             nvars)
502      external        nf_inq_nvars
503
504      integer         nf_inq_natts
505!                         (integer             ncid,
506!                          integer             ngatts)
507      external        nf_inq_natts
508
509      integer         nf_inq_unlimdim
510!                         (integer             ncid,
511!                          integer             unlimdimid)
512      external        nf_inq_unlimdim
513
514      integer         nf_inq_format
515!                         (integer             ncid,
516!                          integer             format)
517      external        nf_inq_format
518
519!
520! dimension routines:
521!
522
523      integer         nf_def_dim
524!                         (integer             ncid,
525!                          character(*)        name,
526!                          integer             len,
527!                          integer             dimid)
528      external        nf_def_dim
529
530      integer         nf_inq_dimid
531!                         (integer             ncid,
532!                          character(*)        name,
533!                          integer             dimid)
534      external        nf_inq_dimid
535
536      integer         nf_inq_dim
537!                         (integer             ncid,
538!                          integer             dimid,
539!                          character(*)        name,
540!                          integer             len)
541      external        nf_inq_dim
542
543      integer         nf_inq_dimname
544!                         (integer             ncid,
545!                          integer             dimid,
546!                          character(*)        name)
547      external        nf_inq_dimname
548
549      integer         nf_inq_dimlen
550!                         (integer             ncid,
551!                          integer             dimid,
552!                          integer             len)
553      external        nf_inq_dimlen
554
555      integer         nf_rename_dim
556!                         (integer             ncid,
557!                          integer             dimid,
558!                          character(*)        name)
559      external        nf_rename_dim
560
561!
562! general attribute routines:
563!
564
565      integer         nf_inq_att
566!                         (integer             ncid,
567!                          integer             varid,
568!                          character(*)        name,
569!                          integer             xtype,
570!                          integer             len)
571      external        nf_inq_att
572
573      integer         nf_inq_attid
574!                         (integer             ncid,
575!                          integer             varid,
576!                          character(*)        name,
577!                          integer             attnum)
578      external        nf_inq_attid
579
580      integer         nf_inq_atttype
581!                         (integer             ncid,
582!                          integer             varid,
583!                          character(*)        name,
584!                          integer             xtype)
585      external        nf_inq_atttype
586
587      integer         nf_inq_attlen
588!                         (integer             ncid,
589!                          integer             varid,
590!                          character(*)        name,
591!                          integer             len)
592      external        nf_inq_attlen
593
594      integer         nf_inq_attname
595!                         (integer             ncid,
596!                          integer             varid,
597!                          integer             attnum,
598!                          character(*)        name)
599      external        nf_inq_attname
600
601      integer         nf_copy_att
602!                         (integer             ncid_in,
603!                          integer             varid_in,
604!                          character(*)        name,
605!                          integer             ncid_out,
606!                          integer             varid_out)
607      external        nf_copy_att
608
609      integer         nf_rename_att
610!                         (integer             ncid,
611!                          integer             varid,
612!                          character(*)        curname,
613!                          character(*)        newname)
614      external        nf_rename_att
615
616      integer         nf_del_att
617!                         (integer             ncid,
618!                          integer             varid,
619!                          character(*)        name)
620      external        nf_del_att
621
622!
623! attribute put/get routines:
624!
625
626      integer         nf_put_att_text
627!                         (integer             ncid,
628!                          integer             varid,
629!                          character(*)        name,
630!                          integer             len,
631!                          character(*)        text)
632      external        nf_put_att_text
633
634      integer         nf_get_att_text
635!                         (integer             ncid,
636!                          integer             varid,
637!                          character(*)        name,
638!                          character(*)        text)
639      external        nf_get_att_text
640
641      integer         nf_put_att_int1
642!                         (integer             ncid,
643!                          integer             varid,
644!                          character(*)        name,
645!                          integer             xtype,
646!                          integer             len,
647!                          nf_int1_t           i1vals(1))
648      external        nf_put_att_int1
649
650      integer         nf_get_att_int1
651!                         (integer             ncid,
652!                          integer             varid,
653!                          character(*)        name,
654!                          nf_int1_t           i1vals(1))
655      external        nf_get_att_int1
656
657      integer         nf_put_att_int2
658!                         (integer             ncid,
659!                          integer             varid,
660!                          character(*)        name,
661!                          integer             xtype,
662!                          integer             len,
663!                          nf_int2_t           i2vals(1))
664      external        nf_put_att_int2
665
666      integer         nf_get_att_int2
667!                         (integer             ncid,
668!                          integer             varid,
669!                          character(*)        name,
670!                          nf_int2_t           i2vals(1))
671      external        nf_get_att_int2
672
673      integer         nf_put_att_int
674!                         (integer             ncid,
675!                          integer             varid,
676!                          character(*)        name,
677!                          integer             xtype,
678!                          integer             len,
679!                          integer             ivals(1))
680      external        nf_put_att_int
681
682      integer         nf_get_att_int
683!                         (integer             ncid,
684!                          integer             varid,
685!                          character(*)        name,
686!                          integer             ivals(1))
687      external        nf_get_att_int
688
689      integer         nf_put_att_real
690!                         (integer             ncid,
691!                          integer             varid,
692!                          character(*)        name,
693!                          integer             xtype,
694!                          integer             len,
695!                          real                rvals(1))
696      external        nf_put_att_real
697
698      integer         nf_get_att_real
699!                         (integer             ncid,
700!                          integer             varid,
701!                          character(*)        name,
702!                          real                rvals(1))
703      external        nf_get_att_real
704
705      integer         nf_put_att_double
706!                         (integer             ncid,
707!                          integer             varid,
708!                          character(*)        name,
709!                          integer             xtype,
710!                          integer             len,
711!                          double              dvals(1))
712      external        nf_put_att_double
713
714      integer         nf_get_att_double
715!                         (integer             ncid,
716!                          integer             varid,
717!                          character(*)        name,
718!                          double              dvals(1))
719      external        nf_get_att_double
720
721!
722! general variable routines:
723!
724
725      integer         nf_def_var
726!                         (integer             ncid,
727!                          character(*)        name,
728!                          integer             datatype,
729!                          integer             ndims,
730!                          integer             dimids(1),
731!                          integer             varid)
732      external        nf_def_var
733
734      integer         nf_inq_var
735!                         (integer             ncid,
736!                          integer             varid,
737!                          character(*)        name,
738!                          integer             datatype,
739!                          integer             ndims,
740!                          integer             dimids(1),
741!                          integer             natts)
742      external        nf_inq_var
743
744      integer         nf_inq_varid
745!                         (integer             ncid,
746!                          character(*)        name,
747!                          integer             varid)
748      external        nf_inq_varid
749
750      integer         nf_inq_varname
751!                         (integer             ncid,
752!                          integer             varid,
753!                          character(*)        name)
754      external        nf_inq_varname
755
756      integer         nf_inq_vartype
757!                         (integer             ncid,
758!                          integer             varid,
759!                          integer             xtype)
760      external        nf_inq_vartype
761
762      integer         nf_inq_varndims
763!                         (integer             ncid,
764!                          integer             varid,
765!                          integer             ndims)
766      external        nf_inq_varndims
767
768      integer         nf_inq_vardimid
769!                         (integer             ncid,
770!                          integer             varid,
771!                          integer             dimids(1))
772      external        nf_inq_vardimid
773
774      integer         nf_inq_varnatts
775!                         (integer             ncid,
776!                          integer             varid,
777!                          integer             natts)
778      external        nf_inq_varnatts
779
780      integer         nf_rename_var
781!                         (integer             ncid,
782!                          integer             varid,
783!                          character(*)        name)
784      external        nf_rename_var
785
786      integer         nf_copy_var
787!                         (integer             ncid_in,
788!                          integer             varid,
789!                          integer             ncid_out)
790      external        nf_copy_var
791
792!
793! entire variable put/get routines:
794!
795
796      integer         nf_put_var_text
797!                         (integer             ncid,
798!                          integer             varid,
799!                          character(*)        text)
800      external        nf_put_var_text
801
802      integer         nf_get_var_text
803!                         (integer             ncid,
804!                          integer             varid,
805!                          character(*)        text)
806      external        nf_get_var_text
807
808      integer         nf_put_var_int1
809!                         (integer             ncid,
810!                          integer             varid,
811!                          nf_int1_t           i1vals(1))
812      external        nf_put_var_int1
813
814      integer         nf_get_var_int1
815!                         (integer             ncid,
816!                          integer             varid,
817!                          nf_int1_t           i1vals(1))
818      external        nf_get_var_int1
819
820      integer         nf_put_var_int2
821!                         (integer             ncid,
822!                          integer             varid,
823!                          nf_int2_t           i2vals(1))
824      external        nf_put_var_int2
825
826      integer         nf_get_var_int2
827!                         (integer             ncid,
828!                          integer             varid,
829!                          nf_int2_t           i2vals(1))
830      external        nf_get_var_int2
831
832      integer         nf_put_var_int
833!                         (integer             ncid,
834!                          integer             varid,
835!                          integer             ivals(1))
836      external        nf_put_var_int
837
838      integer         nf_get_var_int
839!                         (integer             ncid,
840!                          integer             varid,
841!                          integer             ivals(1))
842      external        nf_get_var_int
843
844      integer         nf_put_var_real
845!                         (integer             ncid,
846!                          integer             varid,
847!                          real                rvals(1))
848      external        nf_put_var_real
849
850      integer         nf_get_var_real
851!                         (integer             ncid,
852!                          integer             varid,
853!                          real                rvals(1))
854      external        nf_get_var_real
855
856      integer         nf_put_var_double
857!                         (integer             ncid,
858!                          integer             varid,
859!                          doubleprecision     dvals(1))
860      external        nf_put_var_double
861
862      integer         nf_get_var_double
863!                         (integer             ncid,
864!                          integer             varid,
865!                          doubleprecision     dvals(1))
866      external        nf_get_var_double
867
868!
869! single variable put/get routines:
870!
871
872      integer         nf_put_var1_text
873!                         (integer             ncid,
874!                          integer             varid,
875!                          integer             index(1),
876!                          character*1         text)
877      external        nf_put_var1_text
878
879      integer         nf_get_var1_text
880!                         (integer             ncid,
881!                          integer             varid,
882!                          integer             index(1),
883!                          character*1         text)
884      external        nf_get_var1_text
885
886      integer         nf_put_var1_int1
887!                         (integer             ncid,
888!                          integer             varid,
889!                          integer             index(1),
890!                          nf_int1_t           i1val)
891      external        nf_put_var1_int1
892
893      integer         nf_get_var1_int1
894!                         (integer             ncid,
895!                          integer             varid,
896!                          integer             index(1),
897!                          nf_int1_t           i1val)
898      external        nf_get_var1_int1
899
900      integer         nf_put_var1_int2
901!                         (integer             ncid,
902!                          integer             varid,
903!                          integer             index(1),
904!                          nf_int2_t           i2val)
905      external        nf_put_var1_int2
906
907      integer         nf_get_var1_int2
908!                         (integer             ncid,
909!                          integer             varid,
910!                          integer             index(1),
911!                          nf_int2_t           i2val)
912      external        nf_get_var1_int2
913
914      integer         nf_put_var1_int
915!                         (integer             ncid,
916!                          integer             varid,
917!                          integer             index(1),
918!                          integer             ival)
919      external        nf_put_var1_int
920
921      integer         nf_get_var1_int
922!                         (integer             ncid,
923!                          integer             varid,
924!                          integer             index(1),
925!                          integer             ival)
926      external        nf_get_var1_int
927
928      integer         nf_put_var1_real
929!                         (integer             ncid,
930!                          integer             varid,
931!                          integer             index(1),
932!                          real                rval)
933      external        nf_put_var1_real
934
935      integer         nf_get_var1_real
936!                         (integer             ncid,
937!                          integer             varid,
938!                          integer             index(1),
939!                          real                rval)
940      external        nf_get_var1_real
941
942      integer         nf_put_var1_double
943!                         (integer             ncid,
944!                          integer             varid,
945!                          integer             index(1),
946!                          doubleprecision     dval)
947      external        nf_put_var1_double
948
949      integer         nf_get_var1_double
950!                         (integer             ncid,
951!                          integer             varid,
952!                          integer             index(1),
953!                          doubleprecision     dval)
954      external        nf_get_var1_double
955
956!
957! variable array put/get routines:
958!
959
960      integer         nf_put_vara_text
961!                         (integer             ncid,
962!                          integer             varid,
963!                          integer             start(1),
964!                          integer             count(1),
965!                          character(*)        text)
966      external        nf_put_vara_text
967
968      integer         nf_get_vara_text
969!                         (integer             ncid,
970!                          integer             varid,
971!                          integer             start(1),
972!                          integer             count(1),
973!                          character(*)        text)
974      external        nf_get_vara_text
975
976      integer         nf_put_vara_int1
977!                         (integer             ncid,
978!                          integer             varid,
979!                          integer             start(1),
980!                          integer             count(1),
981!                          nf_int1_t           i1vals(1))
982      external        nf_put_vara_int1
983
984      integer         nf_get_vara_int1
985!                         (integer             ncid,
986!                          integer             varid,
987!                          integer             start(1),
988!                          integer             count(1),
989!                          nf_int1_t           i1vals(1))
990      external        nf_get_vara_int1
991
992      integer         nf_put_vara_int2
993!                         (integer             ncid,
994!                          integer             varid,
995!                          integer             start(1),
996!                          integer             count(1),
997!                          nf_int2_t           i2vals(1))
998      external        nf_put_vara_int2
999
1000      integer         nf_get_vara_int2
1001!                         (integer             ncid,
1002!                          integer             varid,
1003!                          integer             start(1),
1004!                          integer             count(1),
1005!                          nf_int2_t           i2vals(1))
1006      external        nf_get_vara_int2
1007
1008      integer         nf_put_vara_int
1009!                         (integer             ncid,
1010!                          integer             varid,
1011!                          integer             start(1),
1012!                          integer             count(1),
1013!                          integer             ivals(1))
1014      external        nf_put_vara_int
1015
1016      integer         nf_get_vara_int
1017!                         (integer             ncid,
1018!                          integer             varid,
1019!                          integer             start(1),
1020!                          integer             count(1),
1021!                          integer             ivals(1))
1022      external        nf_get_vara_int
1023
1024      integer         nf_put_vara_real
1025!                         (integer             ncid,
1026!                          integer             varid,
1027!                          integer             start(1),
1028!                          integer             count(1),
1029!                          real                rvals(1))
1030      external        nf_put_vara_real
1031
1032      integer         nf_get_vara_real
1033!                         (integer             ncid,
1034!                          integer             varid,
1035!                          integer             start(1),
1036!                          integer             count(1),
1037!                          real                rvals(1))
1038      external        nf_get_vara_real
1039
1040      integer         nf_put_vara_double
1041!                         (integer             ncid,
1042!                          integer             varid,
1043!                          integer             start(1),
1044!                          integer             count(1),
1045!                          doubleprecision     dvals(1))
1046      external        nf_put_vara_double
1047
1048      integer         nf_get_vara_double
1049!                         (integer             ncid,
1050!                          integer             varid,
1051!                          integer             start(1),
1052!                          integer             count(1),
1053!                          doubleprecision     dvals(1))
1054      external        nf_get_vara_double
1055
1056!
1057! strided variable put/get routines:
1058!
1059
1060      integer         nf_put_vars_text
1061!                         (integer             ncid,
1062!                          integer             varid,
1063!                          integer             start(1),
1064!                          integer             count(1),
1065!                          integer             stride(1),
1066!                          character(*)        text)
1067      external        nf_put_vars_text
1068
1069      integer         nf_get_vars_text
1070!                         (integer             ncid,
1071!                          integer             varid,
1072!                          integer             start(1),
1073!                          integer             count(1),
1074!                          integer             stride(1),
1075!                          character(*)        text)
1076      external        nf_get_vars_text
1077
1078      integer         nf_put_vars_int1
1079!                         (integer             ncid,
1080!                          integer             varid,
1081!                          integer             start(1),
1082!                          integer             count(1),
1083!                          integer             stride(1),
1084!                          nf_int1_t           i1vals(1))
1085      external        nf_put_vars_int1
1086
1087      integer         nf_get_vars_int1
1088!                         (integer             ncid,
1089!                          integer             varid,
1090!                          integer             start(1),
1091!                          integer             count(1),
1092!                          integer             stride(1),
1093!                          nf_int1_t           i1vals(1))
1094      external        nf_get_vars_int1
1095
1096      integer         nf_put_vars_int2
1097!                         (integer             ncid,
1098!                          integer             varid,
1099!                          integer             start(1),
1100!                          integer             count(1),
1101!                          integer             stride(1),
1102!                          nf_int2_t           i2vals(1))
1103      external        nf_put_vars_int2
1104
1105      integer         nf_get_vars_int2
1106!                         (integer             ncid,
1107!                          integer             varid,
1108!                          integer             start(1),
1109!                          integer             count(1),
1110!                          integer             stride(1),
1111!                          nf_int2_t           i2vals(1))
1112      external        nf_get_vars_int2
1113
1114      integer         nf_put_vars_int
1115!                         (integer             ncid,
1116!                          integer             varid,
1117!                          integer             start(1),
1118!                          integer             count(1),
1119!                          integer             stride(1),
1120!                          integer             ivals(1))
1121      external        nf_put_vars_int
1122
1123      integer         nf_get_vars_int
1124!                         (integer             ncid,
1125!                          integer             varid,
1126!                          integer             start(1),
1127!                          integer             count(1),
1128!                          integer             stride(1),
1129!                          integer             ivals(1))
1130      external        nf_get_vars_int
1131
1132      integer         nf_put_vars_real
1133!                         (integer             ncid,
1134!                          integer             varid,
1135!                          integer             start(1),
1136!                          integer             count(1),
1137!                          integer             stride(1),
1138!                          real                rvals(1))
1139      external        nf_put_vars_real
1140
1141      integer         nf_get_vars_real
1142!                         (integer             ncid,
1143!                          integer             varid,
1144!                          integer             start(1),
1145!                          integer             count(1),
1146!                          integer             stride(1),
1147!                          real                rvals(1))
1148      external        nf_get_vars_real
1149
1150      integer         nf_put_vars_double
1151!                         (integer             ncid,
1152!                          integer             varid,
1153!                          integer             start(1),
1154!                          integer             count(1),
1155!                          integer             stride(1),
1156!                          doubleprecision     dvals(1))
1157      external        nf_put_vars_double
1158
1159      integer         nf_get_vars_double
1160!                         (integer             ncid,
1161!                          integer             varid,
1162!                          integer             start(1),
1163!                          integer             count(1),
1164!                          integer             stride(1),
1165!                          doubleprecision     dvals(1))
1166      external        nf_get_vars_double
1167
1168!
1169! mapped variable put/get routines:
1170!
1171
1172      integer         nf_put_varm_text
1173!                         (integer             ncid,
1174!                          integer             varid,
1175!                          integer             start(1),
1176!                          integer             count(1),
1177!                          integer             stride(1),
1178!                          integer             imap(1),
1179!                          character(*)        text)
1180      external        nf_put_varm_text
1181
1182      integer         nf_get_varm_text
1183!                         (integer             ncid,
1184!                          integer             varid,
1185!                          integer             start(1),
1186!                          integer             count(1),
1187!                          integer             stride(1),
1188!                          integer             imap(1),
1189!                          character(*)        text)
1190      external        nf_get_varm_text
1191
1192      integer         nf_put_varm_int1
1193!                         (integer             ncid,
1194!                          integer             varid,
1195!                          integer             start(1),
1196!                          integer             count(1),
1197!                          integer             stride(1),
1198!                          integer             imap(1),
1199!                          nf_int1_t           i1vals(1))
1200      external        nf_put_varm_int1
1201
1202      integer         nf_get_varm_int1
1203!                         (integer             ncid,
1204!                          integer             varid,
1205!                          integer             start(1),
1206!                          integer             count(1),
1207!                          integer             stride(1),
1208!                          integer             imap(1),
1209!                          nf_int1_t           i1vals(1))
1210      external        nf_get_varm_int1
1211
1212      integer         nf_put_varm_int2
1213!                         (integer             ncid,
1214!                          integer             varid,
1215!                          integer             start(1),
1216!                          integer             count(1),
1217!                          integer             stride(1),
1218!                          integer             imap(1),
1219!                          nf_int2_t           i2vals(1))
1220      external        nf_put_varm_int2
1221
1222      integer         nf_get_varm_int2
1223!                         (integer             ncid,
1224!                          integer             varid,
1225!                          integer             start(1),
1226!                          integer             count(1),
1227!                          integer             stride(1),
1228!                          integer             imap(1),
1229!                          nf_int2_t           i2vals(1))
1230      external        nf_get_varm_int2
1231
1232      integer         nf_put_varm_int
1233!                         (integer             ncid,
1234!                          integer             varid,
1235!                          integer             start(1),
1236!                          integer             count(1),
1237!                          integer             stride(1),
1238!                          integer             imap(1),
1239!                          integer             ivals(1))
1240      external        nf_put_varm_int
1241
1242      integer         nf_get_varm_int
1243!                         (integer             ncid,
1244!                          integer             varid,
1245!                          integer             start(1),
1246!                          integer             count(1),
1247!                          integer             stride(1),
1248!                          integer             imap(1),
1249!                          integer             ivals(1))
1250      external        nf_get_varm_int
1251
1252      integer         nf_put_varm_real
1253!                         (integer             ncid,
1254!                          integer             varid,
1255!                          integer             start(1),
1256!                          integer             count(1),
1257!                          integer             stride(1),
1258!                          integer             imap(1),
1259!                          real                rvals(1))
1260      external        nf_put_varm_real
1261
1262      integer         nf_get_varm_real
1263!                         (integer             ncid,
1264!                          integer             varid,
1265!                          integer             start(1),
1266!                          integer             count(1),
1267!                          integer             stride(1),
1268!                          integer             imap(1),
1269!                          real                rvals(1))
1270      external        nf_get_varm_real
1271
1272      integer         nf_put_varm_double
1273!                         (integer             ncid,
1274!                          integer             varid,
1275!                          integer             start(1),
1276!                          integer             count(1),
1277!                          integer             stride(1),
1278!                          integer             imap(1),
1279!                          doubleprecision     dvals(1))
1280      external        nf_put_varm_double
1281
1282      integer         nf_get_varm_double
1283!                         (integer             ncid,
1284!                          integer             varid,
1285!                          integer             start(1),
1286!                          integer             count(1),
1287!                          integer             stride(1),
1288!                          integer             imap(1),
1289!                          doubleprecision     dvals(1))
1290      external        nf_get_varm_double
1291
1292
1293!     NetCDF-2.
1294!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1295! begin netcdf 2.4 backward compatibility:
1296!
1297
1298!     
1299! functions in the fortran interface
1300!
1301      integer nccre
1302      integer ncopn
1303      integer ncddef
1304      integer ncdid
1305      integer ncvdef
1306      integer ncvid
1307      integer nctlen
1308      integer ncsfil
1309
1310      external nccre
1311      external ncopn
1312      external ncddef
1313      external ncdid
1314      external ncvdef
1315      external ncvid
1316      external nctlen
1317      external ncsfil
1318
1319
1320      integer ncrdwr
1321      integer nccreat
1322      integer ncexcl
1323      integer ncindef
1324      integer ncnsync
1325      integer nchsync
1326      integer ncndirty
1327      integer nchdirty
1328      integer nclink
1329      integer ncnowrit
1330      integer ncwrite
1331      integer ncclob
1332      integer ncnoclob
1333      integer ncglobal
1334      integer ncfill
1335      integer ncnofill
1336      integer maxncop
1337      integer maxncdim
1338      integer maxncatt
1339      integer maxncvar
1340      integer maxncnam
1341      integer maxvdims
1342      integer ncnoerr
1343      integer ncebadid
1344      integer ncenfile
1345      integer nceexist
1346      integer nceinval
1347      integer nceperm
1348      integer ncenotin
1349      integer nceindef
1350      integer ncecoord
1351      integer ncemaxds
1352      integer ncename
1353      integer ncenoatt
1354      integer ncemaxat
1355      integer ncebadty
1356      integer ncebadd
1357      integer ncests
1358      integer nceunlim
1359      integer ncemaxvs
1360      integer ncenotvr
1361      integer nceglob
1362      integer ncenotnc
1363      integer ncfoobar
1364      integer ncsyserr
1365      integer ncfatal
1366      integer ncverbos
1367      integer ncentool
1368
1369
1370!
1371! netcdf data types:
1372!
1373      integer ncbyte
1374      integer ncchar
1375      integer ncshort
1376      integer nclong
1377      integer ncfloat
1378      integer ncdouble
1379
1380      parameter(ncbyte = 1)
1381      parameter(ncchar = 2)
1382      parameter(ncshort = 3)
1383      parameter(nclong = 4)
1384      parameter(ncfloat = 5)
1385      parameter(ncdouble = 6)
1386
1387!     
1388!     masks for the struct nc flag field; passed in as 'mode' arg to
1389!     nccreate and ncopen.
1390!     
1391
1392!     read/write, 0 => readonly
1393      parameter(ncrdwr = 1)
1394!     in create phase, cleared by ncendef
1395      parameter(nccreat = 2)
1396!     on create destroy existing file
1397      parameter(ncexcl = 4)
1398!     in define mode, cleared by ncendef
1399      parameter(ncindef = 8)
1400!     synchronise numrecs on change (x'10')
1401      parameter(ncnsync = 16)
1402!     synchronise whole header on change (x'20')
1403      parameter(nchsync = 32)
1404!     numrecs has changed (x'40')
1405      parameter(ncndirty = 64) 
1406!     header info has changed (x'80')
1407      parameter(nchdirty = 128)
1408!     prefill vars on endef and increase of record, the default behavior
1409      parameter(ncfill = 0)
1410!     do not fill vars on endef and increase of record (x'100')
1411      parameter(ncnofill = 256)
1412!     isa link (x'8000')
1413      parameter(nclink = 32768)
1414
1415!     
1416!     'mode' arguments for nccreate and ncopen
1417!     
1418      parameter(ncnowrit = 0)
1419      parameter(ncwrite = ncrdwr)
1420      parameter(ncclob = nf_clobber)
1421      parameter(ncnoclob = nf_noclobber)
1422
1423!     
1424!     'size' argument to ncdimdef for an unlimited dimension
1425!     
1426      integer ncunlim
1427      parameter(ncunlim = 0)
1428
1429!     
1430!     attribute id to put/get a global attribute
1431!     
1432      parameter(ncglobal  = 0)
1433
1434!     
1435!     advisory maximums:
1436!     
1437      parameter(maxncop = 64)
1438      parameter(maxncdim = 1024)
1439      parameter(maxncatt = 8192)
1440      parameter(maxncvar = 8192)
1441!     not enforced
1442      parameter(maxncnam = 256)
1443      parameter(maxvdims = maxncdim)
1444
1445!     
1446!     global netcdf error status variable
1447!     initialized in error.c
1448!     
1449
1450!     no error
1451      parameter(ncnoerr = nf_noerr)
1452!     not a netcdf id
1453      parameter(ncebadid = nf_ebadid)
1454!     too many netcdfs open
1455      parameter(ncenfile = -31)   ! nc_syserr
1456!     netcdf file exists && ncnoclob
1457      parameter(nceexist = nf_eexist)
1458!     invalid argument
1459      parameter(nceinval = nf_einval)
1460!     write to read only
1461      parameter(nceperm = nf_eperm)
1462!     operation not allowed in data mode
1463      parameter(ncenotin = nf_enotindefine )   
1464!     operation not allowed in define mode
1465      parameter(nceindef = nf_eindefine)   
1466!     coordinates out of domain
1467      parameter(ncecoord = nf_einvalcoords)
1468!     maxncdims exceeded
1469      parameter(ncemaxds = nf_emaxdims)
1470!     string match to name in use
1471      parameter(ncename = nf_enameinuse)   
1472!     attribute not found
1473      parameter(ncenoatt = nf_enotatt)
1474!     maxncattrs exceeded
1475      parameter(ncemaxat = nf_emaxatts)
1476!     not a netcdf data type
1477      parameter(ncebadty = nf_ebadtype)
1478!     invalid dimension id
1479      parameter(ncebadd = nf_ebaddim)
1480!     ncunlimited in the wrong index
1481      parameter(nceunlim = nf_eunlimpos)
1482!     maxncvars exceeded
1483      parameter(ncemaxvs = nf_emaxvars)
1484!     variable not found
1485      parameter(ncenotvr = nf_enotvar)
1486!     action prohibited on ncglobal varid
1487      parameter(nceglob = nf_eglobal)
1488!     not a netcdf file
1489      parameter(ncenotnc = nf_enotnc)
1490      parameter(ncests = nf_ests)
1491      parameter (ncentool = nf_emaxname) 
1492      parameter(ncfoobar = 32)
1493      parameter(ncsyserr = -31)
1494
1495!     
1496!     global options variable. used to determine behavior of error handler.
1497!     initialized in lerror.c
1498!     
1499      parameter(ncfatal = 1)
1500      parameter(ncverbos = 2)
1501
1502!
1503!     default fill values.  these must be the same as in the c interface.
1504!
1505      integer filbyte
1506      integer filchar
1507      integer filshort
1508      integer fillong
1509      real filfloat
1510      doubleprecision fildoub
1511
1512      parameter (filbyte = -127)
1513      parameter (filchar = 0)
1514      parameter (filshort = -32767)
1515      parameter (fillong = -2147483647)
1516      parameter (filfloat = 9.9692099683868690e+36)
1517      parameter (fildoub = 9.9692099683868690d+36)
1518
1519!     NetCDF-4.
1520!     This is part of netCDF-4. Copyright 2006, UCAR, See COPYRIGHT
1521!     file for distribution information.
1522
1523!     Netcdf version 4 fortran interface.
1524
1525!     $Id: netcdf4.inc,v 1.28 2010/05/25 13:53:02 ed Exp $
1526
1527!     New netCDF-4 types.
1528      integer nf_ubyte
1529      integer nf_ushort
1530      integer nf_uint
1531      integer nf_int64
1532      integer nf_uint64
1533      integer nf_string
1534      integer nf_vlen
1535      integer nf_opaque
1536      integer nf_enum
1537      integer nf_compound
1538
1539      parameter (nf_ubyte = 7)
1540      parameter (nf_ushort = 8)
1541      parameter (nf_uint = 9)
1542      parameter (nf_int64 = 10)
1543      parameter (nf_uint64 = 11)
1544      parameter (nf_string = 12)
1545      parameter (nf_vlen = 13)
1546      parameter (nf_opaque = 14)
1547      parameter (nf_enum = 15)
1548      parameter (nf_compound = 16)
1549
1550!     New netCDF-4 fill values.
1551      integer           nf_fill_ubyte
1552      integer           nf_fill_ushort
1553!      real              nf_fill_uint
1554!      real              nf_fill_int64
1555!      real              nf_fill_uint64
1556      parameter (nf_fill_ubyte = 255)
1557      parameter (nf_fill_ushort = 65535)
1558
1559!     New constants.
1560      integer nf_format_netcdf4
1561      parameter (nf_format_netcdf4 = 3)
1562
1563      integer nf_format_netcdf4_classic
1564      parameter (nf_format_netcdf4_classic = 4)
1565
1566      integer nf_netcdf4
1567      parameter (nf_netcdf4 = 4096)
1568
1569      integer nf_classic_model
1570      parameter (nf_classic_model = 256)
1571
1572      integer nf_chunk_seq
1573      parameter (nf_chunk_seq = 0)
1574      integer nf_chunk_sub
1575      parameter (nf_chunk_sub = 1)
1576      integer nf_chunk_sizes
1577      parameter (nf_chunk_sizes = 2)
1578
1579      integer nf_endian_native
1580      parameter (nf_endian_native = 0)
1581      integer nf_endian_little
1582      parameter (nf_endian_little = 1)
1583      integer nf_endian_big
1584      parameter (nf_endian_big = 2)
1585
1586!     For NF_DEF_VAR_CHUNKING
1587      integer nf_chunked
1588      parameter (nf_chunked = 0)
1589      integer nf_contiguous
1590      parameter (nf_contiguous = 1)
1591
1592!     For NF_DEF_VAR_FLETCHER32
1593      integer nf_nochecksum
1594      parameter (nf_nochecksum = 0)
1595      integer nf_fletcher32
1596      parameter (nf_fletcher32 = 1)
1597
1598!     For NF_DEF_VAR_DEFLATE
1599      integer nf_noshuffle
1600      parameter (nf_noshuffle = 0)
1601      integer nf_shuffle
1602      parameter (nf_shuffle = 1)
1603
1604!     For NF_DEF_VAR_SZIP
1605      integer nf_szip_ec_option_mask
1606      parameter (nf_szip_ec_option_mask = 4)
1607      integer nf_szip_nn_option_mask
1608      parameter (nf_szip_nn_option_mask = 32)
1609
1610!     For parallel I/O.
1611      integer nf_mpiio     
1612      parameter (nf_mpiio = 8192)
1613      integer nf_mpiposix
1614      parameter (nf_mpiposix = 16384)
1615      integer nf_pnetcdf
1616      parameter (nf_pnetcdf = 32768)
1617
1618!     For NF_VAR_PAR_ACCESS.
1619      integer nf_independent
1620      parameter (nf_independent = 0)
1621      integer nf_collective
1622      parameter (nf_collective = 1)
1623
1624!     New error codes.
1625      integer nf_ehdferr        ! Error at HDF5 layer.
1626      parameter (nf_ehdferr = -101)
1627      integer nf_ecantread      ! Can't read.
1628      parameter (nf_ecantread = -102)
1629      integer nf_ecantwrite     ! Can't write.
1630      parameter (nf_ecantwrite = -103)
1631      integer nf_ecantcreate    ! Can't create.
1632      parameter (nf_ecantcreate = -104)
1633      integer nf_efilemeta      ! Problem with file metadata.
1634      parameter (nf_efilemeta = -105)
1635      integer nf_edimmeta       ! Problem with dimension metadata.
1636      parameter (nf_edimmeta = -106)
1637      integer nf_eattmeta       ! Problem with attribute metadata.
1638      parameter (nf_eattmeta = -107)
1639      integer nf_evarmeta       ! Problem with variable metadata.
1640      parameter (nf_evarmeta = -108)
1641      integer nf_enocompound    ! Not a compound type.
1642      parameter (nf_enocompound = -109)
1643      integer nf_eattexists     ! Attribute already exists.
1644      parameter (nf_eattexists = -110)
1645      integer nf_enotnc4        ! Attempting netcdf-4 operation on netcdf-3 file.   
1646      parameter (nf_enotnc4 = -111)
1647      integer nf_estrictnc3     ! Attempting netcdf-4 operation on strict nc3 netcdf-4 file.   
1648      parameter (nf_estrictnc3 = -112)
1649      integer nf_enotnc3        ! Attempting netcdf-3 operation on netcdf-4 file.   
1650      parameter (nf_enotnc3 = -113)
1651      integer nf_enopar         ! Parallel operation on file opened for non-parallel access.   
1652      parameter (nf_enopar = -114)
1653      integer nf_eparinit       ! Error initializing for parallel access.   
1654      parameter (nf_eparinit = -115)
1655      integer nf_ebadgrpid      ! Bad group ID.   
1656      parameter (nf_ebadgrpid = -116)
1657      integer nf_ebadtypid      ! Bad type ID.   
1658      parameter (nf_ebadtypid = -117)
1659      integer nf_etypdefined    ! Type has already been defined and may not be edited.
1660      parameter (nf_etypdefined = -118)
1661      integer nf_ebadfield      ! Bad field ID.   
1662      parameter (nf_ebadfield = -119)
1663      integer nf_ebadclass      ! Bad class.   
1664      parameter (nf_ebadclass = -120)
1665      integer nf_emaptype       ! Mapped access for atomic types only.   
1666      parameter (nf_emaptype = -121)
1667      integer nf_elatefill      ! Attempt to define fill value when data already exists.
1668      parameter (nf_elatefill = -122)
1669      integer nf_elatedef       ! Attempt to define var properties, like deflate, after enddef.
1670      parameter (nf_elatedef = -123)
1671      integer nf_edimscale      ! Probem with HDF5 dimscales.
1672      parameter (nf_edimscale = -124)
1673      integer nf_enogrp       ! No group found.
1674      parameter (nf_enogrp = -125)
1675
1676
1677!     New functions.
1678
1679!     Parallel I/O.
1680      integer nf_create_par
1681      external nf_create_par
1682
1683      integer nf_open_par
1684      external nf_open_par
1685
1686      integer nf_var_par_access
1687      external nf_var_par_access
1688
1689!     Functions to handle groups.
1690      integer nf_inq_ncid
1691      external nf_inq_ncid
1692
1693      integer nf_inq_grps
1694      external nf_inq_grps
1695
1696      integer nf_inq_grpname
1697      external nf_inq_grpname
1698
1699      integer nf_inq_grpname_full
1700      external nf_inq_grpname_full
1701
1702      integer nf_inq_grpname_len
1703      external nf_inq_grpname_len
1704
1705      integer nf_inq_grp_parent
1706      external nf_inq_grp_parent
1707
1708      integer nf_inq_grp_ncid
1709      external nf_inq_grp_ncid
1710
1711      integer nf_inq_grp_full_ncid
1712      external nf_inq_grp_full_ncid
1713
1714      integer nf_inq_varids
1715      external nf_inq_varids
1716
1717      integer nf_inq_dimids
1718      external nf_inq_dimids
1719
1720      integer nf_def_grp
1721      external nf_def_grp
1722
1723!     New options for netCDF variables.
1724      integer nf_def_var_deflate
1725      external nf_def_var_deflate
1726
1727      integer nf_inq_var_deflate
1728      external nf_inq_var_deflate
1729
1730      integer nf_def_var_fletcher32
1731      external nf_def_var_fletcher32
1732
1733      integer nf_inq_var_fletcher32
1734      external nf_inq_var_fletcher32
1735
1736      integer nf_def_var_chunking
1737      external nf_def_var_chunking
1738
1739      integer nf_inq_var_chunking
1740      external nf_inq_var_chunking
1741
1742      integer nf_def_var_fill
1743      external nf_def_var_fill
1744
1745      integer nf_inq_var_fill
1746      external nf_inq_var_fill
1747
1748      integer nf_def_var_endian
1749      external nf_def_var_endian
1750
1751      integer nf_inq_var_endian
1752      external nf_inq_var_endian
1753
1754!     User defined types.
1755      integer nf_inq_typeids
1756      external nf_inq_typeids
1757
1758      integer nf_inq_typeid
1759      external nf_inq_typeid
1760
1761      integer nf_inq_type
1762      external nf_inq_type
1763
1764      integer nf_inq_user_type
1765      external nf_inq_user_type
1766
1767!     User defined types - compound types.
1768      integer nf_def_compound
1769      external nf_def_compound
1770
1771      integer nf_insert_compound
1772      external nf_insert_compound
1773
1774      integer nf_insert_array_compound
1775      external nf_insert_array_compound
1776
1777      integer nf_inq_compound
1778      external nf_inq_compound
1779
1780      integer nf_inq_compound_name
1781      external nf_inq_compound_name
1782
1783      integer nf_inq_compound_size
1784      external nf_inq_compound_size
1785
1786      integer nf_inq_compound_nfields
1787      external nf_inq_compound_nfields
1788
1789      integer nf_inq_compound_field
1790      external nf_inq_compound_field
1791
1792      integer nf_inq_compound_fieldname
1793      external nf_inq_compound_fieldname
1794
1795      integer nf_inq_compound_fieldindex
1796      external nf_inq_compound_fieldindex
1797
1798      integer nf_inq_compound_fieldoffset
1799      external nf_inq_compound_fieldoffset
1800
1801      integer nf_inq_compound_fieldtype
1802      external nf_inq_compound_fieldtype
1803
1804      integer nf_inq_compound_fieldndims
1805      external nf_inq_compound_fieldndims
1806
1807      integer nf_inq_compound_fielddim_sizes
1808      external nf_inq_compound_fielddim_sizes
1809
1810!     User defined types - variable length arrays.
1811      integer nf_def_vlen
1812      external nf_def_vlen
1813
1814      integer nf_inq_vlen
1815      external nf_inq_vlen
1816
1817      integer nf_free_vlen
1818      external nf_free_vlen
1819
1820!     User defined types - enums.
1821      integer nf_def_enum
1822      external nf_def_enum
1823
1824      integer nf_insert_enum
1825      external nf_insert_enum
1826
1827      integer nf_inq_enum
1828      external nf_inq_enum
1829
1830      integer nf_inq_enum_member
1831      external nf_inq_enum_member
1832
1833      integer nf_inq_enum_ident
1834      external nf_inq_enum_ident
1835
1836!     User defined types - opaque.
1837      integer nf_def_opaque
1838      external nf_def_opaque
1839
1840      integer nf_inq_opaque
1841      external nf_inq_opaque
1842
1843!     Write and read attributes of any type, including user defined
1844!     types.
1845      integer nf_put_att
1846      external nf_put_att
1847      integer nf_get_att
1848      external nf_get_att
1849
1850!     Write and read variables of any type, including user defined
1851!     types.
1852      integer nf_put_var
1853      external nf_put_var
1854      integer nf_put_var1
1855      external nf_put_var1
1856      integer nf_put_vara
1857      external nf_put_vara
1858      integer nf_put_vars
1859      external nf_put_vars
1860      integer nf_get_var
1861      external nf_get_var
1862      integer nf_get_var1
1863      external nf_get_var1
1864      integer nf_get_vara
1865      external nf_get_vara
1866      integer nf_get_vars
1867      external nf_get_vars
1868
1869!     64-bit int functions.
1870      integer nf_put_var1_int64
1871      external nf_put_var1_int64
1872      integer nf_put_vara_int64
1873      external nf_put_vara_int64
1874      integer nf_put_vars_int64
1875      external nf_put_vars_int64
1876      integer nf_put_varm_int64
1877      external nf_put_varm_int64
1878      integer nf_put_var_int64
1879      external nf_put_var_int64
1880      integer nf_get_var1_int64
1881      external nf_get_var1_int64
1882      integer nf_get_vara_int64
1883      external nf_get_vara_int64
1884      integer nf_get_vars_int64
1885      external nf_get_vars_int64
1886      integer nf_get_varm_int64
1887      external nf_get_varm_int64
1888      integer nf_get_var_int64
1889      external nf_get_var_int64
1890
1891!     For helping F77 users with VLENs.
1892      integer nf_get_vlen_element
1893      external nf_get_vlen_element
1894      integer nf_put_vlen_element
1895      external nf_put_vlen_element
1896
1897!     For dealing with file level chunk cache.
1898      integer nf_set_chunk_cache
1899      external nf_set_chunk_cache
1900      integer nf_get_chunk_cache
1901      external nf_get_chunk_cache
1902
1903!     For dealing with per variable chunk cache.
1904      integer nf_set_var_chunk_cache
1905      external nf_set_var_chunk_cache
1906      integer nf_get_var_chunk_cache
1907      external nf_get_var_chunk_cache
1908!
1909! $Id: temps.h 1577 2011-10-20 15:06:47Z fairhead $
1910!
1911!  ATTENTION!!!!: ce fichier include est compatible format fixe/format libre
1912!                 veillez  n'utiliser que des ! pour les commentaires
1913!                 et  bien positionner les & des lignes de continuation
1914!                 (les placer en colonne 6 et en colonne 73)
1915!
1916!
1917! jD_ref = jour julien de la date de reference (lancement de l'experience)
1918! hD_ref = "heure" julienne de la date de reference
1919!-----------------------------------------------------------------------
1920! INCLUDE 'temps.h'
1921
1922      COMMON/temps_r/dt,jD_ref,jH_ref,start_time,hour_ini
1923      COMMON/temps_i/day_ini,day_end,annee_ref,day_ref,                 &
1924     &             itau_dyn,itau_phy,itaufin
1925      COMMON/temps_c/calend
1926
1927
1928      INTEGER   itaufin ! total number of dynamical steps for the run
1929      INTEGER   itau_dyn, itau_phy
1930      INTEGER   day_ini ! initial day # of simulation sequence
1931      INTEGER   day_end ! final day # ; i.e. day # when this simulation ends
1932      INTEGER   annee_ref
1933      INTEGER   day_ref
1934      REAL      dt ! (dynamics) time step (changes if doing Matsuno or LF step)
1935      REAL      jD_ref, jH_ref, start_time
1936      CHARACTER (len=10) :: calend
1937
1938      ! Additionnal Mars stuff:
1939      real hour_ini ! initial fraction of day of simulation sequence (0=<hour_ini<1)
1940
1941!-----------------------------------------------------------------------
1942!
1943! For Fortran 77/Fortran 90 compliance always use line continuation
1944! symbols '&' in columns 73 and 6
1945!
1946! Group commons according to their type for minimal performance impact
1947
1948      COMMON/callkeys_l/callrad,corrk,calldifv,UseTurbDiff,calladj      &
1949     &   , co2cond,callsoil                                             &
1950     &   , season,diurnal,tlocked,rings_shadow,lwrite                   &
1951     &   , callstats,calleofdump                                        &
1952     &   , enertest                                                     &
1953     &   , callgasvis,continuum,H2Ocont_simple,graybody                 &
1954     &   , radfixed                                                     &
1955     &   , meanOLR, specOLR                                             &
1956     &   , kastprof                                                     &
1957     &   , nosurf, oblate                                               &     
1958     &   , newtonian, testradtimes                                      &
1959     &   , check_cpp_match, force_cpp                                   &
1960     &   , rayleigh                                                     &
1961     &   , stelbbody                                                    &
1962     &   , nearco2cond                                                  &
1963     &   , tracer, mass_redistrib, varactive, varfixed                  &
1964     &   , sedimentation,water,watercond,waterrain                      &
1965     &   , aeroco2,aeroh2o,aeroh2so4,aeroback2lay                       &
1966     &   , aerofixco2,aerofixh2o                                        &
1967     &   , hydrology, sourceevol                                        &
1968     &   , CLFvarying                                                   &
1969     &   , strictboundcorrk                                             &                                       
1970     &   , ok_slab_ocean                                                &
1971     &   , ok_slab_sic                                                  &
1972     &   , ok_slab_heat_transp                                         
1973
1974
1975      COMMON/callkeys_i/iaervar,iddist,iradia,startype
1976     
1977      COMMON/callkeys_r/topdustref,Nmix_co2,dusttau,Fat1AU,stelTbb,     &
1978     &                  Tstrat,tplanet,obs_tau_col_tropo,               &
1979     &                  obs_tau_col_strato,pres_bottom_tropo,           &
1980     &                  pres_top_tropo,pres_bottom_strato,              &
1981     &                  pres_top_strato,size_tropo,size_strato,satval,  &
1982     &                  CLFfixval,n2mixratio,co2supsat,pceil,albedosnow,&
1983     &                  maxicethick,Tsaldiff,tau_relax,cloudlvl,        &
1984     &                  icetstep,intheat,flatten,Rmean,J2,MassPlanet
1985     
1986      logical callrad,corrk,calldifv,UseTurbDiff                        &
1987     &   , calladj,co2cond,callsoil                                     &
1988     &   , season,diurnal,tlocked,rings_shadow,lwrite                   &
1989     &   , callstats,calleofdump                                        &
1990     &   , callgasvis,continuum,H2Ocont_simple,graybody                 &
1991     &   , strictboundcorrk                                             
1992
1993      logical enertest
1994      logical nonideal
1995      logical meanOLR
1996      logical specOLR
1997      logical kastprof
1998      logical newtonian
1999      logical check_cpp_match
2000      logical force_cpp
2001      logical testradtimes
2002      logical rayleigh
2003      logical stelbbody
2004      logical ozone
2005      logical nearco2cond
2006      logical tracer
2007      logical mass_redistrib
2008      logical varactive
2009      logical varfixed
2010      logical radfixed
2011      logical sedimentation
2012      logical water,watercond,waterrain
2013      logical aeroco2,aeroh2o,aeroh2so4,aeroback2lay
2014      logical aerofixco2,aerofixh2o
2015      logical hydrology
2016      logical sourceevol
2017      logical CLFvarying
2018      logical nosurf
2019      logical oblate
2020      logical ok_slab_ocean
2021      logical ok_slab_sic
2022      logical ok_slab_heat_transp
2023
2024      integer iddist
2025      integer iaervar
2026      integer iradia
2027      integer startype
2028
2029      real topdustref
2030      real Nmix_co2
2031      real dusttau
2032      real Fat1AU
2033      real stelTbb
2034      real Tstrat
2035      real tplanet
2036      real obs_tau_col_tropo
2037      real obs_tau_col_strato
2038      real pres_bottom_tropo
2039      real pres_top_tropo
2040      real pres_bottom_strato
2041      real pres_top_strato
2042      real size_tropo
2043      real size_strato
2044      real satval
2045      real CLFfixval
2046      real n2mixratio
2047      real co2supsat
2048      real pceil
2049      real albedosnow
2050      real maxicethick
2051      real Tsaldiff
2052      real tau_relax
2053      real cloudlvl
2054      real icetstep
2055      real intheat
2056      real flatten
2057      real Rmean
2058      real J2
2059      real MassPlanet
2060
2061! Arguments on input:
2062      integer,intent(in) :: ngrid
2063      character (len=*),intent(in) :: nom,titre,unite
2064      integer,intent(in) :: dimpx
2065      real,intent(in) :: px(ngrid,L_NSPECTI)
2066
2067! Local variables:
2068
2069!      real dx3(iip1,jjp1,llm) ! to store a 3D data set
2070!      real dx2(iip1,jjp1)     ! to store a 2D (surface) data set
2071!      real dx0
2072
2073      real date
2074
2075!      REAL phis(ip1jmp1)
2076
2077      integer irythme
2078      integer ierr
2079      integer iq
2080      integer i,j,l,zmax , ig0
2081
2082      integer zitau
2083      character firstnom*20
2084      SAVE firstnom
2085      SAVE zitau
2086      SAVE date
2087      data firstnom /'1234567890'/
2088      data zitau /0/
2089
2090! Ajouts
2091      integer, save :: ntime=0
2092      integer :: idim,varid
2093      integer :: nid
2094      character (len =50):: fichnom
2095      integer, dimension(4) :: id
2096      integer, dimension(4) :: edges,corner
2097
2098! added by RDW for OLR output
2099       real dx3(iip1,jjp1,L_NSPECTI) ! to store the data set
2100
2101! Added to work in parallel mode
2102      real dx3_glop(klon_glo,L_NSPECTI)
2103      real dx3_glo(iim,jjp1,L_NSPECTI) ! to store a global 3D data set
2104
2105!***************************************************************
2106!Sortie des variables au rythme voulu
2107
2108      irythme = ecritphy*iradia ! sortie au rythme de ecritphy*iradia
2109!EM+JL if the spetra need to be output more frequently, need to define a ecritSpec...
2110!     irythme = iphysiq  ! sortie a tous les pas physique
2111
2112
2113!***************************************************************
2114
2115! Initialisation of 'firstnom' and create/open the "diagfi.nc" NetCDF file
2116! ------------------------------------------------------------------------
2117! (Au tout premier appel de la subroutine durant le run.)
2118
2119      fichnom="diagspecIR.nc"
2120
2121      if (firstnom.eq.'1234567890') then ! .true. for the very first call
2122      !  to this subroutine; now set 'firstnom'
2123         firstnom = nom
2124         ! just to be sure, check that firstnom is large enough to hold nom
2125         if (len_trim(firstnom).lt.len_trim(nom)) then
2126           write(*,*) "writediagspecIR: Error !!!"
2127           write(*,*) "   firstnom string not long enough!!"
2128           write(*,*) "   increase its size to at least ",len_trim(nom)
2129           stop
2130         endif
2131
2132         ! Create the NetCDF file
2133         if (is_master) then
2134         ierr = NF_CREATE(fichnom, NF_CLOBBER, nid)
2135         ! Define the 'Time' dimension
2136         ierr = nf_def_dim(nid,"Time",NF_UNLIMITED,idim)
2137         ! Define the 'Time' variable
2138         ierr = NF_DEF_VAR (nid, "Time", NF_DOUBLE, 1, idim,varid)
2139         ! Add a long_name attribute
2140         ierr = NF_PUT_ATT_TEXT (nid, varid, "long_name",
2141     .          4,"Time")
2142         ! Add a units attribute
2143         ierr = NF_PUT_ATT_TEXT(nid, varid,'units',29,
2144     .          "days since 0000-00-0 00:00:00")
2145         ! Switch out of NetCDF Define mode
2146         ierr = NF_ENDDEF(nid)
2147
2148!         call gr_fi_dyn(1,size(phisfi_glo),iip1,jjp1,phisfi_glo,phis)
2149         ! write "header" of file (longitudes, latitudes, area, ...)
2150         call iniwrite_specIR(nid,day_ini)
2151         endif ! of if (is_master)
2152
2153         zitau = -1 ! initialize zitau
2154      else
2155         if (is_master) then
2156           ! Open the NetCDF file
2157           ierr = NF_OPEN(fichnom,NF_WRITE,nid)
2158         endif
2159      endif ! if (firstnom.eq.'1234567890')
2160
2161! Increment time index 'zitau' if it is the "firstcall" (at given time level)
2162! to writediagfi
2163!------------------------------------------------------------------------
2164      if (nom.eq.firstnom) then
2165          zitau = zitau + iphysiq
2166      end if
2167
2168!--------------------------------------------------------
2169! Write the variables to output file if it's time to do so
2170!--------------------------------------------------------
2171
2172      if ( MOD(zitau+1,irythme) .eq.0.) then
2173
2174! Compute/write/extend 'Time' coordinate (date given in days)
2175! (done every "first call" (at given time level) to writediagfi)
2176! Note: date is incremented as 1 step ahead of physics time
2177!       (like the 'histoire' outputs)
2178!--------------------------------------------------------
2179
2180        if (nom.eq.firstnom) then
2181
2182        ! We have identified a "first call" (at given date)
2183           ntime=ntime+1 ! increment # of stored time steps
2184           ! compute corresponding date (in days and fractions thereof)
2185           date= float (zitau +1)/float (day_step)
2186
2187           if (is_master) then
2188             ! Get NetCDF ID of 'Time' variable
2189             ierr= NF_INQ_VARID(nid,"Time",varid)
2190
2191             ! Write (append) the new date to the 'Time' array
2192             ierr= NF_PUT_VARA_DOUBLE(nid,varid,ntime,1,date)
2193             if (ierr.ne.NF_NOERR) then
2194              write(*,*) "***** PUT_VAR matter in writediagspec_nc"
2195              write(*,*) "***** with time"
2196              write(*,*) 'ierr=', ierr   
2197c             call abort
2198             endif
2199
2200             write(6,*)'WRITEDIAGSPEC: date= ', date
2201           endif ! of if (is_master)
2202        end if ! of if (nom.eq.firstnom)
2203
2204
2205 
2206!Case of a 3D variable
2207!---------------------
2208        if (dimpx.eq.3) then
2209
2210!         A. Recast (copy) variable from physics grid to dynamics grid
2211  ! gather field on a "global" (without redundant longitude) array
2212          call Gather(px,dx3_glop)
2213!$OMP MASTER
2214          if (is_mpi_root) then
2215            call Grid1Dto2D_glo(dx3_glop,dx3_glo)
2216            ! copy dx3_glo() to dx3(:) and add redundant longitude
2217            dx3(1:iim,:,:)=dx3_glo(1:iim,:,:)
2218            dx3(iip1,:,:)=dx3(1,:,:)
2219          endif
2220!$OMP END MASTER
2221!$OMP BARRIER
2222
2223!         B. Write (append) the variable to the NetCDF file
2224          if (is_master) then
2225
2226! name of the variable
2227           ierr= NF_INQ_VARID(nid,nom,varid)
2228           if (ierr /= NF_NOERR) then
2229! corresponding dimensions
2230              ierr= NF_INQ_DIMID(nid,"longitude",id(1))
2231              ierr= NF_INQ_DIMID(nid,"latitude",id(2))
2232              ierr= NF_INQ_DIMID(nid,"IR Wavenumber",id(3))
2233              ierr= NF_INQ_DIMID(nid,"Time",id(4))
2234
2235! Create the variable if it doesn't exist yet
2236
2237              write (*,*) "=========================="
2238              write (*,*) "DIAGSPECIR: creating variable ",nom
2239              call def_var(nid,nom,titre,unite,4,id,varid,ierr)
2240
2241           endif
2242
2243           corner(1)=1
2244           corner(2)=1
2245           corner(3)=1
2246           corner(4)=ntime
2247
2248           edges(1)=iip1
2249           edges(2)=jjp1
2250           edges(3)=L_NSPECTI
2251           edges(4)=1
2252           ierr= NF_PUT_VARA_DOUBLE(nid,varid,corner,edges,dx3)
2253
2254           if (ierr.ne.NF_NOERR) then
2255              write(*,*) "***** PUT_VAR problem in writediagspec"
2256              write(*,*) "***** with ",nom
2257              write(*,*) 'ierr=', ierr
2258             call abort
2259           endif
2260
2261          endif ! of if (is_master)
2262
2263        endif ! of if (dimpx.eq.3)
2264
2265      endif ! of if ( MOD(zitau+1,irythme) .eq.0.)
2266
2267      ! Close the NetCDF file
2268      if (is_master) then
2269        ierr= NF_CLOSE(nid)
2270      endif
2271
2272      end
Note: See TracBrowser for help on using the repository browser.