|
Sierra Toolkit Version of the Day
|
00001 /*------------------------------------------------------------------------*/ 00002 /* Copyright 2010 Sandia Corporation. */ 00003 /* Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive */ 00004 /* license for use of this work by or on behalf of the U.S. Government. */ 00005 /* Export of this program may require a license from the */ 00006 /* United States Government. */ 00007 /*------------------------------------------------------------------------*/ 00008 00013 #ifndef SKIP_DEPRECATED_STK_MESH_TOPOLOGY_HELPERS 00014 00015 #include <algorithm> 00016 #include <stdexcept> 00017 #include <sstream> 00018 #include <cassert> 00019 00020 #include <stk_mesh/base/MetaData.hpp> 00021 #include <stk_mesh/base/Part.hpp> 00022 #include <stk_mesh/base/BulkData.hpp> 00023 #include <stk_mesh/base/Entity.hpp> 00024 #include <stk_mesh/base/Bucket.hpp> 00025 #include <stk_mesh/fem/EntityRanks.hpp> 00026 #include <stk_mesh/fem/TopologyHelpers.hpp> 00027 #include <stk_mesh/fem/TopologyHelpersDeprecated.hpp> 00028 00029 #include <stk_util/util/StaticAssert.hpp> 00030 00031 namespace stk { 00032 namespace mesh { 00033 00034 //---------------------------------------------------------------------- 00035 00036 // DEPRECATED: 09/15/10 FEM TopologicalMetaData refactor 00037 const CellTopologyData * get_cell_topology_deprecated( const Part & p ) 00038 { return p.attribute<CellTopologyData>(); } 00039 // DEPRECATED: 09/15/10 FEM TopologicalMetaData refactor 00040 const CellTopologyData * get_cell_topology( const Part & p ) 00041 { 00042 const TopologicalMetaData * top_data = p.mesh_meta_data().get_attribute< TopologicalMetaData >(); 00043 const CellTopologyData * cell_topology_data; 00044 if (top_data != NULL) { 00045 cell_topology_data = TopologicalMetaData::get_cell_topology(p); 00046 } else { 00047 cell_topology_data = get_cell_topology_deprecated(p); 00048 } 00049 return cell_topology_data; 00050 } 00051 00052 00053 // DEPRECATED: 09/15/10 FEM TopologicalMetaData refactor 00054 void set_cell_topology( Part & p , const CellTopologyData * singleton ) 00055 { 00056 set_cell_topology_deprecated( p, singleton ); 00057 } 00058 00059 00060 // DEPRECATED: 09/15/10 FEM TopologicalMetaData refactor 00061 void set_cell_topology_deprecated( Part & p , const CellTopologyData * singleton ) 00062 { 00063 static const char method[] = "stk::mesh::set_cell_topology" ; 00064 00065 MetaData & m = p.mesh_meta_data(); 00066 00067 const CellTopologyData * t = NULL ; 00068 00069 if ( p.mesh_meta_data().entity_rank_count() <= p.primary_entity_rank() || 00070 singleton == NULL || 00071 singleton != ( t = m.declare_attribute_no_delete(p,singleton) ) ) { 00072 std::ostringstream msg ; 00073 msg << method << "( " << p.name(); 00074 msg << " entity_rank(" << p.primary_entity_rank() << ") , " ; 00075 if ( singleton ) { msg << singleton->name ; } 00076 else { msg << "NULL" ; } 00077 msg << " ) ERROR" ; 00078 if ( t ) { msg << "Existing topology = " << t->name ; } 00079 throw std::runtime_error( msg.str() ); 00080 } 00081 } 00082 00083 //---------------------------------------------------------------------- 00084 00085 00086 // DEPRECATED: 09/15/10 FEM TopologicalMetaData refactor 00087 const CellTopologyData * get_cell_topology_deprecated( const Bucket & bucket ) 00088 { 00089 const CellTopologyData * top = NULL ; 00090 PartVector parts ; 00091 bucket.supersets( parts ); 00092 00093 PartVector::iterator i = parts.begin() ; 00094 00095 for ( ; NULL == top && i != parts.end() ; ++i ) { 00096 if ( bucket.entity_rank() == (**i).primary_entity_rank() ) { 00097 top = get_cell_topology( **i ); 00098 } 00099 } 00100 00101 bool ok = true ; 00102 00103 for ( ; ok && i != parts.end() ; ++i ) { 00104 if ( bucket.entity_rank() == (**i).primary_entity_rank() ) { 00105 const CellTopologyData * const tmp = get_cell_topology( **i ); 00106 ok = ((tmp == NULL) || (tmp == top)) ; 00107 } 00108 } 00109 00110 if ( ! ok ) { 00111 std::ostringstream msg ; 00112 msg << "stk::mesh::get_cell_topology( Bucket[" ; 00113 for ( i = parts.begin() ; i != parts.end() ; ++i ) { 00114 if ( bucket.entity_rank() == (**i).primary_entity_rank() ) { 00115 const CellTopologyData * const tmp = get_cell_topology( **i ); 00116 msg << " " << (*i)->name(); 00117 if ( tmp ) { msg << "->" << tmp->name ; } 00118 msg << " ] ) FAILED WITH MULTIPLE LOCAL TOPOLOGIES" ; 00119 throw std::runtime_error( msg.str() ); 00120 } 00121 } 00122 } 00123 return top ; 00124 } 00125 00126 00127 // DEPRECATED: 09/15/10 FEM TopologicalMetaData refactor 00128 const CellTopologyData * get_cell_topology( const Bucket & bucket ) 00129 { 00130 const TopologicalMetaData * top_data = bucket.mesh().mesh_meta_data().get_attribute< TopologicalMetaData >(); 00131 const CellTopologyData * cell_topology_data; 00132 if (top_data != NULL) { 00133 cell_topology_data = TopologicalMetaData::get_cell_topology(bucket); 00134 } else { 00135 cell_topology_data = get_cell_topology_deprecated(bucket); 00136 } 00137 return cell_topology_data; 00138 } 00139 00140 00141 // DEPRECATED: 09/15/10 FEM TopologicalMetaData refactor 00142 const CellTopologyData * get_cell_topology_deprecated( const Entity & entity ) 00143 { return get_cell_topology_deprecated( entity.bucket() ); } 00144 00145 00146 // DEPRECATED: 09/15/10 FEM TopologicalMetaData refactor 00147 const CellTopologyData * get_cell_topology( const Entity & entity ) 00148 { return get_cell_topology(entity.bucket()); } 00149 00150 //---------------------------------------------------------------------- 00151 00152 }// namespace mesh 00153 }// namespace stk 00154 00155 #endif // SKIP_DEPRECATED_STK_MESH_TOPOLOGY_HELPERS