Mesh Oriented datABase  (version 5.6.0)
An array-based unstructured mesh library
moab::ReadNC Class Reference

Output Exodus File for VERDE. More...

#include <ReadNC.hpp>

+ Inheritance diagram for moab::ReadNC:
+ Collaboration diagram for moab::ReadNC:

Classes

class  AttData
 
class  VarData
 

Public Types

enum  NCFormatType {
  NC_FORMAT_UNKNOWN_TYPE = 0 , NC_FORMAT_MPAS = 1 , NC_FORMAT_SCRIP = 2 , NC_FORMAT_ESMF = 3 ,
  NC_FORMAT_DOMAIN = 4 , NC_FORMAT_HOMME = 5 , NC_FORMAT_GCRM = 6 , NC_FORMAT_EULER = 7 ,
  NC_FORMAT_FV = 8
}
 
enum  EntityLocation {
  ENTLOCVERT = 0 , ENTLOCNSEDGE , ENTLOCEWEDGE , ENTLOCFACE ,
  ENTLOCSET , ENTLOCEDGE , ENTLOCREGION
}
 ENTLOCNSEDGE for north/south edge ENTLOCWEEDGE for west/east edge. More...
 

Public Member Functions

ErrorCode load_file (const char *file_name, const EntityHandle *file_set, const FileOptions &opts, const SubsetList *subset_list=nullptr, const Tag *file_id_tag=nullptr)
 Load an NC file. More...
 
 ReadNC (Interface *impl=nullptr)
 Constructor. More...
 
virtual ~ReadNC ()
 Destructor. More...
 
virtual ErrorCode read_tag_values (const char *file_name, const char *tag_name, const FileOptions &opts, std::vector< int > &tag_values_out, const SubsetList *subset_list=nullptr)
 Read tag values from a file. More...
 
- Public Member Functions inherited from moab::ReaderIface
virtual ~ReaderIface ()
 

Static Public Member Functions

static ReaderIfacefactory (Interface *)
 

Private Member Functions

ErrorCode read_header ()
 Read the header information. More...
 
ErrorCode get_attributes (int var_id, int num_atts, std::map< std::string, AttData > &atts, const char *prefix="")
 Get all global attributes in the file. More...
 
ErrorCode get_dimensions (int file_id, std::vector< std::string > &dim_names, std::vector< int > &dim_lens)
 Get all dimensions in the file. More...
 
ErrorCode get_variables ()
 Get the variable names and other info defined for this file. More...
 
ErrorCode parse_options (const FileOptions &opts, std::vector< std::string > &var_names, std::vector< int > &tstep_nums, std::vector< double > &tstep_vals)
 

Private Attributes

ReadUtilIfacereadMeshIface
 
InterfacembImpl
 Interface instance. More...
 
std::string fileName
 File name. More...
 
int fileId
 File numbers assigned by netcdf. More...
 
std::vector< std::string > dimNames
 Dimension names. More...
 
std::vector< int > dimLens
 Dimension lengths. More...
 
std::map< std::string, AttDataglobalAtts
 Global attribs. More...
 
std::map< std::string, VarDatavarInfo
 Variable info. More...
 
Tag mGlobalIdTag
 Cached tags for reading. Note that all these tags are defined when the core is initialized. More...
 
const TagmpFileIdTag
 This is a pointer to the file id tag that is passed from ReadParallel it gets deleted at the end of resolve sharing, but it will have same data as the global id tag global id tag is preserved, and is needed later on. More...
 
DebugOutput dbgOut
 Debug stuff. More...
 
bool isParallel
 Are we reading in parallel? More...
 
int partMethod
 Partitioning method. More...
 
ScdInterfacescdi
 Scd interface. More...
 
ScdParData parData
 Parallel data object, to be cached with ScdBox. More...
 
bool noMesh
 Read options. More...
 
bool noVars
 
bool spectralMesh
 
bool noMixedElements
 
bool noEdges
 
bool culling
 
bool repartition
 
int gatherSetRank
 
int tStepBase
 
int trivialPartitionShift
 
NCHelpermyHelper
 Helper class instance. More...
 

Friends

class NCHelper
 
class ScdNCHelper
 
class UcdNCHelper
 
class NCHelperEuler
 
class NCHelperFV
 
class NCHelperDomain
 
class NCHelperScrip
 
class NCHelperHOMME
 
class NCHelperMPAS
 
class NCHelperESMF
 
class NCHelperGCRM
 

Detailed Description

Output Exodus File for VERDE.

Definition at line 62 of file ReadNC.hpp.

Member Enumeration Documentation

◆ EntityLocation

ENTLOCNSEDGE for north/south edge ENTLOCWEEDGE for west/east edge.

Enumerator
ENTLOCVERT 
ENTLOCNSEDGE 
ENTLOCEWEDGE 
ENTLOCFACE 
ENTLOCSET 
ENTLOCEDGE 
ENTLOCREGION 

