SheafSystem  0.0.0.0
sec_ed_invertible.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 
18 //
19 
22 
23 #ifndef SEC_ED_INVERTIBLE_H
24 #define SEC_ED_INVERTIBLE_H
25 
26 #ifndef SHEAF_DLL_SPEC_H
27 #include "SheafSystem/sheaf_dll_spec.h"
28 #endif
29 
30 #ifndef SEC_ED_H
31 #include "SheafSystem/sec_ed.h"
32 #endif
33 
34 #ifndef GEOMETRY_H
35 #include "SheafSystem/geometry.h"
36 #endif
37 
38 namespace sheaf
39 {
40 class poset_path;
41 }
42 
43 namespace fiber_bundle
44 {
45 class chart_point;
46 class chart_point_3d;
47 }
48 
49 namespace geometry
50 {
51 
52 class point_locator;
53 
58 class SHEAF_DLL_SPEC sec_ed_invertible : public sec_ed
59 {
60 
61  // ===========================================================
63  // ===========================================================
65 
66 public:
67 
72 
77  sec_ed_invertible(const sec_ed& xother);
78 
83  sec_ed_invertible(sec_rep_space* xhost, const scoped_index& xindex);
84 
89  sec_ed_invertible(sec_rep_space* xhost, const std::string& xname);
90 
96  const poset_path& xpath,
97  bool xauto_access);
98 
102  virtual sec_ed_invertible& operator=(const abstract_poset_member& xother);
103 
107  sec_ed_invertible& operator=(const sec_ed_invertible& xother);
108 
112  sec_ed_invertible& operator=(const ed& xfiber);
113 
117  sec_ed_invertible& operator=(const ed_lite& xfiber);
118 
123 
127  bool is_uniform() const;
128 
135  static bool& use_d_array_point_locator();
136 
140  virtual void initialize_point_locator(bool xauto_access);
141 
146  virtual void initialize_d_array_point_locator(bool xauto_access);
147 
152  virtual void initialize_d_array_point_locator(const block<size_type>& xbin_ub,
153  bool xauto_access);
154 
159  virtual void initialize_d_tree_point_locator(bool xauto_access);
160 
165  virtual void initialize_d_tree_point_locator(size_type xdepth,
166  bool xauto_access);
167 
171  virtual void initialize_d_uniform_point_locator(bool xauto_access);
172 
176  virtual void update_inversion();
177 
181  bool is_invertible() const;
182 
186  const geometry::point_locator& inverter() const;
187 
192  virtual chart_point* point_at_value(const ed& xr);
193 
198  virtual void point_at_value_pa(const ed& xvalue, chart_point& xresult);
199 
204  virtual void point_at_value_ua(const sec_vd_dof_type* xvalue,
205  size_type xvalue_ub,
206  chart_point& xresult);
207 
208 
215  virtual void all_points_at_value_ua(const sec_vd_value_type* xvalue,
216  size_type xvalue_ub,
217  block<chart_point_3d>& xresult);
218 
223  virtual void branch_points_at_value_ua(const sec_vd_value_type* xvalue,
224  size_type xvalue_ub,
225  block<branch_point_pair>& xresult);
226 
227 protected:
228 
233  virtual void attach_handle_data_members();
234 
235 private:
236 
240  point_locator* _inverter;
241 
243 
244 
245  // ===========================================================
247  // ===========================================================
249 
250 public:
251 
255  virtual sec_ed_invertible* clone() const;
256 
262  inline sec_ed_invertible* clone(bool xnew_state, bool xauto_access = true)
263  {
264  return static_cast<sec_ed_invertible*>
265  (sec_ed::clone(xnew_state, xauto_access));
266  }
267 
269 
270 
271  // ===========================================================
273  // ===========================================================
275 
276 public:
277 
281  bool is_ancestor_of(const any* other) const;
282 
286  virtual bool invariant() const;
287 
289 
290 };
291 
292 } // namespace geometry
293 
294 #endif // ifndef SEC_ED_INVERTIBLE_H
sec_ed_invertible * clone(bool xnew_state, bool xauto_access=true)
Make a new handle instance of current. Attach the new instance to a new state if xnew_state is true...
The default name space; a poset which contains other posets as members.
A path defined by a poset name and a member name separated by a forward slash (&#39;/&#39;). For example: "cell_definitions/triangle".
Definition: poset_path.h:48
A point in chart space.
Definition: chart_point.h:52
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
An abstract invertible section of a fiber bundle with a d-dimensional base space and a d-dimensional ...
Euclidean vector space of dimension d (volatile version).
Definition: ed.h:44
An index within the external ("client") scope of a given id space.
Definition: scoped_index.h:116
unsigned long size_type
An unsigned integral type used to represent sizes and capacities.
Definition: sheaf.h:52
Euclidean vector space of dimension d (peresistent version).
Definition: ed.h:210
Namespace for the sheaves component of the sheaf system.
An abstract client handle for a member of a poset.
double sec_vd_dof_type
The type of degree of freedom in the section space.
Definition: fiber_bundle.h:78
Namespace for the fiber_bundles component of the sheaf system.
Namespace for geometry component of sheaf system.
Definition: field_vd.h:54
vd_value_type sec_vd_value_type
The type of component in the value of a section at a point.
Definition: fiber_bundle.h:73
An abstract point location query in domains with global coordinate dimension dc and local coordinate ...
Definition: point_locator.h:52
A handle for a poset whose members are numerical representations of sections of a fiber bundle...
Definition: sec_rep_space.h:61