Skip to content

Commit 6d4f2f3

Browse files
Merge pull request #670 from E3SM-Project/jayeshkrishna/add_put_vars_cdf5_pnetcdf_support
Adding support for CDF5 types for PIOc_put_vars*() calls with PnetCDF Also adding C tests with PIOc_put_vars*() calls using CDF5 types.
2 parents ed75e63 + c4d8bc3 commit 6d4f2f3

File tree

2 files changed

+135
-10
lines changed

2 files changed

+135
-10
lines changed

src/clib/pio_getput_int.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3360,6 +3360,21 @@ int spio_put_vars_tc(int ncid, int varid, const PIO_Offset *start, const PIO_Off
33603360
case NC_DOUBLE:
33613361
ierr = ncmpi_bput_vars_double(file->fh, varid, start, count, fake_stride, (const double *) buf, request);
33623362
break;
3363+
case NC_UBYTE:
3364+
ierr = ncmpi_bput_vars_uchar(file->fh, varid, start, count, fake_stride, (const unsigned char *) buf, request);
3365+
break;
3366+
case NC_USHORT:
3367+
ierr = ncmpi_bput_vars_ushort(file->fh, varid, start, count, fake_stride, (const unsigned short int *) buf, request);
3368+
break;
3369+
case NC_UINT:
3370+
ierr = ncmpi_bput_vars_uint(file->fh, varid, start, count, fake_stride, (const unsigned int *) buf, request);
3371+
break;
3372+
case NC_INT64:
3373+
ierr = ncmpi_bput_vars_longlong(file->fh, varid, start, count, fake_stride, (const long long int *) buf, request);
3374+
break;
3375+
case NC_UINT64:
3376+
ierr = ncmpi_bput_vars_ulonglong(file->fh, varid, start, count, fake_stride, (const unsigned long long int *) buf, request);
3377+
break;
33633378
default:
33643379
GPTLstop("PIO:spio_put_vars_tc");
33653380
GPTLstop("PIO:write_total");

tests/cunit/test_pioc_putget.c

Lines changed: 120 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2067,20 +2067,34 @@ int test_cdf5_new_data_types(int iosysid, int num_flavors, int *flavor, int my_r
20672067
int ncid;
20682068
int ret;
20692069

2070-
int varid_ubyte;
2071-
int varid_ushort;
2072-
int varid_uint;
2073-
int varid_int64;
2074-
int varid_uint64;
2070+
const int ARR_SZ = 10;
20752071

2076-
unsigned char ubyte_data_in;
2077-
unsigned short ushort_data_in;
2078-
unsigned int uint_data_in;
2079-
long long int64_data_in;
2080-
unsigned long long uint64_data_in;
2072+
int dimid_arr;
2073+
2074+
int varid_ubyte, varid_ubyte_arr;
2075+
int varid_ushort, varid_ushort_arr;
2076+
int varid_uint, varid_uint_arr;
2077+
int varid_int64, varid_int64_arr;
2078+
int varid_uint64, varid_uint64_arr;
2079+
2080+
unsigned char ubyte_data_in, ubyte_arr[ARR_SZ];
2081+
unsigned short ushort_data_in, ushort_arr[ARR_SZ];
2082+
unsigned int uint_data_in, uint_arr[ARR_SZ];
2083+
long long int64_data_in, int64_arr[ARR_SZ];
2084+
unsigned long long uint64_data_in, uint64_arr[ARR_SZ];
2085+
2086+
PIO_Offset start = 0, count = ARR_SZ;
20812087

20822088
char filename[PIO_MAX_NAME];
20832089

2090+
for(int i = 0; i < ARR_SZ; i++){
2091+
ubyte_arr[i] = ubyte_data;
2092+
ushort_arr[i] = ushort_data;
2093+
uint_arr[i] = uint_data;
2094+
int64_arr[i] = int64_data;
2095+
uint64_arr[i] = uint64_data;
2096+
}
2097+
20842098
for (int fmt = 0; fmt < num_flavors; fmt++)
20852099
{
20862100
snprintf(filename, PIO_MAX_NAME, "%s_cdf5_new_data_types_fmt_%d.nc", TEST_NAME, fmt);
@@ -2106,42 +2120,83 @@ int test_cdf5_new_data_types(int iosysid, int num_flavors, int *flavor, int my_r
21062120
if ((ret = PIOc_put_att_ulonglong(ncid, PIO_GLOBAL, "att_uint64", PIO_UINT64, 1, &uint64_data)))
21072121
ERR(ret);
21082122

2123+
if ((ret = PIOc_def_dim(ncid, "test_dim_sz_10", ((PIO_Offset) ARR_SZ), &dimid_arr)))
2124+
ERR(ret);
2125+
21092126
if ((ret = PIOc_def_var(ncid, "var_ubyte", PIO_UBYTE, 0, NULL, &varid_ubyte)))
21102127
ERR(ret);
21112128

2129+
if ((ret = PIOc_def_var(ncid, "var_ubyte_arr", PIO_UBYTE, 1, &dimid_arr, &varid_ubyte_arr)))
2130+
ERR(ret);
2131+
21122132
if ((ret = PIOc_def_var(ncid, "var_ushort", PIO_USHORT, 0, NULL, &varid_ushort)))
21132133
ERR(ret);
21142134

2135+
if ((ret = PIOc_def_var(ncid, "var_ushort_arr", PIO_USHORT, 1, &dimid_arr, &varid_ushort_arr)))
2136+
ERR(ret);
2137+
21152138
if ((ret = PIOc_def_var(ncid, "var_uint", PIO_UINT, 0, NULL, &varid_uint)))
21162139
ERR(ret);
21172140

2141+
if ((ret = PIOc_def_var(ncid, "var_uint_arr", PIO_UINT, 1, &dimid_arr, &varid_uint_arr)))
2142+
ERR(ret);
2143+
21182144
if ((ret = PIOc_def_var(ncid, "var_int64", PIO_INT64, 0, NULL, &varid_int64)))
21192145
ERR(ret);
21202146

2147+
if ((ret = PIOc_def_var(ncid, "var_int64_arr", PIO_INT64, 1, &dimid_arr, &varid_int64_arr)))
2148+
ERR(ret);
2149+
21212150
if ((ret = PIOc_def_var(ncid, "var_uint64", PIO_UINT64, 0, NULL, &varid_uint64)))
21222151
ERR(ret);
21232152

2153+
if ((ret = PIOc_def_var(ncid, "var_uint64_arr", PIO_UINT64, 1, &dimid_arr, &varid_uint64_arr)))
2154+
ERR(ret);
2155+
21242156
if ((ret = PIOc_enddef(ncid)))
21252157
ERR(ret);
21262158

21272159
if ((ret = PIOc_put_var_uchar(ncid, varid_ubyte, &ubyte_data)))
21282160
ERR(ret);
21292161

2162+
if ((ret = PIOc_put_vars_uchar(ncid, varid_ubyte_arr, &start, &count, NULL, ubyte_arr)))
2163+
ERR(ret);
2164+
21302165
if ((ret = PIOc_put_var_ushort(ncid, varid_ushort, &ushort_data)))
21312166
ERR(ret);
21322167

2168+
if ((ret = PIOc_put_vars_ushort(ncid, varid_ushort_arr, &start, &count, NULL, ushort_arr)))
2169+
ERR(ret);
2170+
21332171
if ((ret = PIOc_put_var_uint(ncid, varid_uint, &uint_data)))
21342172
ERR(ret);
21352173

2174+
if ((ret = PIOc_put_vars_uint(ncid, varid_uint_arr, &start, &count, NULL, uint_arr)))
2175+
ERR(ret);
2176+
21362177
if ((ret = PIOc_put_var_longlong(ncid, varid_int64, &int64_data)))
21372178
ERR(ret);
21382179

2180+
if ((ret = PIOc_put_vars_longlong(ncid, varid_int64_arr, &start, &count, NULL, int64_arr)))
2181+
ERR(ret);
2182+
21392183
if ((ret = PIOc_put_var_ulonglong(ncid, varid_uint64, &uint64_data)))
21402184
ERR(ret);
21412185

2186+
if ((ret = PIOc_put_vars_ulonglong(ncid, varid_uint64_arr, &start, &count, NULL, uint64_arr)))
2187+
ERR(ret);
2188+
21422189
if ((ret = PIOc_closefile(ncid)))
21432190
ERR(ret);
21442191

2192+
for(int i = 0; i < ARR_SZ; i++){
2193+
ubyte_arr[i] = 0;
2194+
ushort_arr[i] = 0;
2195+
uint_arr[i] = 0;
2196+
int64_arr[i] = 0;
2197+
uint64_arr[i] = 0;
2198+
}
2199+
21452200
if ((ret = PIOc_openfile2(iosysid, &ncid, &(flavor[fmt]), filename, PIO_NOWRITE)))
21462201
ERR(ret);
21472202

@@ -2191,6 +2246,17 @@ int test_cdf5_new_data_types(int iosysid, int num_flavors, int *flavor, int my_r
21912246
if (ubyte_data_in != ubyte_data)
21922247
ERR(ERR_WRONG);
21932248

2249+
varid_ubyte_arr = -1;
2250+
if ((ret = PIOc_inq_varid(ncid, "var_ubyte_arr", &varid_ubyte_arr)))
2251+
ERR(ret);
2252+
2253+
if ((ret = PIOc_get_vars_uchar(ncid, varid_ubyte_arr, &start, &count, NULL, ubyte_arr)))
2254+
ERR(ret);
2255+
2256+
for(int i = 0; i < ARR_SZ; i++){
2257+
if(ubyte_arr[i] != ubyte_data) { ERR(ERR_WRONG); }
2258+
}
2259+
21942260
varid_ushort = -1;
21952261
if ((ret = PIOc_inq_varid(ncid, "var_ushort", &varid_ushort)))
21962262
ERR(ret);
@@ -2202,6 +2268,17 @@ int test_cdf5_new_data_types(int iosysid, int num_flavors, int *flavor, int my_r
22022268
if (ushort_data_in != ushort_data)
22032269
ERR(ERR_WRONG);
22042270

2271+
varid_ushort_arr = -1;
2272+
if ((ret = PIOc_inq_varid(ncid, "var_ushort_arr", &varid_ushort_arr)))
2273+
ERR(ret);
2274+
2275+
if ((ret = PIOc_get_vars_ushort(ncid, varid_ushort_arr, &start, &count, NULL, ushort_arr)))
2276+
ERR(ret);
2277+
2278+
for(int i = 0; i < ARR_SZ; i++){
2279+
if (ushort_arr[i] != ushort_data) { ERR(ERR_WRONG); }
2280+
}
2281+
22052282
varid_uint = -1;
22062283
if ((ret = PIOc_inq_varid(ncid, "var_uint", &varid_uint)))
22072284
ERR(ret);
@@ -2213,6 +2290,17 @@ int test_cdf5_new_data_types(int iosysid, int num_flavors, int *flavor, int my_r
22132290
if (uint_data_in != uint_data)
22142291
ERR(ERR_WRONG);
22152292

2293+
varid_uint_arr = -1;
2294+
if ((ret = PIOc_inq_varid(ncid, "var_uint_arr", &varid_uint_arr)))
2295+
ERR(ret);
2296+
2297+
if ((ret = PIOc_get_vars_uint(ncid, varid_uint_arr, &start, &count, NULL, uint_arr)))
2298+
ERR(ret);
2299+
2300+
for(int i = 0; i < ARR_SZ; i++){
2301+
if (uint_arr[i] != uint_data) { ERR(ERR_WRONG); }
2302+
}
2303+
22162304
varid_int64 = -1;
22172305
if ((ret = PIOc_inq_varid(ncid, "var_int64", &varid_int64)))
22182306
ERR(ret);
@@ -2224,6 +2312,17 @@ int test_cdf5_new_data_types(int iosysid, int num_flavors, int *flavor, int my_r
22242312
if (int64_data_in != int64_data)
22252313
ERR(ERR_WRONG);
22262314

2315+
varid_int64_arr = -1;
2316+
if ((ret = PIOc_inq_varid(ncid, "var_int64_arr", &varid_int64_arr)))
2317+
ERR(ret);
2318+
2319+
if ((ret = PIOc_get_vars_longlong(ncid, varid_int64_arr, &start, &count, NULL, int64_arr)))
2320+
ERR(ret);
2321+
2322+
for(int i = 0; i < ARR_SZ; i++){
2323+
if (int64_arr[i] != int64_data) { ERR(ERR_WRONG); }
2324+
}
2325+
22272326
varid_uint64 = -1;
22282327
if ((ret = PIOc_inq_varid(ncid, "var_uint64", &varid_uint64)))
22292328
ERR(ret);
@@ -2235,6 +2334,17 @@ int test_cdf5_new_data_types(int iosysid, int num_flavors, int *flavor, int my_r
22352334
if (uint64_data_in != uint64_data)
22362335
ERR(ERR_WRONG);
22372336

2337+
varid_uint64_arr = -1;
2338+
if ((ret = PIOc_inq_varid(ncid, "var_uint64_arr", &varid_uint64_arr)))
2339+
ERR(ret);
2340+
2341+
if ((ret = PIOc_get_vars_ulonglong(ncid, varid_uint64_arr, &start, &count, NULL, uint64_arr)))
2342+
ERR(ret);
2343+
2344+
for(int i = 0; i < ARR_SZ; i++){
2345+
if (uint64_arr[i] != uint64_data) { ERR(ERR_WRONG); }
2346+
}
2347+
22382348
if ((ret = PIOc_closefile(ncid)))
22392349
ERR(ret);
22402350
}

0 commit comments

Comments
 (0)