Definition at line 113 of file ReadNC.hpp.

114  {
115  ENTLOCVERT = 0,
116  ENTLOCNSEDGE,
117  ENTLOCEWEDGE,
118  ENTLOCFACE,
119  ENTLOCSET,
120  ENTLOCEDGE,
122  };

◆ NCFormatType

Enumerator
NC_FORMAT_UNKNOWN_TYPE 
NC_FORMAT_MPAS 
NC_FORMAT_SCRIP 
NC_FORMAT_ESMF 
NC_FORMAT_DOMAIN 
NC_FORMAT_HOMME 
NC_FORMAT_GCRM 
NC_FORMAT_EULER 
NC_FORMAT_FV 

Definition at line 79 of file ReadNC.hpp.

80  {
82  NC_FORMAT_MPAS = 1,
83  NC_FORMAT_SCRIP = 2,
84  NC_FORMAT_ESMF = 3,
85  NC_FORMAT_DOMAIN = 4,
86  NC_FORMAT_HOMME = 5,
87  NC_FORMAT_GCRM = 6,
88  NC_FORMAT_EULER = 7,
89  NC_FORMAT_FV = 8
90  };

Constructor & Destructor Documentation

◆ ReadNC()

moab::ReadNC::ReadNC ( Interface impl = nullptr)
explicit

Constructor.

Definition at line 16 of file ReadNC.cpp.

17  : mbImpl( impl ), fileId( -1 ), mGlobalIdTag( 0 ), mpFileIdTag( NULL ), dbgOut( stderr ), isParallel( false ),
19 #ifdef MOAB_HAVE_MPI
20  myPcomm( NULL ),
21 #endif
22  noMesh( false ), noVars( false ), spectralMesh( false ), noMixedElements( false ), noEdges( false ),
23  culling( true ), repartition( false ), gatherSetRank( -1 ), tStepBase( -1 ), trivialPartitionShift( 0 ),
24  myHelper( NULL )
25 {
26  assert( impl != NULL );
27  impl->query_interface( readMeshIface );
28 }

References moab::Interface::query_interface(), and readMeshIface.

Referenced by factory().

◆ ~ReadNC()

moab::ReadNC::~ReadNC ( )
virtual

Destructor.

Definition at line 30 of file ReadNC.cpp.

31 {
33  if( myHelper != NULL ) delete myHelper;
34 }

References mbImpl, myHelper, readMeshIface, and moab::Interface::release_interface().

Member Function Documentation

◆ factory()

ReaderIface * moab::ReadNC::factory ( Interface iface)
static

Definition at line 11 of file ReadNC.cpp.

12 {
13  return new ReadNC( iface );
14 }

References iface, and ReadNC().

Referenced by moab::ReaderWriterSet::ReaderWriterSet().

◆ get_attributes()

ErrorCode moab::ReadNC::get_attributes ( int  var_id,
int  num_atts,
std::map< std::string, AttData > &  atts,
const char *  prefix = "" 
)
private

Get all global attributes in the file.

Definition at line 351 of file ReadNC.cpp.

352 {
353  char dum_name[120];
354 
355  for( int i = 0; i < num_atts; i++ )
356  {
357  // Get the name
358  int success = NCFUNC( inq_attname )( fileId, var_id, i, dum_name );
359  if( success ) MB_SET_ERR( MB_FAILURE, "Trouble getting attribute name" );
360 
361  AttData& data = atts[std::string( dum_name )];
362  data.attName = std::string( dum_name );
363  success = NCFUNC( inq_att )( fileId, var_id, dum_name, &data.attDataType, &data.attLen );
364  if( success ) MB_SET_ERR( MB_FAILURE, "Trouble getting info for attribute " << data.attName );
365  data.attVarId = var_id;
366 
367  dbgOut.tprintf( 2, "%sAttribute %s: length=%u, varId=%d, type=%d\n", ( prefix ? prefix : "" ),
368  data.attName.c_str(), (unsigned int)data.attLen, data.attVarId, data.attDataType );
369  }
370 
371  return MB_SUCCESS;
372 }

References moab::ReadNC::AttData::attDataType, moab::ReadNC::AttData::attLen, moab::ReadNC::AttData::attName, moab::ReadNC::AttData::attVarId, dbgOut, fileId, MB_SET_ERR, MB_SUCCESS, NCFUNC, and moab::DebugOutput::tprintf().

Referenced by get_variables(), and read_header().

◆ get_dimensions()

ErrorCode moab::ReadNC::get_dimensions ( int  file_id,
std::vector< std::string > &  dim_names,
std::vector< int > &  dim_lens 
)
private

Get all dimensions in the file.

Definition at line 374 of file ReadNC.cpp.

