SheafSystem  0.0.0.0
body_pusher.h
Go to the documentation of this file.
1 
2 //
3 // Copyright (c) 2014 Limit Point Systems, Inc.
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 
20 
21 #ifndef BODY_PUSHER_H
22 #define BODY_PUSHER_H
23 
24 #ifndef SHEAF_DLL_SPEC_H
25 #include "SheafSystem/sheaf_dll_spec.h"
26 #endif
27 
28 #ifndef ANY_H
29 #include "SheafSystem/any.h"
30 #endif
31 
32 #ifndef BINARY_SECTION_SPACE_SCHEMA_MEMBER_H
33 #include "SheafSystem/binary_section_space_schema_member.h"
34 #endif
35 
36 #ifndef BLOCK_H
37 #include "SheafSystem/block.h"
38 #endif
39 
40 #ifndef CHART_POINT_H
41 #include "SheafSystem/chart_point.h"
42 #endif
43 
44 #ifndef BODY_PUSHER_PULLBACK_ACTION_H
45 #include "SheafSystem/body_pusher_pullback_action.h"
46 #endif
47 
48 #ifndef SEC_ED_INVERTIBLE_H
49 #include "SheafSystem/sec_ed_invertible.h"
50 #endif
51 
52 #ifndef STD_STRING_H
53 #include "SheafSystem/std_string.h"
54 #endif
55 
56 namespace fiber_bundle
57 {
58 class base_space_poset;
59 class base_space_member;
60 }
61 
62 namespace fields
63 {
64 
65 using namespace sheaf;
66 using namespace fiber_bundle;
67 
73 class SHEAF_DLL_SPEC body_pusher : public any
74 {
75 
76  // ===========================================================
78  // ===========================================================
80 
81 public:
82 
87 
92 
97 
98 
105  body_pusher(const geometry::sec_ed_invertible& xdomain_coord,
106  const sec_ed& xrange_coord,
107  bool xauto_access);
108 
112  const base_space_poset& domain() const;
113 
117  const geometry::sec_ed_invertible& domain_coord() const;
118 
122  const base_space_poset& range() const;
123 
127  const sec_ed& range_coord() const;
128 
134  bool xcompute_upper_bound,
135  bool xauto_access);
136 
141  void push_pa(const base_space_member& xinput,
142  base_space_member& result,
143  bool xcompute_upper_bound,
144  bool xauto_access);
145 
150  subposet* push(const subposet& xinput,
151  bool xcompute_upper_bound,
152  bool xauto_access);
153 
158  void push_pa(const subposet& xinput,
159  subposet& result,
160  bool xcompute_upper_bound,
161  bool xauto_access);
162 
166  const bool& push_name() const;
167 
171  std::string& name_prefix();
172 
176  std::string& name_suffix();
177 
181  bool same_fiber(const sec_ed& xcoord1, const sec_ed& xcoord2,
182  bool xauto_access) const;
183 
184 
185 protected:
186 
190  body_pusher();
191 
192 
193 private:
194 
198  base_space_poset* _domain;
199 
203  geometry::sec_ed_invertible* _domain_coord;
204 
208  base_space_poset* _range;
209 
213  sec_ed _range_coord;
214 
219 
224 
229 
233  typedef body_pusher_pullback_action::pb_map_itr_type pb_map_itr_type;
234 
238  typedef body_pusher_pullback_action::pb_map_range_type pb_map_range_type;
239 
243  pb_map_type _pb_map;
244 
248  bool _push_name;
249 
253  std::string _name_prefix;
254 
258  std::string _name_suffix;
259 
263  void pull_back_range_disc();
264 
266 
267 
268  // ===========================================================
270  // ===========================================================
272 
273 public:
274 
278  body_pusher(const body_pusher& xother);
279 
283  virtual ~body_pusher();
284 
288  virtual bool invariant() const;
289 
291 
292 };
293 
294 
295 // ===========================================================
296 // NONMEMBER FUNCTIONS
297 // ===========================================================
298 
299 } // namespace fields
300 
301 #endif // ifndef BODY_PUSHER_H
A client handle for a subposet.
Definition: subposet.h:86
A client handle for a poset member which has been prepared for use as a schema for a section space...
pb_map_type::iterator pb_map_itr_type
The type of iterator for the pullback map.
sec_vd::dof_type dof_type
The type for section degrees of freedom.
Definition: body_pusher.h:91
Namespace for fields component of sheaf system.
void push(const SJCB &xjcb, const SVECTOR &xvector, SR &xresult, bool xauto_access)
Definition: sec_jcb.impl.h:143
chart_point_coord_type coord_type
The type of local coordinate; the scalar type for the local coordinate vector space.
Definition: sec_vd.h:80
A client handle for a member of a base space poset.
sec_vd_value_type value_type
The type of component in the value; the scalar type in the fiber space.
Definition: sec_vd.h:86
A section of a fiber bundle with a d-dimensional Euclidean vector space fiber.
Definition: sec_ed.h:47
Abstract base class with useful features for all objects.
Definition: any.h:39
The lattice of closed cells of a cellular space; a lattice representation of a computational mesh...
An abstract invertible section of a fiber bundle with a d-dimensional base space and a d-dimensional ...
sec_vd::value_type value_type
The type for section values.
Definition: body_pusher.h:96
An entry in a discretization map.
Definition: pullback_map.h:44
sec_ed::coord_type coord_type
The type of local coordinate variables.
Definition: body_pusher.h:86
std::pair< pb_map_itr_type, pb_map_itr_type > pb_map_range_type
The type of iterator range for the pullback map.
sec_vd_dof_type dof_type
The type of degree of freedom.
Definition: sec_vd.h:91
Namespace for the sheaves component of the sheaf system.
The general push-forward operator for base space members; moves a base space member from one base spa...
Definition: body_pusher.h:73
A map from members of a discretization subposet to points in a base space.
Definition: pullback_map.h:130
Namespace for the fiber_bundles component of the sheaf system.