|
MOAB: Mesh Oriented datABase
(version 5.4.1)
|
Include dependency graph for write_nc.cpp:Go to the source code of this file.
Defines | |
| #define | NCFUNC(func) nc_##func |
| #define | NCDF_SIZE size_t |
Functions | |
| void | test_eul_read_write_T () |
| void | test_eul_check_T () |
| void | test_fv_read_write_T () |
| void | test_fv_check_T () |
| void | test_homme_read_write_T () |
| void | test_homme_check_T () |
| void | test_mpas_read_write_vars () |
| void | test_mpas_check_vars () |
| void | test_gcrm_read_write_vars () |
| void | test_gcrm_check_vars () |
| void | test_eul_read_write_timestep () |
| void | test_eul_check_timestep () |
| void | test_eul_read_write_append () |
| void | test_eul_check_append () |
| void | test_eul_read_write_across_files () |
| void | test_eul_check_across_files () |
| void | get_eul_read_options (std::string &opts) |
| void | get_fv_read_options (std::string &opts) |
| void | get_homme_read_options (std::string &opts) |
| void | get_mpas_read_options (std::string &opts) |
| int | main (int argc, char *argv[]) |
Variables | |
| std::string | example_eul = "unittest/io/eul3x48x96.t.3.nc" |
| std::string | example_eul_t0 = "unittest/io/eul3x48x96.t0.nc" |
| std::string | example_eul_t1 = "unittest/io/eul3x48x96.t1.nc" |
| std::string | example_eul_t2 = "unittest/io/eul3x48x96.t2.nc" |
| std::string | example_fv = "unittest/io/fv3x46x72.t.3.nc" |
| std::string | example_homme = "unittest/io/homme3x3458.t.3.nc" |
| std::string | example_mpas = "unittest/io/mpasx1.642.t.2.nc" |
| std::string | example_gcrm = "unittest/io/gcrm_r3.nc" |
| const double | eps = 1e-10 |
| const int | levels = 3 |
| const int | mpas_levels = 1 |
| #define NCDF_SIZE size_t |
Definition at line 27 of file write_nc.cpp.
Referenced by test_eul_check_across_files(), test_eul_check_append(), test_eul_check_T(), test_eul_check_timestep(), test_fv_check_T(), test_gcrm_check_vars(), test_homme_check_T(), and test_mpas_check_vars().
| #define NCFUNC | ( | func | ) | nc_##func |
Definition at line 26 of file write_nc.cpp.
Referenced by test_eul_check_across_files(), test_eul_check_append(), test_eul_check_T(), test_eul_check_timestep(), test_fv_check_T(), test_gcrm_check_vars(), test_homme_check_T(), and test_mpas_check_vars().
| void get_eul_read_options | ( | std::string & | opts | ) |
Definition at line 1602 of file write_nc.cpp.
Referenced by test_eul_read_write_across_files(), test_eul_read_write_append(), test_eul_read_write_T(), and test_eul_read_write_timestep().
{
#ifdef MOAB_HAVE_MPI
// Use parallel options
opts = ";;PARALLEL=READ_PART;PARTITION_METHOD=SQIJ";
#else
opts = ";;";
#endif
}
| void get_fv_read_options | ( | std::string & | opts | ) |
Definition at line 1612 of file write_nc.cpp.
Referenced by test_fv_read_write_T().
{
#ifdef MOAB_HAVE_MPI
// Use parallel options
opts = ";;PARALLEL=READ_PART;PARTITION_METHOD=SQIJ";
#else
opts = ";;";
#endif
}
| void get_homme_read_options | ( | std::string & | opts | ) |
Definition at line 1622 of file write_nc.cpp.
Referenced by test_homme_read_write_T().
{
#ifdef MOAB_HAVE_MPI
// Use parallel options
opts = ";;PARALLEL=READ_PART;PARTITION_METHOD=TRIVIAL";
#else
opts = ";;";
#endif
}
| void get_mpas_read_options | ( | std::string & | opts | ) |
Definition at line 1632 of file write_nc.cpp.
Referenced by test_gcrm_read_write_vars(), and test_mpas_read_write_vars().
{
#ifdef MOAB_HAVE_MPI
// Use parallel options
#ifdef MOAB_HAVE_ZOLTAN
opts = ";;PARALLEL=READ_PART;PARTITION_METHOD=RCBZOLTAN";
#else
opts = ";;PARALLEL=READ_PART;PARTITION_METHOD=TRIVIAL";
#endif
#else
opts = ";;";
#endif
}
| int main | ( | int | argc, |
| char * | argv[] | ||
| ) |
Definition at line 77 of file write_nc.cpp.
References moab::fail(), RUN_TEST, test_eul_check_across_files(), test_eul_check_append(), test_eul_check_T(), test_eul_check_timestep(), test_eul_read_write_across_files(), test_eul_read_write_append(), test_eul_read_write_T(), test_eul_read_write_timestep(), test_fv_check_T(), test_fv_read_write_T(), test_gcrm_check_vars(), test_gcrm_read_write_vars(), test_homme_check_T(), test_homme_read_write_T(), test_mpas_check_vars(), and test_mpas_read_write_vars().
{
int result = 0;
#ifdef MOAB_HAVE_MPI
int fail = MPI_Init( &argc, &argv );
if( fail ) return 1;
#else
argv[0] = argv[argc - argc]; // To remove the warnings in serial mode about unused variables
#endif
result += RUN_TEST( test_eul_read_write_T );
result += RUN_TEST( test_eul_check_T );
result += RUN_TEST( test_fv_read_write_T );
result += RUN_TEST( test_fv_check_T );
result += RUN_TEST( test_homme_read_write_T );
result += RUN_TEST( test_homme_check_T );
result += RUN_TEST( test_mpas_read_write_vars );
result += RUN_TEST( test_mpas_check_vars );
result += RUN_TEST( test_gcrm_read_write_vars );
result += RUN_TEST( test_gcrm_check_vars );
result += RUN_TEST( test_eul_read_write_timestep );
result += RUN_TEST( test_eul_check_timestep );
result += RUN_TEST( test_eul_read_write_append );
result += RUN_TEST( test_eul_check_append );
result += RUN_TEST( test_eul_read_write_across_files );
result += RUN_TEST( test_eul_check_across_files );
#ifdef MOAB_HAVE_MPI
result += RUN_TEST( test_eul_read_write_ghosting );
result += RUN_TEST( test_eul_check_ghosting );
#endif
#ifdef MOAB_HAVE_MPI
fail = MPI_Finalize();
if( fail ) return 1;
#endif
return result;
}
| void test_eul_check_across_files | ( | ) |
Definition at line 1372 of file write_nc.cpp.
References CHECK_EQUAL, CHECK_REAL_EQUAL, eps, example_eul, filename, levels, MPI_COMM_WORLD, NCDF_SIZE, NCFUNC, rank, and size.
Referenced by main().
{
int rank = 0;
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
if( 0 == rank )
{
int ncid;
int ncid_ref;
int success;
std::string filename;
if( procs > 1 )
filename = "test_par_eul_across_files.nc";
else
filename = "test_eul_across_files.nc";
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, filename.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid );
#else
success = NCFUNC( open )( filename.c_str(), NC_NOWRITE, &ncid );
#endif
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, example_eul.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid_ref );
#else
success = NCFUNC( open )( example_eul.c_str(), NC_NOWRITE, &ncid_ref );
#endif
CHECK_EQUAL( 0, success );
int T_id;
success = NCFUNC( inq_varid )( ncid, "T", &T_id );
CHECK_EQUAL( 0, success );
int T_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "T", &T_id_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
NCDF_SIZE start[] = { 0, 0, 0, 0 };
NCDF_SIZE count[] = { 3, levels, 48, 96 };
const int size = 3 * levels * 48 * 96;
// Read variable T from output file (with 3 timesteps)
double T_vals[size];
success = NCFUNC( get_vara_double )( ncid, T_id, start, count, T_vals );
CHECK_EQUAL( 0, success );
// Read variable T from reference file (with 3 timesteps)
double T_vals_ref[size];
success = NCFUNC( get_vara_double )( ncid_ref, T_id_ref, start, count, T_vals_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
success = NCFUNC( close )( ncid );
CHECK_EQUAL( 0, success );
success = NCFUNC( close )( ncid_ref );
CHECK_EQUAL( 0, success );
// Check T values
for( int i = 0; i < size; i++ )
CHECK_REAL_EQUAL( T_vals_ref[i], T_vals[i], eps );
}
}
| void test_eul_check_append | ( | ) |
Definition at line 1184 of file write_nc.cpp.
References CHECK_EQUAL, CHECK_REAL_EQUAL, eps, example_eul, filename, levels, MPI_COMM_WORLD, NCDF_SIZE, NCFUNC, rank, and size.
Referenced by main().
{
int rank = 0;
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
if( 0 == rank )
{
int ncid;
int ncid_ref;
int success;
std::string filename;
if( procs > 1 )
filename = "test_par_eul_append.nc";
else
filename = "test_eul_append.nc";
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, filename.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid );
#else
success = NCFUNC( open )( filename.c_str(), NC_NOWRITE, &ncid );
#endif
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, example_eul.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid_ref );
#else
success = NCFUNC( open )( example_eul.c_str(), NC_NOWRITE, &ncid_ref );
#endif
CHECK_EQUAL( 0, success );
int T_id;
success = NCFUNC( inq_varid )( ncid, "T", &T_id );
CHECK_EQUAL( 0, success );
int T_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "T", &T_id_ref );
CHECK_EQUAL( 0, success );
int U_id;
success = NCFUNC( inq_varid )( ncid, "U", &U_id );
CHECK_EQUAL( 0, success );
int U_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "U", &U_id_ref );
CHECK_EQUAL( 0, success );
int V_id;
success = NCFUNC( inq_varid )( ncid, "VNEWNAME", &V_id );
CHECK_EQUAL( 0, success );
int V_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "V", &V_id_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
NCDF_SIZE start[] = { 0, 0, 0, 0 };
NCDF_SIZE count[] = { 3, levels, 48, 96 };
const int size = 3 * levels * 48 * 96;
// Read variable T from output file
double T_vals[size];
success = NCFUNC( get_vara_double )( ncid, T_id, start, count, T_vals );
CHECK_EQUAL( 0, success );
// Read variable T from reference file
double T_vals_ref[size];
success = NCFUNC( get_vara_double )( ncid_ref, T_id_ref, start, count, T_vals_ref );
CHECK_EQUAL( 0, success );
// Read variable U from output file
double U_vals[size];
success = NCFUNC( get_vara_double )( ncid, U_id, start, count, U_vals );
CHECK_EQUAL( 0, success );
// Read variable U from reference file
double U_vals_ref[size];
success = NCFUNC( get_vara_double )( ncid_ref, U_id_ref, start, count, U_vals_ref );
CHECK_EQUAL( 0, success );
// Read variable VNEWNAME from output file
double V_vals[size];
success = NCFUNC( get_vara_double )( ncid, V_id, start, count, V_vals );
CHECK_EQUAL( 0, success );
// Read variable V from reference file
double V_vals_ref[size];
success = NCFUNC( get_vara_double )( ncid_ref, V_id_ref, start, count, V_vals_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
success = NCFUNC( close )( ncid );
CHECK_EQUAL( 0, success );
success = NCFUNC( close )( ncid_ref );
CHECK_EQUAL( 0, success );
// Check T, U, and V values
for( int i = 0; i < size; i++ )
{
CHECK_REAL_EQUAL( T_vals_ref[i], T_vals[i], eps );
CHECK_REAL_EQUAL( U_vals_ref[i], U_vals[i], eps );
CHECK_REAL_EQUAL( V_vals_ref[i], V_vals[i], eps );
}
}
}
| void test_eul_check_T | ( | ) |
Definition at line 165 of file write_nc.cpp.
References CHECK_EQUAL, CHECK_REAL_EQUAL, eps, example_eul, filename, levels, MPI_COMM_WORLD, NCDF_SIZE, NCFUNC, rank, and size.
Referenced by main().
{
int rank = 0;
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
if( 0 == rank )
{
int ncid;
int ncid_ref;
int success;
std::string filename;
if( procs > 1 )
filename = "test_par_eul_T.nc";
else
filename = "test_eul_T.nc";
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, filename.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid );
#else
success = NCFUNC( open )( filename.c_str(), NC_NOWRITE, &ncid );
#endif
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, example_eul.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid_ref );
#else
success = NCFUNC( open )( example_eul.c_str(), NC_NOWRITE, &ncid_ref );
#endif
CHECK_EQUAL( 0, success );
int T_id;
success = NCFUNC( inq_varid )( ncid, "T", &T_id );
CHECK_EQUAL( 0, success );
int T_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "T", &T_id_ref );
CHECK_EQUAL( 0, success );
int gw_id;
success = NCFUNC( inq_varid )( ncid, "gw", &gw_id );
CHECK_EQUAL( 0, success );
int gw_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "gw", &gw_id_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
NCDF_SIZE start[] = { 0, 0, 0, 0 };
NCDF_SIZE count[] = { 3, levels, 48, 96 };
const int size = 3 * levels * 48 * 96;
// Read variable T from output file
double T_vals[size];
success = NCFUNC( get_vara_double )( ncid, T_id, start, count, T_vals );
CHECK_EQUAL( 0, success );
// Read variable T from reference file
double T_vals_ref[size];
success = NCFUNC( get_vara_double )( ncid_ref, T_id_ref, start, count, T_vals_ref );
CHECK_EQUAL( 0, success );
// Read variable gw (on lat) from output file
count[0] = 48;
double gw_vals[48];
success = NCFUNC( get_vara_double )( ncid, gw_id, start, count, gw_vals );
CHECK_EQUAL( 0, success );
// Read variable gw (on lat) from reference file
double gw_vals_ref[48];
success = NCFUNC( get_vara_double )( ncid_ref, gw_id_ref, start, count, gw_vals_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
success = NCFUNC( close )( ncid );
CHECK_EQUAL( 0, success );
success = NCFUNC( close )( ncid_ref );
CHECK_EQUAL( 0, success );
// Check T values
for( int i = 0; i < size; i++ )
CHECK_REAL_EQUAL( T_vals_ref[i], T_vals[i], eps );
// Check gw values
for( int i = 0; i < 48; i++ )
CHECK_REAL_EQUAL( gw_vals_ref[i], gw_vals[i], eps );
}
}
| void test_eul_check_timestep | ( | ) |
Definition at line 1024 of file write_nc.cpp.
References CHECK_EQUAL, CHECK_REAL_EQUAL, eps, example_eul, filename, levels, MPI_COMM_WORLD, NCDF_SIZE, NCFUNC, rank, and size.
Referenced by main().
{
int rank = 0;
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
if( 0 == rank )
{
int ncid;
int ncid_ref;
int success;
std::string filename;
if( procs > 1 )
filename = "test_par_eul_T2.nc";
else
filename = "test_eul_T2.nc";
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, filename.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid );
#else
success = NCFUNC( open )( filename.c_str(), NC_NOWRITE, &ncid );
#endif
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, example_eul.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid_ref );
#else
success = NCFUNC( open )( example_eul.c_str(), NC_NOWRITE, &ncid_ref );
#endif
CHECK_EQUAL( 0, success );
int T_id;
success = NCFUNC( inq_varid )( ncid, "T", &T_id );
CHECK_EQUAL( 0, success );
int T_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "T", &T_id_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
NCDF_SIZE start[] = { 0, 0, 0, 0 };
NCDF_SIZE count[] = { 1, levels, 48, 96 };
const int size = levels * 48 * 96;
// Read variable T from output file (timestep 0)
double T_vals[size];
success = NCFUNC( get_vara_double )( ncid, T_id, start, count, T_vals );
CHECK_EQUAL( 0, success );
// Read variable T from reference file (timestep 2)
start[0] = 2;
double T_vals_ref[size];
success = NCFUNC( get_vara_double )( ncid_ref, T_id_ref, start, count, T_vals_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
success = NCFUNC( close )( ncid );
CHECK_EQUAL( 0, success );
success = NCFUNC( close )( ncid_ref );
CHECK_EQUAL( 0, success );
// Check T values
for( int i = 0; i < size; i++ )
CHECK_REAL_EQUAL( T_vals_ref[i], T_vals[i], eps );
}
}
| void test_eul_read_write_across_files | ( | ) |
Definition at line 1322 of file write_nc.cpp.
References CHECK_ERR, moab::Interface::create_meshset(), ErrorCode, example_eul_t0, example_eul_t1, example_eul_t2, get_eul_read_options(), moab::Interface::load_file(), mb, MESHSET_SET, MPI_COMM_WORLD, and moab::Interface::write_file().
Referenced by main().
{
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
Core moab;
Interface& mb = moab;
std::string read_opts;
EntityHandle set;
ErrorCode rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval );
// This file contains single timestep 2 (option TIMESTEP=0 will be implicitly used)
// Read T as tag T2 with option TIMESTEPBASE=2
get_eul_read_options( read_opts );
read_opts += ";VARIABLE=T;TIMESTEPBASE=2;DEBUG_IO=0";
rval = mb.load_file( example_eul_t2.c_str(), &set, read_opts.c_str() );CHECK_ERR( rval );
// This file contains single timestep 0 (option TIMESTEP=0 will be implicitly used)
// Read T as tag T0 with option TIMESTEPBASE=0
get_eul_read_options( read_opts );
read_opts += ";VARIABLE=T;TIMESTEPBASE=0;NOMESH;DEBUG_IO=0";
rval = mb.load_file( example_eul_t0.c_str(), &set, read_opts.c_str() );CHECK_ERR( rval );
// This file contains single timestep 1 (option TIMESTEP=0 will be implicitly used)
// Read T as tag T1 with option TIMESTEPBASE=1
get_eul_read_options( read_opts );
read_opts += ";VARIABLE=T;TIMESTEPBASE=1;NOMESH;DEBUG_IO=0";
rval = mb.load_file( example_eul_t1.c_str(), &set, read_opts.c_str() );CHECK_ERR( rval );
// Write variable T with 3 timesteps
std::string write_opts = ";;VARIABLE=T;TIMESTEP=0,1,2;DEBUG_IO=0";
#ifdef MOAB_HAVE_MPI
// Use parallel options
write_opts += ";PARALLEL=WRITE_PART";
#endif
if( procs > 1 )
rval = mb.write_file( "test_par_eul_across_files.nc", 0, write_opts.c_str(), &set, 1 );
else
rval = mb.write_file( "test_eul_across_files.nc", 0, write_opts.c_str(), &set, 1 );CHECK_ERR( rval );
}
| void test_eul_read_write_append | ( | ) |
Definition at line 1125 of file write_nc.cpp.
References CHECK_ERR, moab::Interface::create_meshset(), ErrorCode, example_eul, get_eul_read_options(), moab::Interface::load_file(), mb, MESHSET_SET, MPI_COMM_WORLD, and moab::Interface::write_file().
Referenced by main().
{
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
Core moab;
Interface& mb = moab;
std::string read_opts;
get_eul_read_options( read_opts );
EntityHandle set;
ErrorCode rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval );
// Load non-set variables T, U, V, and the mesh
read_opts += ";VARIABLE=T,U,V;DEBUG_IO=0";
rval = mb.load_file( example_eul.c_str(), &set, read_opts.c_str() );CHECK_ERR( rval );
// Write variable T
std::string write_opts = ";;VARIABLE=T;DEBUG_IO=0";
#ifdef MOAB_HAVE_MPI
// Use parallel options
write_opts += ";PARALLEL=WRITE_PART";
#endif
if( procs > 1 )
rval = mb.write_file( "test_par_eul_append.nc", 0, write_opts.c_str(), &set, 1 );
else
rval = mb.write_file( "test_eul_append.nc", 0, write_opts.c_str(), &set, 1 );CHECK_ERR( rval );
// Append to the file variable U
write_opts = ";;VARIABLE=U;APPEND;DEBUG_IO=0";
#ifdef MOAB_HAVE_MPI
// Use parallel options
write_opts += ";PARALLEL=WRITE_PART";
#endif
if( procs > 1 )
rval = mb.write_file( "test_par_eul_append.nc", 0, write_opts.c_str(), &set, 1 );
else
rval = mb.write_file( "test_eul_append.nc", 0, write_opts.c_str(), &set, 1 );CHECK_ERR( rval );
// Append to the file variable V, renamed to VNEWNAME
write_opts = ";;VARIABLE=V;RENAME=VNEWNAME;APPEND;DEBUG_IO=0";
#ifdef MOAB_HAVE_MPI
// Use parallel options
write_opts += ";PARALLEL=WRITE_PART";
#endif
if( procs > 1 )
rval = mb.write_file( "test_par_eul_append.nc", 0, write_opts.c_str(), &set, 1 );
else
rval = mb.write_file( "test_eul_append.nc", 0, write_opts.c_str(), &set, 1 );CHECK_ERR( rval );
}
| void test_eul_read_write_T | ( | ) |
Definition at line 126 of file write_nc.cpp.
References CHECK_ERR, moab::Interface::create_meshset(), ErrorCode, example_eul, get_eul_read_options(), moab::Interface::load_file(), mb, MESHSET_SET, MPI_COMM_WORLD, and moab::Interface::write_file().
Referenced by main().
{
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
Core moab;
Interface& mb = moab;
std::string read_opts;
get_eul_read_options( read_opts );
EntityHandle set;
ErrorCode rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval );
// Read non-set variable T and set variable gw
read_opts += ";VARIABLE=T,gw;DEBUG_IO=0";
rval = mb.load_file( example_eul.c_str(), &set, read_opts.c_str() );CHECK_ERR( rval );
// Write variables T and gw
std::string write_opts = ";;VARIABLE=T,gw;DEBUG_IO=0";
#ifdef MOAB_HAVE_MPI
// Use parallel options
write_opts += ";PARALLEL=WRITE_PART";
#endif
if( procs > 1 )
rval = mb.write_file( "test_par_eul_T.nc", 0, write_opts.c_str(), &set, 1 );
else
rval = mb.write_file( "test_eul_T.nc", 0, write_opts.c_str(), &set, 1 );CHECK_ERR( rval );
}
| void test_eul_read_write_timestep | ( | ) |
Definition at line 987 of file write_nc.cpp.
References CHECK_ERR, moab::Interface::create_meshset(), ErrorCode, example_eul, get_eul_read_options(), moab::Interface::load_file(), mb, MESHSET_SET, MPI_COMM_WORLD, and moab::Interface::write_file().
Referenced by main().
{
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
Core moab;
Interface& mb = moab;
std::string read_opts;
get_eul_read_options( read_opts );
EntityHandle set;
ErrorCode rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval );
// Read non-set variable T
read_opts += ";VARIABLE=T;DEBUG_IO=0";
rval = mb.load_file( example_eul.c_str(), &set, read_opts.c_str() );CHECK_ERR( rval );
// Write variable T on timestep 2
std::string write_opts = ";;VARIABLE=T;TIMESTEP=2;DEBUG_IO=0";
#ifdef MOAB_HAVE_MPI
// Use parallel options
write_opts += ";PARALLEL=WRITE_PART";
#endif
if( procs > 1 )
rval = mb.write_file( "test_par_eul_T2.nc", 0, write_opts.c_str(), &set, 1 );
else
rval = mb.write_file( "test_eul_T2.nc", 0, write_opts.c_str(), &set, 1 );CHECK_ERR( rval );
}
| void test_fv_check_T | ( | ) |
Definition at line 324 of file write_nc.cpp.
References CHECK_EQUAL, CHECK_REAL_EQUAL, eps, example_fv, filename, levels, MPI_COMM_WORLD, NCDF_SIZE, NCFUNC, rank, and size.
Referenced by main().
{
int rank = 0;
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
if( 0 == rank )
{
int ncid;
int ncid_ref;
int success;
std::string filename;
if( procs > 1 )
filename = "test_par_fv_T.nc";
else
filename = "test_fv_T.nc";
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, filename.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid );
#else
success = NCFUNC( open )( filename.c_str(), NC_NOWRITE, &ncid );
#endif
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, example_fv.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid_ref );
#else
success = NCFUNC( open )( example_fv.c_str(), NC_NOWRITE, &ncid_ref );
#endif
CHECK_EQUAL( 0, success );
int T_id;
success = NCFUNC( inq_varid )( ncid, "T", &T_id );
CHECK_EQUAL( 0, success );
int T_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "T", &T_id_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
NCDF_SIZE start[] = { 0, 0, 0, 0 };
NCDF_SIZE count[] = { 3, levels, 46, 72 };
const int size = 3 * levels * 46 * 72;
// Read variable T from output file
double T_vals[size];
success = NCFUNC( get_vara_double )( ncid, T_id, start, count, T_vals );
CHECK_EQUAL( 0, success );
// Read variable T from reference file
double T_vals_ref[size];
success = NCFUNC( get_vara_double )( ncid_ref, T_id_ref, start, count, T_vals_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
success = NCFUNC( close )( ncid );
CHECK_EQUAL( 0, success );
success = NCFUNC( close )( ncid_ref );
CHECK_EQUAL( 0, success );
// Check T values
for( int i = 0; i < size; i++ )
CHECK_REAL_EQUAL( T_vals_ref[i], T_vals[i], eps );
}
}
| void test_fv_read_write_T | ( | ) |
Definition at line 286 of file write_nc.cpp.
References CHECK_ERR, moab::Interface::create_meshset(), ErrorCode, example_fv, get_fv_read_options(), moab::Interface::load_file(), mb, MESHSET_SET, MPI_COMM_WORLD, and moab::Interface::write_file().
Referenced by main().
{
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
Core moab;
Interface& mb = moab;
std::string read_opts;
get_fv_read_options( read_opts );
EntityHandle set;
ErrorCode rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval );
// Read non-set variable T
read_opts += ";VARIABLE=T;DEBUG_IO=0";
rval = mb.load_file( example_fv.c_str(), &set, read_opts.c_str() );CHECK_ERR( rval );
// Write variable T
std::string write_opts = ";;VARIABLE=T;DEBUG_IO=0";
#ifdef MOAB_HAVE_MPI
// Use parallel options
write_opts += ";PARALLEL=WRITE_PART";
#endif
if( procs > 1 )
rval = mb.write_file( "test_par_fv_T.nc", 0, write_opts.c_str(), &set, 1 );
else
rval = mb.write_file( "test_fv_T.nc", 0, write_opts.c_str(), &set, 1 );CHECK_ERR( rval );
}
| void test_gcrm_check_vars | ( | ) |
Definition at line 818 of file write_nc.cpp.
References CHECK_EQUAL, CHECK_REAL_EQUAL, eps, example_gcrm, filename, levels, MPI_COMM_WORLD, NCDF_SIZE, NCFUNC, and rank.
Referenced by main().
{
int rank = 0;
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
if( 0 == rank )
{
int ncid;
int ncid_ref;
int success;
std::string filename;
if( procs > 1 )
filename = "test_par_gcrm_vars.nc";
else
filename = "test_gcrm_vars.nc";
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, filename.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid );
#else
success = NCFUNC( open )( filename.c_str(), NC_NOWRITE, &ncid );
#endif
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, example_gcrm.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid_ref );
#else
success = NCFUNC( open )( example_gcrm.c_str(), NC_NOWRITE, &ncid_ref );
#endif
CHECK_EQUAL( 0, success );
int u_id;
success = NCFUNC( inq_varid )( ncid, "u", &u_id );
CHECK_EQUAL( 0, success );
int u_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "u", &u_id_ref );
CHECK_EQUAL( 0, success );
int wind_id;
success = NCFUNC( inq_varid )( ncid, "wind", &wind_id );
CHECK_EQUAL( 0, success );
int wind_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "wind", &wind_id_ref );
CHECK_EQUAL( 0, success );
int vorticity_id;
success = NCFUNC( inq_varid )( ncid, "vorticity", &vorticity_id );
CHECK_EQUAL( 0, success );
int vorticity_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "vorticity", &vorticity_id_ref );
CHECK_EQUAL( 0, success );
int pressure_id;
success = NCFUNC( inq_varid )( ncid, "pressure", &pressure_id );
CHECK_EQUAL( 0, success );
int pressure_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "pressure", &pressure_id_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
NCDF_SIZE start[] = { 0, 0, 0 };
NCDF_SIZE count[] = { 2, 1, levels };
const int size1 = 2 * 1280 * levels;
const int size2 = 2 * 1920 * levels;
const int size3 = 2 * 642 * levels;
// Read vertex variable u from output file
count[1] = 1280;
double u_vals[size1];
success = NCFUNC( get_vara_double )( ncid, u_id, start, count, u_vals );
CHECK_EQUAL( 0, success );
// Read vertex variable u from reference file
double u_vals_ref[size1];
success = NCFUNC( get_vara_double )( ncid_ref, u_id_ref, start, count, u_vals_ref );
CHECK_EQUAL( 0, success );
// Read edge variable wind from output file
count[1] = 1920;
double wind_vals[size2];
success = NCFUNC( get_vara_double )( ncid, wind_id, start, count, wind_vals );
CHECK_EQUAL( 0, success );
// Read edge variable wind from reference file
double wind_vals_ref[size2];
success = NCFUNC( get_vara_double )( ncid_ref, wind_id_ref, start, count, wind_vals_ref );
CHECK_EQUAL( 0, success );
// Read cell variable vorticity from output file
count[1] = 642;
double vorticity_vals[size3];
success = NCFUNC( get_vara_double )( ncid, vorticity_id, start, count, vorticity_vals );
CHECK_EQUAL( 0, success );
// Read cell variable vorticity from reference file
double vorticity_vals_ref[size3];
success = NCFUNC( get_vara_double )( ncid_ref, vorticity_id_ref, start, count, vorticity_vals_ref );
CHECK_EQUAL( 0, success );
// Read cell variable pressure from output file
double pressure_vals[size3];
success = NCFUNC( get_vara_double )( ncid, pressure_id, start, count, pressure_vals );
CHECK_EQUAL( 0, success );
// Read cell variable pressure from reference file
double pressure_vals_ref[size3];
success = NCFUNC( get_vara_double )( ncid_ref, pressure_id_ref, start, count, pressure_vals_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
success = NCFUNC( close )( ncid );
CHECK_EQUAL( 0, success );
success = NCFUNC( close )( ncid_ref );
CHECK_EQUAL( 0, success );
// Check u values
for( int i = 0; i < size1; i++ )
CHECK_REAL_EQUAL( u_vals_ref[i], u_vals[i], eps );
// Check wind values
for( int i = 0; i < size2; i++ )
CHECK_REAL_EQUAL( wind_vals_ref[i], wind_vals[i], eps );
// Check vorticity and pressure values
for( int i = 0; i < size3; i++ )
{
CHECK_REAL_EQUAL( vorticity_vals_ref[i], vorticity_vals[i], eps );
CHECK_REAL_EQUAL( pressure_vals_ref[i], pressure_vals[i], eps );
}
}
}
| void test_gcrm_read_write_vars | ( | ) |
Definition at line 777 of file write_nc.cpp.
References CHECK_ERR, moab::Interface::create_meshset(), ErrorCode, example_gcrm, get_mpas_read_options(), moab::Interface::load_file(), mb, MESHSET_SET, MPI_COMM_WORLD, and moab::Interface::write_file().
Referenced by main().
{
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
Core moab;
Interface& mb = moab;
std::string read_opts;
// we can use the same base options as mpas, because the zoltan can apply too
get_mpas_read_options( read_opts );
EntityHandle set;
ErrorCode rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval );
// Read non-set variables u, wind, vorticity and pressure
read_opts += ";VARIABLE=u,wind,vorticity,pressure;DEBUG_IO=0";
if( procs > 1 ) read_opts += ";PARALLEL_RESOLVE_SHARED_ENTS";
rval = mb.load_file( example_gcrm.c_str(), &set, read_opts.c_str() );CHECK_ERR( rval );
// Write variables u, wind, vorticity and pressure
std::string write_opts = ";;VARIABLE=u,wind,vorticity,pressure;DEBUG_IO=0";
#ifdef MOAB_HAVE_MPI
// Use parallel options
write_opts += ";PARALLEL=WRITE_PART";
#endif
if( procs > 1 )
rval = mb.write_file( "test_par_gcrm_vars.nc", 0, write_opts.c_str(), &set, 1 );
else
rval = mb.write_file( "test_gcrm_vars.nc", 0, write_opts.c_str(), &set, 1 );CHECK_ERR( rval );
}
| void test_homme_check_T | ( | ) |
Definition at line 467 of file write_nc.cpp.
References CHECK_EQUAL, CHECK_REAL_EQUAL, eps, example_homme, filename, levels, MPI_COMM_WORLD, NCDF_SIZE, NCFUNC, rank, and size.
Referenced by main().
{
int rank = 0;
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
if( 0 == rank )
{
int ncid;
int ncid_ref;
int success;
std::string filename;
if( procs > 1 )
filename = "test_par_homme_T.nc";
else
filename = "test_homme_T.nc";
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, filename.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid );
#else
success = NCFUNC( open )( filename.c_str(), NC_NOWRITE, &ncid );
#endif
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, example_homme.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid_ref );
#else
success = NCFUNC( open )( example_homme.c_str(), NC_NOWRITE, &ncid_ref );
#endif
CHECK_EQUAL( 0, success );
int T_id;
success = NCFUNC( inq_varid )( ncid, "T", &T_id );
CHECK_EQUAL( 0, success );
int T_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "T", &T_id_ref );
CHECK_EQUAL( 0, success );
int lat_id;
success = NCFUNC( inq_varid )( ncid, "lat", &lat_id );
CHECK_EQUAL( 0, success );
int lat_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "lat", &lat_id_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
NCDF_SIZE start[] = { 0, 0, 0 };
NCDF_SIZE count[] = { 3, levels, 3458 };
const int size = 3 * levels * 3458;
// Read variable T from output file
double T_vals[size];
success = NCFUNC( get_vara_double )( ncid, T_id, start, count, T_vals );
CHECK_EQUAL( 0, success );
// Read variable T from reference file
double T_vals_ref[size];
success = NCFUNC( get_vara_double )( ncid_ref, T_id_ref, start, count, T_vals_ref );
CHECK_EQUAL( 0, success );
// Read variable lat from output file
count[0] = 3458;
double lat_vals[3458];
success = NCFUNC( get_vara_double )( ncid, lat_id, start, count, lat_vals );
CHECK_EQUAL( 0, success );
// Read variable lat from reference file
double lat_vals_ref[3458];
success = NCFUNC( get_vara_double )( ncid_ref, lat_id_ref, start, count, lat_vals_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
success = NCFUNC( close )( ncid );
CHECK_EQUAL( 0, success );
success = NCFUNC( close )( ncid_ref );
CHECK_EQUAL( 0, success );
// Check T values
for( int i = 0; i < size; i++ )
CHECK_REAL_EQUAL( T_vals_ref[i], T_vals[i], eps );
// Check gw values
for( int i = 0; i < 3458; i++ )
CHECK_REAL_EQUAL( lat_vals_ref[i], lat_vals[i], eps );
}
}
| void test_homme_read_write_T | ( | ) |
Definition at line 423 of file write_nc.cpp.
References CHECK_ERR, moab::Interface::create_meshset(), ErrorCode, example_homme, get_homme_read_options(), moab::Interface::load_file(), mb, MESHSET_SET, MPI_COMM_WORLD, and moab::Interface::write_file().
Referenced by main().
{
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
Core moab;
Interface& mb = moab;
std::string read_opts;
get_homme_read_options( read_opts );
EntityHandle set;
ErrorCode rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval );
// Read non-set variable T and set variable lat
read_opts += ";VARIABLE=T,lat;DEBUG_IO=0";
if( procs > 1 )
{
// Rotate trivial partition, otherwise localGidVertsOwned.psize() is always 1
read_opts += ";PARALLEL_RESOLVE_SHARED_ENTS;TRIVIAL_PARTITION_SHIFT=1";
}
rval = mb.load_file( example_homme.c_str(), &set, read_opts.c_str() );CHECK_ERR( rval );
// Write variables T and lat
std::string write_opts = ";;VARIABLE=T,lat;DEBUG_IO=0";
#ifdef MOAB_HAVE_MPI
// Use parallel options
write_opts += ";PARALLEL=WRITE_PART";
#endif
if( procs > 1 )
rval = mb.write_file( "test_par_homme_T.nc", 0, write_opts.c_str(), &set, 1 );
else
rval = mb.write_file( "test_homme_T.nc", 0, write_opts.c_str(), &set, 1 );CHECK_ERR( rval );
}
| void test_mpas_check_vars | ( | ) |
Definition at line 628 of file write_nc.cpp.
References CHECK_EQUAL, CHECK_REAL_EQUAL, eps, example_mpas, filename, mpas_levels, MPI_COMM_WORLD, NCDF_SIZE, NCFUNC, and rank.
Referenced by main().
{
int rank = 0;
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
if( 0 == rank )
{
int ncid;
int ncid_ref;
int success;
std::string filename;
if( procs > 1 )
filename = "test_par_mpas_vars.nc";
else
filename = "test_mpas_vars.nc";
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, filename.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid );
#else
success = NCFUNC( open )( filename.c_str(), NC_NOWRITE, &ncid );
#endif
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
success = NCFUNC( open )( MPI_COMM_SELF, example_mpas.c_str(), NC_NOWRITE, MPI_INFO_NULL, &ncid_ref );
#else
success = NCFUNC( open )( example_mpas.c_str(), NC_NOWRITE, &ncid_ref );
#endif
CHECK_EQUAL( 0, success );
int vorticity_id;
success = NCFUNC( inq_varid )( ncid, "vorticity", &vorticity_id );
CHECK_EQUAL( 0, success );
int vorticity_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "vorticity", &vorticity_id_ref );
CHECK_EQUAL( 0, success );
int u_id;
success = NCFUNC( inq_varid )( ncid, "u", &u_id );
CHECK_EQUAL( 0, success );
int u_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "u", &u_id_ref );
CHECK_EQUAL( 0, success );
int ke_id;
success = NCFUNC( inq_varid )( ncid, "ke", &ke_id );
CHECK_EQUAL( 0, success );
int ke_id_ref;
success = NCFUNC( inq_varid )( ncid_ref, "ke", &ke_id_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// Enter independent I/O mode
success = NCFUNC( begin_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
NCDF_SIZE start[] = { 0, 0, 0 };
NCDF_SIZE count[] = { 2, 1, mpas_levels };
const int size1 = 2 * 1280 * mpas_levels;
const int size2 = 2 * 1920 * mpas_levels;
const int size3 = 2 * 642 * mpas_levels;
// Read vertex variable vorticity from output file
count[1] = 1280;
double vorticity_vals[size1];
success = NCFUNC( get_vara_double )( ncid, vorticity_id, start, count, vorticity_vals );
CHECK_EQUAL( 0, success );
// Read vertex variable vorticity from reference file
double vorticity_vals_ref[size1];
success = NCFUNC( get_vara_double )( ncid_ref, vorticity_id_ref, start, count, vorticity_vals_ref );
CHECK_EQUAL( 0, success );
// Read edge variable u from output file
count[1] = 1920;
double u_vals[size2];
success = NCFUNC( get_vara_double )( ncid, u_id, start, count, u_vals );
CHECK_EQUAL( 0, success );
// Read edge variable u from reference file
double u_vals_ref[size2];
success = NCFUNC( get_vara_double )( ncid_ref, u_id_ref, start, count, u_vals_ref );
CHECK_EQUAL( 0, success );
// Read cell variable ke from output file
count[1] = 642;
double ke_vals[size3];
success = NCFUNC( get_vara_double )( ncid, ke_id, start, count, ke_vals );
CHECK_EQUAL( 0, success );
// Read cell variable ke from reference file
double ke_vals_ref[size3];
success = NCFUNC( get_vara_double )( ncid_ref, ke_id_ref, start, count, ke_vals_ref );
CHECK_EQUAL( 0, success );
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid );
CHECK_EQUAL( 0, success );
#endif
#ifdef MOAB_HAVE_PNETCDF
// End independent I/O mode
success = NCFUNC( end_indep_data )( ncid_ref );
CHECK_EQUAL( 0, success );
#endif
success = NCFUNC( close )( ncid );
CHECK_EQUAL( 0, success );
success = NCFUNC( close )( ncid_ref );
CHECK_EQUAL( 0, success );
// Check vorticity values
for( int i = 0; i < size1; i++ )
CHECK_REAL_EQUAL( vorticity_vals_ref[i], vorticity_vals[i], eps );
// Check u values
for( int i = 0; i < size2; i++ )
CHECK_REAL_EQUAL( u_vals_ref[i], u_vals[i], eps );
// Check ke values
for( int i = 0; i < size3; i++ )
CHECK_REAL_EQUAL( ke_vals_ref[i], ke_vals[i], eps );
}
}
| void test_mpas_read_write_vars | ( | ) |
Definition at line 589 of file write_nc.cpp.
References CHECK_ERR, moab::Interface::create_meshset(), ErrorCode, example_mpas, get_mpas_read_options(), moab::Interface::load_file(), mb, MESHSET_SET, MPI_COMM_WORLD, and moab::Interface::write_file().
Referenced by main().
{
int procs = 1;
#ifdef MOAB_HAVE_MPI
MPI_Comm_size( MPI_COMM_WORLD, &procs );
#endif
// We will not test NC writer in parallel without pnetcdf support
#ifndef MOAB_HAVE_PNETCDF
if( procs > 1 ) return;
#endif
Core moab;
Interface& mb = moab;
std::string read_opts;
get_mpas_read_options( read_opts );
EntityHandle set;
ErrorCode rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval );
// Read non-set variables vorticity, u and ke
read_opts += ";VARIABLE=vorticity,u,ke;DEBUG_IO=0";
if( procs > 1 ) read_opts += ";PARALLEL_RESOLVE_SHARED_ENTS";
rval = mb.load_file( example_mpas.c_str(), &set, read_opts.c_str() );CHECK_ERR( rval );
// Write variables vorticity, u and ke
std::string write_opts = ";;VARIABLE=vorticity,u,ke;DEBUG_IO=0";
#ifdef MOAB_HAVE_MPI
// Use parallel options
write_opts += ";PARALLEL=WRITE_PART";
#endif
if( procs > 1 )
rval = mb.write_file( "test_par_mpas_vars.nc", 0, write_opts.c_str(), &set, 1 );
else
rval = mb.write_file( "test_mpas_vars.nc", 0, write_opts.c_str(), &set, 1 );CHECK_ERR( rval );
}
| const double eps = 1e-10 |
Definition at line 73 of file write_nc.cpp.
| std::string example_eul = "unittest/io/eul3x48x96.t.3.nc" |
Definition at line 6 of file write_nc.cpp.
| std::string example_eul_t0 = "unittest/io/eul3x48x96.t0.nc" |
Definition at line 7 of file write_nc.cpp.
Referenced by test_eul_read_write_across_files().
| std::string example_eul_t1 = "unittest/io/eul3x48x96.t1.nc" |
Definition at line 8 of file write_nc.cpp.
Referenced by test_eul_read_write_across_files().
| std::string example_eul_t2 = "unittest/io/eul3x48x96.t2.nc" |
Definition at line 9 of file write_nc.cpp.
Referenced by test_eul_read_write_across_files().
| std::string example_fv = "unittest/io/fv3x46x72.t.3.nc" |
Definition at line 10 of file write_nc.cpp.
| std::string example_gcrm = "unittest/io/gcrm_r3.nc" |
Definition at line 13 of file write_nc.cpp.
Referenced by test_gcrm_check_vars(), and test_gcrm_read_write_vars().
| std::string example_homme = "unittest/io/homme3x3458.t.3.nc" |
Definition at line 11 of file write_nc.cpp.
Referenced by test_homme_check_T(), and test_homme_read_write_T().
| std::string example_mpas = "unittest/io/mpasx1.642.t.2.nc" |
Definition at line 12 of file write_nc.cpp.
Referenced by test_mpas_check_vars(), and test_mpas_read_write_vars().
| const int levels = 3 |
Definition at line 74 of file write_nc.cpp.
| const int mpas_levels = 1 |
Definition at line 75 of file write_nc.cpp.
Referenced by test_mpas_check_vars().