source: XIOS/dev/branch_openmp/src/io/netcdf.hpp @ 1555

Last change on this file since 1555 was 1555, checked in by yushan, 6 years ago

all netcdf routines inside critical section

  • 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: 1.8 KB
RevLine 
[379]1#ifndef __XIOS_NETCDF_HPP__
2#define __XIOS_NETCDF_HPP__
[1134]3#include "mpi_std.hpp"
[379]4#define MPI_INCLUDED
5#include <netcdf.h>
6
[412]7#if defined(USING_NETCDF_INTERNAL)
8  const bool using_netcdf_internal=true ;
9#else
10  const bool using_netcdf_internal=false ;
11#endif
12
[379]13#include "netcdf_version.hpp"
14
15#if NETCDF_VERSION >= 4110
16
17#  if defined(USING_NETCDF_PAR)
18extern "C"
19{
[1328]20#  include <netcdf_par.h>
[379]21}
22#  endif
23#endif
24
[480]25#if !defined(USING_NETCDF_PAR)
[525]26#define NC_INDEPENDENT 0
27#define NC_COLLECTIVE  1
[480]28#endif
29
[379]30namespace xios
31{
[1138]32  inline int nc_create_par(const char *path, int cmode, MPI_Comm comm, MPI_Info info,int *ncidp)
[379]33  {
34#if defined(USING_NETCDF_PAR)
[1555]35    int status;
36    #pragma omp critical (_netcdf)
37    {
38      status = ::nc_create_par(path, cmode, comm, info, ncidp) ;
39    }
40    return status;
[379]41#else
42    ERROR("int nc_create_par(const char *path, int cmode, MPI_Comm comm, MPI_Info info,int *ncidp)",
43           << "must not be use with netcdf sequential version") ;
44    return -1 ;
45#endif
46  }
[525]47
[1138]48  inline int nc_open_par(const char *path, int mode, MPI_Comm comm, MPI_Info info,int *ncidp)
[525]49  {
[379]50#if defined(USING_NETCDF_PAR)
[1555]51    int status;
52    #pragma omp critical (_netcdf)
53    {
54      status = ::nc_open_par(path, mode, comm, info, ncidp) ;
55    }
56    return status;
[379]57#else
58    ERROR("int nc_open_par(const char *path, int mode, MPI_Comm comm, MPI_Info info,int *ncidp)",
59           << "must not be use with netcdf sequential version") ;
60    return -1 ;
61#endif
62  }
[525]63
[379]64  inline int nc_var_par_access(int ncid, int varid, int par_access)
65  {
66#if defined(USING_NETCDF_PAR)
[1555]67    int status = ::nc_var_par_access(ncid, varid, par_access) ;
68   
69    return status;
[379]70#else
71    ERROR("int nc_var_par_access(int ncid, int varid, int par_access)",
72           << "must not be use with netcdf sequential version") ;
73    return -1 ;
74#endif
75  }
76}
77
78
79#endif
Note: See TracBrowser for help on using the repository browser.