AMDiS 2.11-git
The Adaptive Multi-Dimensional Simulation Toolbox
 
Loading...
Searching...
No Matches
FiniteElementType.hpp
1#pragma once
2
3#include <amdis/common/Tags.hpp>
4#include <amdis/typetree/NodeTags.hpp>
5
6namespace AMDiS
7{
8 namespace Impl
9 {
10 template <class Node, class NodeTag>
11 struct FiniteElementTypeImpl
12 {
13 using type = tag::unknown;
14 };
15 }
16
17 template <class Node>
18 using FiniteElementType =
19 Impl::FiniteElementTypeImpl<Node, AMDiS::NodeTag_t<Node>>;
20
21 template <class Node>
22 using FiniteElementType_t = typename FiniteElementType<Node>::type;
23
24 namespace Impl
25 {
26 // Leaf node
27 template <class Node>
28 struct FiniteElementTypeImpl<Node, AMDiS::LeafNodeTag>
29 {
30 using type = typename Node::FiniteElement;
31 };
32
33 // Power node
34 template <class Node>
35 struct FiniteElementTypeImpl<Node, AMDiS::PowerNodeTag>
36 {
37 using ChildNode = typename Node::template Child<0>::type;
38 using type = FiniteElementType_t<ChildNode>;
39 };
40
41 // Composite node
42 template <class Node>
43 struct FiniteElementTypeImpl<Node, AMDiS::CompositeNodeTag>
44 {
45 using type = tag::unknown; // no common FiniteElement type
46 };
47
48 } // end namespace Impl
49} // end namespace AMDiS