375 {
376  // Get the number of dimensions
377  int num_dims;
378  int success = NCFUNC( inq_ndims )( file_id, &num_dims );
379  if( success ) MB_SET_ERR( MB_FAILURE, "Trouble getting number of dimensions" );
380 
381  if( num_dims > NC_MAX_DIMS )
382  {
383  MB_SET_ERR( MB_FAILURE,
384  "ReadNC: File contains " << num_dims << " dims but NetCDF library supports only " << NC_MAX_DIMS );
385  }
386 
387  char dim_name[NC_MAX_NAME + 1];
388  NCDF_SIZE dim_len;
389  dim_names.resize( num_dims );
390  dim_lens.resize( num_dims );
391 
392  for( int i = 0; i < num_dims; i++ )
393  {
394  success = NCFUNC( inq_dim )( file_id, i, dim_name, &dim_len );
395  if( success ) MB_SET_ERR( MB_FAILURE, "Trouble getting dimension info" );
396 
397  dim_names[i] = std::string( dim_name );
398  dim_lens[i] = dim_len;
399 
400  dbgOut.tprintf( 2, "Dimension %s, length=%u\n", dim_name, (unsigned int)dim_len );
401  }
402 
403  return MB_SUCCESS;
404 }

References dbgOut, MB_SET_ERR, MB_SUCCESS, NCDF_SIZE, NCFUNC, and moab::DebugOutput::tprintf().

Referenced by moab::NCHelperHOMME::create_mesh(), and read_header().

◆ get_variables()

ErrorCode moab::ReadNC::get_variables ( )
private

Get the variable names and other info defined for this file.

Definition at line 406 of file ReadNC.cpp.

407 {
408  // First cache the number of time steps
409  std::vector< std::string >::iterator vit = std::find( dimNames.begin(), dimNames.end(), "time" );
410  if( vit == dimNames.end() ) vit = std::find( dimNames.begin(), dimNames.end(), "t" );
411 
412  int ntimes = 0;
413  if( vit != dimNames.end() ) ntimes = dimLens[vit - dimNames.begin()];
414  if( !ntimes ) ntimes = 1;
415 
416  // Get the number of variables
417  int num_vars;
418  int success = NCFUNC( inq_nvars )( fileId, &num_vars );
419  if( success ) MB_SET_ERR( MB_FAILURE, "Trouble getting number of variables" );
420 
421  if( num_vars > NC_MAX_VARS )
422  {
423  MB_SET_ERR( MB_FAILURE,
424  "ReadNC: File contains " << num_vars << " vars but NetCDF library supports only " << NC_MAX_VARS );
425  }
426 
427  char var_name[NC_MAX_NAME + 1];
428  int var_ndims;
429 
430  for( int i = 0; i < num_vars; i++ )
431  {
432  // Get the name first, so we can allocate a map iterate for this var
433  success = NCFUNC( inq_varname )( fileId, i, var_name );
434  if( success ) MB_SET_ERR( MB_FAILURE, "Trouble getting variable name" );
435  VarData& data = varInfo[std::string( var_name )];
436  data.varName = std::string( var_name );
437  data.varId = i;
438  data.varTags.resize( ntimes, 0 );
439 
440  // Get the data type
441  success = NCFUNC( inq_vartype )( fileId, i, &data.varDataType );
442  if( success ) MB_SET_ERR( MB_FAILURE, "Trouble getting data type for variable " << data.varName );
443 
444  // Get the number of dimensions, then the dimensions
445  success = NCFUNC( inq_varndims )( fileId, i, &var_ndims );
446  if( success ) MB_SET_ERR( MB_FAILURE, "Trouble getting number of dims for variable " << data.varName );
447  data.varDims.resize( var_ndims );
448 
449  success = NCFUNC( inq_vardimid )( fileId, i, &data.varDims[0] );
450  if( success ) MB_SET_ERR( MB_FAILURE, "Trouble getting dimensions for variable " << data.varName );
451 
452  // Finally, get the number of attributes, then the attributes
453  success = NCFUNC( inq_varnatts )( fileId, i, &data.numAtts );
454  if( success ) MB_SET_ERR( MB_FAILURE, "Trouble getting number of dims for variable " << data.varName );
455 
456  // Print debug info here so attribute info comes afterwards
457  dbgOut.tprintf( 2, "Variable %s: Id=%d, numAtts=%d, datatype=%d, num_dims=%u\n", data.varName.c_str(),
458  data.varId, data.numAtts, data.varDataType, (unsigned int)data.varDims.size() );
459 
460  MB_CHK_SET_ERR( get_attributes( i, data.numAtts, data.varAtts, " " ),
461  "Trouble getting attributes for variable " << data.varName );
462  }
463 
464  return MB_SUCCESS;
465 }

References dbgOut, dimLens, dimNames, fileId, get_attributes(), MB_CHK_SET_ERR, MB_SET_ERR, MB_SUCCESS, NCFUNC, moab::ReadNC::VarData::numAtts, moab::DebugOutput::tprintf(), moab::ReadNC::VarData::varAtts, moab::ReadNC::VarData::varDataType, moab::ReadNC::VarData::varDims, moab::ReadNC::VarData::varId, varInfo, moab::ReadNC::VarData::varName, and moab::ReadNC::VarData::varTags.

