FEAT 3
Finite Element Analysis Toolbox
Loading...
Searching...
No Matches
asm_traits.hpp
1// FEAT3: Finite Element Analysis Toolbox, Version 3
2// Copyright (C) 2010 by Stefan Turek & the FEAT group
3// FEAT3 is released under the GNU General Public License version 3,
4// see the file 'copyright.txt' in the top level directory for details.
5
6#pragma once
7
8// includes, FEAT
9#include <kernel/assembly/base.hpp>
10#include <kernel/cubature/dynamic_factory.hpp>
11
12namespace FEAT
13{
14 namespace Assembly
15 {
17 namespace Intern
18 {
19 template<typename Space_, typename DataType_>
20 struct EvalPolicyFetcher
21 {
22 typedef typename Space_::TrafoType TrafoType;
23 typedef typename TrafoType::ShapeType ShapeType;
24 typedef typename TrafoType::template Evaluator<ShapeType, DataType_>::Type TrafoEvalType;
25 typedef typename TrafoEvalType::EvalPolicy EvalPolicy;
26 };
27
28 template<typename TrafoEvaluator_>
29 class CubatureTraits
30 {
31 public:
33 typedef typename TrafoEvaluator_::EvalPolicy EvalPolicy;
34
36 typedef typename EvalPolicy::DataType DataType;
37
39 typedef typename EvalPolicy::ShapeType ShapeType;
40
42 typedef typename EvalPolicy::DomainPointType DomainPointType;
43
45 typedef Cubature::Rule<ShapeType, DataType, DataType, DomainPointType> RuleType;
46 };
47 }
49
76 template<
77 typename DataType_,
78 typename Space_,
79 TrafoTags trafo_config_,
80 SpaceTags space_config_>
81 class AsmTraits1 :
82 public Intern::EvalPolicyFetcher<Space_, DataType_>::EvalPolicy
83 {
84 public:
86 typedef DataType_ DataType;
88 typedef Space_ SpaceType;
95
97 typedef typename SpaceType::TrafoType TrafoType;
99 typedef typename TrafoType::ShapeType ShapeType;
101 typedef typename TrafoType::MeshType MeshType;
102
104 typedef typename TrafoType::template Evaluator<ShapeType, DataType>::Type TrafoEvaluator;
105
107 typedef typename TrafoEvaluator::CellIterator CellIterator;
108
110 typedef typename SpaceType::template Evaluator<TrafoEvaluator>::Type SpaceEvaluator;
111 typedef SpaceEvaluator TestEvaluator;
112 typedef SpaceEvaluator TrialEvaluator;
113 typedef SpaceEvaluator MultEvaluator;
114
116 typedef typename SpaceEvaluator::SpaceEvalTraits SpaceEvalTraits;
117 typedef SpaceEvalTraits TestEvalTraits;
118 typedef SpaceEvalTraits TrialEvalTraits;
119 typedef SpaceEvalTraits MultEvalTraits;
120
121 // define test- and trial-space configs
122 static constexpr SpaceTags space_config = space_config_;
123 static constexpr SpaceTags test_config = space_config_;
124 static constexpr SpaceTags trial_config = space_config_;
125 static constexpr SpaceTags mult_config = space_config_;
126
127 // now fetch the trafo config from the space
128 typedef typename SpaceEvaluator::template ConfigTraits<space_config> SpaceConfigTraits;
129 static constexpr TrafoTags space_trafo_config = SpaceConfigTraits::trafo_config;
130 static constexpr TrafoTags test_trafo_config = SpaceConfigTraits::trafo_config;
131 static constexpr TrafoTags trial_trafo_config = SpaceConfigTraits::trafo_config;
132 static constexpr TrafoTags mult_trafo_config = SpaceConfigTraits::trafo_config;
133
135 static constexpr TrafoTags trafo_config = trafo_config_ | space_trafo_config | TrafoTags::jac_det;
136
138 typedef typename TrafoEvaluator::template ConfigTraits<trafo_config>::EvalDataType TrafoEvalData;
139 typedef TrafoEvalData TrafoData;
140
142 typedef typename SpaceEvaluator::template ConfigTraits<space_config>::EvalDataType SpaceEvalData;
143 typedef SpaceEvalData TestEvalData;
144 typedef SpaceEvalData TrialEvalData;
145 typedef SpaceEvalData MultEvalData;
146
148 typedef typename SpaceEvalData::BasisDataType SpaceBasisData;
149 typedef SpaceBasisData BasisData;
150 typedef SpaceBasisData TestBasisData;
151 typedef SpaceBasisData TrialBasisData;
152 typedef SpaceBasisData MultBasisData;
153
155 typedef typename SpaceType::DofMappingType DofMapping;
156 typedef DofMapping TestDofMapping;
157 typedef DofMapping TrialDofMapping;
158 typedef DofMapping MultDofMapping;
159
161 static constexpr int domain_dim = TrafoEvaluator::domain_dim;
163 static constexpr int image_dim = TrafoEvaluator::image_dim;
164
166 static constexpr int max_local_dofs = SpaceEvaluator::max_local_dofs;
167 static constexpr int max_local_test_dofs = TestEvaluator::max_local_dofs;
168 static constexpr int max_local_trial_dofs = TrialEvaluator::max_local_dofs;
169 static constexpr int max_local_mult_dofs = MultEvaluator::max_local_dofs;
170
172 template<typename Value_>
174 template<typename Value_>
176 template<typename Value_>
178 template<typename Value_>
180
182 template<typename Value_>
184
186 typedef typename Intern::CubatureTraits<TrafoEvaluator>::RuleType CubatureRuleType;
187 }; // class AsmTraits1
188
218 template<
219 typename DataType_,
220 typename TestSpace_,
221 typename TrialSpace_,
222 TrafoTags trafo_config_,
223 SpaceTags test_config_,
224 SpaceTags trial_config_>
226 public Intern::EvalPolicyFetcher<TestSpace_, DataType_>::EvalPolicy
227 {
228 public:
230 typedef DataType_ DataType;
232 typedef TestSpace_ TestSpaceType;
234 typedef TrialSpace_ TrialSpaceType;
237
239 typedef typename TestSpaceType::TrafoType TrafoType;
241 typedef typename TrafoType::ShapeType ShapeType;
243 typedef typename TrafoType::MeshType MeshType;
244
246 typedef typename TrafoType::template Evaluator<ShapeType, DataType>::Type TrafoEvaluator;
247
249 typedef typename TrafoEvaluator::CellIterator CellIterator;
250
252 typedef typename TestSpaceType::template Evaluator<TrafoEvaluator>::Type TestEvaluator;
253 typedef typename TrialSpaceType::template Evaluator<TrafoEvaluator>::Type TrialEvaluator;
254 typedef TrialEvaluator MultEvaluator;
255
257 typedef typename TestEvaluator::SpaceEvalTraits TestEvalTraits;
258 typedef typename TrialEvaluator::SpaceEvalTraits TrialEvalTraits;
259 typedef TrialEvalTraits MultEvalTraits;
260
261 // define test- and trial-space configs
262 static constexpr SpaceTags test_config = test_config_;
263 static constexpr SpaceTags trial_config = trial_config_;
264 static constexpr SpaceTags mult_config = trial_config_;
265
266 // now fetch the trafo configs from the spaces
267 typedef typename TestEvaluator::template ConfigTraits<test_config> TestConfigTraits;
268 typedef typename TrialEvaluator::template ConfigTraits<trial_config> TrialConfigTraits;
269 static constexpr TrafoTags test_trafo_config = TestConfigTraits::trafo_config;
270 static constexpr TrafoTags trial_trafo_config = TrialConfigTraits::trafo_config;
271 static constexpr TrafoTags mult_trafo_config = TrialConfigTraits::trafo_config;
272
274 static constexpr TrafoTags trafo_config = trafo_config_ | test_trafo_config | trial_trafo_config | TrafoTags::jac_det;
275
277 typedef typename TrafoEvaluator::template ConfigTraits<trafo_config>::EvalDataType TrafoEvalData;
278 typedef TrafoEvalData TrafoData;
279
281 typedef typename TestEvaluator::template ConfigTraits<test_config>::EvalDataType TestEvalData;
282 typedef typename TrialEvaluator::template ConfigTraits<trial_config>::EvalDataType TrialEvalData;
283 typedef TrialEvalData MultEvalData;
284
286 typedef typename TestEvalData::BasisDataType TestBasisData;
287 typedef typename TrialEvalData::BasisDataType TrialBasisData;
288 typedef TrialBasisData MultBasisData;
289
291 typedef typename TestSpaceType::DofMappingType TestDofMapping;
292 typedef typename TrialSpaceType::DofMappingType TrialDofMapping;
293 typedef TrialDofMapping MultDofMapping;
294
296 static constexpr int domain_dim = TrafoEvaluator::domain_dim;
298 static constexpr int image_dim = TrafoEvaluator::image_dim;
299
301 static constexpr int max_local_test_dofs = TestEvaluator::max_local_dofs;
302 static constexpr int max_local_trial_dofs = TrialEvaluator::max_local_dofs;
303 static constexpr int max_local_mult_dofs = MultEvaluator::max_local_dofs;
304
306 template<typename Value_>
308 template<typename Value_>
310 template<typename Value_>
312
314 template<typename Value_>
316
318 typedef typename Intern::CubatureTraits<TrafoEvaluator>::RuleType CubatureRuleType;
319 }; // class AsmTraits2
320
353 template<
354 typename DataType_,
355 typename TestSpace_,
356 typename TrialSpace_,
357 typename MultSpace_,
358 TrafoTags trafo_config_,
359 SpaceTags test_config_,
360 SpaceTags trial_config_,
361 SpaceTags mult_config_>
363 public Intern::EvalPolicyFetcher<TestSpace_, DataType_>::EvalPolicy
364 {
365 public:
367 typedef DataType_ DataType;
369 typedef TestSpace_ TestSpaceType;
371 typedef TrialSpace_ TrialSpaceType;
373 typedef MultSpace_ MultSpaceType;
374
376 typedef typename TestSpaceType::TrafoType TrafoType;
378 typedef typename TrafoType::ShapeType ShapeType;
380 typedef typename TrafoType::MeshType MeshType;
381
383 typedef typename TrafoType::template Evaluator<ShapeType, DataType>::Type TrafoEvaluator;
384
386 typedef typename TrafoEvaluator::CellIterator CellIterator;
387
389 typedef typename TestSpaceType::template Evaluator<TrafoEvaluator>::Type TestEvaluator;
390 typedef typename TrialSpaceType::template Evaluator<TrafoEvaluator>::Type TrialEvaluator;
391 typedef typename MultSpaceType::template Evaluator<TrafoEvaluator>::Type MultEvaluator;
392
394 typedef typename TestEvaluator::SpaceEvalTraits TestEvalTraits;
395 typedef typename TrialEvaluator::SpaceEvalTraits TrialEvalTraits;
396 typedef typename MultEvaluator::SpaceEvalTraits MultEvalTraits;
397
398 // define test- and trial-space configs
399 static constexpr SpaceTags test_config = test_config_;
400 static constexpr SpaceTags trial_config = trial_config_;
401 static constexpr SpaceTags mult_config = mult_config_;
402
403 // now fetch the trafo configs from the spaces
404 typedef typename TestEvaluator::template ConfigTraits<test_config> TestConfigTraits;
405 typedef typename TrialEvaluator::template ConfigTraits<trial_config> TrialConfigTraits;
406 typedef typename MultEvaluator::template ConfigTraits<mult_config> MultConfigTraits;
407 static constexpr TrafoTags test_trafo_config = TestConfigTraits::trafo_config;
408 static constexpr TrafoTags trial_trafo_config = TrialConfigTraits::trafo_config;
409 static constexpr TrafoTags mult_trafo_config = MultConfigTraits::trafo_config;
410
412 static constexpr TrafoTags trafo_config = trafo_config_ | test_trafo_config | trial_trafo_config | mult_trafo_config | TrafoTags::jac_det;
413
415 typedef typename TrafoEvaluator::template ConfigTraits<trafo_config>::EvalDataType TrafoEvalData;
416 typedef TrafoEvalData TrafoData;
417
419 typedef typename TestEvaluator::template ConfigTraits<test_config>::EvalDataType TestEvalData;
420 typedef typename TrialEvaluator::template ConfigTraits<trial_config>::EvalDataType TrialEvalData;
421 typedef typename MultEvaluator::template ConfigTraits<trial_config>::EvalDataType MultEvalData;
422
424 typedef typename TestEvalData::BasisDataType TestBasisData;
425 typedef typename TrialEvalData::BasisDataType TrialBasisData;
426 typedef typename MultEvalData::BasisDataType MultBasisData;
427
429 typedef typename TestSpaceType::DofMappingType TestDofMapping;
430 typedef typename TrialSpaceType::DofMappingType TrialDofMapping;
431 typedef typename MultSpaceType::DofMappingType MultDofMapping;
432
434 static constexpr int domain_dim = TrafoEvaluator::domain_dim;
436 static constexpr int image_dim = TrafoEvaluator::image_dim;
437
439 static constexpr int max_local_test_dofs = TestEvaluator::max_local_dofs;
440 static constexpr int max_local_trial_dofs = TrialEvaluator::max_local_dofs;
441 static constexpr int max_local_mult_dofs = MultEvaluator::max_local_dofs;
442
444 template<typename Value_>
446 template<typename Value_>
448 template<typename Value_>
450
452 template<typename Value_>
454
456 typedef typename Intern::CubatureTraits<TrafoEvaluator>::RuleType CubatureRuleType;
457 }; // class AsmTraits3
458 } // namespace Assembly
459} // namespace FEAT
Common single-space assembly traits class template.
Definition: asm_traits.hpp:83
TrafoType::template Evaluator< ShapeType, DataType >::Type TrafoEvaluator
trafo evaluator type
Definition: asm_traits.hpp:104
SpaceEvalData::BasisDataType SpaceBasisData
basis function data types
Definition: asm_traits.hpp:148
SpaceEvaluator::template ConfigTraits< space_config >::EvalDataType SpaceEvalData
space evaluation data types
Definition: asm_traits.hpp:142
SpaceType TrialSpaceType
trial-space type
Definition: asm_traits.hpp:92
DataType_ DataType
data type
Definition: asm_traits.hpp:86
SpaceType MultSpaceType
multiplier space type
Definition: asm_traits.hpp:94
Intern::CubatureTraits< TrafoEvaluator >::RuleType CubatureRuleType
cubature rule type
Definition: asm_traits.hpp:186
TrafoType::MeshType MeshType
mesh type
Definition: asm_traits.hpp:101
SpaceType TestSpaceType
test-space type
Definition: asm_traits.hpp:90
TrafoEvaluator::CellIterator CellIterator
trafo cell iterator type
Definition: asm_traits.hpp:107
static constexpr int max_local_dofs
maximum local dofs
Definition: asm_traits.hpp:166
SpaceType::TrafoType TrafoType
trafo type
Definition: asm_traits.hpp:97
SpaceEvaluator::SpaceEvalTraits SpaceEvalTraits
space evaluator traits
Definition: asm_traits.hpp:116
TrafoType::ShapeType ShapeType
shape type
Definition: asm_traits.hpp:99
static constexpr int domain_dim
trafo domain dimension
Definition: asm_traits.hpp:161
SpaceType::DofMappingType DofMapping
dof-mapping types
Definition: asm_traits.hpp:155
static constexpr int image_dim
trafo image dimension
Definition: asm_traits.hpp:163
TrafoEvaluator::template ConfigTraits< trafo_config >::EvalDataType TrafoEvalData
trafo evaluation data type
Definition: asm_traits.hpp:138
static constexpr TrafoTags trafo_config
assembly trafo config: derive from user-defined trafo config
Definition: asm_traits.hpp:135
SpaceType::template Evaluator< TrafoEvaluator >::Type SpaceEvaluator
space evaluator types
Definition: asm_traits.hpp:110
Space_ SpaceType
space type
Definition: asm_traits.hpp:88
Common test-/trial-space assembly traits class template.
Definition: asm_traits.hpp:227
TestSpaceType::DofMappingType TestDofMapping
dof-mapping types
Definition: asm_traits.hpp:291
static constexpr TrafoTags trafo_config
trafo config: combine space and assembly trafo configs
Definition: asm_traits.hpp:274
TrafoType::ShapeType ShapeType
shape type
Definition: asm_traits.hpp:241
Intern::CubatureTraits< TrafoEvaluator >::RuleType CubatureRuleType
cubature rule type
Definition: asm_traits.hpp:318
TrafoType::template Evaluator< ShapeType, DataType >::Type TrafoEvaluator
trafo evaluator type
Definition: asm_traits.hpp:246
static constexpr int domain_dim
trafo domain dimension
Definition: asm_traits.hpp:296
static constexpr int image_dim
trafo image dimension
Definition: asm_traits.hpp:298
TrialSpace_ TrialSpaceType
trial-space type
Definition: asm_traits.hpp:234
TestSpace_ TestSpaceType
test-space type
Definition: asm_traits.hpp:232
DataType_ DataType
data type
Definition: asm_traits.hpp:230
TestEvalData::BasisDataType TestBasisData
basis function data types
Definition: asm_traits.hpp:286
TestSpaceType::template Evaluator< TrafoEvaluator >::Type TestEvaluator
space evaluator types
Definition: asm_traits.hpp:252
TestEvaluator::SpaceEvalTraits TestEvalTraits
space evaluator traits
Definition: asm_traits.hpp:257
TrafoEvaluator::CellIterator CellIterator
trafo cell iterator type
Definition: asm_traits.hpp:249
TestSpaceType::TrafoType TrafoType
trafo type
Definition: asm_traits.hpp:239
TrialSpaceType MultSpaceType
mult-space type
Definition: asm_traits.hpp:236
TrafoType::MeshType MeshType
mesh type
Definition: asm_traits.hpp:243
TestEvaluator::template ConfigTraits< test_config >::EvalDataType TestEvalData
space evaluation data types
Definition: asm_traits.hpp:281
TrafoEvaluator::template ConfigTraits< trafo_config >::EvalDataType TrafoEvalData
trafo evaluation data type
Definition: asm_traits.hpp:277
static constexpr int max_local_test_dofs
maximum local dofs
Definition: asm_traits.hpp:301
Common test-/trial-/mult-space assembly traits class template.
Definition: asm_traits.hpp:364
TrafoEvaluator::template ConfigTraits< trafo_config >::EvalDataType TrafoEvalData
trafo evaluation data type
Definition: asm_traits.hpp:415
TestEvaluator::template ConfigTraits< test_config >::EvalDataType TestEvalData
space evaluation data types
Definition: asm_traits.hpp:419
TrialSpace_ TrialSpaceType
trial-space type
Definition: asm_traits.hpp:371
MultSpace_ MultSpaceType
mult-space type
Definition: asm_traits.hpp:373
TrafoType::MeshType MeshType
mesh type
Definition: asm_traits.hpp:380
TrafoType::ShapeType ShapeType
shape type
Definition: asm_traits.hpp:378
TestEvaluator::SpaceEvalTraits TestEvalTraits
space evaluator traits
Definition: asm_traits.hpp:394
TestSpaceType::DofMappingType TestDofMapping
dof-mapping types
Definition: asm_traits.hpp:429
static constexpr int image_dim
trafo image dimension
Definition: asm_traits.hpp:436
TestSpaceType::template Evaluator< TrafoEvaluator >::Type TestEvaluator
space evaluator types
Definition: asm_traits.hpp:389
static constexpr int domain_dim
trafo domain dimension
Definition: asm_traits.hpp:434
DataType_ DataType
data type
Definition: asm_traits.hpp:367
TrafoEvaluator::CellIterator CellIterator
trafo cell iterator type
Definition: asm_traits.hpp:386
Intern::CubatureTraits< TrafoEvaluator >::RuleType CubatureRuleType
cubature rule type
Definition: asm_traits.hpp:456
static constexpr int max_local_test_dofs
maximum local dofs
Definition: asm_traits.hpp:439
TestSpaceType::TrafoType TrafoType
trafo type
Definition: asm_traits.hpp:376
TrafoType::template Evaluator< ShapeType, DataType >::Type TrafoEvaluator
trafo evaluator type
Definition: asm_traits.hpp:383
TestEvalData::BasisDataType TestBasisData
basis function data types
Definition: asm_traits.hpp:424
static constexpr TrafoTags trafo_config
trafo config: combine space and assembly trafo configs
Definition: asm_traits.hpp:412
TestSpace_ TestSpaceType
test-space type
Definition: asm_traits.hpp:369
Tiny Matrix class template.
Tiny Vector class template.
FEAT namespace.
Definition: adjactor.hpp:12
SpaceTags
Space configuration tags enum.
Definition: eval_tags.hpp:97
TrafoTags
Trafo configuration tags enum.
Definition: eval_tags.hpp:22
@ jac_det
specifies whether the trafo should supply jacobian determinants