29 std::map< std::string, ReadNC::AttData >& globalAtts = readNC->
globalAtts;
30 std::map< std::string, ReadNC::AttData >::iterator attIt = globalAtts.find(
"conventions" );
31 if( attIt == globalAtts.end() ) attIt = globalAtts.find(
"Conventions" );
33 if( attIt != globalAtts.end() )
35 unsigned int sz = attIt->second.attLen;
37 att_data.resize( sz + 1 );
38 att_data[sz] =
'\000';
40 NCFUNC( get_att_text )( fileId, attIt->second.attVarId, attIt->second.attName.c_str(), &att_data[0] );
41 if( 0 == success && att_data.find(
"CF" ) != std::string::npos ) is_CF =
true;
72 return "PARALLEL=READ_PART;PARTITION_METHOD=RCBZOLTAN;"
73 "PARALLEL_RESOLVE_SHARED_ENTS;NO_EDGES;NO_MIXED_ELEMENTS;VARIABLE=;";
75 return "PARALLEL=READ_PART;PARTITION_METHOD=RCBZOLTAN;";
77 return "PARALLEL=READ_PART;PARTITION_METHOD=RCBZOLTAN;PARALLEL_RESOLVE_SHARED_ENTS;VARIABLE=;";
79 return "PARALLEL=READ_PART;PARTITION_METHOD=SQIJ;VARIABLE=;";
81 return "PARALLEL=READ_PART;PARTITION_METHOD=TRIVIAL;PARALLEL_RESOLVE_SHARED_ENTS;";
84 return "PARALLEL=READ_PART;PARTITION;PARALLEL_RESOLVE_SHARED_ENTS;"
85 "PARTITION_METHOD=SQIJ;VARIABLE=;";
87 return "PARALLEL=READ_PART;PARTITION_METHOD=RCBZOLTAN;PARALLEL_RESOLVE_SHARED_ENTS;";
98 return new( std::nothrow )
NCHelperMPAS( readNC, fileId, opts, fileSet );
101 return new( std::nothrow )
NCHelperScrip( readNC, fileId, opts, fileSet );
103 return new( std::nothrow )
NCHelperESMF( readNC, fileId, opts, fileSet );
105 return new( std::nothrow )
NCHelperDomain( readNC, fileId, opts, fileSet );
108 return new( std::nothrow )
NCHelperHOMME( readNC, fileId, opts, fileSet );
110 return new( std::nothrow )
NCHelperGCRM( readNC, fileId, opts, fileSet );
112 return new( std::nothrow )
NCHelperEuler( readNC, fileId, opts, fileSet );
114 return new( std::nothrow )
NCHelperFV( readNC, fileId, opts, fileSet );
126 std::map< std::string, ReadNC::VarData >& varInfo =
_readNC->
varInfo;
131 std::string tag_name;
135 tag_name =
"__NUM_DIMS";
136 int numDims = dimNames.size();
139 "Trouble creating conventional tag " << tag_name );
141 "Trouble setting data to conventional tag " << tag_name );
142 dbgOut.
tprintf( 2,
"Conventional tag %s created\n", tag_name.c_str() );
146 tag_name =
"__NUM_VARS";
147 int numVars = varInfo.size();
150 "Trouble creating conventional tag " << tag_name );
152 "Trouble setting data to conventional tag " << tag_name );
153 dbgOut.
tprintf( 2,
"Conventional tag %s created\n", tag_name.c_str() );
157 tag_name =
"__DIM_NAMES";
158 std::string dimnames;
159 unsigned int dimNamesSz = dimNames.size();
160 for(
unsigned int i = 0; i != dimNamesSz; i++ )
162 dimnames.append( dimNames[i] );
163 dimnames.push_back(
'\0' );
165 int dimnamesSz = dimnames.size();
168 "Trouble creating conventional tag " << tag_name );
169 const void* ptr = dimnames.c_str();
171 "Trouble setting data to conventional tag " << tag_name );
172 dbgOut.
tprintf( 2,
"Conventional tag %s created\n", tag_name.c_str() );
176 tag_name =
"__DIM_LENS";
177 int dimLensSz = dimLens.size();
180 "Trouble creating conventional tag " << tag_name );
181 ptr = &( dimLens[0] );
183 "Trouble setting data to conventional tag " << tag_name );
184 dbgOut.
tprintf( 2,
"Conventional tag %s created\n", tag_name.c_str() );
188 tag_name =
"__VAR_NAMES";
189 std::string varnames;
190 std::map< std::string, ReadNC::VarData >::iterator mapIter;
191 for( mapIter = varInfo.begin(); mapIter != varInfo.end(); ++mapIter )
193 varnames.append( mapIter->first );
194 varnames.push_back(
'\0' );
196 int varnamesSz = varnames.size();
199 "Trouble creating conventional tag " << tag_name );
200 ptr = varnames.c_str();
202 "Trouble setting data to conventional tag " << tag_name );
203 dbgOut.
tprintf( 2,
"Conventional tag %s created\n", tag_name.c_str() );
206 for(
unsigned int i = 0; i != dimNamesSz; i++ )
208 if( dimNames[i] ==
"time" || dimNames[i] ==
"Time" || dimNames[i] ==
"t" )
213 std::stringstream ss_tag_name;
214 ss_tag_name <<
"__" << dimNames[i] <<
"_LOC_MINMAX";
215 tag_name = ss_tag_name.str();
217 std::vector< int > val( 2, 0 );
222 "Trouble creating conventional tag " << tag_name );
224 "Trouble setting data to conventional tag " << tag_name );
225 dbgOut.
tprintf( 2,
"Conventional tag %s created\n", tag_name.c_str() );
230 for(
unsigned int i = 0; i != dimNamesSz; i++ )
232 if( dimNames[i] ==
"time" || dimNames[i] ==
"Time" || dimNames[i] ==
"t" )
234 std::vector< int > val;
235 if( !tstep_nums.empty() )
241 if(
tVals.empty() )
continue;
242 val.resize(
tVals.size() );
243 for(
unsigned int j = 0; j !=
tVals.size(); j++ )
247 std::stringstream ss_tag_name;
248 ss_tag_name <<
"__" << dimNames[i] <<
"_LOC_VALS";
249 tag_name = ss_tag_name.str();
252 "Trouble creating conventional tag " << tag_name );
254 "Trouble setting data to conventional tag " << tag_name );
255 dbgOut.
tprintf( 2,
"Conventional tag %s created\n", tag_name.c_str() );
260 for( mapIter = varInfo.begin(); mapIter != varInfo.end(); ++mapIter )
262 Tag varNamesDimsTag = 0;
263 std::stringstream ss_tag_name;
264 ss_tag_name <<
"__" << mapIter->first <<
"_DIMS";
265 tag_name = ss_tag_name.str();
266 unsigned int varDimSz = varInfo[mapIter->first].varDims.size();
267 if( varDimSz == 0 )
continue;
268 std::vector< Tag > varDimTags( varDimSz );
269 for(
unsigned int i = 0; i != varDimSz; i++ )
272 std::string tmptagname = dimNames[varInfo[mapIter->first].varDims[i]];
274 "Trouble getting tag " << tmptagname );
275 varDimTags[i] = tmptag;
284 "Trouble creating conventional tag " << tag_name );
286 "Trouble setting data to conventional tag " << tag_name );
287 dbgOut.
tprintf( 2,
"Conventional tag %s created\n", tag_name.c_str() );
292 if( !part_tag )
MB_SET_ERR( MB_FAILURE,
"Trouble getting PARTITION_METHOD tag" );
294 "Trouble setting data to PARTITION_METHOD tag" );
295 dbgOut.
tprintf( 2,
"Conventional tag %s created\n", tag_name.c_str() );
298 tag_name =
"__GLOBAL_ATTRIBS";
299 Tag globalAttTag = 0;
302 "Trouble creating conventional tag " << tag_name );
304 std::vector< int > gattLen;
306 const void* gattptr = gattVal.c_str();
307 int globalAttSz = gattVal.size();
309 "Trouble setting data to conventional tag " << tag_name );
310 dbgOut.
tprintf( 2,
"Conventional tag %s created\n", tag_name.c_str() );
313 tag_name =
"__GLOBAL_ATTRIBS_LEN";
314 Tag globalAttLenTag = 0;
315 if( gattLen.size() == 0 ) gattLen.push_back( 0 );
318 "Trouble creating conventional tag " << tag_name );
320 "Trouble setting data to conventional tag " << tag_name );
321 dbgOut.
tprintf( 2,
"Conventional tag %s created\n", tag_name.c_str() );
324 for( mapIter = varInfo.begin(); mapIter != varInfo.end(); ++mapIter )
326 std::stringstream ssTagName;
327 ssTagName <<
"__" << mapIter->first <<
"_ATTRIBS";
328 tag_name = ssTagName.str();
332 "Trouble creating conventional tag " << tag_name );
334 std::string varAttVal;
335 std::vector< int > varAttLen;
336 if( mapIter->second.numAtts < 1 )
341 varAttVal =
"DUMMY_VAR";
346 varAttVal =
"NO_ATTRIBS";
352 "Trouble creating attribute string for variable " << mapIter->first );
354 const void* varAttPtr = varAttVal.c_str();
355 int varAttSz = varAttVal.size();
356 if( 0 == varAttSz ) varAttSz = 1;
358 "Trouble setting data to conventional tag " << tag_name );
359 dbgOut.
tprintf( 2,
"Conventional tag %s created\n", tag_name.c_str() );
362 tag_name = ssTagName.str();
363 Tag varAttLenTag = 0;
364 if( 0 == varAttLen.size() ) varAttLen.push_back( 0 );
367 "Trouble creating conventional tag " << tag_name );
369 "Trouble setting data to conventional tag " << tag_name );
370 dbgOut.
tprintf( 2,
"Conventional tag %s created\n", tag_name.c_str() );
374 tag_name =
"__VAR_NAMES_LOCATIONS";
375 Tag varNamesLocsTag = 0;
376 std::vector< int > varNamesLocs( varInfo.size() );
379 "Trouble creating conventional tag " << tag_name );
380 for( mapIter = varInfo.begin(); mapIter != varInfo.end(); ++mapIter )
382 varNamesLocs[std::distance( varInfo.begin(), mapIter )] = mapIter->second.entLoc;
385 "Trouble setting data to conventional tag " << tag_name );
386 dbgOut.
tprintf( 2,
"Conventional tag %s created\n", tag_name.c_str() );
390 tag_name =
"__MESH_TYPE";
395 "Trouble creating conventional tag " << tag_name );
396 ptr = meshTypeName.c_str();
397 int leng = meshTypeName.size();
399 "Trouble setting data to conventional tag " << tag_name );
400 dbgOut.
tprintf( 2,
"Conventional tag %s created\n", tag_name.c_str() );
411 std::string time_tag_name = dimNames[
tDim];
415 const void* data = NULL;
416 int time_tag_size = 0;
418 "Trouble getting tag " << time_tag_name );
420 "Trouble getting data of tag " << time_tag_name );
421 const double* time_tag_vals =
static_cast< const double*
>( data );
425 std::vector< double > merged_time_vals;
426 merged_time_vals.reserve( time_tag_size +
nTimeSteps );
433 if( time_tag_vals[i] <
tVals[j] )
434 merged_time_vals.push_back( time_tag_vals[i++] );
436 merged_time_vals.push_back(
tVals[j++] );
440 while( i < time_tag_size )
441 merged_time_vals.push_back( time_tag_vals[i++] );
445 merged_time_vals.push_back(
tVals[j++] );
447 data = &merged_time_vals[0];
448 time_tag_size = merged_time_vals.size();
450 "Trouble setting data to tag " << time_tag_name );
456 std::vector< int >& tstep_nums,
457 std::vector< ReadNC::VarData >& vdatas,
458 std::vector< ReadNC::VarData >& vsetdatas )
460 std::map< std::string, ReadNC::VarData >& varInfo =
_readNC->
varInfo;
463 std::map< std::string, ReadNC::VarData >::iterator mit;
466 if( var_names.empty() )
468 for( mit = varInfo.begin(); mit != varInfo.end(); ++mit )
476 if( std::find( dimNames.begin(), dimNames.end(), vd.
varName ) != dimNames.end() )
continue;
479 vsetdatas.push_back( vd );
481 vdatas.push_back( vd );
487 for(
unsigned int i = 0; i < var_names.size(); i++ )
489 mit = varInfo.find( var_names[i] );
490 if( mit != varInfo.end() )
498 vsetdatas.push_back( vd );
500 vdatas.push_back( vd );
504 MB_SET_ERR( MB_FAILURE,
"Couldn't find specified variable " << var_names[i] );
513 tstep_nums.push_back( i );
516 if( !tstep_nums.empty() )
518 for(
unsigned int i = 0; i < vdatas.size(); i++ )
520 vdatas[i].varTags.resize( tstep_nums.size(), 0 );
521 vdatas[i].varDatas.resize( tstep_nums.size() );
523 assert( std::find( vdatas[i].varDims.begin(), vdatas[i].varDims.end(),
tDim ) != vdatas[i].varDims.end() );
524 vdatas[i].has_tsteps =
true;
527 for(
unsigned int i = 0; i < vsetdatas.size(); i++ )
529 if( ( std::find( vsetdatas[i].varDims.begin(), vsetdatas[i].varDims.end(),
tDim ) !=
530 vsetdatas[i].varDims.end() ) &&
531 ( vsetdatas[i].varName != dimNames[
tDim] ) )
534 vsetdatas[i].varTags.resize( tstep_nums.size(), 0 );
535 vsetdatas[i].varDatas.resize( tstep_nums.size() );
536 vsetdatas[i].has_tsteps =
true;
541 vsetdatas[i].varTags.resize( 1, 0 );
542 vsetdatas[i].varDatas.resize( 1 );
543 vsetdatas[i].has_tsteps =
false;
557 "Trouble allocating space to read set variables" );
561 for(
unsigned int i = 0; i < vdatas.size(); i++ )
564 for(
unsigned int t = 0; t < tstep_nums.size(); t++ )
566 void* data = vdatas[i].varDatas[t];
569 if( vdatas[i].has_tsteps )
572 vdatas[i].readStarts[0] = tstep_nums[t];
575 switch( vdatas[i].varDataType )
579 success =
NCFUNCAG( _vara_text )(
_fileId, vdatas[i].varId, &vdatas[i].readStarts[0],
580 &vdatas[i].readCounts[0], (
char*)data );
582 MB_SET_ERR( MB_FAILURE,
"Failed to read byte/char data for variable " << vdatas[i].varName );
586 success =
NCFUNCAG( _vara_int )(
_fileId, vdatas[i].varId, &vdatas[i].readStarts[0],
587 &vdatas[i].readCounts[0], (
int*)data );
589 MB_SET_ERR( MB_FAILURE,
"Failed to read short/int data for variable " << vdatas[i].varName );
592 success =
NCFUNCAG( _vara_long )(
_fileId, vdatas[i].varId, &vdatas[i].readStarts[0],
593 &vdatas[i].readCounts[0], (
long*)data );
595 MB_SET_ERR( MB_FAILURE,
"Failed to read long data for variable " << vdatas[i].varName );
599 success =
NCFUNCAG( _vara_double )(
_fileId, vdatas[i].varId, &vdatas[i].readStarts[0],
600 &vdatas[i].readCounts[0], (
double*)data );
602 MB_SET_ERR( MB_FAILURE,
"Failed to read float/double data for variable " << vdatas[i].varName );
605 MB_SET_ERR( MB_FAILURE,
"Unexpected data type for variable " << vdatas[i].varName );
608 dbgOut.
tprintf( 2,
"Setting data for variable %s, time step %d\n", vdatas[i].varName.c_str(),
611 "Trouble setting tag data for variable " << vdatas[i].varName );
615 switch( vdatas[i].varDataType )
630 delete[](
double*)data;
635 vdatas[i].varDatas[t] = NULL;
639 if( !vdatas[i].has_tsteps )
break;
646 dbgOut.
printf( 1,
"Read variables: %s", vdatas.begin()->varName.c_str() );
647 for(
unsigned int i = 1; i < vdatas.size(); i++ )
648 dbgOut.
printf( 1,
", %s ", vdatas[i].varName.c_str() );
657 std::map< std::string, ReadNC::VarData >& varInfo =
_readNC->
varInfo;
658 std::map< std::string, ReadNC::VarData >::iterator vmit = varInfo.find( var_name );
659 if( varInfo.end() == vmit )
MB_SET_ERR( MB_FAILURE,
"Couldn't find variable " << var_name );
661 assert( lmin >= 0 && lmax >= lmin );
668 if( (std::size_t)tcount != cvals.size() ) cvals.resize( tcount );
671 switch( ( *vmit ).second.varDataType )
677 NCFUNCAG( _vars_double )(
_fileId, ( *vmit ).second.varId, &tstart, &tcount, &dum_stride, &cvals[0] );
678 if( success )
MB_SET_ERR( MB_FAILURE,
"Failed to read float/double data for variable " << var_name );
681 MB_SET_ERR( MB_FAILURE,
"Unexpected data type for variable " << var_name );
693 if( tStepBase > 0 ) tstep_num += tStepBase;
695 std::ostringstream tag_name;
697 tag_name << var_data.
varName << tstep_num;
708 "Trouble creating tag " << tag_name.str() );
715 "Trouble creating tag " << tag_name.str() );
721 "Trouble creating tag " << tag_name.str() );
724 MB_SET_ERR( MB_FAILURE,
"Unexpected data type for variable " << var_data.
varName );
727 dbgOut.
tprintf( 2,
"Tag %s created\n", tag_name.str().c_str() );
738 if( tStepBase > 0 ) tstep_num += tStepBase;
740 std::ostringstream tag_name;
741 tag_name << var_data.
varName << tstep_num;
750 "Trouble creating tag " << tag_name.str() );
757 "Trouble creating tag " << tag_name.str() );
763 "Trouble creating tag " << tag_name.str() );
766 MB_SET_ERR( MB_FAILURE,
"Unexpected data type for variable " << var_data.
varName );
769 dbgOut.
tprintf( 2,
"Tag %s created\n", tag_name.str().c_str() );
776 std::vector< int >& attLen )
779 std::stringstream ssAtt;
781 std::map< std::string, ReadNC::AttData >::const_iterator attIt = attMap.begin();
782 for( ; attIt != attMap.end(); ++attIt )
784 ssAtt << attIt->second.attName;
786 void* attData = NULL;
787 switch( attIt->second.attDataType )
791 sz = attIt->second.attLen;
792 attData = (
char*)malloc( sz );
793 success =
NCFUNC( get_att_text )(
_fileId, attIt->second.attVarId, attIt->second.attName.c_str(),
796 MB_SET_ERR( MB_FAILURE,
"Failed to read byte/char data for attribute " << attIt->second.attName );
800 sz = attIt->second.attLen *
sizeof( short );
801 attData = (
short*)malloc( sz );
802 success =
NCFUNC( get_att_short )(
_fileId, attIt->second.attVarId, attIt->second.attName.c_str(),
805 MB_SET_ERR( MB_FAILURE,
"Failed to read short data for attribute " << attIt->second.attName );
809 sz = attIt->second.attLen *
sizeof( int );
810 attData = (
int*)malloc( sz );
811 success =
NCFUNC( get_att_int )(
_fileId, attIt->second.attVarId, attIt->second.attName.c_str(),
814 MB_SET_ERR( MB_FAILURE,
"Failed to read int data for attribute " << attIt->second.attName );
818 sz = attIt->second.attLen *
sizeof( long );
819 attData = (
long*)malloc( sz );
820 success =
NCFUNC( get_att_long )(
_fileId, attIt->second.attVarId, attIt->second.attName.c_str(),
823 MB_SET_ERR( MB_FAILURE,
"Failed to read int data for attribute " << attIt->second.attName );
827 sz = attIt->second.attLen *
sizeof( float );
828 attData = (
float*)malloc( sz );
829 success =
NCFUNC( get_att_float )(
_fileId, attIt->second.attVarId, attIt->second.attName.c_str(),
832 MB_SET_ERR( MB_FAILURE,
"Failed to read float data for attribute " << attIt->second.attName );
836 sz = attIt->second.attLen *
sizeof( double );
837 attData = (
double*)malloc( sz );
838 success =
NCFUNC( get_att_double )(
_fileId, attIt->second.attVarId, attIt->second.attName.c_str(),
841 MB_SET_ERR( MB_FAILURE,
"Failed to read double data for attribute " << attIt->second.attName );
845 MB_SET_ERR( MB_FAILURE,
"Unexpected data type for attribute " << attIt->second.attName );
847 char* tmpc = (
char*)attData;
848 for(
unsigned int counter = 0; counter != sz; ++counter )
849 ssAtt << tmpc[counter];
852 attLen.push_back( ssAtt.str().size() - 1 );
854 attVal = ssAtt.str();
864 std::map< std::string, ReadNC::VarData >& varInfo =
_readNC->
varInfo;
871 for(
unsigned int i = 0; i < dimNames.size(); i++ )
874 if( varInfo.find( dimNames[i] ) != varInfo.end() )
continue;
877 int sizeTotalVar = varInfo.size();
878 std::string var_name( dimNames[i] );
881 data.
varId = sizeTotalVar;
889 dbgOut.
tprintf( 2,
"Dummy coordinate variable created for dimension %s\n", var_name.c_str() );
895 "Trouble creating tag for dummy coordinate variable " << var_name );
898 const void* ptr = &dimLens[i];
902 "Trouble setting tag data for dummy coordinate variable " << var_name );
904 dbgOut.
tprintf( 2,
"Sparse tag created for dimension %s\n", var_name.c_str() );
911 std::vector< int >& tstep_nums )
916 for(
unsigned int i = 0; i < vdatas.size(); i++ )
919 if( vdatas[i].has_tsteps )
922 vdatas[i].readStarts.push_back( 0 );
923 vdatas[i].readCounts.push_back( 1 );
926 for(
unsigned int idx = 1; idx != vdatas[i].varDims.size(); idx++ )
928 vdatas[i].readStarts.push_back( 0 );
929 vdatas[i].readCounts.push_back( dimLens[vdatas[i].varDims[idx]] );
934 if( vdatas[i].varDims.empty() )
937 vdatas[i].readStarts.push_back( 0 );
938 vdatas[i].readCounts.push_back( 1 );
942 for(
unsigned int idx = 0; idx != vdatas[i].varDims.size(); idx++ )
944 vdatas[i].readStarts.push_back( 0 );
945 vdatas[i].readCounts.push_back( dimLens[vdatas[i].varDims[idx]] );
952 for( std::size_t idx = 0; idx != vdatas[i].readCounts.size(); idx++ )
953 vdatas[i].sz *= vdatas[i].readCounts[idx];
956 for(
unsigned int t = 0; t < tstep_nums.size(); t++ )
958 dbgOut.
tprintf( 2,
"Reading variable %s, time step %d\n", vdatas[i].varName.c_str(), tstep_nums[t] );
960 if( tstep_nums[t] >= dimLens[
tDim] )
966 if( !vdatas[i].varTags[t] )
969 "Trouble getting tag to set variable " << vdatas[i].varName );
972 switch( vdatas[i].varDataType )
976 vdatas[i].varDatas[t] =
new char[vdatas[i].sz];
980 vdatas[i].varDatas[t] =
new int[vdatas[i].sz];
983 vdatas[i].varDatas[t] =
new long[vdatas[i].sz];
987 vdatas[i].varDatas[t] =
new double[vdatas[i].sz];
990 MB_SET_ERR( MB_FAILURE,
"Unexpected data type for variable " << vdatas[i].varName );
995 if( !vdatas[i].has_tsteps )
break;
1009 "Trouble getting number of vertices" );
1025 "Trouble getting number of elements" );
1056 "Trouble creating scd vertex sequence" );
1066 "Failed to iterate file ID tag on local vertices" );
1068 int* fid_data = (
int*)data;
1070 "Failed to iterate global ID tag on local vertices" );
1072 int* gid_data = (
int*)data;
1073 for(
int i = 0; i < count; i++ )
1074 fid_data[i] = gid_data[i];
1085 double *xc, *yc, *zc;
1088 int i, j, k, il, jl, kl;
1091 assert( dil == (
int)
ilVals.size() && djl == (
int)
jlVals.size() &&
1103 unsigned int pos = i + j * dil + k * dil * djl;
1114 std::vector< int > gids( num_verts );
1117 "Trouble getting local gid values of vertices" );
1118 int vmin = *( std::min_element( gids.begin(), gids.end() ) ),
1119 vmax = *( std::max_element( gids.begin(), gids.end() ) );
1120 dbgOut.
tprintf( 1,
"Vertex gids %d-%d\n", vmin, vmax );
1132 std::vector< EntityHandle > connect;
1149 std::vector< ReadNC::VarData > vdatas;
1150 std::vector< ReadNC::VarData > vsetdatas;
1153 "Trouble setting up to read variables" );
1155 if( !vsetdatas.empty() )
1160 if( !vdatas.empty() )
1163 "Trouble reading variables to verts/edges/faces" );
1170 std::vector< int >& tstep_nums )
1176 Range* range = NULL;
1181 "Trouble getting vertices in current file set" );
1182 assert(
"Should only have a single vertex subrange, since they were read in one shot" && verts.
psize() == 1 );
1186 "Trouble getting edges in current file set" );
1191 "Trouble getting faces in current file set" );
1192 assert(
"Should only have a single face subrange, since they were read in one shot" && faces.
psize() == 1 );
1194 #ifdef MOAB_HAVE_MPI
1201 "Trouble getting owned faces in current file set" );
1204 faces_owned = faces;
1207 for(
unsigned int i = 0; i < vdatas.size(); i++ )
1210 assert( 4 == vdatas[i].varDims.size() );
1213 assert(
tDim == vdatas[i].varDims[0] );
1216 vdatas[i].readStarts.resize( 4 );
1217 vdatas[i].readCounts.resize( 4 );
1220 vdatas[i].readStarts[0] = 0;
1221 vdatas[i].readCounts[0] = 1;
1224 vdatas[i].readStarts[1] = 0;
1225 vdatas[i].readCounts[1] = vdatas[i].numLev;
1228 switch( vdatas[i].entLoc )
1232 vdatas[i].readStarts[2] =
lDims[1];
1233 vdatas[i].readCounts[2] =
lDims[4] -
lDims[1] + 1;
1234 vdatas[i].readStarts[3] =
lDims[0];
1235 vdatas[i].readCounts[3] =
lDims[3] -
lDims[0] + 1;
1245 vdatas[i].readStarts[2] =
lCDims[1];
1247 vdatas[i].readStarts[3] =
lCDims[0];
1249 #ifdef MOAB_HAVE_MPI
1250 range = &faces_owned;
1256 MB_SET_ERR( MB_FAILURE,
"Unexpected entity location type for variable " << vdatas[i].varName );
1259 for(
unsigned int t = 0; t < tstep_nums.size(); t++ )
1261 dbgOut.
tprintf( 2,
"Reading variable %s, time step %d\n", vdatas[i].varName.c_str(), tstep_nums[t] );
1263 if( tstep_nums[t] >= dimLens[
tDim] )
1269 if( !vdatas[i].varTags[t] )
1272 "Trouble getting tag to non-set variable " << vdatas[i].varName );
1279 "Failed to iterate tag for non-set variable " << vdatas[i].varName );
1280 assert( (
unsigned)count == range->
size() );
1281 vdatas[i].varDatas[t] = data;
1286 for( std::size_t idx = 0; idx != vdatas[i].readCounts.size(); idx++ )
1287 vdatas[i].sz *= vdatas[i].readCounts[idx];
1294 std::vector< int >& tstep_nums )
1299 "Trouble allocating space to read non-set variables" );
1303 for(
unsigned int i = 0; i < vdatas.size(); i++ )
1305 std::size_t sz = vdatas[i].sz;
1309 size_t ni = vdatas[i].readCounts[3];
1310 size_t nj = vdatas[i].readCounts[2];
1311 size_t nk = vdatas[i].readCounts[1];
1313 for(
unsigned int t = 0; t < tstep_nums.size(); t++ )
1316 void* data = vdatas[i].varDatas[t];
1319 vdatas[i].readStarts[0] = tstep_nums[t];
1321 switch( vdatas[i].varDataType )
1325 std::vector< char > tmpchardata( sz );
1326 success =
NCFUNCAG( _vara_text )(
_fileId, vdatas[i].varId, &vdatas[i].readStarts[0],
1327 &vdatas[i].readCounts[0], &tmpchardata[0] );
1329 MB_SET_ERR( MB_FAILURE,
"Failed to read byte/char data for variable " << vdatas[i].varName );
1330 if( vdatas[i].numLev > 1 )
1332 kji_to_jik( ni, nj, nk, data, &tmpchardata[0] );
1335 for( std::size_t idx = 0; idx != tmpchardata.size(); idx++ )
1336 ( (
char*)data )[idx] = tmpchardata[idx];
1342 std::vector< int > tmpintdata( sz );
1343 success =
NCFUNCAG( _vara_int )(
_fileId, vdatas[i].varId, &vdatas[i].readStarts[0],
1344 &vdatas[i].readCounts[0], &tmpintdata[0] );
1346 MB_SET_ERR( MB_FAILURE,
"Failed to read short/int data for variable " << vdatas[i].varName );
1347 if( vdatas[i].numLev > 1 )
1349 kji_to_jik( ni, nj, nk, data, &tmpintdata[0] );
1352 for( std::size_t idx = 0; idx != tmpintdata.size(); idx++ )
1353 ( (
int*)data )[idx] = tmpintdata[idx];
1358 std::vector< long > tmpintdata( sz );
1359 success =
NCFUNCAG( _vara_long )(
_fileId, vdatas[i].varId, &vdatas[i].readStarts[0],
1360 &vdatas[i].readCounts[0], &tmpintdata[0] );
1362 MB_SET_ERR( MB_FAILURE,
"Failed to read long data for variable " << vdatas[i].varName );
1363 if( vdatas[i].numLev > 1 )
1365 kji_to_jik( ni, nj, nk, data, &tmpintdata[0] );
1368 for( std::size_t idx = 0; idx != tmpintdata.size(); idx++ )
1369 ( (
long*)data )[idx] = tmpintdata[idx];
1375 std::vector< double > tmpdoubledata( sz );
1376 success =
NCFUNCAG( _vara_double )(
_fileId, vdatas[i].varId, &vdatas[i].readStarts[0],
1377 &vdatas[i].readCounts[0], &tmpdoubledata[0] );
1379 MB_SET_ERR( MB_FAILURE,
"Failed to read float/double data for variable " << vdatas[i].varName );
1380 if( vdatas[i].numLev > 1 )
1382 kji_to_jik( ni, nj, nk, data, &tmpdoubledata[0] );
1385 for( std::size_t idx = 0; idx != tmpdoubledata.size(); idx++ )
1386 ( (
double*)data )[idx] = tmpdoubledata[idx];
1391 MB_SET_ERR( MB_FAILURE,
"Unexpected data type for variable " << vdatas[i].varName );
1399 dbgOut.
printf( 1,
"Read variables: %s", vdatas.begin()->varName.c_str() );
1400 for(
unsigned int i = 1; i < vdatas.size(); i++ )
1401 dbgOut.
printf( 1,
", %s ", vdatas[i].varName.c_str() );
1415 std::size_t numOwnedEnts = 0;
1416 #ifdef MOAB_HAVE_MPI
1423 "Trouble getting owned quads" );
1424 numOwnedEnts = ents_owned.
size();
1428 numOwnedEnts = ents.
size();
1432 numOwnedEnts = ents.
size();
1438 std::vector< double > coords( numOwnedEnts * 3 );
1439 std::size_t pos = 0;
1440 for( std::size_t j = 0; j !=
jlCVals.size(); ++j )
1442 for( std::size_t i = 0; i !=
ilCVals.size(); ++i )
1444 pos = j *
ilCVals.size() * 3 + i * 3;
1447 coords[pos + 2] = 0.0;
1450 std::string tag_name =
"COORDS";
1453 "Trouble creating COORDS tag" );
1457 #ifdef MOAB_HAVE_MPI
1459 "Failed to iterate COORDS tag on quads" );
1462 "Failed to iterate COORDS tag on quads" );
1464 assert( count == (
int)numOwnedEnts );
1465 double* quad_data = (
double*)data;
1466 std::copy( coords.begin(), coords.end(), quad_data );
1473 std::vector< ReadNC::VarData > vdatas;
1474 std::vector< ReadNC::VarData > vsetdatas;
1477 "Trouble setting up to read variables" );
1479 if( !vsetdatas.empty() )
1484 if( !vdatas.empty() )
1486 #ifdef MOAB_HAVE_PNETCDF
1488 MB_CHK_SET_ERR( read_ucd_variables_to_nonset_async( vdatas, tstep_nums ),
1489 "Trouble reading variables to verts/edges/faces" );
1493 "Trouble reading variables to verts/edges/faces" );