Sierra Toolkit Version of the Day
TopologyHelpersDeprecated.cpp
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends