source: XIOS/trunk/src/output/onetcdf4_impl.hpp @ 650

Last change on this file since 650 was 517, checked in by rlacroix, 10 years ago

Add a new attribute to the file definition so that the output format can be controlled.

Currently the supported formats are "netcdf4" and "netcdf4_classic". The "format" attribute is optional. The "netcdf4" format will be used when no format is explicitly defined. Since "netcdf4" is the format which was previously used by XIOS, existing configuration files will not be affected by this change.

If "netcdf4_classic" is used, the output file(s) will be created using the classic NetCDF format. This format can be used with the attribute "type" set to "one_file" if the NetCDF4 library was compiled with Parallel NetCDF support (--enable-pnetcdf).

  • Property copyright set to
    Software name : XIOS (Xml I/O Server)
    http://forge.ipsl.jussieu.fr/ioserver
    Creation date : January 2009
    Licence : CeCCIL version2
    see license file in root directory : Licence_CeCILL_V2-en.txt
    or http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
    Holder : CEA/LSCE (Laboratoire des Sciences du CLimat et de l'Environnement)
    CNRS/IPSL (Institut Pierre Simon Laplace)
    Project Manager : Yann Meurdesoif
    yann.meurdesoif@cea.fr
File size: 2.1 KB
Line 
1#ifndef __ONETCDF4_IMPL_HPP__
2#define __ONETCDF4_IMPL_HPP__
3
4#include "onetcdf4.hpp"
5#include "netCdfInterface.hpp"
6
7namespace xios
8{
9  template <class T, int ndim>
10  void CONetCDF4::writeData(const CArray<T, ndim>& data, const StdString & name,
11                            bool collective, StdSize record,
12                            const std::vector<StdSize> * start,
13                            const std::vector<StdSize> * count)
14  {
15    int grpid = this->getCurrentGroup();
16    int varid = this->getVariable(name);
17    StdSize array_size = 1;
18    std::vector<StdSize> sstart, scount;
19
20    if (this->wmpi && collective)
21    CNetCdfInterface::varParAccess(grpid, varid, NC_COLLECTIVE);
22    if (this->wmpi && !collective)
23    CNetCdfInterface::varParAccess(grpid, varid, NC_INDEPENDENT);
24
25    this->getWriteDataInfos
26    (name, record, array_size,  sstart, scount, start, count);
27    if (data.numElements() != array_size)
28    {
29      ERROR("CONetCDF4::writeData(...)",
30      << "[ input array size = "  << data.numElements()
31      << ", intern array size = " << array_size
32      << " ] Invalid input data !" );
33    }
34
35    this->writeData_(grpid, varid, sstart, scount, data.dataFirst());
36  }
37
38//----------------------------------------------------------------
39
40  template <class T>
41  void CONetCDF4::setDefaultValue(const StdString & varname, const T * value)
42  {
43    int grpid = this->getCurrentGroup();
44    int varid = this->getVariable(varname);
45
46    if (value != NULL)
47    {
48      // nc_def_var_fill will automatically set the _FillValue attribute when
49      // using the NetCDF 4 format but we need to do it manually otherwise
50      if (useClassicFormat)
51        this->addAttribute(StdString("_FillValue"), *value, &varname);
52      else
53        CNetCdfInterface::defVarFill(grpid, varid, 0, (void*)value);
54      this->addAttribute(StdString("missing_value"), *value, &varname);
55    }
56    else if (!useClassicFormat)
57    {
58      // The "no-fill mode" is set globally for the classic NetCDF format
59      CNetCdfInterface::defVarFill(grpid, varid, 1, NULL);
60    }
61  }
62
63  ///---------------------------------------------------------------
64
65}
66
67
68
69#endif
Note: See TracBrowser for help on using the repository browser.