forked from CESM-Development/cime
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request ESMCI#1579 from NCAR/ejh_async_nc_create
starting to get async working with netcdf integration
- Loading branch information
Showing
7 changed files
with
305 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
/* This is part of the netCDF package. | ||
Copyright 2018 University Corporation for Atmospheric Research/Unidata | ||
See COPYRIGHT file for conditions of use. | ||
Common includes, defines, etc., for test code in the libsrc4 and | ||
nc_test4 directories. | ||
Ed Hartnett, Russ Rew, Dennis Heimbigner | ||
*/ | ||
|
||
#ifndef _PIO_ERR_MACROS_H | ||
#define _PIO_ERR_MACROS_H | ||
|
||
#include "config.h" | ||
#include <assert.h> | ||
#include <stdio.h> | ||
#include <string.h> | ||
#include <stdlib.h> | ||
|
||
/* Err is used to keep track of errors within each set of tests, | ||
* total_err is the number of errors in the entire test program, which | ||
* generally cosists of several sets of tests. */ | ||
static int total_err = 0, err = 0; | ||
|
||
/* This macro prints an error message with line number and name of | ||
* test program. */ | ||
#define PERR do { \ | ||
fflush(stdout); /* Make sure our stdout is synced with stderr. */ \ | ||
err++; \ | ||
fprintf(stderr, "Sorry! Unexpected result, %s, line: %d\n", \ | ||
__FILE__, __LINE__); \ | ||
fflush(stderr); \ | ||
return 2; \ | ||
} while (0) | ||
|
||
/* After a set of tests, report the number of errors, and increment | ||
* total_err. */ | ||
#define PSUMMARIZE_ERR do { \ | ||
if (err) \ | ||
{ \ | ||
printf("%d failures\n", err); \ | ||
total_err += err; \ | ||
err = 0; \ | ||
} \ | ||
else \ | ||
if (!my_rank) \ | ||
printf("ok.\n"); \ | ||
} while (0) | ||
|
||
/* This macro prints out our total number of errors, if any, and exits | ||
* with a 0 if there are not, or a 2 if there were errors. Make will | ||
* stop if a non-zero value is returned from a test program. */ | ||
#define PFINAL_RESULTS do { \ | ||
if (total_err) \ | ||
{ \ | ||
printf("%d errors detected! Sorry!\n", total_err); \ | ||
return 2; \ | ||
} \ | ||
if (!my_rank) \ | ||
printf("*** Tests successful!\n\n"); \ | ||
return 0; \ | ||
} while (0) | ||
|
||
#endif /* _PIO_ERR_MACROS_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
/* Test netcdf integration layer. | ||
Ed Hartnett | ||
*/ | ||
|
||
#include "config.h" | ||
#include <pio.h> | ||
#include "pio_err_macros.h" | ||
|
||
#define FILE_NAME "tst_pio_async.nc" | ||
#define VAR_NAME "data_var" | ||
#define DIM_NAME_UNLIMITED "dim_unlimited" | ||
#define DIM_NAME_X "dim_x" | ||
#define DIM_NAME_Y "dim_y" | ||
#define DIM_LEN_X 4 | ||
#define DIM_LEN_Y 4 | ||
#define NDIM2 2 | ||
#define NDIM3 3 | ||
|
||
extern NC_Dispatch NCINT_dispatcher; | ||
|
||
/* Number of computational components to create. */ | ||
#define COMPONENT_COUNT 1 | ||
|
||
int | ||
main(int argc, char **argv) | ||
{ | ||
int my_rank; | ||
int ntasks; | ||
|
||
/* Initialize MPI. */ | ||
if (MPI_Init(&argc, &argv)) PERR; | ||
|
||
/* Learn my rank and the total number of processors. */ | ||
if (MPI_Comm_rank(MPI_COMM_WORLD, &my_rank)) PERR; | ||
if (MPI_Comm_size(MPI_COMM_WORLD, &ntasks)) PERR; | ||
|
||
if (!my_rank) | ||
printf("\n*** Testing netCDF integration layer.\n"); | ||
if (!my_rank) | ||
printf("*** testing simple async use of netCDF integration layer..."); | ||
{ | ||
int ncid, ioid; | ||
/* int dimid[NDIM3], varid; */ | ||
int dimlen[NDIM3] = {NC_UNLIMITED, DIM_LEN_X, DIM_LEN_Y}; | ||
int iosysid; | ||
size_t elements_per_pe; | ||
size_t *compdof; /* The decomposition mapping. */ | ||
/* int *my_data; */ | ||
/* int *data_in; */ | ||
int num_procs2[COMPONENT_COUNT] = {3}; | ||
int num_io_procs = 1; | ||
int i; | ||
|
||
/* Turn on logging for PIO library. */ | ||
PIOc_set_log_level(3); | ||
|
||
/* Initialize the intracomm. */ | ||
if (nc_def_async(MPI_COMM_WORLD, num_io_procs, NULL, COMPONENT_COUNT, | ||
num_procs2, NULL, NULL, NULL, PIO_REARR_BOX, &iosysid)) | ||
PERR; | ||
|
||
if (my_rank) | ||
{ | ||
/* Create a file with a 3D record var. */ | ||
if (nc_create(FILE_NAME, NC_UDF0, &ncid)) PERR; | ||
/* if (nc_def_dim(ncid, DIM_NAME_UNLIMITED, dimlen[0], &dimid[0])) PERR; */ | ||
/* if (nc_def_dim(ncid, DIM_NAME_X, dimlen[1], &dimid[1])) PERR; */ | ||
/* if (nc_def_dim(ncid, DIM_NAME_Y, dimlen[2], &dimid[2])) PERR; */ | ||
/* if (nc_def_var(ncid, VAR_NAME, NC_INT, NDIM3, dimid, &varid)) PERR; */ | ||
|
||
/* Calculate a decomposition for distributed arrays. */ | ||
elements_per_pe = DIM_LEN_X * DIM_LEN_Y / ntasks; | ||
if (!(compdof = malloc(elements_per_pe * sizeof(size_t)))) | ||
PERR; | ||
for (i = 0; i < elements_per_pe; i++) | ||
compdof[i] = my_rank * elements_per_pe + i; | ||
|
||
/* Create the PIO decomposition for this test. */ | ||
if (nc_def_decomp(iosysid, PIO_INT, NDIM2, &dimlen[1], elements_per_pe, | ||
compdof, &ioid, 1, NULL, NULL)) PERR; | ||
free(compdof); | ||
|
||
/* /\* Create some data on this processor. *\/ */ | ||
/* if (!(my_data = malloc(elements_per_pe * sizeof(int)))) PERR; */ | ||
/* for (i = 0; i < elements_per_pe; i++) */ | ||
/* my_data[i] = my_rank * 10 + i; */ | ||
|
||
/* /\* Write some data with distributed arrays. *\/ */ | ||
/* if (nc_put_vard_int(ncid, varid, ioid, 0, my_data)) PERR; */ | ||
/* if (nc_close(ncid)) PERR; */ | ||
|
||
/* /\* Check that our user-defined format has been added. *\/ */ | ||
/* if (nc_inq_user_format(NC_UDF0, &disp_in, NULL)) PERR; */ | ||
/* if (disp_in != &NCINT_dispatcher) PERR; */ | ||
|
||
/* /\* Open the file. *\/ */ | ||
/* if (nc_open(FILE_NAME, NC_UDF0, &ncid)) PERR; */ | ||
|
||
/* /\* Read distributed arrays. *\/ */ | ||
/* if (!(data_in = malloc(elements_per_pe * sizeof(int)))) PERR; */ | ||
/* if (nc_get_vard_int(ncid, varid, ioid, 0, data_in)) PERR; */ | ||
|
||
/* /\* Check results. *\/ */ | ||
/* for (i = 0; i < elements_per_pe; i++) */ | ||
/* if (data_in[i] != my_data[i]) PERR; */ | ||
|
||
/* Close file. */ | ||
if (nc_close(ncid)) PERR; | ||
|
||
/* /\* Free resources. *\/ */ | ||
/* free(data_in); */ | ||
/* free(my_data); */ | ||
if (nc_free_decomp(ioid)) PERR; | ||
if (nc_free_iosystem(iosysid)) PERR; | ||
} | ||
} | ||
if (!my_rank) | ||
PSUMMARIZE_ERR; | ||
|
||
/* Finalize MPI. */ | ||
MPI_Finalize(); | ||
PFINAL_RESULTS; | ||
} |
Oops, something went wrong.