Referenced by read_header().

◆ load_file()

ErrorCode moab::ReadNC::load_file ( const char *  file_name,
const EntityHandle file_set,
const FileOptions opts,
const SubsetList subset_list = nullptr,
const Tag file_id_tag = nullptr 
)
virtual

Load an NC file.

Implements moab::ReaderIface.

Definition at line 36 of file ReadNC.cpp.

41 {
42  // See if opts has variable(s) specified
43  std::vector< std::string > var_names;
44  std::vector< int > tstep_nums;
45  std::vector< double > tstep_vals;
46 
47  // Get and cache predefined tag handles
49  // Store the pointer to the tag; if not null, set when global id tag
50  // is set too, with the same data, duplicated
51  mpFileIdTag = file_id_tag;
52 
53  MB_CHK_SET_ERR( parse_options( opts, var_names, tstep_nums, tstep_vals ), "Trouble parsing option string" );
54 
55  // Open the file
56  dbgOut.tprintf( 1, "Opening file %s\n", file_name );
57  fileName = std::string( file_name );
58  int success;
59 
60 #ifdef MOAB_HAVE_PNETCDF
61  if( isParallel )
62  success = NCFUNC( open )( myPcomm->proc_config().proc_comm(), file_name, 0, MPI_INFO_NULL, &fileId );
63  else
64  success = NCFUNC( open )( MPI_COMM_SELF, file_name, 0, MPI_INFO_NULL, &fileId );
65 #else
66  success = NCFUNC( open )( file_name, 0, &fileId );
67 #endif
68  if( success ) MB_SET_ERR( MB_FAILURE, "Trouble opening file " << file_name );
69 
70  // Read the header (num dimensions, dimensions, num variables, global attribs)
71  MB_CHK_SET_ERR( read_header(), "Trouble reading file header" );
72 
73  // Make sure there's a file set to put things in
74  EntityHandle tmp_set;
75  if( noMesh && !file_set )
76  {
77  MB_SET_ERR( MB_FAILURE, "NOMESH option requires non-NULL file set on input" );
78  }
79  else if( !file_set || ( file_set && *file_set == 0 ) )
80  {
81  MB_CHK_SET_ERR( mbImpl->create_meshset( MESHSET_SET, tmp_set ), "Trouble creating file set" );
82  }
83  else
84  tmp_set = *file_set;
85 
86  // Get the scd interface
87  scdi = nullptr;
88  MB_CHK_SET_ERR( mbImpl->query_interface( scdi ), "failed to get SCD interface from query" );
89  if( nullptr == scdi ) return MB_FAILURE;
90 
91  if( nullptr != myHelper ) delete myHelper;
92 
93  // Get appropriate NC helper instance based on information read from the header
94  myHelper = NCHelper::get_nc_helper( this, fileId, opts, tmp_set );
95  if( nullptr == myHelper )
96  {
97  MB_SET_ERR( MB_FAILURE, "Failed to get NCHelper class instance" );
98  }
99 
100  // Initialize mesh values
101  MB_CHK_SET_ERR( myHelper->init_mesh_vals(), "Trouble initializing mesh values" );
102 
103  // Check existing mesh from last read
104  if( noMesh && !noVars )
105  {
106  MB_CHK_SET_ERR( myHelper->check_existing_mesh(), "Trouble checking mesh from last read" );
107  }
108 
109  // Create some conventional tags, e.g. __NUM_DIMS
110  // For multiple reads to a specified file set, we assume a single file, or a series of
111  // files with separated timesteps. Keep a flag on the file set to prevent conventional
112  // tags from being created again on a second read
113  Tag convTagsCreated = 0;
114  int def_val = 0;
115  MB_CHK_SET_ERR( mbImpl->tag_get_handle( "__CONV_TAGS_CREATED", 1, MB_TYPE_INTEGER, convTagsCreated,
116  MB_TAG_SPARSE | MB_TAG_CREAT, &def_val ),
117  "Trouble getting _CONV_TAGS_CREATED tag" );
118  int create_conv_tags_flag = 0;
119  MB_CHK_SET_ERR( mbImpl->tag_get_data( convTagsCreated, &tmp_set, 1, &create_conv_tags_flag ),
120  "failed to get conventional tags" );
121  // The first read to the file set
122  if( 0 == create_conv_tags_flag )
123  {
124  // Read dimensions (coordinate variables) by default to create tags like __<var_name>_DIMS
125  // This is done only once (assume that all files read to the file set have the same
126  // dimensions)
127  MB_CHK_SET_ERR( myHelper->read_variables( dimNames, tstep_nums ), "Trouble reading dimensions" );
128 
129  MB_CHK_SET_ERR( myHelper->create_conventional_tags( tstep_nums ), "Trouble creating NC conventional tags" );
130 
131  create_conv_tags_flag = 1;
132  MB_CHK_SET_ERR( mbImpl->tag_set_data( convTagsCreated, &tmp_set, 1, &create_conv_tags_flag ),
133  "Trouble setting data to _CONV_TAGS_CREATED tag" );
134  }
135  else // Another read to the file set
136  {
137  if( tStepBase > -1 )
138  {
139  // If timesteps spread across files, merge time values read
140  // from current file to existing time tag
141  MB_CHK_SET_ERR( myHelper->update_time_tag_vals(), "Trouble updating time tag values" );
142  }
143  }
144 
145  // Create mesh vertex/edge/face sequences
146  Range faces;
147  if( !noMesh )
148  {
149  MB_CHK_SET_ERR( myHelper->create_mesh( faces ), "Trouble creating mesh" );
150  }
151 
152  // Read specified variables onto grid
153  if( !noVars )
154  {
155  if( var_names.empty() )
156  {
157  // If VARIABLE option is missing, read all variables
158  MB_CHK_SET_ERR( myHelper->read_variables( var_names, tstep_nums ), "Trouble reading all variables" );
159  }
160  else
161  {
162  // Exclude dimensions that are read to the file set by default
163  std::vector< std::string > non_dim_var_names;
164  for( unsigned int i = 0; i < var_names.size(); i++ )
165  {
166  if( std::find( dimNames.begin(), dimNames.end(), var_names[i] ) == dimNames.end() )
167  non_dim_var_names.push_back( var_names[i] );
168  }
169 
170  if( !non_dim_var_names.empty() )
171  {
172  MB_CHK_SET_ERR( myHelper->read_variables( non_dim_var_names, tstep_nums ),
173  "Trouble reading specified variables" );
174  }
175  }
176  }
177 
178 #ifdef MOAB_HAVE_MPI
179  // Create partition set, and populate with elements
180  if( isParallel )
181  {
182  // Write partition tag name on partition set
183  Tag part_tag = myPcomm->partition_tag();
184  int dum_rank = myPcomm->proc_config().proc_rank();
185  // the tmp_set is the file_set
186  MB_CHK_SET_ERR( mbImpl->tag_set_data( part_tag, &tmp_set, 1, &dum_rank ),
187  "Trouble writing partition tag name on partition set" );
188  }
189 #endif
190 
192  scdi = NULL;
193 
194  // Close the file
195  success = NCFUNC( close )( fileId );
196  if( success ) MB_SET_ERR( MB_FAILURE, "Trouble closing file" );
197 
198  return MB_SUCCESS;
199 }

