Liebe Gitlab-Nutzer, lieber Gitlab-Nutzer, es ist nun möglich sich mittels des ZIH-Logins/LDAP an unserem Dienst anzumelden. Ein Anmelden über dieses erzeugt ein neues Konto. Das alte Konto ist über den Reiter "Standard" erreichbar. Die Administratoren

Dear Gitlab user, it is now possible to log in to our service using the ZIH login/LDAP. Logging in via this will create a new account. The old account can be accessed via the "Standard" tab. The administrators

Commit af1d36c3 authored by Praetorius, Simon's avatar Praetorius, Simon
Browse files

add constructor and deduction guide for DOFVector

parent 6b3c8bca
Pipeline #4687 passed with stage
in 43 minutes and 22 seconds
......@@ -13,6 +13,7 @@
#include <amdis/Observer.hpp>
#include <amdis/common/Concepts.hpp>
#include <amdis/common/TypeTraits.hpp>
#include <amdis/functions/ParallelGlobalBasis.hpp>
#include <amdis/gridfunctions/DiscreteFunction.hpp>
#include <amdis/typetree/TreePath.hpp>
......@@ -74,12 +75,11 @@ namespace AMDiS
: DOFVector(Dune::wrap_or_move(FWD(basis)), op)
{}
/// (3) Constructor. Forwards to (1) by creating a new basis from a dune-functions basis.
template <class GB_,
REQUIRES(not Concepts::Similar<GB_,GB>),
REQUIRES(Concepts::GlobalBasis<GB_>)>
DOFVector(GB_&& basis, DataTransferOperation op = DataTransferOperation::INTERPOLATE)
: DOFVector(std::make_shared<GB>(std::move(basis)), op)
/// (3) Constructor. Forwards to (1) by creating a new basis from a dune-functions pre-basis factory.
template <class GV, class PBF,
REQUIRES(Concepts::PreBasisFactory<PBF, GV, MultiIndex_t<PBF>>)>
DOFVector(GV const& gridView, PBF const& preBasisFactory, DataTransferOperation op = DataTransferOperation::INTERPOLATE)
: DOFVector(std::make_shared<GB>(gridView, preBasisFactory), op)
{}
std::shared_ptr<GlobalBasis const> const& basis() const { return basis_; }
......@@ -224,6 +224,10 @@ namespace AMDiS
DOFVector(GB&& basis, DataTransferOperation op = DataTransferOperation::INTERPOLATE)
-> DOFVector<ParallelGlobalBasis<typename Underlying_t<GB>::PreBasis>>;
template <class GV, class PBF>
DOFVector(GV const& gridView, PBF const& pbf, DataTransferOperation op = DataTransferOperation::INTERPOLATE)
-> DOFVector<decltype(ParallelGlobalBasis{gridView,pbf})>;
/// \brief Create a DOFVector from a basis.
/**
......
......@@ -116,7 +116,7 @@ namespace AMDiS
/// on the fly.
template <class Grid_, class PBF_,
class GV_ = typename Underlying_t<Grid_>::LeafGridView,
REQUIRES(Concepts::PreBasisFactory<PBF_,GV_>)>
REQUIRES(Concepts::PreBasisFactory<PBF_, GV_, MultiIndex_t<PBF_>>)>
ProblemStat(std::string const& name, Grid_&& grid, PBF_ const& preBasisFactory)
: ProblemStat(name, FWD(grid))
{
......@@ -536,7 +536,7 @@ namespace AMDiS
template <class G, class PBF>
struct DeducedProblemTraits<G,PBF,
std::enable_if_t<Concepts::PreBasisFactory<PBF,typename G::LeafGridView>>>
std::enable_if_t<Concepts::PreBasisFactory<PBF, typename G::LeafGridView, MultiIndex_t<PBF>>>>
{
using Grid = AdaptiveGrid_t<G>;
using GridView = typename Grid::LeafGridView;
......
......@@ -192,11 +192,11 @@ namespace AMDiS
template <class GB, class GV = typename GB::GridView>
using GlobalBasis_t = models_t<Dune::Functions::Concept::GlobalBasis<GV>(GB)>;
template <class PBF, class GV, class MultiIndex = std::array<std::size_t,1>>
constexpr bool PreBasisFactory = models<Definition::PreBasisFactory<MultiIndex>(PBF,GV)>;
template <class PBF, class GV, class MI = std::array<std::size_t,1>>
constexpr bool PreBasisFactory = models<Definition::PreBasisFactory<MI>(PBF,GV)>;
template <class PBF, class GV, class MultiIndex = std::array<std::size_t,1>>
using PreBasisFactory_t = models_t<Definition::PreBasisFactory<MultiIndex>(PBF,GV)>;
template <class PBF, class GV, class MI = std::array<std::size_t,1>>
using PreBasisFactory_t = models_t<Definition::PreBasisFactory<MI>(PBF,GV)>;
/** @} **/
......
......@@ -38,7 +38,7 @@
namespace AMDiS
{
template <class PreBasisFactory>
using MultiIndex = std::conditional_t<
using MultiIndex_t = std::conditional_t<
(remove_cvref_t<PreBasisFactory>::requiredMultiIndexSize == 1),
Dune::Functions::FlatMultiIndex<std::size_t>,
Dune::ReservedVector<std::size_t, remove_cvref_t<PreBasisFactory>::requiredMultiIndexSize>>;
......@@ -101,9 +101,9 @@ namespace AMDiS
/// Construct this global basis with a preBasisFactory
template <class PBF>
ParallelGlobalBasis(std::string const& name, GridView const& gridView, PBF&& preBasisFactory)
ParallelGlobalBasis(std::string const& name, GridView const& gridView, PBF const& preBasisFactory)
: ParallelGlobalBasis(name, gridView.grid(),
preBasisFactory.template makePreBasis<MultiIndex<PBF>>(gridView))
preBasisFactory.template makePreBasis<MultiIndex_t<PBF>>(gridView))
{}
/// Construct this global basis with empty name
......@@ -181,11 +181,11 @@ namespace AMDiS
template <class GV, class PBF>
ParallelGlobalBasis(std::string const& name, GV const& gridView, PBF&& preBasisFactory)
-> ParallelGlobalBasis<decltype(
preBasisFactory.template makePreBasis<MultiIndex<PBF>>(gridView))>;
preBasisFactory.template makePreBasis<MultiIndex_t<PBF>>(gridView))>;
template <class GV, class PBF>
ParallelGlobalBasis(GV const& gridView, PBF&& preBasisFactory)
-> ParallelGlobalBasis<decltype(
preBasisFactory.template makePreBasis<MultiIndex<PBF>>(gridView))>;
preBasisFactory.template makePreBasis<MultiIndex_t<PBF>>(gridView))>;
} // end namespace AMDiS
......@@ -98,7 +98,7 @@ int main(int argc, char** argv)
DOFVector<Basis> vec1(basis);
// Conversion from Dune::Functions::DefaultGlobalBasis
auto vec2 = makeDOFVector(makeBasis(gridView, preBasis));
DOFVector vec2(gridView, preBasis);
for (auto const& e : elements(gridView))
grid.mark(1, e);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment