From d6bfc031bd36ccd98f9a1c8ecfad6eab9b542484 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Mon, 23 May 2016 18:10:33 -0400 Subject: [PATCH] more development of async changes --- src/clib/CMakeLists.txt | 2 +- src/clib/pio_msg.c | 65 +- src/clib/pio_put_nc_async.c | 2514 +++++------------------------------ tests/unit/test_intercomm.c | 30 +- 4 files changed, 383 insertions(+), 2228 deletions(-) diff --git a/src/clib/CMakeLists.txt b/src/clib/CMakeLists.txt index 475aa6196a41..4344261aa281 100644 --- a/src/clib/CMakeLists.txt +++ b/src/clib/CMakeLists.txt @@ -23,7 +23,7 @@ set (PIO_GENNC_SRCS ${CMAKE_CURRENT_BINARY_DIR}/pio_put_nc.c ${CMAKE_CURRENT_BINARY_DIR}/pio_nc.c) if (PIO_ENABLE_ASYNC) - set (PIO_ADDL_SRCS pio_nc_async.c pio_put_nc_async.c pio_get_nc_async.c pio_msg.c) + set (PIO_ADDL_SRCS pio_nc_async.c pio_put_nc_async.c pio_get_nc_async.c pio_msg.c pio_varm.c) else () set (PIO_ADDL_SRCS ${PIO_GENNC_SRCS}) endif () diff --git a/src/clib/pio_msg.c b/src/clib/pio_msg.c index 126efaace43c..9c509398ca2a 100644 --- a/src/clib/pio_msg.c +++ b/src/clib/pio_msg.c @@ -617,8 +617,11 @@ int put_vars_handler(iosystem_desc_t *ios) if ((mpierr = MPI_Bcast(&start_present, 1, MPI_CHAR, 0, ios->intercomm))) return PIO_EIO; if (!mpierr && start_present) + { if ((mpierr = MPI_Bcast(start, ndims, MPI_OFFSET, 0, ios->intercomm))) return PIO_EIO; + LOG((1, "put_vars_handler getting start[0] = %d ndims = %d", start[0], ndims)); + } if ((mpierr = MPI_Bcast(&count_present, 1, MPI_CHAR, 0, ios->intercomm))) return PIO_EIO; if (!mpierr && count_present) @@ -640,6 +643,16 @@ int put_vars_handler(iosystem_desc_t *ios) ncid, varid, ndims, start_present, count_present, stride_present, xtype, num_elem, typelen)); + for (int d = 0; d < ndims; d++) + { + if (start_present) + LOG((2, "start[%d] = %d\n", d, start[d])); + if (count_present) + LOG((2, "count[%d] = %d\n", d, count[d])); + if (stride_present) + LOG((2, "stride[%d] = %d\n", d, stride[d])); + } + /* Allocate room for our data. */ if (!(buf = malloc(num_elem * typelen))) return PIO_ENOMEM; @@ -663,57 +676,57 @@ int put_vars_handler(iosystem_desc_t *ios) switch(xtype) { case NC_BYTE: - ierr = PIOc_put_vars_schar(ncid, varid, (size_t *)start, (size_t *)count, - (ptrdiff_t *)stride, buf); + ierr = PIOc_put_vars_schar(ncid, varid, (size_t *)startp, (size_t *)countp, + (ptrdiff_t *)stridep, buf); break; case NC_CHAR: - ierr = PIOc_put_vars_schar(ncid, varid, (size_t *)start, (size_t *)count, - (ptrdiff_t *)stride, buf); + ierr = PIOc_put_vars_schar(ncid, varid, (size_t *)startp, (size_t *)countp, + (ptrdiff_t *)stridep, buf); break; case NC_SHORT: - ierr = PIOc_put_vars_short(ncid, varid, (size_t *)start, (size_t *)count, - (ptrdiff_t *)stride, buf); + ierr = PIOc_put_vars_short(ncid, varid, (size_t *)startp, (size_t *)countp, + (ptrdiff_t *)stridep, buf); break; case NC_INT: - ierr = PIOc_put_vars_int(ncid, varid, (size_t *)start, (size_t *)count, - (ptrdiff_t *)stride, buf); + ierr = PIOc_put_vars_int(ncid, varid, (size_t *)startp, (size_t *)countp, + (ptrdiff_t *)stridep, buf); break; case NC_FLOAT: - ierr = PIOc_put_vars_float(ncid, varid, (size_t *)start, (size_t *)count, - (ptrdiff_t *)stride, buf); + ierr = PIOc_put_vars_float(ncid, varid, (size_t *)startp, (size_t *)countp, + (ptrdiff_t *)stridep, buf); break; case NC_DOUBLE: - ierr = PIOc_put_vars_double(ncid, varid, (size_t *)start, (size_t *)count, - (ptrdiff_t *)stride, buf); + ierr = PIOc_put_vars_double(ncid, varid, (size_t *)startp, (size_t *)countp, + (ptrdiff_t *)stridep, buf); break; #ifdef _NETCDF4 case NC_UBYTE: - ierr = PIOc_put_vars_uchar(ncid, varid, (size_t *)start, (size_t *)count, - (ptrdiff_t *)stride, buf); + ierr = PIOc_put_vars_uchar(ncid, varid, (size_t *)startp, (size_t *)countp, + (ptrdiff_t *)stridep, buf); break; case NC_USHORT: - ierr = PIOc_put_vars_ushort(ncid, varid, (size_t *)start, (size_t *)count, - (ptrdiff_t *)stride, buf); + ierr = PIOc_put_vars_ushort(ncid, varid, (size_t *)startp, (size_t *)countp, + (ptrdiff_t *)stridep, buf); break; case NC_UINT: - ierr = PIOc_put_vars_uint(ncid, varid, (size_t *)start, (size_t *)count, - (ptrdiff_t *)stride, buf); + ierr = PIOc_put_vars_uint(ncid, varid, (size_t *)startp, (size_t *)countp, + (ptrdiff_t *)stridep, buf); break; case NC_INT64: - ierr = PIOc_put_vars_longlong(ncid, varid, (size_t *)start, (size_t *)count, - (ptrdiff_t *)stride, buf); + ierr = PIOc_put_vars_longlong(ncid, varid, (size_t *)startp, (size_t *)countp, + (ptrdiff_t *)stridep, buf); break; case NC_UINT64: - ierr = PIOc_put_vars_ulonglong(ncid, varid, (size_t *)start, (size_t *)count, - (ptrdiff_t *)stride, buf); + ierr = PIOc_put_vars_ulonglong(ncid, varid, (size_t *)startp, (size_t *)countp, + (ptrdiff_t *)stridep, buf); break; /* case NC_STRING: */ - /* ierr = PIOc_put_vars_string(ncid, varid, (size_t *)start, (size_t *)count, */ - /* (ptrdiff_t *)stride, (void *)buf); */ + /* ierr = PIOc_put_vars_string(ncid, varid, (size_t *)startp, (size_t *)countp, */ + /* (ptrdiff_t *)stridep, (void *)buf); */ /* break; */ /* default:*/ - /* ierr = PIOc_put_vars(ncid, varid, (size_t *)start, (size_t *)count, */ - /* (ptrdiff_t *)stride, buf); */ + /* ierr = PIOc_put_vars(ncid, varid, (size_t *)startp, (size_t *)countp, */ + /* (ptrdiff_t *)stridep, buf); */ #endif /* _NETCDF4 */ } diff --git a/src/clib/pio_put_nc_async.c b/src/clib/pio_put_nc_async.c index 9938ba09548f..95d31c826ce6 100644 --- a/src/clib/pio_put_nc_async.c +++ b/src/clib/pio_put_nc_async.c @@ -1,3 +1,4 @@ +#include #include #include @@ -47,7 +48,7 @@ int PIOc_put_vars_tc(int ncid, int varid, const PIO_Offset *start, const PIO_Off int *request; LOG((1, "PIOc_put_vars_tc ncid = %d varid = %d start = %d count = %d " - "stride = %d xtype = %d", ncid, start, count, stride, xtype)); + "stride = %d xtype = %d", ncid, varid, start, count, stride, xtype)); /* User must provide some data. */ if (!buf) @@ -105,7 +106,6 @@ int PIOc_put_vars_tc(int ncid, int varid, const PIO_Offset *start, const PIO_Off LOG((2, "PIOc_put_vars_tc num_elem = %d", num_elem)); } - sleep(2); /* If async is in use, and this is not an IO task, bcast the parameters. */ if (ios->async_interface) { @@ -119,6 +119,8 @@ int PIOc_put_vars_tc(int ncid, int varid, const PIO_Offset *start, const PIO_Off if(ios->compmaster) mpierr = MPI_Send(&msg, 1, MPI_INT, ios->ioroot, 1, ios->union_comm); + /* Send the function parameters and associated informaiton + * to the msg handler. */ if (!mpierr) mpierr = MPI_Bcast(&ncid, 1, MPI_INT, ios->compmaster, ios->intercomm); if (!mpierr) @@ -128,15 +130,15 @@ int PIOc_put_vars_tc(int ncid, int varid, const PIO_Offset *start, const PIO_Off if (!mpierr) mpierr = MPI_Bcast(&start_present, 1, MPI_CHAR, ios->compmaster, ios->intercomm); if (!mpierr && start_present) - mpierr = MPI_Bcast(&start, ndims, MPI_OFFSET, ios->compmaster, ios->intercomm); + mpierr = MPI_Bcast((PIO_Offset *)start, ndims, MPI_OFFSET, ios->compmaster, ios->intercomm); if (!mpierr) mpierr = MPI_Bcast(&count_present, 1, MPI_CHAR, ios->compmaster, ios->intercomm); if (!mpierr && count_present) - mpierr = MPI_Bcast(&count, ndims, MPI_OFFSET, ios->compmaster, ios->intercomm); + mpierr = MPI_Bcast((PIO_Offset *)count, ndims, MPI_OFFSET, ios->compmaster, ios->intercomm); if (!mpierr) mpierr = MPI_Bcast(&stride_present, 1, MPI_CHAR, ios->compmaster, ios->intercomm); if (!mpierr && stride_present) - mpierr = MPI_Bcast(&stride, ndims, MPI_OFFSET, ios->compmaster, ios->intercomm); + mpierr = MPI_Bcast((PIO_Offset *)stride, ndims, MPI_OFFSET, ios->compmaster, ios->intercomm); if (!mpierr) mpierr = MPI_Bcast(&xtype, 1, MPI_INT, ios->compmaster, ios->intercomm); if (!mpierr) @@ -146,14 +148,16 @@ int PIOc_put_vars_tc(int ncid, int varid, const PIO_Offset *start, const PIO_Off LOG((2, "PIOc_put_vars_tc ncid = %d varid = %d ndims = %d start_present = %d " "count_present = %d stride_present = %d xtype = %d num_elem = %d", ncid, varid, ndims, start_present, count_present, stride_present, xtype, num_elem)); + + for (int e = 0; e < num_elem; e++) + LOG((2, "PIOc_put_vars_tc element %d = %d", e, ((int *)buf)[e])); /* Send the data. */ if (!mpierr) - mpierr = MPI_Bcast(buf, num_elem * typelen, MPI_BYTE, ios->compmaster, + mpierr = MPI_Bcast((void *)buf, num_elem * typelen, MPI_BYTE, ios->compmaster, ios->intercomm); } - sleep(2); /* Handle MPI errors. */ if ((mpierr2 = MPI_Bcast(&mpierr, 1, MPI_INT, ios->ioroot, ios->my_comm))) return check_mpi(file, mpierr2, __FILE__, __LINE__); @@ -365,9 +369,48 @@ int PIOc_put_vars(int ncid, int varid, const PIO_Offset start[], const PIO_Offse return ierr; } +/** Interface to netCDF data write function. */ int PIOc_put_vars_uchar(int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const unsigned char *op) +{ + return PIOc_put_vars_tc(ncid, varid, start, count, stride, NC_UBYTE, op); +} + +/** Interface to netCDF data write function. */ +int PIOc_put_vars_ushort(int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], + const PIO_Offset stride[], const unsigned short *op) +{ + return PIOc_put_vars_tc(ncid, varid, start, count, stride, NC_USHORT, op); +} + +/** Interface to netCDF data write function. */ +int PIOc_put_vars_ulonglong(int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], + const PIO_Offset stride[], const unsigned long long *op) +{ + return PIOc_put_vars_tc(ncid, varid, start, count, stride, NC_UINT64, op); +} + +/** Interface to netCDF data write function. */ +int PIOc_put_vars_uint(int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const unsigned int *op) +{ + return PIOc_put_vars_tc(ncid, varid, start, count, stride, NC_UINT, op); +} + +/** Interface to netCDF data write function. */ +int PIOc_put_var_ushort(int ncid, int varid, const unsigned short *op) +{ + return PIOc_put_vars_tc(ncid, varid, NULL, NULL, NULL, NC_USHORT, op); +} + +/// +/// PIO interface to nc_put_var1_longlong +/// +/// This routine is called collectively by all tasks in the communicator ios.union_comm. +/// +/// Refer to the netcdf documentation. +/// +int PIOc_put_var1_longlong (int ncid, int varid, const PIO_Offset index[], const long long *op) { int ierr; int msg; @@ -384,7 +427,7 @@ int PIOc_put_vars_uchar(int ncid, int varid, const PIO_Offset start[], if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARS_UCHAR; + msg = PIO_MSG_PUT_VAR1_LONGLONG; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -399,13 +442,13 @@ int PIOc_put_vars_uchar(int ncid, int varid, const PIO_Offset start[], #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vars_uchar(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; + ierr = nc_put_var1_longlong(file->fh, varid, (size_t *) index, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_vars_uchar(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; + ierr = nc_put_var1_longlong(file->fh, varid, (size_t *) index, op);; } break; #endif @@ -420,7 +463,7 @@ int PIOc_put_vars_uchar(int ncid, int varid, const PIO_Offset start[], request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_vars_uchar(file->fh, varid, start, count, stride, op, request);; + ierr = ncmpi_bput_var1_longlong(file->fh, varid, index, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -438,14 +481,16 @@ int PIOc_put_vars_uchar(int ncid, int varid, const PIO_Offset start[], return ierr; } -/// -/// PIO interface to nc_put_vars_ushort -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_vars_ushort (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const unsigned short *op) +/** Interface to netCDF data write function. */ +int PIOc_put_vara_uchar(int ncid, int varid, const PIO_Offset start[], + const PIO_Offset count[], const unsigned char *op) +{ + return PIOc_put_vars_uchar(ncid, varid, start, count, NULL, op); +} + + +/** Interface to netCDF data write function. */ +int PIOc_put_var1_long(int ncid, int varid, const PIO_Offset index[], const long *ip) { int ierr; int msg; @@ -462,7 +507,7 @@ int PIOc_put_vars_ushort (int ncid, int varid, const PIO_Offset start[], const P if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARS_USHORT; + msg = PIO_MSG_PUT_VAR1_LONG; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -477,13 +522,13 @@ int PIOc_put_vars_ushort (int ncid, int varid, const PIO_Offset start[], const P #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vars_ushort(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; + ierr = nc_put_var1_long(file->fh, varid, (size_t *) index, ip);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_vars_ushort(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; + ierr = nc_put_var1_long(file->fh, varid, (size_t *) index, ip);; } break; #endif @@ -498,7 +543,7 @@ int PIOc_put_vars_ushort (int ncid, int varid, const PIO_Offset start[], const P request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_vars_ushort(file->fh, varid, start, count, stride, op, request);; + ierr = ncmpi_bput_var1_long(file->fh, varid, index, ip, request);; }else{ *request = PIO_REQ_NULL; } @@ -516,14 +561,33 @@ int PIOc_put_vars_ushort (int ncid, int varid, const PIO_Offset start[], const P return ierr; } +/** Interface to netCDF data write function. */ +int PIOc_put_vars_long(int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const long *op) +{ + return PIOc_put_vars_tc(ncid, varid, start, count, stride, NC_INT, op); +} + +/** Interface to netCDF data write function. */ +int PIOc_put_var_short(int ncid, int varid, const short *op) +{ + return PIOc_put_vars_short(ncid, varid, NULL, NULL, NULL, op); +} + +/** Interface to netCDF data write function. */ +int PIOc_put_vara_int(int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], + const int *op) +{ + return PIOc_put_vars_int(ncid, varid, start, count, NULL, op); +} + /// -/// PIO interface to nc_put_vars_ulonglong +/// PIO interface to nc_put_var1_ushort /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_vars_ulonglong (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const unsigned long long *op) +int PIOc_put_var1_ushort (int ncid, int varid, const PIO_Offset index[], const unsigned short *op) { int ierr; int msg; @@ -540,12 +604,12 @@ int PIOc_put_vars_ulonglong (int ncid, int varid, const PIO_Offset start[], cons if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARS_ULONGLONG; + msg = PIO_MSG_PUT_VAR1_USHORT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, 0, ios->intercomm); + mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); } @@ -555,13 +619,13 @@ int PIOc_put_vars_ulonglong (int ncid, int varid, const PIO_Offset start[], cons #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vars_ulonglong(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; + ierr = nc_put_var1_ushort(file->fh, varid, (size_t *) index, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_vars_ulonglong(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; + ierr = nc_put_var1_ushort(file->fh, varid, (size_t *) index, op);; } break; #endif @@ -576,7 +640,7 @@ int PIOc_put_vars_ulonglong (int ncid, int varid, const PIO_Offset start[], cons request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_vars_ulonglong(file->fh, varid, start, count, stride, op, request);; + ierr = ncmpi_bput_var1_ushort(file->fh, varid, index, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -595,13 +659,37 @@ int PIOc_put_vars_ulonglong (int ncid, int varid, const PIO_Offset start[], cons } /// -/// PIO interface to nc_put_varm +/// PIO interface to nc_put_vara_text +/// +/// This routine is called collectively by all tasks in the communicator ios.union_comm. +/// +/// Refer to the netcdf documentation. +/// +int PIOc_put_vara_text (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const char *op) +{ + return PIOc_put_vars_text(ncid, varid, start, count, NULL, op); +} + +/// +/// PIO interface to nc_put_var_ulonglong +/// +/// This routine is called collectively by all tasks in the communicator ios.union_comm. +/// +/// Refer to the netcdf documentation. +/// +int PIOc_put_var_ulonglong (int ncid, int varid, const unsigned long long *op) +{ + return PIOc_put_vars_ulonglong(ncid, varid, NULL, NULL, NULL, op); +} + +/// +/// PIO interface to nc_put_var_int /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_varm (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const PIO_Offset imap[], const void *buf, PIO_Offset bufcount, MPI_Datatype buftype) +int PIOc_put_var_int (int ncid, int varid, const int *op) { int ierr; int msg; @@ -618,12 +706,12 @@ int PIOc_put_varm (int ncid, int varid, const PIO_Offset start[], const PIO_Offs if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARM; + msg = PIO_MSG_PUT_VAR_INT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, 0, ios->intercomm); + mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); } @@ -633,13 +721,13 @@ int PIOc_put_varm (int ncid, int varid, const PIO_Offset start[], const PIO_Offs #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_varm(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, buf);; + ierr = nc_put_var_int(file->fh, varid, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_varm(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, buf);; + ierr = nc_put_var_int(file->fh, varid, op);; } break; #endif @@ -654,7 +742,7 @@ int PIOc_put_varm (int ncid, int varid, const PIO_Offset start[], const PIO_Offs request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_varm(file->fh, varid, start, count, stride, imap, buf, bufcount, buftype, request);; + ierr = ncmpi_bput_var_int(file->fh, varid, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -673,13 +761,13 @@ int PIOc_put_varm (int ncid, int varid, const PIO_Offset start[], const PIO_Offs } /// -/// PIO interface to nc_put_vars_uint +/// PIO interface to nc_put_var_longlong /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_vars_uint (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const unsigned int *op) +int PIOc_put_var_longlong (int ncid, int varid, const long long *op) { int ierr; int msg; @@ -696,12 +784,12 @@ int PIOc_put_vars_uint (int ncid, int varid, const PIO_Offset start[], const PIO if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARS_UINT; + msg = PIO_MSG_PUT_VAR_LONGLONG; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, 0, ios->intercomm); + mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); } @@ -711,13 +799,13 @@ int PIOc_put_vars_uint (int ncid, int varid, const PIO_Offset start[], const PIO #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vars_uint(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; + ierr = nc_put_var_longlong(file->fh, varid, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_vars_uint(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; + ierr = nc_put_var_longlong(file->fh, varid, op);; } break; #endif @@ -732,7 +820,7 @@ int PIOc_put_vars_uint (int ncid, int varid, const PIO_Offset start[], const PIO request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_vars_uint(file->fh, varid, start, count, stride, op, request);; + ierr = ncmpi_bput_var_longlong(file->fh, varid, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -751,13 +839,13 @@ int PIOc_put_vars_uint (int ncid, int varid, const PIO_Offset start[], const PIO } /// -/// PIO interface to nc_put_varm_uchar +/// PIO interface to nc_put_var_schar /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_varm_uchar (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const PIO_Offset imap[], const unsigned char *op) +int PIOc_put_var_schar (int ncid, int varid, const signed char *op) { int ierr; int msg; @@ -774,12 +862,12 @@ int PIOc_put_varm_uchar (int ncid, int varid, const PIO_Offset start[], const PI if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARM_UCHAR; + msg = PIO_MSG_PUT_VAR_SCHAR; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, 0, ios->intercomm); + mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); } @@ -789,13 +877,13 @@ int PIOc_put_varm_uchar (int ncid, int varid, const PIO_Offset start[], const PI #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_varm_uchar(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; + ierr = nc_put_var_schar(file->fh, varid, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_varm_uchar(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; + ierr = nc_put_var_schar(file->fh, varid, op);; } break; #endif @@ -810,7 +898,7 @@ int PIOc_put_varm_uchar (int ncid, int varid, const PIO_Offset start[], const PI request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_varm_uchar(file->fh, varid, start, count, stride, imap, op, request);; + ierr = ncmpi_bput_var_schar(file->fh, varid, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -829,13 +917,13 @@ int PIOc_put_varm_uchar (int ncid, int varid, const PIO_Offset start[], const PI } /// -/// PIO interface to nc_put_var_ushort +/// PIO interface to nc_put_var_uint /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_var_ushort (int ncid, int varid, const unsigned short *op) +int PIOc_put_var_uint (int ncid, int varid, const unsigned int *op) { int ierr; int msg; @@ -852,12 +940,12 @@ int PIOc_put_var_ushort (int ncid, int varid, const unsigned short *op) if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VAR_USHORT; + msg = PIO_MSG_PUT_VAR_UINT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, 0, ios->intercomm); + mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); } @@ -867,13 +955,13 @@ int PIOc_put_var_ushort (int ncid, int varid, const unsigned short *op) #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var_ushort(file->fh, varid, op);; + ierr = nc_put_var_uint(file->fh, varid, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_var_ushort(file->fh, varid, op);; + ierr = nc_put_var_uint(file->fh, varid, op);; } break; #endif @@ -888,7 +976,7 @@ int PIOc_put_var_ushort (int ncid, int varid, const unsigned short *op) request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_var_ushort(file->fh, varid, op, request);; + ierr = ncmpi_bput_var_uint(file->fh, varid, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -907,13 +995,13 @@ int PIOc_put_var_ushort (int ncid, int varid, const unsigned short *op) } /// -/// PIO interface to nc_put_var1_longlong +/// PIO interface to nc_put_var /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_var1_longlong (int ncid, int varid, const PIO_Offset index[], const long long *op) +int PIOc_put_var (int ncid, int varid, const void *buf, PIO_Offset bufcount, MPI_Datatype buftype) { int ierr; int msg; @@ -930,12 +1018,12 @@ int PIOc_put_var1_longlong (int ncid, int varid, const PIO_Offset index[], const if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VAR1_LONGLONG; + msg = PIO_MSG_PUT_VAR; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, 0, ios->intercomm); + mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); } @@ -945,13 +1033,13 @@ int PIOc_put_var1_longlong (int ncid, int varid, const PIO_Offset index[], const #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var1_longlong(file->fh, varid, (size_t *) index, op);; + ierr = nc_put_var(file->fh, varid, buf);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_var1_longlong(file->fh, varid, (size_t *) index, op);; + ierr = nc_put_var(file->fh, varid, buf);; } break; #endif @@ -966,7 +1054,7 @@ int PIOc_put_var1_longlong (int ncid, int varid, const PIO_Offset index[], const request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_var1_longlong(file->fh, varid, index, op, request);; + ierr = ncmpi_bput_var(file->fh, varid, buf, bufcount, buftype, request);; }else{ *request = PIO_REQ_NULL; } @@ -985,13 +1073,13 @@ int PIOc_put_var1_longlong (int ncid, int varid, const PIO_Offset index[], const } /// -/// PIO interface to nc_put_vara_uchar +/// PIO interface to nc_put_vara_ushort /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_vara_uchar (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const unsigned char *op) +int PIOc_put_vara_ushort (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const unsigned short *op) { int ierr; int msg; @@ -1008,12 +1096,12 @@ int PIOc_put_vara_uchar (int ncid, int varid, const PIO_Offset start[], const PI if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARA_UCHAR; + msg = PIO_MSG_PUT_VARA_USHORT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, 0, ios->intercomm); + mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); } @@ -1023,13 +1111,13 @@ int PIOc_put_vara_uchar (int ncid, int varid, const PIO_Offset start[], const PI #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vara_uchar(file->fh, varid, (size_t *) start, (size_t *) count, op);; + ierr = nc_put_vara_ushort(file->fh, varid, (size_t *) start, (size_t *) count, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_vara_uchar(file->fh, varid, (size_t *) start, (size_t *) count, op);; + ierr = nc_put_vara_ushort(file->fh, varid, (size_t *) start, (size_t *) count, op);; } break; #endif @@ -1044,7 +1132,7 @@ int PIOc_put_vara_uchar (int ncid, int varid, const PIO_Offset start[], const PI request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_vara_uchar(file->fh, varid, start, count, op, request);; + ierr = ncmpi_bput_vara_ushort(file->fh, varid, start, count, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -1063,13 +1151,13 @@ int PIOc_put_vara_uchar (int ncid, int varid, const PIO_Offset start[], const PI } /// -/// PIO interface to nc_put_varm_short +/// PIO interface to nc_put_vars_short /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_varm_short (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const PIO_Offset imap[], const short *op) +int PIOc_put_vars_short (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const short *op) { int ierr; int msg; @@ -1086,12 +1174,12 @@ int PIOc_put_varm_short (int ncid, int varid, const PIO_Offset start[], const PI if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARM_SHORT; + msg = PIO_MSG_PUT_VARS_SHORT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, 0, ios->intercomm); + mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); } @@ -1101,13 +1189,13 @@ int PIOc_put_varm_short (int ncid, int varid, const PIO_Offset start[], const PI #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_varm_short(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; + ierr = nc_put_vars_short(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_varm_short(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; + ierr = nc_put_vars_short(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; } break; #endif @@ -1122,7 +1210,7 @@ int PIOc_put_varm_short (int ncid, int varid, const PIO_Offset start[], const PI request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_varm_short(file->fh, varid, start, count, stride, imap, op, request);; + ierr = ncmpi_bput_vars_short(file->fh, varid, start, count, stride, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -1141,13 +1229,13 @@ int PIOc_put_varm_short (int ncid, int varid, const PIO_Offset start[], const PI } /// -/// PIO interface to nc_put_var1_long +/// PIO interface to nc_put_vara_uint /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_var1_long (int ncid, int varid, const PIO_Offset index[], const long *ip) +int PIOc_put_vara_uint (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const unsigned int *op) { int ierr; int msg; @@ -1164,12 +1252,12 @@ int PIOc_put_var1_long (int ncid, int varid, const PIO_Offset index[], const lon if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VAR1_LONG; + msg = PIO_MSG_PUT_VARA_UINT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, 0, ios->intercomm); + mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); } @@ -1179,13 +1267,13 @@ int PIOc_put_var1_long (int ncid, int varid, const PIO_Offset index[], const lon #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var1_long(file->fh, varid, (size_t *) index, ip);; + ierr = nc_put_vara_uint(file->fh, varid, (size_t *) start, (size_t *) count, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_var1_long(file->fh, varid, (size_t *) index, ip);; + ierr = nc_put_vara_uint(file->fh, varid, (size_t *) start, (size_t *) count, op);; } break; #endif @@ -1200,7 +1288,7 @@ int PIOc_put_var1_long (int ncid, int varid, const PIO_Offset index[], const lon request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_var1_long(file->fh, varid, index, ip, request);; + ierr = ncmpi_bput_vara_uint(file->fh, varid, start, count, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -1219,13 +1307,13 @@ int PIOc_put_var1_long (int ncid, int varid, const PIO_Offset index[], const lon } /// -/// PIO interface to nc_put_vars_long +/// PIO interface to nc_put_vara_schar /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_vars_long (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const long *op) +int PIOc_put_vara_schar (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const signed char *op) { int ierr; int msg; @@ -1242,12 +1330,12 @@ int PIOc_put_vars_long (int ncid, int varid, const PIO_Offset start[], const PIO if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARS_LONG; + msg = PIO_MSG_PUT_VARA_SCHAR; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, 0, ios->intercomm); + mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); } @@ -1257,13 +1345,13 @@ int PIOc_put_vars_long (int ncid, int varid, const PIO_Offset start[], const PIO #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vars_long(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; + ierr = nc_put_vara_schar(file->fh, varid, (size_t *) start, (size_t *) count, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_vars_long(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; + ierr = nc_put_vara_schar(file->fh, varid, (size_t *) start, (size_t *) count, op);; } break; #endif @@ -1278,7 +1366,7 @@ int PIOc_put_vars_long (int ncid, int varid, const PIO_Offset start[], const PIO request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_vars_long(file->fh, varid, start, count, stride, op, request);; + ierr = ncmpi_bput_vara_schar(file->fh, varid, start, count, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -1296,14 +1384,15 @@ int PIOc_put_vars_long (int ncid, int varid, const PIO_Offset start[], const PIO return ierr; } + /// -/// PIO interface to nc_put_var_short +/// PIO interface to nc_put_var1_uchar /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_var_short (int ncid, int varid, const short *op) +int PIOc_put_var1_uchar (int ncid, int varid, const PIO_Offset index[], const unsigned char *op) { int ierr; int msg; @@ -1320,12 +1409,12 @@ int PIOc_put_var_short (int ncid, int varid, const short *op) if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VAR_SHORT; + msg = PIO_MSG_PUT_VAR1_UCHAR; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, 0, ios->intercomm); + mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); } @@ -1335,13 +1424,13 @@ int PIOc_put_var_short (int ncid, int varid, const short *op) #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var_short(file->fh, varid, op);; + ierr = nc_put_var1_uchar(file->fh, varid, (size_t *) index, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_var_short(file->fh, varid, op);; + ierr = nc_put_var1_uchar(file->fh, varid, (size_t *) index, op);; } break; #endif @@ -1356,7 +1445,7 @@ int PIOc_put_var_short (int ncid, int varid, const short *op) request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_var_short(file->fh, varid, op, request);; + ierr = ncmpi_bput_var1_uchar(file->fh, varid, index, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -1374,15 +1463,15 @@ int PIOc_put_var_short (int ncid, int varid, const short *op) return ierr; } + /// -/// PIO interface to nc_put_vara_int +/// PIO interface to nc_put_vars_schar /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_vara_int(int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], - const int *op) +int PIOc_put_vars_schar (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const signed char *op) { int ierr; int msg; @@ -1392,9 +1481,6 @@ int PIOc_put_vara_int(int ncid, int varid, const PIO_Offset start[], const PIO_O var_desc_t *vdesc; PIO_Offset usage; int *request; - int size; - int ret; - int ndims; ierr = PIO_NOERR; @@ -1402,20 +1488,12 @@ int PIOc_put_vara_int(int ncid, int varid, const PIO_Offset start[], const PIO_O if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARA_INT; + msg = PIO_MSG_PUT_VARS_SCHAR; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - mpierr = MPI_Bcast(&varid, 1, MPI_INT, ios->compmaster, ios->intercomm); - if ((ret = PIOc_inq_varndims(ncid, varid, &ndims))) - return ret; - mpierr = MPI_Bcast((void *)start, ndims, MPI_INT, ios->compmaster, ios->intercomm); - mpierr = MPI_Bcast((void *)count, ndims, MPI_INT, ios->compmaster, ios->intercomm); - for (int d = 0, size = 1; d < ndims; d++) - size *= count[d]; - mpierr = MPI_Bcast((void *)op, size, MPI_INT, ios->compmaster, ios->intercomm); } @@ -1425,13 +1503,13 @@ int PIOc_put_vara_int(int ncid, int varid, const PIO_Offset start[], const PIO_O #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vara_int(file->fh, varid, (size_t *) start, (size_t *) count, op);; + ierr = nc_put_vars_schar(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_vara_int(file->fh, varid, (size_t *) start, (size_t *) count, op);; + ierr = nc_put_vars_schar(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; } break; #endif @@ -1446,7 +1524,7 @@ int PIOc_put_vara_int(int ncid, int varid, const PIO_Offset start[], const PIO_O request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_vara_int(file->fh, varid, start, count, op, request);; + ierr = ncmpi_bput_vars_schar(file->fh, varid, start, count, stride, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -1465,13 +1543,13 @@ int PIOc_put_vara_int(int ncid, int varid, const PIO_Offset start[], const PIO_O } /// -/// PIO interface to nc_put_var1_ushort +/// PIO interface to nc_put_var1 /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_var1_ushort (int ncid, int varid, const PIO_Offset index[], const unsigned short *op) +int PIOc_put_var1 (int ncid, int varid, const PIO_Offset index[], const void *buf, PIO_Offset bufcount, MPI_Datatype buftype) { int ierr; int msg; @@ -1488,7 +1566,7 @@ int PIOc_put_var1_ushort (int ncid, int varid, const PIO_Offset index[], const u if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VAR1_USHORT; + msg = PIO_MSG_PUT_VAR1; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -1503,13 +1581,13 @@ int PIOc_put_var1_ushort (int ncid, int varid, const PIO_Offset index[], const u #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var1_ushort(file->fh, varid, (size_t *) index, op);; + ierr = nc_put_var1(file->fh, varid, (size_t *) index, buf);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_var1_ushort(file->fh, varid, (size_t *) index, op);; + ierr = nc_put_var1(file->fh, varid, (size_t *) index, buf);; } break; #endif @@ -1524,7 +1602,7 @@ int PIOc_put_var1_ushort (int ncid, int varid, const PIO_Offset index[], const u request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_var1_ushort(file->fh, varid, index, op, request);; + ierr = ncmpi_bput_var1(file->fh, varid, index, buf, bufcount, buftype, request);; }else{ *request = PIO_REQ_NULL; } @@ -1543,13 +1621,13 @@ int PIOc_put_var1_ushort (int ncid, int varid, const PIO_Offset index[], const u } /// -/// PIO interface to nc_put_vara_text +/// PIO interface to nc_put_vara_float /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_vara_text (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const char *op) +int PIOc_put_vara_float (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const float *op) { int ierr; int msg; @@ -1566,7 +1644,7 @@ int PIOc_put_vara_text (int ncid, int varid, const PIO_Offset start[], const PIO if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARA_TEXT; + msg = PIO_MSG_PUT_VARA_FLOAT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -1581,13 +1659,13 @@ int PIOc_put_vara_text (int ncid, int varid, const PIO_Offset start[], const PIO #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vara_text(file->fh, varid, (size_t *) start, (size_t *) count, op);; + ierr = nc_put_vara_float(file->fh, varid, (size_t *) start, (size_t *) count, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_vara_text(file->fh, varid, (size_t *) start, (size_t *) count, op);; + ierr = nc_put_vara_float(file->fh, varid, (size_t *) start, (size_t *) count, op);; } break; #endif @@ -1602,7 +1680,7 @@ int PIOc_put_vara_text (int ncid, int varid, const PIO_Offset start[], const PIO request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_vara_text(file->fh, varid, start, count, op, request);; + ierr = ncmpi_bput_vara_float(file->fh, varid, start, count, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -1621,13 +1699,13 @@ int PIOc_put_vara_text (int ncid, int varid, const PIO_Offset start[], const PIO } /// -/// PIO interface to nc_put_varm_text +/// PIO interface to nc_put_var1_float /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_varm_text (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const PIO_Offset imap[], const char *op) +int PIOc_put_var1_float (int ncid, int varid, const PIO_Offset index[], const float *op) { int ierr; int msg; @@ -1644,7 +1722,7 @@ int PIOc_put_varm_text (int ncid, int varid, const PIO_Offset start[], const PIO if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARM_TEXT; + msg = PIO_MSG_PUT_VAR1_FLOAT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -1659,13 +1737,13 @@ int PIOc_put_varm_text (int ncid, int varid, const PIO_Offset start[], const PIO #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_varm_text(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; + ierr = nc_put_var1_float(file->fh, varid, (size_t *) index, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_varm_text(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; + ierr = nc_put_var1_float(file->fh, varid, (size_t *) index, op);; } break; #endif @@ -1680,7 +1758,7 @@ int PIOc_put_varm_text (int ncid, int varid, const PIO_Offset start[], const PIO request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_varm_text(file->fh, varid, start, count, stride, imap, op, request);; + ierr = ncmpi_bput_var1_float(file->fh, varid, index, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -1698,14 +1776,15 @@ int PIOc_put_varm_text (int ncid, int varid, const PIO_Offset start[], const PIO return ierr; } + /// -/// PIO interface to nc_put_varm_ushort +/// PIO interface to nc_put_var1_text /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_varm_ushort (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const PIO_Offset imap[], const unsigned short *op) +int PIOc_put_var1_text (int ncid, int varid, const PIO_Offset index[], const char *op) { int ierr; int msg; @@ -1722,7 +1801,7 @@ int PIOc_put_varm_ushort (int ncid, int varid, const PIO_Offset start[], const P if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARM_USHORT; + msg = PIO_MSG_PUT_VAR1_TEXT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -1737,13 +1816,13 @@ int PIOc_put_varm_ushort (int ncid, int varid, const PIO_Offset start[], const P #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_varm_ushort(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; + ierr = nc_put_var1_text(file->fh, varid, (size_t *) index, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_varm_ushort(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; + ierr = nc_put_var1_text(file->fh, varid, (size_t *) index, op);; } break; #endif @@ -1758,7 +1837,7 @@ int PIOc_put_varm_ushort (int ncid, int varid, const PIO_Offset start[], const P request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_varm_ushort(file->fh, varid, start, count, stride, imap, op, request);; + ierr = ncmpi_bput_var1_text(file->fh, varid, index, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -1777,13 +1856,13 @@ int PIOc_put_varm_ushort (int ncid, int varid, const PIO_Offset start[], const P } /// -/// PIO interface to nc_put_var_ulonglong +/// PIO interface to nc_put_vars_text /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_var_ulonglong (int ncid, int varid, const unsigned long long *op) +int PIOc_put_vars_text (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const char *op) { int ierr; int msg; @@ -1800,7 +1879,7 @@ int PIOc_put_var_ulonglong (int ncid, int varid, const unsigned long long *op) if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VAR_ULONGLONG; + msg = PIO_MSG_PUT_VARS_TEXT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -1815,13 +1894,13 @@ int PIOc_put_var_ulonglong (int ncid, int varid, const unsigned long long *op) #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var_ulonglong(file->fh, varid, op);; + ierr = nc_put_vars_text(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_var_ulonglong(file->fh, varid, op);; + ierr = nc_put_vars_text(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; } break; #endif @@ -1836,7 +1915,7 @@ int PIOc_put_var_ulonglong (int ncid, int varid, const unsigned long long *op) request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_var_ulonglong(file->fh, varid, op, request);; + ierr = ncmpi_bput_vars_text(file->fh, varid, start, count, stride, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -1854,14 +1933,15 @@ int PIOc_put_var_ulonglong (int ncid, int varid, const unsigned long long *op) return ierr; } + /// -/// PIO interface to nc_put_var_int +/// PIO interface to nc_put_vars_double /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_var_int (int ncid, int varid, const int *op) +int PIOc_put_vars_double (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const double *op) { int ierr; int msg; @@ -1878,7 +1958,7 @@ int PIOc_put_var_int (int ncid, int varid, const int *op) if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VAR_INT; + msg = PIO_MSG_PUT_VARS_DOUBLE; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -1893,13 +1973,13 @@ int PIOc_put_var_int (int ncid, int varid, const int *op) #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var_int(file->fh, varid, op);; + ierr = nc_put_vars_double(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_var_int(file->fh, varid, op);; + ierr = nc_put_vars_double(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; } break; #endif @@ -1914,7 +1994,7 @@ int PIOc_put_var_int (int ncid, int varid, const int *op) request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_var_int(file->fh, varid, op, request);; + ierr = ncmpi_bput_vars_double(file->fh, varid, start, count, stride, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -1933,13 +2013,13 @@ int PIOc_put_var_int (int ncid, int varid, const int *op) } /// -/// PIO interface to nc_put_var_longlong +/// PIO interface to nc_put_vara_longlong /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_var_longlong (int ncid, int varid, const long long *op) +int PIOc_put_vara_longlong (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const long long *op) { int ierr; int msg; @@ -1956,7 +2036,7 @@ int PIOc_put_var_longlong (int ncid, int varid, const long long *op) if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VAR_LONGLONG; + msg = PIO_MSG_PUT_VARA_LONGLONG; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -1971,13 +2051,13 @@ int PIOc_put_var_longlong (int ncid, int varid, const long long *op) #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var_longlong(file->fh, varid, op);; + ierr = nc_put_vara_longlong(file->fh, varid, (size_t *) start, (size_t *) count, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_var_longlong(file->fh, varid, op);; + ierr = nc_put_vara_longlong(file->fh, varid, (size_t *) start, (size_t *) count, op);; } break; #endif @@ -1992,7 +2072,7 @@ int PIOc_put_var_longlong (int ncid, int varid, const long long *op) request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_var_longlong(file->fh, varid, op, request);; + ierr = ncmpi_bput_vara_longlong(file->fh, varid, start, count, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -2011,13 +2091,13 @@ int PIOc_put_var_longlong (int ncid, int varid, const long long *op) } /// -/// PIO interface to nc_put_var_schar +/// PIO interface to nc_put_var_double /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_var_schar (int ncid, int varid, const signed char *op) +int PIOc_put_var_double (int ncid, int varid, const double *op) { int ierr; int msg; @@ -2034,7 +2114,7 @@ int PIOc_put_var_schar (int ncid, int varid, const signed char *op) if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VAR_SCHAR; + msg = PIO_MSG_PUT_VAR_DOUBLE; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -2049,1885 +2129,13 @@ int PIOc_put_var_schar (int ncid, int varid, const signed char *op) #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var_schar(file->fh, varid, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_var_schar(file->fh, varid, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_var_schar(file->fh, varid, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_var_uint -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_var_uint (int ncid, int varid, const unsigned int *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VAR_UINT; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var_uint(file->fh, varid, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_var_uint(file->fh, varid, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_var_uint(file->fh, varid, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_var -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_var (int ncid, int varid, const void *buf, PIO_Offset bufcount, MPI_Datatype buftype) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VAR; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var(file->fh, varid, buf);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_var(file->fh, varid, buf);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_var(file->fh, varid, buf, bufcount, buftype, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_vara_ushort -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_vara_ushort (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const unsigned short *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VARA_USHORT; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vara_ushort(file->fh, varid, (size_t *) start, (size_t *) count, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_vara_ushort(file->fh, varid, (size_t *) start, (size_t *) count, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_vara_ushort(file->fh, varid, start, count, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_vars_short -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_vars_short (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const short *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VARS_SHORT; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vars_short(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_vars_short(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_vars_short(file->fh, varid, start, count, stride, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_vara_uint -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_vara_uint (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const unsigned int *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VARA_UINT; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vara_uint(file->fh, varid, (size_t *) start, (size_t *) count, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_vara_uint(file->fh, varid, (size_t *) start, (size_t *) count, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_vara_uint(file->fh, varid, start, count, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_vara_schar -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_vara_schar (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const signed char *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VARA_SCHAR; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vara_schar(file->fh, varid, (size_t *) start, (size_t *) count, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_vara_schar(file->fh, varid, (size_t *) start, (size_t *) count, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_vara_schar(file->fh, varid, start, count, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_varm_ulonglong -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_varm_ulonglong (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const PIO_Offset imap[], const unsigned long long *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VARM_ULONGLONG; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_varm_ulonglong(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_varm_ulonglong(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_varm_ulonglong(file->fh, varid, start, count, stride, imap, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_var1_uchar -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_var1_uchar (int ncid, int varid, const PIO_Offset index[], const unsigned char *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VAR1_UCHAR; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var1_uchar(file->fh, varid, (size_t *) index, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_var1_uchar(file->fh, varid, (size_t *) index, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_var1_uchar(file->fh, varid, index, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_varm_int -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_varm_int (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const PIO_Offset imap[], const int *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VARM_INT; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_varm_int(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_varm_int(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_varm_int(file->fh, varid, start, count, stride, imap, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_vars_schar -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_vars_schar (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const signed char *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VARS_SCHAR; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vars_schar(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_vars_schar(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_vars_schar(file->fh, varid, start, count, stride, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_var1 -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_var1 (int ncid, int varid, const PIO_Offset index[], const void *buf, PIO_Offset bufcount, MPI_Datatype buftype) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VAR1; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var1(file->fh, varid, (size_t *) index, buf);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_var1(file->fh, varid, (size_t *) index, buf);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_var1(file->fh, varid, index, buf, bufcount, buftype, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_vara_float -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_vara_float (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const float *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VARA_FLOAT; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vara_float(file->fh, varid, (size_t *) start, (size_t *) count, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_vara_float(file->fh, varid, (size_t *) start, (size_t *) count, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_vara_float(file->fh, varid, start, count, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_var1_float -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_var1_float (int ncid, int varid, const PIO_Offset index[], const float *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VAR1_FLOAT; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var1_float(file->fh, varid, (size_t *) index, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_var1_float(file->fh, varid, (size_t *) index, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_var1_float(file->fh, varid, index, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_varm_float -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_varm_float (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const PIO_Offset imap[], const float *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VARM_FLOAT; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_varm_float(file->fh, varid,(size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_varm_float(file->fh, varid,(size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_varm_float(file->fh, varid, start, count, stride, imap, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_var1_text -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_var1_text (int ncid, int varid, const PIO_Offset index[], const char *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VAR1_TEXT; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var1_text(file->fh, varid, (size_t *) index, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_var1_text(file->fh, varid, (size_t *) index, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_var1_text(file->fh, varid, index, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_vars_text -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_vars_text (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const char *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VARS_TEXT; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vars_text(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_vars_text(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_vars_text(file->fh, varid, start, count, stride, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_varm_long -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_varm_long (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const PIO_Offset imap[], const long *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VARM_LONG; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_varm_long(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_varm_long(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_varm_long(file->fh, varid, start, count, stride, imap, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_vars_double -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_vars_double (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const double *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VARS_DOUBLE; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vars_double(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_vars_double(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_vars_double(file->fh, varid, start, count, stride, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_vara_longlong -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_vara_longlong (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const long long *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VARA_LONGLONG; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vara_longlong(file->fh, varid, (size_t *) start, (size_t *) count, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_vara_longlong(file->fh, varid, (size_t *) start, (size_t *) count, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_vara_longlong(file->fh, varid, start, count, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_var_double -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_var_double (int ncid, int varid, const double *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VAR_DOUBLE; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var_double(file->fh, varid, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_var_double(file->fh, varid, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_var_double(file->fh, varid, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_var_float -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_var_float (int ncid, int varid, const float *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VAR_FLOAT; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var_float(file->fh, varid, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_var_float(file->fh, varid, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_var_float(file->fh, varid, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_var1_ulonglong -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_var1_ulonglong (int ncid, int varid, const PIO_Offset index[], const unsigned long long *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VAR1_ULONGLONG; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var1_ulonglong(file->fh, varid, (size_t *) index, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_var1_ulonglong(file->fh, varid, (size_t *) index, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_var1_ulonglong(file->fh, varid, index, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_varm_uint -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_varm_uint (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const PIO_Offset imap[], const unsigned int *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VARM_UINT; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_varm_uint(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_varm_uint(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_varm_uint(file->fh, varid, start, count, stride, imap, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} - -/// -/// PIO interface to nc_put_var1_uint -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_var1_uint (int ncid, int varid, const PIO_Offset index[], const unsigned int *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VAR1_UINT; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var1_uint(file->fh, varid, (size_t *) index, op);; + ierr = nc_put_var_double(file->fh, varid, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_var1_uint(file->fh, varid, (size_t *) index, op);; + ierr = nc_put_var_double(file->fh, varid, op);; } break; #endif @@ -3942,7 +2150,7 @@ int PIOc_put_var1_uint (int ncid, int varid, const PIO_Offset index[], const uns request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_var1_uint(file->fh, varid, index, op, request);; + ierr = ncmpi_bput_var_double(file->fh, varid, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -3961,13 +2169,13 @@ int PIOc_put_var1_uint (int ncid, int varid, const PIO_Offset index[], const uns } /// -/// PIO interface to nc_put_var1_int +/// PIO interface to nc_put_var_float /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_var1_int (int ncid, int varid, const PIO_Offset index[], const int *op) +int PIOc_put_var_float (int ncid, int varid, const float *op) { int ierr; int msg; @@ -3984,7 +2192,7 @@ int PIOc_put_var1_int (int ncid, int varid, const PIO_Offset index[], const int if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VAR1_INT; + msg = PIO_MSG_PUT_VAR_FLOAT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -3999,13 +2207,13 @@ int PIOc_put_var1_int (int ncid, int varid, const PIO_Offset index[], const int #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var1_int(file->fh, varid, (size_t *) index, op);; + ierr = nc_put_var_float(file->fh, varid, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_var1_int(file->fh, varid, (size_t *) index, op);; + ierr = nc_put_var_float(file->fh, varid, op);; } break; #endif @@ -4020,7 +2228,7 @@ int PIOc_put_var1_int (int ncid, int varid, const PIO_Offset index[], const int request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_var1_int(file->fh, varid, index, op, request);; + ierr = ncmpi_bput_var_float(file->fh, varid, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -4039,13 +2247,13 @@ int PIOc_put_var1_int (int ncid, int varid, const PIO_Offset index[], const int } /// -/// PIO interface to nc_put_vars_float +/// PIO interface to nc_put_var1_ulonglong /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_vars_float (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const float *op) +int PIOc_put_var1_ulonglong (int ncid, int varid, const PIO_Offset index[], const unsigned long long *op) { int ierr; int msg; @@ -4062,7 +2270,7 @@ int PIOc_put_vars_float (int ncid, int varid, const PIO_Offset start[], const PI if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARS_FLOAT; + msg = PIO_MSG_PUT_VAR1_ULONGLONG; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -4077,13 +2285,13 @@ int PIOc_put_vars_float (int ncid, int varid, const PIO_Offset start[], const PI #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vars_float(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; + ierr = nc_put_var1_ulonglong(file->fh, varid, (size_t *) index, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_vars_float(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; + ierr = nc_put_var1_ulonglong(file->fh, varid, (size_t *) index, op);; } break; #endif @@ -4098,7 +2306,7 @@ int PIOc_put_vars_float (int ncid, int varid, const PIO_Offset start[], const PI request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_vars_float(file->fh, varid, start, count, stride, op, request);; + ierr = ncmpi_bput_var1_ulonglong(file->fh, varid, index, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -4116,14 +2324,15 @@ int PIOc_put_vars_float (int ncid, int varid, const PIO_Offset start[], const PI return ierr; } + /// -/// PIO interface to nc_put_vara_short +/// PIO interface to nc_put_var1_uint /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_vara_short (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const short *op) +int PIOc_put_var1_uint (int ncid, int varid, const PIO_Offset index[], const unsigned int *op) { int ierr; int msg; @@ -4140,7 +2349,7 @@ int PIOc_put_vara_short (int ncid, int varid, const PIO_Offset start[], const PI if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARA_SHORT; + msg = PIO_MSG_PUT_VAR1_UINT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -4155,13 +2364,13 @@ int PIOc_put_vara_short (int ncid, int varid, const PIO_Offset start[], const PI #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vara_short(file->fh, varid, (size_t *) start, (size_t *) count, op);; + ierr = nc_put_var1_uint(file->fh, varid, (size_t *) index, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_vara_short(file->fh, varid, (size_t *) start, (size_t *) count, op);; + ierr = nc_put_var1_uint(file->fh, varid, (size_t *) index, op);; } break; #endif @@ -4176,7 +2385,7 @@ int PIOc_put_vara_short (int ncid, int varid, const PIO_Offset start[], const PI request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_vara_short(file->fh, varid, start, count, op, request);; + ierr = ncmpi_bput_var1_uint(file->fh, varid, index, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -4195,13 +2404,13 @@ int PIOc_put_vara_short (int ncid, int varid, const PIO_Offset start[], const PI } /// -/// PIO interface to nc_put_var1_schar +/// PIO interface to nc_put_var1_int /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_var1_schar (int ncid, int varid, const PIO_Offset index[], const signed char *op) +int PIOc_put_var1_int (int ncid, int varid, const PIO_Offset index[], const int *op) { int ierr; int msg; @@ -4218,7 +2427,7 @@ int PIOc_put_var1_schar (int ncid, int varid, const PIO_Offset index[], const si if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VAR1_SCHAR; + msg = PIO_MSG_PUT_VAR1_INT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -4233,13 +2442,13 @@ int PIOc_put_var1_schar (int ncid, int varid, const PIO_Offset index[], const si #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var1_schar(file->fh, varid, (size_t *) index, op);; + ierr = nc_put_var1_int(file->fh, varid, (size_t *) index, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_var1_schar(file->fh, varid, (size_t *) index, op);; + ierr = nc_put_var1_int(file->fh, varid, (size_t *) index, op);; } break; #endif @@ -4254,7 +2463,7 @@ int PIOc_put_var1_schar (int ncid, int varid, const PIO_Offset index[], const si request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_var1_schar(file->fh, varid, index, op, request);; + ierr = ncmpi_bput_var1_int(file->fh, varid, index, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -4273,13 +2482,13 @@ int PIOc_put_var1_schar (int ncid, int varid, const PIO_Offset index[], const si } /// -/// PIO interface to nc_put_vara_ulonglong +/// PIO interface to nc_put_vars_float /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_vara_ulonglong (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const unsigned long long *op) +int PIOc_put_vars_float (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const float *op) { int ierr; int msg; @@ -4296,7 +2505,7 @@ int PIOc_put_vara_ulonglong (int ncid, int varid, const PIO_Offset start[], cons if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARA_ULONGLONG; + msg = PIO_MSG_PUT_VARS_FLOAT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -4311,13 +2520,13 @@ int PIOc_put_vara_ulonglong (int ncid, int varid, const PIO_Offset start[], cons #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vara_ulonglong(file->fh, varid, (size_t *) start, (size_t *) count, op);; + ierr = nc_put_vars_float(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_vara_ulonglong(file->fh, varid, (size_t *) start, (size_t *) count, op);; + ierr = nc_put_vars_float(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; } break; #endif @@ -4332,7 +2541,7 @@ int PIOc_put_vara_ulonglong (int ncid, int varid, const PIO_Offset start[], cons request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_vara_ulonglong(file->fh, varid, start, count, op, request);; + ierr = ncmpi_bput_vars_float(file->fh, varid, start, count, stride, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -4351,13 +2560,13 @@ int PIOc_put_vara_ulonglong (int ncid, int varid, const PIO_Offset start[], cons } /// -/// PIO interface to nc_put_varm_double +/// PIO interface to nc_put_vara_short /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_varm_double (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const PIO_Offset imap[], const double *op) +int PIOc_put_vara_short (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const short *op) { int ierr; int msg; @@ -4374,7 +2583,7 @@ int PIOc_put_varm_double (int ncid, int varid, const PIO_Offset start[], const P if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARM_DOUBLE; + msg = PIO_MSG_PUT_VARA_SHORT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -4389,13 +2598,13 @@ int PIOc_put_varm_double (int ncid, int varid, const PIO_Offset start[], const P #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_varm_double(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; + ierr = nc_put_vara_short(file->fh, varid, (size_t *) start, (size_t *) count, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_varm_double(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; + ierr = nc_put_vara_short(file->fh, varid, (size_t *) start, (size_t *) count, op);; } break; #endif @@ -4410,7 +2619,7 @@ int PIOc_put_varm_double (int ncid, int varid, const PIO_Offset start[], const P request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_varm_double(file->fh, varid, start, count, stride, imap, op, request);; + ierr = ncmpi_bput_vara_short(file->fh, varid, start, count, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -4429,13 +2638,13 @@ int PIOc_put_varm_double (int ncid, int varid, const PIO_Offset start[], const P } /// -/// PIO interface to nc_put_vara +/// PIO interface to nc_put_var1_schar /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_vara (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const void *buf, PIO_Offset bufcount, MPI_Datatype buftype) +int PIOc_put_var1_schar (int ncid, int varid, const PIO_Offset index[], const signed char *op) { int ierr; int msg; @@ -4452,7 +2661,7 @@ int PIOc_put_vara (int ncid, int varid, const PIO_Offset start[], const PIO_Offs if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARA; + msg = PIO_MSG_PUT_VAR1_SCHAR; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -4467,13 +2676,13 @@ int PIOc_put_vara (int ncid, int varid, const PIO_Offset start[], const PIO_Offs #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vara(file->fh, varid, (size_t *) start, (size_t *) count, buf);; + ierr = nc_put_var1_schar(file->fh, varid, (size_t *) index, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_vara(file->fh, varid, (size_t *) start, (size_t *) count, buf);; + ierr = nc_put_var1_schar(file->fh, varid, (size_t *) index, op);; } break; #endif @@ -4488,7 +2697,7 @@ int PIOc_put_vara (int ncid, int varid, const PIO_Offset start[], const PIO_Offs request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_vara(file->fh, varid, start, count, buf, bufcount, buftype, request);; + ierr = ncmpi_bput_var1_schar(file->fh, varid, index, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -4507,13 +2716,13 @@ int PIOc_put_vara (int ncid, int varid, const PIO_Offset start[], const PIO_Offs } /// -/// PIO interface to nc_put_vara_long +/// PIO interface to nc_put_vara_ulonglong /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_vara_long (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const long *op) +int PIOc_put_vara_ulonglong (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const unsigned long long *op) { int ierr; int msg; @@ -4530,7 +2739,7 @@ int PIOc_put_vara_long (int ncid, int varid, const PIO_Offset start[], const PIO if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARA_LONG; + msg = PIO_MSG_PUT_VARA_ULONGLONG; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -4545,13 +2754,13 @@ int PIOc_put_vara_long (int ncid, int varid, const PIO_Offset start[], const PIO #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vara_long(file->fh, varid, (size_t *) start, (size_t *) count, op);; + ierr = nc_put_vara_ulonglong(file->fh, varid, (size_t *) start, (size_t *) count, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_vara_long(file->fh, varid, (size_t *) start, (size_t *) count, op);; + ierr = nc_put_vara_ulonglong(file->fh, varid, (size_t *) start, (size_t *) count, op);; } break; #endif @@ -4566,7 +2775,7 @@ int PIOc_put_vara_long (int ncid, int varid, const PIO_Offset start[], const PIO request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_vara_long(file->fh, varid, start, count, op, request);; + ierr = ncmpi_bput_vara_ulonglong(file->fh, varid, start, count, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -4584,14 +2793,15 @@ int PIOc_put_vara_long (int ncid, int varid, const PIO_Offset start[], const PIO return ierr; } + /// -/// PIO interface to nc_put_var1_double +/// PIO interface to nc_put_vara /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_var1_double (int ncid, int varid, const PIO_Offset index[], const double *op) +int PIOc_put_vara (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const void *buf, PIO_Offset bufcount, MPI_Datatype buftype) { int ierr; int msg; @@ -4608,7 +2818,7 @@ int PIOc_put_var1_double (int ncid, int varid, const PIO_Offset index[], const d if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VAR1_DOUBLE; + msg = PIO_MSG_PUT_VARA; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -4623,13 +2833,13 @@ int PIOc_put_var1_double (int ncid, int varid, const PIO_Offset index[], const d #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var1_double(file->fh, varid, (size_t *) index, op);; + ierr = nc_put_vara(file->fh, varid, (size_t *) start, (size_t *) count, buf);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_var1_double(file->fh, varid, (size_t *) index, op);; + ierr = nc_put_vara(file->fh, varid, (size_t *) start, (size_t *) count, buf);; } break; #endif @@ -4644,7 +2854,7 @@ int PIOc_put_var1_double (int ncid, int varid, const PIO_Offset index[], const d request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_var1_double(file->fh, varid, index, op, request);; + ierr = ncmpi_bput_vara(file->fh, varid, start, count, buf, bufcount, buftype, request);; }else{ *request = PIO_REQ_NULL; } @@ -4663,13 +2873,13 @@ int PIOc_put_var1_double (int ncid, int varid, const PIO_Offset index[], const d } /// -/// PIO interface to nc_put_varm_schar +/// PIO interface to nc_put_vara_long /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_varm_schar (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const PIO_Offset imap[], const signed char *op) +int PIOc_put_vara_long (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const long *op) { int ierr; int msg; @@ -4686,7 +2896,7 @@ int PIOc_put_varm_schar (int ncid, int varid, const PIO_Offset start[], const PI if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARM_SCHAR; + msg = PIO_MSG_PUT_VARA_LONG; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -4701,13 +2911,13 @@ int PIOc_put_varm_schar (int ncid, int varid, const PIO_Offset start[], const PI #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_varm_schar(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; + ierr = nc_put_vara_long(file->fh, varid, (size_t *) start, (size_t *) count, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_varm_schar(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; + ierr = nc_put_vara_long(file->fh, varid, (size_t *) start, (size_t *) count, op);; } break; #endif @@ -4722,7 +2932,7 @@ int PIOc_put_varm_schar (int ncid, int varid, const PIO_Offset start[], const PI request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_varm_schar(file->fh, varid, start, count, stride, imap, op, request);; + ierr = ncmpi_bput_vara_long(file->fh, varid, start, count, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -4741,13 +2951,13 @@ int PIOc_put_varm_schar (int ncid, int varid, const PIO_Offset start[], const PI } /// -/// PIO interface to nc_put_var_text +/// PIO interface to nc_put_var1_double /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_var_text (int ncid, int varid, const char *op) +int PIOc_put_var1_double (int ncid, int varid, const PIO_Offset index[], const double *op) { int ierr; int msg; @@ -4764,7 +2974,7 @@ int PIOc_put_var_text (int ncid, int varid, const char *op) if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VAR_TEXT; + msg = PIO_MSG_PUT_VAR1_DOUBLE; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -4779,13 +2989,13 @@ int PIOc_put_var_text (int ncid, int varid, const char *op) #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_var_text(file->fh, varid, op);; + ierr = nc_put_var1_double(file->fh, varid, (size_t *) index, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_var_text(file->fh, varid, op);; + ierr = nc_put_var1_double(file->fh, varid, (size_t *) index, op);; } break; #endif @@ -4800,7 +3010,7 @@ int PIOc_put_var_text (int ncid, int varid, const char *op) request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_var_text(file->fh, varid, op, request);; + ierr = ncmpi_bput_var1_double(file->fh, varid, index, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -4819,13 +3029,13 @@ int PIOc_put_var_text (int ncid, int varid, const char *op) } /// -/// PIO interface to nc_put_vars_int +/// PIO interface to nc_put_var_text /// /// This routine is called collectively by all tasks in the communicator ios.union_comm. /// /// Refer to the netcdf documentation. /// -int PIOc_put_vars_int (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const int *op) +int PIOc_put_var_text (int ncid, int varid, const char *op) { int ierr; int msg; @@ -4842,7 +3052,7 @@ int PIOc_put_vars_int (int ncid, int varid, const PIO_Offset start[], const PIO_ if(file == NULL) return PIO_EBADID; ios = file->iosystem; - msg = PIO_MSG_PUT_VARS_INT; + msg = PIO_MSG_PUT_VAR_TEXT; if(ios->async_interface && ! ios->ioproc){ if(ios->compmaster) @@ -4857,13 +3067,13 @@ int PIOc_put_vars_int (int ncid, int varid, const PIO_Offset start[], const PIO_ #ifdef _NETCDF4 case PIO_IOTYPE_NETCDF4P: ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_vars_int(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; + ierr = nc_put_var_text(file->fh, varid, op);; break; case PIO_IOTYPE_NETCDF4C: #endif case PIO_IOTYPE_NETCDF: if(ios->io_rank==0){ - ierr = nc_put_vars_int(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, op);; + ierr = nc_put_var_text(file->fh, varid, op);; } break; #endif @@ -4878,7 +3088,7 @@ int PIOc_put_vars_int (int ncid, int varid, const PIO_Offset start[], const PIO_ request = vdesc->request+vdesc->nreqs; if(ios->io_rank==0){ - ierr = ncmpi_bput_vars_int(file->fh, varid, start, count, stride, op, request);; + ierr = ncmpi_bput_var_text(file->fh, varid, op, request);; }else{ *request = PIO_REQ_NULL; } @@ -4896,6 +3106,13 @@ int PIOc_put_vars_int (int ncid, int varid, const PIO_Offset start[], const PIO_ return ierr; } +/** PIO interface to nc_put_vars_int */ +int PIOc_put_vars_int (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], + const PIO_Offset stride[], const int *op) +{ + return PIOc_put_vars_tc(ncid, varid, start, count, stride, NC_INT, op); +} + /// /// PIO interface to nc_put_var1_short /// @@ -5287,81 +3504,4 @@ int PIOc_put_var_long (int ncid, int varid, const long *op) return ierr; } -/// -/// PIO interface to nc_put_varm_longlong -/// -/// This routine is called collectively by all tasks in the communicator ios.union_comm. -/// -/// Refer to the netcdf documentation. -/// -int PIOc_put_varm_longlong (int ncid, int varid, const PIO_Offset start[], const PIO_Offset count[], const PIO_Offset stride[], const PIO_Offset imap[], const long long *op) -{ - int ierr; - int msg; - int mpierr; - iosystem_desc_t *ios; - file_desc_t *file; - var_desc_t *vdesc; - PIO_Offset usage; - int *request; - - ierr = PIO_NOERR; - - file = pio_get_file_from_id(ncid); - if(file == NULL) - return PIO_EBADID; - ios = file->iosystem; - msg = PIO_MSG_PUT_VARM_LONGLONG; - - if(ios->async_interface && ! ios->ioproc){ - if(ios->compmaster) - mpierr = MPI_Send(&msg, 1,MPI_INT, ios->ioroot, 1, ios->union_comm); - mpierr = MPI_Bcast(&(file->fh),1, MPI_INT, ios->compmaster, ios->intercomm); - } - - - if(ios->ioproc){ - switch(file->iotype){ -#ifdef _NETCDF -#ifdef _NETCDF4 - case PIO_IOTYPE_NETCDF4P: - ierr = nc_var_par_access(file->fh, varid, NC_COLLECTIVE); - ierr = nc_put_varm_longlong(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; - break; - case PIO_IOTYPE_NETCDF4C: -#endif - case PIO_IOTYPE_NETCDF: - if(ios->io_rank==0){ - ierr = nc_put_varm_longlong(file->fh, varid, (size_t *) start, (size_t *) count, (ptrdiff_t *) stride, (ptrdiff_t *) imap, op);; - } - break; -#endif -#ifdef _PNETCDF - case PIO_IOTYPE_PNETCDF: - vdesc = file->varlist + varid; - - if(vdesc->nreqs%PIO_REQUEST_ALLOC_CHUNK == 0 ){ - vdesc->request = realloc(vdesc->request, - sizeof(int)*(vdesc->nreqs+PIO_REQUEST_ALLOC_CHUNK)); - } - request = vdesc->request+vdesc->nreqs; - - if(ios->io_rank==0){ - ierr = ncmpi_bput_varm_longlong(file->fh, varid, start, count, stride, imap, op, request);; - }else{ - *request = PIO_REQ_NULL; - } - vdesc->nreqs++; - flush_output_buffer(file, false, 0); - break; -#endif - default: - ierr = iotype_error(file->iotype,__FILE__,__LINE__); - } - } - - ierr = check_netcdf(file, ierr, __FILE__,__LINE__); - - return ierr; -} diff --git a/tests/unit/test_intercomm.c b/tests/unit/test_intercomm.c index ca8f7aa7a3a4..6cb671b6ec31 100644 --- a/tests/unit/test_intercomm.c +++ b/tests/unit/test_intercomm.c @@ -19,9 +19,6 @@ /** The length of our test data. */ #define DIM_LEN 4 -/** The length of data on each (of 2) computational task. */ -#define LOCAL_DIM_LEN 2 - /** The name of the dimension in the netCDF output file. */ #define FIRST_DIM_NAME "jojo" #define DIM_NAME "dim_test_intercomm" @@ -379,7 +376,7 @@ main(int argc, char **argv) { int ncid, varid, dimid; PIO_Offset start[NDIM], count[NDIM] = {0}; - int data[LOCAL_DIM_LEN]; + int data[DIM_LEN]; /* Create a netCDF file with one dimension and one variable. */ if (verbose) @@ -495,16 +492,21 @@ main(int argc, char **argv) if ((ret = PIOc_enddef(ncid))) ERR(ret); - /* /\* Write some data. *\/ */ - /* for (int i = 0; i < LOCAL_DIM_LEN; i++) */ - /* data[i] = my_rank; */ - /* if (verbose) */ - /* printf("%d test_intercomm writing data\n", my_rank); */ - /* start[0] = !my_rank ? 0 : 2; */ - /* count[0] = 2; */ - /* sleep(2); */ - /* if ((ret = PIOc_put_vars_tc(ncid, varid, start, count, NULL, NC_INT, data))) */ - /* ERR(ret); */ + /* Write some data. For the PIOc_put/get functions, all + * data must be on compmaster before the function is + * called. Only compmaster's arguments are passed to the + * async msg handler. All other computation tasks are + * ignored. */ + for (int i = 0; i < DIM_LEN; i++) + data[i] = i; + if (verbose) + printf("%d test_intercomm writing data\n", my_rank); + if (verbose) + printf("%d test_intercomm writing data\n", my_rank); + start[0] = 0; + count[0] = DIM_LEN; + if ((ret = PIOc_put_vars_tc(ncid, varid, start, count, NULL, NC_INT, data))) + ERR(ret); /* Close the file. */ if (verbose)