References moab::NCHelper::check_existing_mesh(), moab::NCHelper::create_conventional_tags(), moab::NCHelper::create_mesh(), moab::Interface::create_meshset(), dbgOut, dimNames, fileId, fileName, moab::NCHelper::get_nc_helper(), moab::Interface::globalId_tag(), moab::NCHelper::init_mesh_vals(), isParallel, MB_CHK_SET_ERR, MB_SET_ERR, MB_SUCCESS, MB_TAG_CREAT, MB_TAG_SPARSE, MB_TYPE_INTEGER, mbImpl, MESHSET_SET, mGlobalIdTag, mpFileIdTag, myHelper, NCFUNC, noMesh, noVars, parse_options(), moab::Interface::query_interface(), read_header(), moab::NCHelper::read_variables(), moab::Interface::release_interface(), scdi, moab::Interface::tag_get_data(), moab::Interface::tag_get_handle(), moab::Interface::tag_set_data(), moab::DebugOutput::tprintf(), tStepBase, and moab::NCHelper::update_time_tag_vals().

◆ parse_options()

ErrorCode moab::ReadNC::parse_options ( const FileOptions opts,
std::vector< std::string > &  var_names,
std::vector< int > &  tstep_nums,
std::vector< double > &  tstep_vals 
)
private

Definition at line 201 of file ReadNC.cpp.

