Sierra Toolkit  Version of the Day
FieldBaseImpl.hpp
1 /*------------------------------------------------------------------------*/
2 /* Copyright 2010 Sandia Corporation. */
3 /* Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive */
4 /* license for use of this work by or on behalf of the U.S. Government. */
5 /* Export of this program may require a license from the */
6 /* United States Government. */
7 /*------------------------------------------------------------------------*/
8 #ifndef stk_mesh_baseImpl_FieldBaseImpl_hpp
9 #define stk_mesh_baseImpl_FieldBaseImpl_hpp
10 
11 #include <vector>
12 #include <Shards_Array.hpp>
13 #include <stk_mesh/base/DataTraits.hpp>
14 
15 #include <stk_mesh/base/FieldState.hpp>
16 #include <stk_mesh/base/FieldRestriction.hpp>
17 
18 #include <stk_util/util/CSet.hpp>
19 
20 namespace stk_classic {
21 namespace mesh {
22 
23 class FieldBase;
24 class MetaData;
25 
26 namespace impl {
27 
28 class FieldBaseImpl {
29 public:
30 
31  MetaData & meta_data() const {
32  return *m_meta_data ;
33  }
34 
35  unsigned ordinal() const {
36  return m_ordinal ;
37  }
38 
39  const std::string & name() const {
40  return m_name ;
41  }
42 
43  template<class Type>
44  bool type_is() const {
45  return m_data_traits.type_info == typeid(Type) ;
46  }
47 
48  const DataTraits & data_traits() const {
49  return m_data_traits ;
50  }
51 
52  unsigned number_of_states() const {
53  return m_num_states ;
54  }
55 
56  FieldState state() const {
57  return m_this_state ;
58  }
59 
60  unsigned rank() const {
61  return m_field_rank ;
62  }
63 
64  const shards::ArrayDimTag * const * dimension_tags() const {
65  return m_dim_tags ;
66  }
67 
68  //not inline
69  unsigned max_size( unsigned entity_rank) const ;
70 
71  template<class A>
72  const A * attribute() const {
73  return m_attribute.template get<A>();
74  }
75 
76  template<class A>
77  const A * declare_attribute_no_delete(const A * a) {
78  return m_attribute.template insert_no_delete<A>(a);
79  }
80 
81  template<class A>
82  const A * declare_attribute_with_delete(const A * a) {
83  return m_attribute.template insert_with_delete<A>(a);
84  }
85 
86  const FieldRestriction & restriction( unsigned entity_rank , const Part & part) const ;
87 
88  const FieldRestrictionVector &restrictions() const ;
89 
90  const FieldRestrictionVector &selector_restrictions() const ;
91 
92  FieldBase * field_state(FieldState fstate) const {
93  return m_field_states[fstate];
94  }
95 
96  void insert_restriction( const char * arg_method ,
97  EntityRank arg_entity_rank ,
98  const Part & arg_part ,
99  const unsigned * arg_stride ,
100  const void* arg_init_value = NULL);
101 
102  void insert_restriction( const char * arg_method ,
103  EntityRank arg_entity_rank ,
104  const Selector & arg_selector ,
105  const unsigned * arg_stride ,
106  const void* arg_init_value = NULL);
107 
108  void verify_and_clean_restrictions( const char * arg_method ,
109  const Part& superset, const Part& subset,
110  const PartVector & arg_all_parts );
111 
112  const void* get_initial_value() const;
113 
114  void* get_initial_value();
115 
116  unsigned get_initial_value_num_bytes() const;
117 
118  void set_field_states( FieldBase ** field_states);
119 
120  FieldBaseImpl(
121  MetaData * arg_mesh_meta_data ,
122  unsigned arg_ordinal ,
123  const std::string & arg_name ,
124  const DataTraits & arg_traits ,
125  unsigned arg_rank,
126  const shards::ArrayDimTag * const * arg_dim_tags,
127  unsigned arg_number_of_states ,
128  FieldState arg_this_state
129  );
130 
131  ~FieldBaseImpl();
132 
133 private:
134 
135  void set_initial_value(const void* new_initial_value, unsigned num_scalars, unsigned num_bytes);
136 
137  FieldRestrictionVector & restrictions();
138  FieldRestrictionVector & selector_restrictions();
139 
140  const std::string m_name ;
141  CSet m_attribute ;
142  const DataTraits & m_data_traits ;
143  MetaData * const m_meta_data ;
144  const unsigned m_ordinal ;
145  const unsigned m_num_states ;
146  const FieldState m_this_state ;
147  unsigned m_field_rank ;
148  FieldRestrictionVector m_dim_map ;
149  FieldRestrictionVector m_selector_restrictions ;
150  FieldBase * m_field_states[ MaximumFieldStates ];
151  const shards::ArrayDimTag * m_dim_tags[ MaximumFieldDimension ];
152  void* m_initial_value;
153  unsigned m_initial_value_num_bytes;
154 
155  //disallow copy and default constructors
156  FieldBaseImpl();
157  FieldBaseImpl( const FieldBase & );
158  FieldBaseImpl & operator = ( const FieldBaseImpl & );
159 };
160 
161 
163 std::ostream & operator << ( std::ostream & , const FieldBaseImpl & );
164 
166 std::ostream & print( std::ostream & ,
167  const char * const , const FieldBase & );
168 
169 
170 } // namespace impl
171 } // namespace mesh
172 } // namespace stk_classic
173 
174 #endif // stk_mesh_baseImpl_FieldBaseIml_hpp
std::ostream & print(std::ostream &os, const std::string &indent, const Bucket &bucket)
Print the parts and entities of this bucket.
Definition: Bucket.cpp:259
Sierra Toolkit.
std::vector< Part *> PartVector
Collections of parts are frequently maintained as a vector of Part pointers.
Definition: Types.hpp:31
EntityRank entity_rank(const EntityKey &key)
Given an entity key, return an entity type (rank).
FieldState
Enumeration of states for multi-state fields.
Definition: FieldState.hpp:34