Dune-Fufem 2.11-git
Loading...
Searching...
No Matches
integrate.hh
Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2// vi: set et ts=4 sw=2 sts=2:
3
4// SPDX-FileCopyrightText: Copyright © DUNE-FUFEM Project contributors, see file AUTHORS.md
5// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later
6
7#ifndef DUNE_FUFEM_FORMS_INTEGRATE_HH
8#define DUNE_FUFEM_FORMS_INTEGRATE_HH
9
10#include <type_traits>
11#include <utility>
12
14
16
25
26
27
28namespace Dune::Fufem::Forms {
29
30
53 template<class MultilinearOperator, class Domain, class QuadratureHint>
54 requires isOperatorOrSumOperator_v<MultilinearOperator> && IsDomain<Domain>::value && QuadratureHints::IsQuadratureHint<QuadratureHint>::value
55 auto integrate(MultilinearOperator op, const Domain& domain, QuadratureHint hint)
56 {
57 auto sumOperator = SumOperator(op);
58 if constexpr(MultilinearOperator::arity==1)
59 {
60 if constexpr (IsBulkDomain<Domain>())
61 return IntegratedLinearForm(sumOperator, domain, hint);
62 if constexpr (IsBoundaryDomain<Domain>())
63 return IntegratedBoundaryLinearForm(sumOperator, domain, hint);
64 if constexpr (IsSkeletonDomain<Domain>())
65 return IntegratedSkeletonLinearForm(sumOperator, domain, hint);
66 }
67 else if constexpr(MultilinearOperator::arity==2)
68 {
69 if constexpr (IsBulkDomain<Domain>())
70 return IntegratedBilinearForm(sumOperator, domain, hint);
71 if constexpr (IsBoundaryDomain<Domain>())
72 return IntegratedBoundaryBilinearForm(sumOperator, domain, hint);
73 if constexpr (IsSkeletonDomain<Domain>())
74 return IntegratedSkeletonBilinearForm(sumOperator, domain, hint);
75 }
76 }
77
78
79
101 template<class MultilinearOperator, class Domain>
102 requires (isOperatorOrSumOperator_v<MultilinearOperator> and IsDomain<Domain>::value)
103 auto integrate(MultilinearOperator op, const Domain& domain)
104 {
105 auto sumOperator = SumOperator(op);
106 if constexpr(MultilinearOperator::arity==1)
107 {
108 if constexpr (IsBulkDomain<Domain>())
109 return IntegratedLinearForm(sumOperator, domain);
110 if constexpr (IsBoundaryDomain<Domain>())
111 return IntegratedBoundaryLinearForm(sumOperator, domain);
112 if constexpr (IsSkeletonDomain<Domain>())
113 return IntegratedSkeletonLinearForm(sumOperator, domain);
114 }
115 else if constexpr(MultilinearOperator::arity==2)
116 {
117 if constexpr (IsBulkDomain<Domain>())
118 return IntegratedBilinearForm(sumOperator, domain);
119 if constexpr (IsBoundaryDomain<Domain>())
120 return IntegratedBoundaryBilinearForm(sumOperator, domain);
121 if constexpr (IsSkeletonDomain<Domain>())
122 return IntegratedSkeletonBilinearForm(sumOperator, domain);
123 }
124 }
125
126
127
144 template<class MultilinearOperator, class QuadratureHint>
145 requires isOperatorOrSumOperator_v<MultilinearOperator> && QuadratureHints::IsQuadratureHint<QuadratureHint>::value
146 auto integrate(MultilinearOperator op, QuadratureHint hint)
147 {
148 auto sumOperator = SumOperator(op);
149 if constexpr(MultilinearOperator::arity==1)
150 return IntegratedLinearForm(sumOperator, Dune::Fufem::Forms::bulk, hint);
151 else if constexpr(MultilinearOperator::arity==2)
152 return IntegratedBilinearForm(sumOperator, Dune::Fufem::Forms::bulk, hint);
153 }
154
155
156
172 template<class MultilinearOperator>
173 requires isOperatorOrSumOperator_v<MultilinearOperator>
175 {
176 auto sumOperator = SumOperator(op);
177 if constexpr(MultilinearOperator::arity==1)
179 else if constexpr(MultilinearOperator::arity==2)
181 }
182
183
184
185} // namespace Dune::Fufem::Forms
186
187
188#endif // DUNE_FUFEM_FORMS_INTEGRATE_HH
::value &&QuadratureHints::IsQuadratureHint< QuadratureHint >::value auto integrate(MultilinearOperator op, const Domain &domain, QuadratureHint hint)
Integrate a k-linear operator to obtain a k-linear form.
Definition integrate.hh:55
constexpr Bulk bulk
Object representing the full grid view as integration domain.
Definition domains.hh:233
Definition baseclass.hh:22
Base class for multilinear operator implementations.
Definition baseclass.hh:73
static constexpr std::size_t arity
Definition baseclass.hh:75
Sum of several multilinear operators.
Definition sumoperator.hh:38
Traits class to identify bulk integration domains.
Definition domains.hh:36
Traits class to identify boundary integration domains.
Definition domains.hh:49
Traits class to identify skeleton integration domains.
Definition domains.hh:62
Local assembler corresponding to a bulk bilinear form.
Definition integratedbilinearform.hh:46
Local assembler corresponding to a boundary bilinear form.
Definition integratedboundarybilinearform.hh:45
Local assembler corresponding to a boundary linear form.
Definition integratedboundarylinearform.hh:45
Local assembler corresponding to a bulk linear form.
Definition integratedlinearform.hh:46
Local assembler corresponding to a skeleton bilinear form.
Definition integratedskeletonbilinearform.hh:45
Local assembler corresponding to a skeleton linear form.
Definition integratedskeletonlinearform.hh:45