205 {
206  int tmpval;
207  if( MB_SUCCESS == opts.get_int_option( "DEBUG_IO", 1, tmpval ) )
208  {
209  dbgOut.set_verbosity( tmpval );
210  dbgOut.set_prefix( "NC " );
211  }
212 
213  ErrorCode rval = opts.get_strs_option( "VARIABLE", var_names );
214  if( MB_TYPE_OUT_OF_RANGE == rval )
215  noVars = true;
216  else
217  noVars = false;
218 
219  opts.get_ints_option( "TIMESTEP", tstep_nums );
220  opts.get_reals_option( "TIMEVAL", tstep_vals );
221 
222  rval = opts.get_null_option( "NOMESH" );
223  if( MB_SUCCESS == rval ) noMesh = true;
224 
225  rval = opts.get_null_option( "SPECTRAL_MESH" );
226  if( MB_SUCCESS == rval ) spectralMesh = true;
227 
228  rval = opts.get_null_option( "NO_MIXED_ELEMENTS" );
229  if( MB_SUCCESS == rval ) noMixedElements = true;
230 
231  rval = opts.get_null_option( "NO_EDGES" );
232  if( MB_SUCCESS == rval ) noEdges = true;
233 
234  rval = opts.get_null_option( "NO_CULLING" ); // used now only for domain nc convention
235  if( MB_SUCCESS == rval ) culling = false;
236 
237  rval = opts.get_null_option( "REPARTITION" ); // used now only for domain nc, to repartition with zoltan
238  if( MB_SUCCESS == rval ) repartition = true;
239 
240  if( 2 <= dbgOut.get_verbosity() )
241  {
242  if( !var_names.empty() )
243  {
244  std::cerr << "Variables requested: ";
245  for( unsigned int i = 0; i < var_names.size(); i++ )
246  std::cerr << var_names[i];
247  std::cerr << std::endl;
248  }
249 
250  if( !tstep_nums.empty() )
251  {
252  std::cerr << "Timesteps requested: ";
253  for( unsigned int i = 0; i < tstep_nums.size(); i++ )
254  std::cerr << tstep_nums[i];
255  std::cerr << std::endl;
256  }
257 
258  if( !tstep_vals.empty() )
259  {
260  std::cerr << "Time vals requested: ";
261  for( unsigned int i = 0; i < tstep_vals.size(); i++ )
262  std::cerr << tstep_vals[i];
263  std::cerr << std::endl;
264  }
265  }
266 
267  rval = opts.get_int_option( "GATHER_SET", 0, gatherSetRank );
268  if( MB_TYPE_OUT_OF_RANGE == rval )
269  {
270  MB_SET_ERR( rval, "Invalid value for GATHER_SET option" );
271  }
272 
273  rval = opts.get_int_option( "TIMESTEPBASE", 0, tStepBase );
274  if( MB_TYPE_OUT_OF_RANGE == rval )
275  {
276  MB_SET_ERR( rval, "Invalid value for TIMESTEPBASE option" );
277  }
278 
279  rval = opts.get_int_option( "TRIVIAL_PARTITION_SHIFT", 1, trivialPartitionShift );
280  if( MB_TYPE_OUT_OF_RANGE == rval )
281  {
282  MB_SET_ERR( rval, "Invalid value for TRIVIAL_PARTITION_SHIFT option" );
283  }
284 
285 #ifdef MOAB_HAVE_MPI
286  isParallel = ( opts.match_option( "PARALLEL", "READ_PART" ) != MB_ENTITY_NOT_FOUND );
287 
288  if( !isParallel )
289  // Return success here, since rval still has _NOT_FOUND from not finding option
290  // in this case, myPcomm will be NULL, so it can never be used; always check for isParallel
291  // before any use for myPcomm
292  return MB_SUCCESS;
293 
294  int pcomm_no = 0;
295  rval = opts.get_int_option( "PARALLEL_COMM", pcomm_no );
296  if( MB_TYPE_OUT_OF_RANGE == rval )
297  {
298  MB_SET_ERR( rval, "Invalid value for PARALLEL_COMM option" );
299  }
300  myPcomm = ParallelComm::get_pcomm( mbImpl, pcomm_no );
301  if( 0 == myPcomm )
302  {
303  myPcomm = new ParallelComm( mbImpl, MPI_COMM_WORLD );
304  }
305  const int rank = myPcomm->proc_config().proc_rank();
306  dbgOut.set_rank( rank );
307 
308  int dum;
309  rval = opts.match_option( "PARTITION_METHOD", ScdParData::PartitionMethodNames, dum );
310  if( MB_FAILURE == rval )
311  {
312  MB_SET_ERR( rval, "Unknown partition method specified" );
313  }
314  else if( MB_ENTITY_NOT_FOUND == rval )
316  else
317  partMethod = dum;
318 #endif
319 
320  return MB_SUCCESS;
321 }

References moab::ScdParData::ALLJORKORI, culling, dbgOut, moab::dum, ErrorCode, gatherSetRank, moab::FileOptions::get_int_option(), moab::FileOptions::get_ints_option(), moab::FileOptions::get_null_option(), moab::ParallelComm::get_pcomm(), moab::FileOptions::get_reals_option(), moab::FileOptions::get_strs_option(), moab::DebugOutput::get_verbosity(), isParallel, moab::FileOptions::match_option(), MB_ENTITY_NOT_FOUND, MB_SET_ERR, MB_SUCCESS, MB_TYPE_OUT_OF_RANGE, mbImpl, noEdges, noMesh, noMixedElements, noVars, moab::ScdParData::PartitionMethodNames, partMethod, repartition, moab::DebugOutput::set_prefix(), moab::DebugOutput::set_rank(), moab::DebugOutput::set_verbosity(), spectralMesh, trivialPartitionShift, and tStepBase.

