SheafSystem  0.0.0.0
sec_vd_space.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 SEC_VD_SPACE_H
22 #define SEC_VD_SPACE_H
23 
24 #ifndef SHEAF_DLL_SPEC_H
25 #include "SheafSystem/sheaf_dll_spec.h"
26 #endif
27 
28 #ifndef SEC_TUPLE_SPACE_H
29 #include "SheafSystem/sec_tuple_space.h"
30 #endif
31 
32 #ifndef VD_TABLE_DOFS_TYPE_H
33 #include "SheafSystem/vd_table_dofs_type.h"
34 #endif
35 
36 namespace sheaf
37 {
38 class namespace_poset;
39 }
40 
41 namespace fiber_bundle
42 {
43 using namespace sheaf;
44 
45 class sec_at0;
46 class sec_vd;
47 class vd;
48 
52 class SHEAF_DLL_SPEC sec_vd_space : public sec_tuple_space
53 {
54  friend class fiber_bundles_namespace;
55 
56  // ===========================================================
58  // ===========================================================
60 
61 public:
62 
67 
71  typedef vd fiber_type;
72 
77 
82 
89  static bool same_scalar_fiber_space(const namespace_poset& xns,
90  const poset_path& xschema_path,
91  const poset_path& xscalar_space_path,
92  bool xauto_access);
93 
99  static sec_vd_space& new_table(namespace_type& xhost,
100  const poset_path& xpath,
101  const poset_path& xschema_path,
102  const poset_path& xscalar_space_path,
103  bool xauto_access);
104 
105  //============================================================================
106  // TABLE DOFS
107  //============================================================================
108 
109  using sec_tuple_space::factor_ct;
110 
114  static int factor_ct(int xd);
115 
119  int d() const;
120 
124  int d(bool xauto_access) const;
125 
130  static int d(const namespace_poset& xns,
131  const poset_path& xvector_space_path,
132  bool xauto_access);
133 
137  poset_path scalar_space_path() const;
138 
142  poset_path scalar_space_path(bool xauto_access) const;
143 
149  static poset_path scalar_space_path(const namespace_poset& xns,
150  const poset_path& xvector_space_path,
151  bool xauto_access);
152 
156  bool contains_variance_subposets(bool xauto_access) const;
157 
161  virtual bool is_vector(pod_index_type xmbr_id, bool xauto_access) const;
162 
166  bool is_vector(const scoped_index& xmbr_id, bool xauto_access) const;
167 
171  virtual void put_is_vector(pod_index_type xmbr_id, bool xauto_access);
172 
176  void put_is_vector(const scoped_index& xmbr_id, bool xauto_access);
177 
181  virtual bool is_covector(pod_index_type xmbr_id, bool xauto_access) const;;
182 
186  bool is_covector(const scoped_index& xmbr_id, bool xauto_access) const;;
187 
191  virtual void put_is_covector(pod_index_type xmbr_id, bool xauto_access);
192 
196  void put_is_covector(const scoped_index& xmbr_id, bool xauto_access);
197 
198 protected:
199 
203  static std::string covariant_subposet_name(int xi);
204 
209  sec_vd_space();
210 
214  sec_vd_space(const sec_vd_space& xother) { };
215 
219  sec_vd_space(sec_vd* xtop, sec_vd* xbottom);
220 
224  virtual ~sec_vd_space();
225 
229  void create_variance_subposets();
230 
234  virtual size_type covariant_subposet_ct() const;
235 
236 private:
237 
239 
240 
241  // ===========================================================
243  // ===========================================================
245 
246 public:
247 
248 protected:
249 
250 private:
251 
253 
254 
255  // ===========================================================
257  // ===========================================================
259 
260 public:
261 
262 protected:
263 
264 private:
265 
269  static bool make_prototype();
270 
272 
273 
274  // ===========================================================
276  // ===========================================================
278 
279 public:
280 
284  virtual poset_type type_id() const;
285 
289  virtual const char* class_name() const;
290 
294  virtual pod_index_type prereq_id(int xi) const;
295 
296 protected:
297 
302  {
303  return const_cast<sec_vd_space&>(*this);
304  };
305 
309  virtual void initialize_standard_subposets(const std::string& xname);
310 
311 private:
312 
314 
315 
316  // ===========================================================
318  // ===========================================================
320 
321 public:
322 
323 protected:
324 
325 private:
326 
328 
329 
330  // ===========================================================
332  // ===========================================================
334 
335 public:
336 
340  virtual bool is_ancestor_of(const any* xother) const;
341 
346  virtual sec_vd_space* clone() const;
347 
351  virtual bool invariant() const;
352 
353 protected:
354 
355 private:
356 
358 
359 };
360 
361 // ===========================================================
362 // NON-MEMBER FUNCTIONS
363 // ===========================================================
364 
365 
370  SHEAF_DLL_SPEC
371  void print_prereq_paths(std::ostream &xos,
372  const sec_vd_space& xspace,
373  const std::string& xheading,
374  const std::string& xindex,
375  bool xauto_access);
376 
377 
378 } // namespace fiber_bundle
379 
380 
381 #endif // SEC_VD_SPACE_H
sec_vd_space(const sec_vd_space &xother)
Copy constructor; disabled.
Definition: sec_vd_space.h:214
A Cartesian product section space.
sec_at0 scalar_type
The type of scalar for the module of sections.
Definition: sec_vd_space.h:76
The default name space; a poset which contains other posets as members.
The standard fiber bundles name space; extends the standard sheaves namespace by defining base space...
poset_type
Identifiers for poset types.
Definition: poset_type.h:41
A client handle for a general, abstract partially order set.
SHEAF_DLL_SPEC void print_prereq_paths(std::ostream &xos, const sec_vd_space &xspace, const std::string &xheading, const std::string &xindex, bool xauto_access)
Print the paths for xspace and its prerequisites: schema, rep, base, fiber, scalar space...
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
sec_vd_space & operator=(const poset_state_handle &xother)
Assignment operator; disabled.
Definition: sec_vd_space.h:301
An abstract vector section space of dimension d.
Definition: sec_vd_space.h:52
vd fiber_type
The fiber type.
Definition: sec_vd_space.h:71
Abstract base class with useful features for all objects.
Definition: any.h:39
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
Table dofs type for class vd_table_dofs_type.
A section of a fiber bundle with a d-dimensional vector space fiber.
Definition: sec_vd.h:54
sec_vd member_type
The type of member associated with this space.
Definition: sec_vd_space.h:66
int_type pod_index_type
The plain old data index type.
Definition: pod_types.h:49
Namespace for the sheaves component of the sheaf system.
vd_table_dofs_type table_dofs_type
The table dofs type defined by the standard schema.
Definition: sec_vd_space.h:81
Namespace for the fiber_bundles component of the sheaf system.
Abstract vector space over dof_type.
Definition: vd.h:350
Antisymetric tensor of degree 0. As the degree is 0 there is nothing to be symmetric or antisymmetric...
Definition: sec_at0.h:51