SheafSystem  0.0.0.0
differentiable_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 differentiable_section_evaluator
19 
20 #ifndef DIFFERENTIABLE_SECTION_EVALUATOR_H
21 #define DIFFERENTIABLE_SECTION_EVALUATOR_H
22 
23 #ifndef SHEAF_DLL_SPEC_H
24 #include "SheafSystem/sheaf_dll_spec.h"
25 #endif
26 
27 #ifndef SECTION_EVALUATOR_H
28 #include "SheafSystem/section_evaluator.h"
29 #endif
30 
31 namespace fiber_bundle
32 {
33 
34 using namespace sheaf;
35 
40 {
41 
42  // ===========================================================
44  // ===========================================================
46 
47 public:
48 
54 
59 
64  virtual void dxi_local(size_type xlocal_coord_index,
65  const dof_type xsource_dofs[],
66  size_type xsource_dofs_ub,
67  dof_type xresult_dofs[],
68  size_type xresult_dofs_ub) const = 0;
69 
70 
75  void dxi_local(size_type xlocal_coord_index,
76  const block<dof_type>& xsource_dofs,
77  block<dof_type>& xresult_dofs) const;
78 
83  virtual void jacobian(const dof_type xcoord_dofs[],
84  size_type xcoord_dofs_ub,
85  size_type xdf,
86  const dof_type xlocal_coords[],
87  size_type xlocal_coords_ub);
88 
92  const value_type* jacobian_values() const;
93 
98  virtual value_type jacobian_determinant(const dof_type xcoord_dofs[],
99  size_type xcoord_dofs_ub,
100  size_type xdf,
101  const coord_type xlocal_coords[],
102  size_type xlocal_coords_ub);
103 
104 protected:
105 
111 
116 
117 private:
118 
120 
121  // ===========================================================
123  // ===========================================================
125 
126 public:
127 
132  virtual differentiable_section_evaluator* clone() const = 0;
133 
138  virtual differentiable_section_evaluator& operator=(const differentiable_section_evaluator& xother);
139 
143  virtual bool invariant() const;
144 
148  virtual bool is_ancestor_of(const any* other) const;
149 
150 protected:
151 
152 private:
153 
155 
156 };
157 
158 //==============================================================================
159 // NON-MEMBER FUNCTIONS
160 //==============================================================================
161 
166 size_t
167 SHEAF_DLL_SPEC
168 deep_size(const differentiable_section_evaluator& xe,
169  bool xinclude_shallow = true);
170 
171 
172 } // namespace fiber_bundle
173 
174 #endif // ifndef DIFFERENTIABLE_SECTION_EVALUATOR_H
sec_vd_dof_type dof_type
The type of degree of freedom.
value_type * _jacobian_values
The result of the preceding call to "jacobian".
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.
An abstract local section evaluator; a map from {local coordinates x dofs} to section value...
Namespace for the sheaves component of the sheaf system.
An auto_block with a no-initialization initialization policy.
Namespace for the fiber_bundles component of the sheaf system.