Sierra Toolkit Version of the Day
FieldBaseImpl.hpp
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 #ifndef stk_mesh_baseImpl_FieldBaseImpl_hpp
00009 #define stk_mesh_baseImpl_FieldBaseImpl_hpp
00010 
00011 #include <vector>
00012 #include <Shards_Array.hpp>
00013 #include <stk_mesh/base/DataTraits.hpp>
00014 
00015 #include <stk_mesh/base/FieldState.hpp>
00016 #include <stk_mesh/base/FieldRestriction.hpp>
00017 
00018 #include <stk_util/util/CSet.hpp>
00019 
00020 namespace stk {
00021 namespace mesh {
00022 
00023   class FieldBase;
00024   class MetaData;
00025 
00026 namespace impl {
00027 
00028 
00029 
00030 
00031 class FieldBaseImpl {
00032 public:
00033 
00034   MetaData & meta_data() const {
00035     return *m_meta_data ;
00036   }
00037 
00038   unsigned ordinal() const {
00039     return m_ordinal ;
00040   }
00041 
00042   const std::string & name() const {
00043     return m_name ;
00044   }
00045 
00046   template<class Type>
00047   bool type_is() const {
00048     return m_data_traits.type_info == typeid(Type) ;
00049   }
00050 
00051   const DataTraits & data_traits() const {
00052     return m_data_traits ;
00053   }
00054 
00055   unsigned number_of_states() const {
00056     return m_num_states ;
00057   }
00058 
00059   FieldState state() const {
00060     return m_this_state ;
00061   }
00062 
00063   unsigned rank() const {
00064     return m_rank ;
00065   }
00066 
00067   const shards::ArrayDimTag * const * dimension_tags() const {
00068     return m_dim_tags ;
00069   }
00070 
00071   //not inline
00072   unsigned max_size( unsigned entity_rank) const ;
00073 
00074   template<class A>
00075   const A * attribute() const {
00076     return m_attribute.template get<A>();
00077   }
00078 
00079   template<class A>
00080     const A * declare_attribute_no_delete(const A * a) {
00081       return m_attribute.template insert_no_delete<A>(a);
00082     }
00083 
00084   template<class A>
00085     const A * declare_attribute_with_delete(const A * a) {
00086       return m_attribute.template insert_with_delete<A>(a);
00087     }
00088 
00089   const FieldRestriction & restriction( unsigned entity_rank , const Part & part) const ;
00090 
00091   const FieldRestrictionVector &restrictions() const ;
00092 
00093   FieldBase * field_state( unsigned i) const {
00094     return m_field_states[i];
00095   }
00096 
00097   void insert_restriction( const char       * arg_method ,
00098                            EntityRank         arg_entity_rank ,
00099                            const Part       & arg_part ,
00100                            const unsigned   * arg_stride );
00101 
00102   void verify_and_clean_restrictions( const char       * arg_method ,
00103                                       const PartVector & arg_all_parts );
00104 
00105 
00106 
00107   void set_field_states( FieldBase ** field_states) {
00108     for (unsigned i = 0; i < m_num_states; ++i) {
00109       m_field_states[i] = field_states[i];
00110     }
00111   }
00112 
00113   FieldBaseImpl(
00114       MetaData                   * arg_mesh_meta_data ,
00115       unsigned                     arg_ordinal ,
00116       const std::string          & arg_name ,
00117       const DataTraits           & arg_traits ,
00118       unsigned                     arg_rank,
00119       const shards::ArrayDimTag  * const * arg_dim_tags,
00120       unsigned                     arg_number_of_states ,
00121       FieldState                   arg_this_state
00122       );
00123 
00124   ~FieldBaseImpl() {}
00125 
00126 private:
00127 
00128   FieldRestrictionVector & restrictions();
00129 
00130   const std::string            m_name ;                    
00131   CSet                         m_attribute ;               
00132   const DataTraits           & m_data_traits ;             
00133   MetaData             * const m_meta_data ;               
00134   const unsigned               m_ordinal ;                 
00135   const unsigned               m_num_states ;              
00136   const FieldState             m_this_state ;              
00137   unsigned                     m_rank ;                    
00138   FieldRestrictionVector            m_dim_map ;                 
00139   FieldBase                  * m_field_states[ MaximumFieldStates ];
00140   const shards::ArrayDimTag  * m_dim_tags[ MaximumFieldDimension ];
00141 
00142   //disallow copy and default constructors
00143   FieldBaseImpl();
00144   FieldBaseImpl( const FieldBase & );
00145   FieldBaseImpl & operator = ( const FieldBaseImpl & );
00146 };
00147 
00148 
00150 std::ostream & operator << ( std::ostream & , const FieldBaseImpl & );
00151 
00153 std::ostream & print( std::ostream & ,
00154                       const char * const , const FieldBase & );
00155 
00156 
00157 } // namespace impl
00158 } // namespace mesh
00159 } // namespace stk
00160 
00161 
00162 #endif // stk_mesh_baseImpl_FieldBaseIml_hpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends