SheafSystem  0.0.0.0
integrable_section_evaluator.h
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 // Interface for class integrable_section_evaluator
19 
20 #ifndef INTEGRABLE_SECTION_EVALUATOR_H
21 #define INTEGRABLE_SECTION_EVALUATOR_H
22 
23 #ifndef DIFFERENTIABLE_SECTION_EVALUATOR_H
24 #include "SheafSystem/differentiable_section_evaluator.h"
25 #endif
26 
27 #ifndef SHEAF_DLL_SPEC_H
28 #include "SheafSystem/sheaf_dll_spec.h"
29 #endif
30 
31 namespace fiber_bundle
32 {
33 
34 using namespace sheaf;
35 
42 {
43 
44  // ===========================================================
46  // ===========================================================
48 
49 public:
50 
56 
61 
66  virtual value_type volume(const dof_type xcoord_dofs[],
67  size_type xcoord_dofs_ub,
68  size_type xdf) = 0;
69 
73  virtual void integrate(const dof_type xcoord_dofs[],
74  size_type xcoord_dofs_ub,
75  size_type xdf,
76  const dof_type xintegrands[],
77  size_type xintegrands_ub,
78  value_type xresult_integrals[],
79  size_type xresult_integrals_ub) = 0;
80 
84  virtual void integrate(const dof_type xcoord_dofs[],
85  size_type xcoord_dofs_ub,
86  size_type xdf,
87  const dof_type xintegrand,
88  value_type xresult_integrals[],
89  size_type xresult_integrals_ub);
90 
94  virtual void gauss_point(pod_index_type xindex,
95  coord_type xresult[],
96  size_type xresult_ub) = 0;
97 
98 protected:
99 
105 
106 private:
107 
109 
110  // ===========================================================
112  // ===========================================================
114 
115 public:
116 
117 protected:
118 
119 private:
120 
122 
123  // ===========================================================
125  // ===========================================================
127 
128 public:
129 
134  virtual integrable_section_evaluator* clone() const = 0;
135 
140  virtual integrable_section_evaluator& operator=(const integrable_section_evaluator& xother);
141 
145  virtual bool invariant() const;
146 
150  virtual bool is_ancestor_of(const any* other) const;
151 
152 protected:
153 
154 private:
155 
157 
158 };
159 
160 
161 //==============================================================================
162 // NON-MEMBER FUNCTIONS
163 //==============================================================================
164 
169 size_t
170 SHEAF_DLL_SPEC
171 deep_size(const integrable_section_evaluator& xe,
172  bool xinclude_shallow = true);
173 
174 
175 } // namespace fiber_bundle
176 
177 #endif // ifndef INTEGRABLE_SECTION_EVALUATOR_H
sec_vd_dof_type dof_type
The type of degree of freedom.
Abstract base class with useful features for all objects.
Definition: any.h:39
An abstract section evaluator that can be differentiated.
unsigned long size_type
An unsigned integral type used to represent sizes and capacities.
Definition: sheaf.h:52
chart_point_coord_type coord_type
The type of local coordinate; the scalar type for the local coordinate vector space.
vd_value_type value_type
The type of component in the value; the scalar type in the range vector space.
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.
An abstract section evaluator with a bounded domain that supports integration (volume calculation) as...
Namespace for the fiber_bundles component of the sheaf system.