8 #include <dune/common/concept.hh> 9 #include <dune/functions/functionspacebases/concepts.hh> 10 #include <dune/functions/functionspacebases/subspacebasis.hh> 12 #include <amdis/BoundaryCondition.hpp> 13 #include <amdis/BoundarySubset.hpp> 14 #include <amdis/common/ConceptsBase.hpp> 15 #include <amdis/common/FieldMatVec.hpp> 16 #include <amdis/common/TypeTraits.hpp> 17 #include <amdis/typetree/TreePath.hpp> 23 template <
class ct,
int dow>
26 using WorldMatrix = FieldMatrix<ct, dow, dow>;
27 using WorldVector = FieldVector<ct, dow>;
35 WorldVector evaluate(WorldVector
const& x)
const 42 WorldVector evaluateInverse(WorldVector
const& y)
const 44 WorldVector ys = y -
shift_;
60 template <
class Mat,
class Sol,
class Rhs,
class Basis,
class TP>
65 using SubspaceBasis = Dune::Functions::SubspaceBasis<Basis, TP>;
68 using Domain =
typename SubspaceBasis::GridView::template Codim<0>::Geometry::GlobalCoordinate;
71 using Intersection =
typename SubspaceBasis::GridView::Intersection;
77 : basis_(
std::move(basis))
78 , boundarySubset_(
std::move(boundarySubset))
79 , faceTrafo_(
std::move(faceTrafo))
96 void apply(Mat& matrix, Sol& solution, Rhs& rhs)
override;
101 return associations_;
107 return periodicNodes_;
111 void initAssociations();
112 void initAssociations2();
115 template <
class Node>
116 auto coords(Node
const& node, std::vector<std::size_t>
const& localIndices)
const;
119 SubspaceBasis basis_;
123 std::vector<bool> periodicNodes_;
124 std::map<std::size_t, std::size_t> associations_;
125 std::optional<bool> hasConnectedIntersections_;
129 template <
class Basis>
131 typename Basis::GridView::template Codim<0>::Geometry::GlobalCoordinate::field_type,
132 Basis::GridView::template Codim<0>::Geometry::GlobalCoordinate::dimension>;
137 template <
class Mat,
class Sol,
class Rhs,
class B,
class TP>
143 return BcType(std::move(basis), std::move(boundarySubset), std::move(trafo));
147 template <
class Mat,
class Sol,
class Rhs,
class B,
class TP,
148 REQUIRES(Concepts::GlobalBasis<B>)>
153 return makePeriodicBC<Mat, Sol, Rhs>(Dune::Functions::subspaceBasis(basis, tp),
154 std::move(boundarySubset), std::move(trafo));
158 template <
class Mat,
class Sol,
class Rhs,
class B,
159 REQUIRES(Concepts::GlobalBasis<B>)>
164 return makePeriodicBC<Mat, Sol, Rhs>(basis, makeTreePath(), std::move(boundarySubset),
170 #include "PeriodicBC.inc.hpp" constexpr bool MultiIndex
A multi-index type.
Definition: Concepts.hpp:150
auto const & periodicNodes() const
Return the boolean boundary indicator.
Definition: PeriodicBC.hpp:105
Definition: FieldMatVec.hpp:12
Contains all classes needed for solving linear and non linear equation systems.
Definition: AdaptBase.hpp:6
Implements a periodic boundary condition.
Definition: PeriodicBC.hpp:61
PeriodicBC(SubspaceBasis basis, BoundarySubset< Intersection > boundarySubset, FaceTrafo faceTrafo)
Create the BoundaryCondition and store the face transformation in a local variable.
Definition: PeriodicBC.hpp:75
auto makePeriodicBC(Dune::Functions::SubspaceBasis< B, TP > basis, BoundarySubset< typename B::GridView::Intersection > boundarySubset, Impl::FaceTrafo< B > trafo)
Make a PeriodicBC from a subspacebasis.
Definition: PeriodicBC.hpp:138
void init(int &argc, char **&argv, std::string const &initFileName="")
Initialized the Environment for MPI.
Definition: AMDiS.hpp:29
Interface class for boundary conditions.
Definition: BoundaryCondition.hpp:20
auto const & associations() const
Return the map of DOF associations.
Definition: PeriodicBC.hpp:99