Referenced by load_file().

◆ read_header()

ErrorCode moab::ReadNC::read_header ( )
private

Read the header information.

Definition at line 323 of file ReadNC.cpp.

324 {
325  dbgOut.tprint( 1, "Reading header...\n" );
326 
327  // Get the global attributes
328  int numgatts;
329  int success;
330  success = NCFUNC( inq_natts )( fileId, &numgatts );
331  if( success ) MB_SET_ERR( MB_FAILURE, "Couldn't get number of global attributes" );
332 
333  // Read attributes into globalAtts
334  ErrorCode result = get_attributes( NC_GLOBAL, numgatts, globalAtts );
335  MB_CHK_SET_ERR( result, "Trouble getting global attributes" );
336  dbgOut.tprintf( 1, "Read %u attributes\n", (unsigned int)globalAtts.size() );
337 
338  // Read in dimensions into dimNames and dimLens
339  result = get_dimensions( fileId, dimNames, dimLens );
340  MB_CHK_SET_ERR( result, "Trouble getting dimensions" );
341  dbgOut.tprintf( 1, "Read %u dimensions\n", (unsigned int)dimNames.size() );
342 
343  // Read in variables into varInfo
344  result = get_variables();
345  MB_CHK_SET_ERR( result, "Trouble getting variables" );
346  dbgOut.tprintf( 1, "Read %u variables\n", (unsigned int)varInfo.size() );
347 
348  return MB_SUCCESS;
349 }

References dbgOut, dimLens, dimNames, ErrorCode, fileId, get_attributes(), get_dimensions(), get_variables(), globalAtts, MB_CHK_SET_ERR, MB_SET_ERR, MB_SUCCESS, NCFUNC, moab::DebugOutput::tprint(), moab::DebugOutput::tprintf(), and varInfo.

Referenced by load_file().

◆ read_tag_values()

ErrorCode moab::ReadNC::read_tag_values ( const char *  file_name,
const char *  tag_name,
const FileOptions opts,
std::vector< int > &  tag_values_out,
const SubsetList subset_list = nullptr 
)
virtual

Read tag values from a file.

Read the list if all integer tag values from the file for a tag that is a single integer value per entity.

Parameters
file_nameThe file to read.
tag_nameThe tag for which to read values
tag_values_outOutput: The list of tag values.
subset_listAn array of tag name and value sets specifying the subset of the file to read. If multiple tags are specified, the sets that match all tags (intersection) should be read.
subset_list_lengthThe length of the 'subset_list' array.

Implements moab::ReaderIface.

Definition at line 467 of file ReadNC.cpp.

472 {
473  return MB_FAILURE;
474 }

Friends And Related Function Documentation

◆ NCHelper

friend class NCHelper
friend

Definition at line 64 of file ReadNC.hpp.

◆ NCHelperDomain

friend class NCHelperDomain
friend

Definition at line 69 of file ReadNC.hpp.

◆ NCHelperESMF

friend class NCHelperESMF
friend

Definition at line 73 of file ReadNC.hpp.

◆ NCHelperEuler

friend class NCHelperEuler
friend

Definition at line 67 of file ReadNC.hpp.

◆ NCHelperFV

friend class NCHelperFV
friend

Definition at line 68 of file ReadNC.hpp.

◆ NCHelperGCRM

friend class NCHelperGCRM
friend

Definition at line 74 of file ReadNC.hpp.

◆ NCHelperHOMME

friend class NCHelperHOMME
friend

Definition at line 71 of file ReadNC.hpp.

◆ NCHelperMPAS

friend class NCHelperMPAS
friend

Definition at line 72 of file ReadNC.hpp.

◆ NCHelperScrip

friend class NCHelperScrip
friend

Definition at line 70 of file ReadNC.hpp.

◆ ScdNCHelper

friend class ScdNCHelper
friend

Definition at line 65 of file ReadNC.hpp.

◆ UcdNCHelper

friend class UcdNCHelper
friend

Definition at line 66 of file ReadNC.hpp.

Member Data Documentation

◆ culling

bool moab::ReadNC::culling
private

Definition at line 236 of file ReadNC.hpp.

Referenced by moab::NCHelperDomain::create_mesh(), and parse_options().

◆ dbgOut

◆ dimLens

◆ dimNames

◆ fileId

int moab::ReadNC::fileId
private

File numbers assigned by netcdf.

Definition at line 187 of file ReadNC.hpp.

Referenced by moab::NCHelperHOMME::create_mesh(), get_attributes(), get_variables(), load_file(), moab::NCHelperHOMME::NCHelperHOMME(), and read_header().

◆ fileName

std::string moab::ReadNC::fileName
private

File name.

Definition at line 184 of file ReadNC.hpp.

Referenced by moab::NCHelperHOMME::create_mesh(), and load_file().

◆ gatherSetRank

int moab::ReadNC::gatherSetRank
private

