1#ifndef DUNE_PDELAB_BACKEND_ISTL_GENEO_LOCALOPERATOR_OVLP_REGION_HH
2#define DUNE_PDELAB_BACKEND_ISTL_GENEO_LOCALOPERATOR_OVLP_REGION_HH
17 template<
typename LocalOperatorBase,
typename GFS>
24 : baseop(base_), subdomain_sum(gfs, 1) {
27 gfs.gridView().communicate(addh,Dune::All_All_Interface,Dune::ForwardCommunication);
48 enum {
isLinear = LocalOperatorBase::isLinear };
50 template<
typename LFSU,
typename LFSV,
typename LocalPattern>
51 void pattern_volume (
const LFSU& lfsu,
const LFSV& lfsv, LocalPattern& pattern)
const
53 if (entity_is_interior(lfsu))
55 baseop.pattern_volume(lfsu, lfsv, pattern);
58 template<
typename LFSU,
typename LFSV,
typename LocalPattern>
59 void pattern_skeleton (
const LFSU& lfsu_s,
const LFSV& lfsv_s,
const LFSU& lfsu_n,
const LFSV& lfsv_n, LocalPattern& pattern_sn, LocalPattern& pattern_ns)
const
61 if (entity_is_interior(lfsu_s))
63 baseop.pattern_skeleton(lfsu_s, lfsv_s, lfsu_n, lfsv_n, pattern_sn, pattern_ns);
66 template<
typename LFSU,
typename LFSV,
typename LocalPattern>
69 if (entity_is_interior(lfsu))
71 baseop.pattern_volume(lfsu, lfsv, pattern);
74 template<
typename LFSU,
typename LFSV,
typename LocalPattern>
75 void pattern_boundary (
const LFSU& lfsu_s,
const LFSV& lfsv_s, LocalPattern& pattern_ss)
const
77 if (entity_is_interior(lfsu_s))
79 baseop.pattern_boundary (lfsu_s, lfsv_s, pattern_ss);
82 template<
typename EG,
typename LFSU,
typename X,
typename LFSV,
typename R>
83 void alpha_volume (
const EG& eg,
const LFSU& lfsu,
const X& x,
const LFSV& lfsv, R& r)
const
85 if (entity_is_interior(lfsu))
87 baseop.alpha_volume(eg, lfsu, x, lfsv, r);
91 template<
typename EG,
typename LFSU,
typename X,
typename LFSV,
typename M>
92 void jacobian_volume (
const EG& eg,
const LFSU& lfsu,
const X& x,
const LFSV& lfsv, M& mat)
const
94 if (entity_is_interior(lfsu))
96 baseop.jacobian_volume (eg, lfsu, x, lfsv, mat);
100 template<
typename EG,
typename LFSV,
typename R>
103 if (entity_is_interior(lfsv))
105 baseop.lambda_volume (eg, lfsv, r);
109 template<
typename EG,
typename LFSU,
typename X,
typename LFSV,
typename R>
111 const LFSV& lfsv, R& r)
const
113 if (entity_is_interior(lfsu))
115 baseop.alpha_volume_post_skeleton (eg, lfsu, x, lfsv, r);
119 template<
typename IG,
typename LFSU,
typename X,
typename LFSV,
typename R>
121 const LFSU& lfsu_s,
const X& x_s,
const LFSV& lfsv_s,
124 if (entity_is_interior(lfsu_s))
126 baseop.alpha_boundary (
ig, lfsu_s, x_s, lfsv_s, r_s);
130 template<
typename IG,
typename LFSU,
typename X,
typename LFSV,
typename M>
132 const LFSU& lfsu_s,
const X& x_s,
const LFSV& lfsv_s,
135 if (entity_is_interior(lfsu_s))
137 baseop.jacobian_boundary (
ig, lfsu_s, x_s, lfsv_s, mat_s);
140 template<
typename IG,
typename LFSU,
typename X,
typename LFSV,
typename R>
142 const LFSU& lfsu_s,
const X& x_s,
const LFSV& lfsv_s,
143 const LFSU& lfsu_n,
const X& x_n,
const LFSV& lfsv_n,
144 R& r_s, R& r_n)
const
146 if (entity_is_interior(lfsu_s))
148 baseop.alpha_skeleton (
ig, lfsu_s, x_s, lfsv_s, lfsu_n, x_n, lfsv_n, r_s, r_n);
151 template<
typename IG,
typename LFSU,
typename X,
typename LFSV,
typename M>
153 const LFSU& lfsu_s,
const X& x_s,
const LFSV& lfsv_s,
154 const LFSU& lfsu_n,
const X& x_n,
const LFSV& lfsv_n,
155 M& mat_ss, M& mat_sn,
156 M& mat_ns, M& mat_nn)
const
158 if (entity_is_interior(lfsu_s))
160 baseop.jacobian_skeleton (
ig, lfsu_s, x_s, lfsv_s, lfsu_n, x_n, lfsv_n, mat_ss, mat_sn, mat_ns, mat_nn);
171 template <
typename LFS>
172 bool entity_is_interior (
const LFS& lfs)
const {
175 for (std::size_t i = 0; i < cache.size(); i++)
177 if (subdomain_sum[cache.containerIndex(i)] < 2)
183 LocalOperatorBase& baseop;
const IG & ig
Definition constraints.hh:149
For backward compatibility – Do not use this!
Definition adaptivity.hh:28
typename impl::BackendVectorSelector< GridFunctionSpace, FieldType >::Type Vector
alias of the return type of BackendVectorSelector
Definition backend/interface.hh:106
Wrapper for LocalOperators restricting their action to areas overlapping with other subdomains Any en...
Definition localoperator_ovlp_region.hh:18
@ doPatternVolume
Definition localoperator_ovlp_region.hh:31
void jacobian_boundary(const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, M &mat_s) const
Definition localoperator_ovlp_region.hh:131
void pattern_boundary(const LFSU &lfsu_s, const LFSV &lfsv_s, LocalPattern &pattern_ss) const
Definition localoperator_ovlp_region.hh:75
void jacobian_skeleton(const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const LFSV &lfsv_n, M &mat_ss, M &mat_sn, M &mat_ns, M &mat_nn) const
Definition localoperator_ovlp_region.hh:152
@ doAlphaBoundary
Definition localoperator_ovlp_region.hh:40
void jacobian_volume(const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, M &mat) const
Definition localoperator_ovlp_region.hh:92
void alpha_boundary(const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, R &r_s) const
Definition localoperator_ovlp_region.hh:120
void alpha_volume(const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, R &r) const
Definition localoperator_ovlp_region.hh:83
@ doLambdaSkeleton
Definition localoperator_ovlp_region.hh:45
void pattern_volume(const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern) const
Definition localoperator_ovlp_region.hh:51
@ doAlphaVolumePostSkeleton
Definition localoperator_ovlp_region.hh:38
void alpha_volume_post_skeleton(const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, R &r) const
Definition localoperator_ovlp_region.hh:110
@ doLambdaBoundary
Definition localoperator_ovlp_region.hh:44
void pattern_volume_post_skeleton(const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern) const
Definition localoperator_ovlp_region.hh:67
@ doPatternSkeleton
Definition localoperator_ovlp_region.hh:32
LocalOperatorOvlpRegion(LocalOperatorBase &base_, const GFS &gfs)
Definition localoperator_ovlp_region.hh:23
void pattern_skeleton(const LFSU &lfsu_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const LFSV &lfsv_n, LocalPattern &pattern_sn, LocalPattern &pattern_ns) const
Definition localoperator_ovlp_region.hh:59
@ doLambdaVolume
Definition localoperator_ovlp_region.hh:43
@ doAlphaSkeleton
Definition localoperator_ovlp_region.hh:42
void lambda_volume(const EG &eg, const LFSV &lfsv, R &r) const
Definition localoperator_ovlp_region.hh:101
void alpha_skeleton(const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const LFSV &lfsv_n, R &r_s, R &r_n) const
Definition localoperator_ovlp_region.hh:141
@ doPatternVolumePostSkeleton
Definition localoperator_ovlp_region.hh:33
@ doPatternBoundary
Definition localoperator_ovlp_region.hh:34
void setTime(double t)
Definition localoperator_ovlp_region.hh:164
@ doSkeletonTwoSided
Definition localoperator_ovlp_region.hh:47
@ isLinear
Definition localoperator_ovlp_region.hh:48
@ doAlphaVolume
Definition localoperator_ovlp_region.hh:37
Definition genericdatahandle.hh:667
Definition lfsindexcache.hh:979