Skip to content

Commit

Permalink
Merge branch 'master' into ejh_enum_mem_fix
Browse files Browse the repository at this point in the history
  • Loading branch information
edhartnett committed Nov 8, 2017
2 parents 85b1788 + e7fee3e commit a72d5b4
Show file tree
Hide file tree
Showing 18 changed files with 844 additions and 639 deletions.
1 change: 1 addition & 0 deletions include/nc_tests.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ for conditions of use.


#define NC_TESTS_MAX_DIMS 1024 /**< NC_MAX_DIMS for tests. Allows different NC_MAX_DIMS values without breaking this test with a heap or stack overflow. */
#define MAX_NUM_FORMATS 5 /**< Max number of available binary formats. */

/** Useful define for tests. */
/** \{ */
Expand Down
2 changes: 1 addition & 1 deletion libdap4/d4chunk.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ NCD4_dechunk(NCD4meta* metadata)
/* setup as dmr only */
metadata->serial.dmr = (char*)metadata->serial.rawdata; /* temp */
metadata->serial.dmr[metadata->serial.rawsize-1] = '\0';
metadata->serial.dmr = strdup(q);
metadata->serial.dmr = strdup((char *)q);
if(metadata->serial.dmr == NULL)
return THROW(NC_ENOMEM);
return THROW(NC_NOERR);
Expand Down
1 change: 0 additions & 1 deletion libdap4/d4data.c
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,6 @@ fillstruct(NCD4meta* meta, NCD4node* type, void** offsetp, void** dstp, NClist*

#ifdef CLEARSTRUCT
/* Avoid random data within aligned structs */
d4size_t prevoffset = 0;
memset(dst,0,type->meta.memsize);
#endif

Expand Down
1 change: 0 additions & 1 deletion libdap4/d4file.c
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,6 @@ set_curl_properties(NCD4INFO* d4info)
static void
applyclientparamcontrols(NCD4INFO* info)
{
NCD4meta* meta = info->substrate.metadata;
const char* value;

/* clear the flags */
Expand Down
2 changes: 1 addition & 1 deletion libdap4/d4swap.c
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ walkSeq(NCD4meta* compiler, NCD4node* topvar, NCD4node* vlentype, void** offsetp
swapinline64(&recordcount);

basetype = vlentype->basetype; /* This may be of any type potentially */
assert(basetype->sort = NCD4_TYPE);
assert(basetype->sort == NCD4_TYPE);

for(i=0;i<recordcount;i++) {
switch(basetype->subsort) {
Expand Down
3 changes: 0 additions & 3 deletions libdispatch/derror.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@ Research/Unidata. See COPYRIGHT file for more info.
static const char nc_libvers[] = PACKAGE_VERSION " of "__DATE__" "__TIME__" $";

/**
\defgroup lib_version Library Version
Functions related to querying the library version.
Return the library version.
\returns short string that contains the version information for the
Expand Down
137 changes: 133 additions & 4 deletions libdispatch/dparallel.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,77 @@ int nc_create_par(const char *path, int cmode, MPI_Comm comm,
#endif /* USE_PARALLEL */
}

/*! \ingroup datasets
/** \ingroup datasets
Open an existing netCDF file for parallel I/O.
This function opens an existing netCDF dataset for parallel I/O
access. It determines the underlying file format automatically. Use
the same call to open a netCDF classic, 64-bit offset, or netCDF-4
file.
Parallel I/O access is only available in library build which support
parallel I/O. To support parallel I/O, netCDF must be built with
netCDF-4 enabled, and with a HDF5 library that supports parallel I/O,
or with support for the parallel-netcdf library via the
enable-pnetcdf option.
It is not necessary to pass any information about the format of the
file being opened. The file type will be detected automatically by the
netCDF library.
As of version 4.3.1.2, multiple calls to nc_open_par() with the same
path will return the same ncid value.
\note When opening a netCDF-4 file HDF5 error reporting is turned off,
if it is on. This doesn't stop the HDF5 error stack from recording the
errors, it simply stops their display to the user through stderr.
\param path File name for netCDF dataset to be opened.
\param mode The mode flag may include NC_WRITE (for read/write
access), NC_MPIIO or NC_MPIPOSIX (not both) for parallel netCDF-4 I/O,
or NC_PNETCDF for parallel-netcdf parallel I/O access for a netCDF
classic or CDF5 file.
\param comm the MPI communicator to be used.
\param info MPI info or MPI_INFO_NULL.
\param ncidp Pointer to location where returned netCDF ID is to be
stored.
nc_open_par() returns the value NC_NOERR if no errors
occurred. Otherwise, the returned status indicates an error. Possible
causes of errors include:
\returns ::NC_NOERR No error.
\returns ::NC_EINVAL Invalid parameters.
\returns ::NC_ENOTNC Not a netCDF file.
\returns ::NC_ENOMEM Out of memory.
\returns ::NC_EHDFERR HDF5 error. (NetCDF-4 files only.)
This function opens a file for parallel I/O.
\returns ::NC_EDIMMETA Error in netCDF-4 dimension metadata. (NetCDF-4
files only.)
<h1>Examples</h1>
Here is an example using nc_open_par() from examples/C/parallel_vara.c.
@code
#include <mpi.h>
#include <netcdf.h>
#include <netcdf_par.h>
...
int ncid, omode;
char filename[128];
...
omode = NC_PNETCDF | NC_NOWRITE;
err = nc_open_par(filename, omode, MPI_COMM_WORLD, MPI_INFO_NULL, &ncid); FATAL_ERR
@endcode
*/
int
nc_open_par(const char *path, int mode, MPI_Comm comm,
Expand Down Expand Up @@ -92,8 +159,70 @@ nc_open_par_fortran(const char *path, int mode, int comm,
#endif
}

/* This function will change the parallel access of a variable from
* independent to collective. */
/* */
/**\ingroup datasets
This function will change the parallel access of a variable from
independent to collective.
\param ncid NetCDF or group ID, from a previous call to nc_open(),
nc_create(), nc_def_grp(), or associated inquiry functions such as
nc_inq_ncid().
\param varid Variable ID
\param par_access NC_COLLECTIVE or NC_INDEPENDENT.
\returns ::NC_NOERR No error.
\returns ::NC_EBADID Invalid ncid passed.
\returns ::NC_ENOTVAR Invalid varid passed.
\returns ::NC_ENOPAR LFile was not opened with nc_open_par/nc_create_var.
\returns ::NC_EINVAL Invalid par_access specified.
<h1>Example</h1>
Here is an example from examples/C/parallel_vara.c which changes the
parallel access of a variable and then writes to it.
\code
#define NY 10
#define NX 4
#include <mpi.h>
#include <netcdf.h>
#include <netcdf_par.h>
...
char filename[128];
int err, ncid, cmode, varid, dimid, dimid[2], buf[NY][NX];
size_t global_ny, global_nx, start[2], count[2];
...
global_ny = NY;
global_nx = NX * nprocs;
...
cmode = NC_CLOBBER | NC_PNETCDF;
err = nc_create_par(filename, cmode, MPI_COMM_WORLD, MPI_INFO_NULL, &ncid); FATAL_ERR
...
err = nc_def_dim(ncid, "Y", global_ny, &dimid[0]); ERR
err = nc_def_dim(ncid, "X", global_nx, &dimid[1]); ERR
err = nc_def_var(ncid, "var", NC_INT, 2, dimid, &varid); ERR
...
err = nc_enddef(ncid); ERR
...
err = nc_var_par_access(ncid, varid, NC_COLLECTIVE); ERR
...
start[0] = 0;
start[1] = NX * rank;
count[0] = NY;
count[1] = NX;
err = nc_put_vara_int(ncid, varid, start, count, &buf[0][0]); ERR
\endcode
*/
int
nc_var_par_access(int ncid, int varid, int par_access)
{
Expand Down
Loading

0 comments on commit a72d5b4

Please sign in to comment.