◆ globalAtts

◆ isParallel

◆ mbImpl

Interface* moab::ReadNC::mbImpl
private

Interface instance.

Definition at line 181 of file ReadNC.hpp.

Referenced by moab::ScdNCHelper::check_existing_mesh(), moab::NCHelperGCRM::check_existing_mesh(), moab::NCHelperHOMME::check_existing_mesh(), moab::NCHelperMPAS::check_existing_mesh(), moab::NCHelper::create_conventional_tags(), moab::NCHelper::create_dummy_variables(), moab::NCHelperMPAS::create_gather_set_cells(), moab::NCHelperGCRM::create_gather_set_edges(), moab::NCHelperMPAS::create_gather_set_edges(), moab::NCHelperGCRM::create_gather_set_vertices(), moab::NCHelperMPAS::create_gather_set_vertices(), moab::NCHelperESMF::create_local_cells(), moab::NCHelperMPAS::create_local_cells(), moab::NCHelperGCRM::create_local_edges(), moab::NCHelperMPAS::create_local_edges(), moab::NCHelperESMF::create_local_vertices(), moab::NCHelperGCRM::create_local_vertices(), moab::NCHelperMPAS::create_local_vertices(), moab::ScdNCHelper::create_mesh(), moab::NCHelperDomain::create_mesh(), moab::NCHelperHOMME::create_mesh(), moab::NCHelperMPAS::create_mesh(), moab::NCHelperScrip::create_mesh(), moab::NCHelperGCRM::create_padded_gather_set_cells(), moab::NCHelperMPAS::create_padded_gather_set_cells(), moab::NCHelperESMF::create_padded_local_cells(), moab::NCHelperGCRM::create_padded_local_cells(), moab::NCHelperMPAS::create_padded_local_cells(), moab::ScdNCHelper::create_quad_coordinate_tag(), moab::NCHelper::get_tag_to_nonset(), moab::NCHelper::get_tag_to_set(), moab::NCHelperDomain::init_mesh_vals(), moab::NCHelperEuler::init_mesh_vals(), moab::NCHelperFV::init_mesh_vals(), moab::NCHelperScrip::init_mesh_vals(), load_file(), parse_options(), moab::ScdNCHelper::read_scd_variables_to_nonset_allocate(), moab::NCHelperMPAS::read_ucd_variables_to_nonset(), moab::NCHelperGCRM::read_ucd_variables_to_nonset_allocate(), moab::NCHelperHOMME::read_ucd_variables_to_nonset_allocate(), moab::NCHelperMPAS::read_ucd_variables_to_nonset_allocate(), moab::NCHelper::read_variables_to_set(), moab::NCHelper::update_time_tag_vals(), and ~ReadNC().

◆ mGlobalIdTag

◆ mpFileIdTag

const Tag* moab::ReadNC::mpFileIdTag
private

This is a pointer to the file id tag that is passed from ReadParallel it gets deleted at the end of resolve sharing, but it will have same data as the global id tag global id tag is preserved, and is needed later on.

Definition at line 209 of file ReadNC.hpp.

Referenced by moab::NCHelperGCRM::create_gather_set_vertices(), moab::NCHelperMPAS::create_gather_set_vertices(), moab::NCHelperESMF::create_local_vertices(), moab::NCHelperGCRM::create_local_vertices(), moab::NCHelperMPAS::create_local_vertices(), moab::ScdNCHelper::create_mesh(), moab::NCHelperHOMME::create_mesh(), and load_file().

◆ myHelper

NCHelper* moab::ReadNC::myHelper
private

Helper class instance.

Definition at line 243 of file ReadNC.hpp.

Referenced by load_file(), and ~ReadNC().

◆ noEdges

◆ noMesh

◆ noMixedElements

bool moab::ReadNC::noMixedElements
private

◆ noVars

bool moab::ReadNC::noVars
private

Definition at line 232 of file ReadNC.hpp.

Referenced by load_file(), and parse_options().

◆ parData

ScdParData moab::ReadNC::parData
private

◆ partMethod

◆ readMeshIface

◆ repartition

bool moab::ReadNC::repartition
private

Definition at line 237 of file ReadNC.hpp.

Referenced by moab::NCHelperDomain::create_mesh(), and parse_options().

◆ scdi

ScdInterface* moab::ReadNC::scdi
private

Scd interface.

Definition at line 221 of file ReadNC.hpp.

Referenced by moab::NCHelper::create_conventional_tags(), moab::ScdNCHelper::create_mesh(), and load_file().

◆ spectralMesh

bool moab::ReadNC::spectralMesh
private

Definition at line 233 of file ReadNC.hpp.

Referenced by moab::NCHelperHOMME::create_mesh(), and parse_options().

◆ trivialPartitionShift

◆ tStepBase

int moab::ReadNC::tStepBase
private

◆ varInfo


The documentation for this class was generated from the following files: