75 : mbImpl( impl ), mWriteIface( NULL ), sequenceManager( NULL ), dU(), DAMSEL_FLAGS( DAMSEL_IS_TRACKING )
77 assert( impl != NULL );
131 const std::vector< std::string >& ,
145 DMSLmodel_create(
sizeof(
EntityHandle ) == 8 ? DAMSEL_HANDLE_TYPE_HANDLE64 : DAMSEL_HANDLE_TYPE_HANDLE32 );
148 MPI_Comm comm = MPI_COMM_WORLD;
150 err = DMSLmodel_attach(
dU.
dmslModel, file_name, comm, NULL );
154 "Gather entities failed in WriteDamsel" );
181 err = DMSLmodel_transfer_sync(
dU.
dmslModel, DAMSEL_TRANSFER_TYPE_WRITE );
182 CHK_DMSL_ERR( err,
"DMSLmodel_transfer_asynch failed" );
198 std::vector< Tag > tmp_mtags;
204 for( std::vector< Tag >::iterator vit = tmp_mtags.begin(); vit != tmp_mtags.end(); ++vit )
209 std::cerr <<
"Warning: tag " << ( *vit )->get_name()
210 <<
"is not of type dense or sparse, and is not currently supported by the "
216 std::vector< DamselUtil::tinfo >::iterator vit2 =
227 err = DMSLtag_define(
dU.
dmslModel, (damsel_handle_ptr)&thandle,
229 CHK_DMSL_ERR( err,
"Failure to get Damsel tag for MOAB tag" );
235 assert( ( *vit2 ).mTagh );
244 CHK_DMSL_ERR( err,
"Failure to get Damsel tag for MOAB tag" );
250 CHK_DMSL_ERR( err,
"Failure to get Damsel tag for MOAB tag" );
256 CHK_DMSL_ERR( err,
"Failure to get Damsel tag for MOAB tag" );
262 CHK_DMSL_ERR( err,
"Failure to get Damsel tag for MOAB tag" );
288 std::vector< Tag > moab_taghs;
289 moab_taghs.reserve( num_tags );
290 for( std::vector< DamselUtil::tinfo >::iterator vit =
dU.
tagMap.begin(); vit !=
dU.
tagMap.end(); ++vit )
292 moab_taghs.push_back( ( *vit ).mTagh );
295 damsel_container mtags =
296 DMSLcontainer_create_vector(
dU.
dmslModel, (damsel_handle_ptr)&moab_taghs[0], moab_taghs.size() );
297 std::cerr <<
"MOAB: created model container: mtags = " << mtags << std::endl;
299 err = DMSLmodel_map_handles_inventing_file_handles( mtags );
302 err = DMSLcontainer_release( mtags );
303 CHK_DMSL_ERR( err,
"Problem releasing tag handle container" );
315 damsel_container vertex_cont =
316 DMSLcontainer_create_sequence(
dU.
dmslModel, start_vert, (
int)( end_vert - start_vert + 1 ), 1 );
317 std::cerr <<
"MOAB: created model container: vertex_cont = " << vertex_cont << std::endl;
318 if( DAMSEL_CONTAINER_INVALID == vertex_cont )
320 "Failed to create vertex sequence for vertices starting with handle " << rsi.
get_start_handle() );
322 damsel_err_t err = DMSLmodel_map_handles_inventing_file_handles( vertex_cont );
326 err = DMSLentity_define( vertex_cont, DAMSEL_ENTITY_TYPE_VERTEX, 1, vertex_cont );
330 Range vert_range( start_vert, end_vert );
331 double *xcoords = NULL, *ycoords = NULL, *zcoords = NULL;
334 "Failed to get coordinate iterator for vertices starting with handle " << rsi.
get_start_handle() );
335 if( count != (
int)vert_range.
size() )
337 MB_SET_ERR( MB_FAILURE,
"Vertex subrange not in the same sequence for vertices starting with handle "
341 if( xcoords && !ycoords && !zcoords )
346 err = DMSLmodel_map_tag( xcoords, vertex_cont, (damsel_handle_ptr)&
dU.
xcoordsTag.
mTagh );
347 CHK_DMSL_ERR( err,
"Failed to assign vertex coordinates tag for vertices starting with handle "
353 err = DMSLmodel_map_tag( xcoords, vertex_cont, (damsel_handle_ptr)&
dU.
xcoordsTag.
mTagh );
354 CHK_DMSL_ERR( err,
"Failed to assign vertex x coordinates tag for vertices starting with handle "
356 err = DMSLmodel_map_tag( ycoords, vertex_cont, (damsel_handle_ptr)&
dU.
ycoordsTag.
mTagh );
357 CHK_DMSL_ERR( err,
"Failed to assign vertex y coordinates tag for vertices starting with handle "
359 err = DMSLmodel_map_tag( zcoords, vertex_cont, (damsel_handle_ptr)&
dU.
zcoordsTag.
mTagh );
360 CHK_DMSL_ERR( err,
"Failed to assign vertex z coordinates tag for vertices starting with handle "
367 err = DMSLcontainer_release( vertex_cont );
368 CHK_DMSL_ERR( err,
"Problem releasing vertex handle container" );
380 damsel_container ent_cont;
381 ent_cont = DMSLcontainer_create_sequence(
dU.
dmslModel, start_ent, (
int)( end_ent - start_ent + 1 ), 1 );
382 std::cerr <<
"MOAB: created model container: ent_cont = " << ent_cont << std::endl;
383 if( DAMSEL_CONTAINER_INVALID == ent_cont )
MB_SET_ERR( MB_FAILURE,
"Bad sequence returned by Damsel" );
385 damsel_err_t err = DMSLmodel_map_handles_inventing_file_handles( ent_cont );
392 assert( 0 < num_connect );
395 Range ent_range( start_ent, end_ent );
400 "Failed to get connect iterator for entities starting with handle " << rsi.
get_start_handle() );
401 if( count != (
int)ent_range.
size() )
402 MB_SET_ERR( MB_FAILURE,
"Entity subrange not in the same sequence for entities starting with handle "
412 err = DMSLcontainer_release( ent_cont );
413 CHK_DMSL_ERR( err,
"Problem releasing entity handle container" );
422 const unsigned char* val_ptr;
424 std::vector< DamselUtil::tinfo >::iterator tagit;
434 "Failed to get tag coordinates pointer for vertices starting with handle "
438 if( !val_ptr )
continue;
441 err = DMSLmodel_map_tag( (
void*)val_ptr, ent_cont, (damsel_handle_ptr)&dtag );
443 "Failed to write coordinates tag for vertices starting with handle " << rsi.
get_start_handle() );
455 std::vector< DamselUtil::tinfo >::iterator tagit;
456 std::vector< unsigned char > tag_values;
457 std::vector< EntityHandle > tagged_ents;
458 damsel_container ent_cont;
467 "Trouble getting tagged entities for tag " << stag->
get_name() );
470 if( output_ents.
empty() )
continue;
474 tag_values.resize( stag->
get_size() * output_ents.
size() );
476 "Trouble getting tag values for tag " << stag->
get_name() );
479 tagged_ents.resize( output_ents.
size() );
480 std::copy( output_ents.
begin(), output_ents.
end(), tagged_ents.begin() );
481 ent_cont = DMSLcontainer_create_vector(
dU.
dmslModel, (damsel_handle_ptr)&tagged_ents[0], tagged_ents.size() );
482 std::cerr <<
"MOAB: created model container: sparse_tag_ent_cont = " << ent_cont << std::endl;
483 if( DAMSEL_CONTAINER_INVALID == ent_cont )
484 MB_SET_ERR( MB_FAILURE,
"Trouble creating entity handle container for tag " << stag->
get_name() );
487 err = DMSLmodel_map_tag( (
void*)&tag_values[0], ent_cont, (damsel_handle_ptr)&stag );
490 err = DMSLcontainer_release( ent_cont );
491 CHK_DMSL_ERR( err,
"Problem releasing entity handle container" );
501 std::vector< EntityHandle > ents;
502 damsel_container mcont;
505 std::vector< unsigned int > set_flags( num_sets, 0 );
512 "get_entities_by_handle failed for set " << seth );
515 mcont = DMSLcontainer_create_vector(
dU.
dmslModel, (damsel_handle*)&ents[0], ents.size() );
519 mcont = DMSLcontainer_create_vector(
dU.
dmslModel, (damsel_handle*)NULL, 0 );
521 std::cerr <<
"MOAB: created model container: sets_cont = " << mcont << std::endl;
526 damsel_collection_type coll_type =
527 ( opts &
MESHSET_SET ? DAMSEL_HANDLE_COLLECTION_TYPE_SET : DAMSEL_HANDLE_COLLECTION_TYPE_VECTOR );
538 DMSLcoll_create(
dU.
dmslModel, (damsel_handle_ptr)&seth, mcont, coll_type );
541 err = DMSLcontainer_release( mcont );
542 CHK_DMSL_ERR( err,
"Problem releasing set entity handle container" );
548 std::cerr <<
"MOAB: created model container: sets_cont = " << mcont << std::endl;
551 err = DMSLmodel_map_tag( &set_flags[0], mcont, ( damsel_handle_ptr ) & (
dU.
collFlagsTag.
mTagh ) );
552 CHK_DMSL_ERR( err,
"Failed to assign COLL_FLAGS tag for sets" );
555 err = DMSLmodel_map_handles_inventing_file_handles( mcont );