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);
52 enum {
isLinear = LocalOperatorBase::isLinear };
57 return baseop.skip_entity(eg);
63 return baseop.skip_intersection(
ig);
66 template<
typename LFSU,
typename LFSV,
typename LocalPattern>
67 void pattern_volume (
const LFSU& lfsu,
const LFSV& lfsv, LocalPattern& pattern)
const
69 if (entity_is_interior(lfsu))
71 baseop.pattern_volume(lfsu, lfsv, pattern);
74 template<
typename LFSU,
typename LFSV,
typename LocalPattern>
75 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
77 if (entity_is_interior(lfsu_s))
79 baseop.pattern_skeleton(lfsu_s, lfsv_s, lfsu_n, lfsv_n, pattern_sn, pattern_ns);
82 template<
typename LFSU,
typename LFSV,
typename LocalPattern>
85 if (entity_is_interior(lfsu))
87 baseop.pattern_volume(lfsu, lfsv, pattern);
90 template<
typename LFSU,
typename LFSV,
typename LocalPattern>
91 void pattern_boundary (
const LFSU& lfsu_s,
const LFSV& lfsv_s, LocalPattern& pattern_ss)
const
93 if (entity_is_interior(lfsu_s))
95 baseop.pattern_boundary (lfsu_s, lfsv_s, pattern_ss);
98 template<
typename EG,
typename LFSU,
typename X,
typename LFSV,
typename R>
99 void alpha_volume (
const EG& eg,
const LFSU& lfsu,
const X& x,
const LFSV& lfsv, R& r)
const
101 if (entity_is_interior(lfsu))
103 baseop.alpha_volume(eg, lfsu, x, lfsv, r);
107 template<
typename EG,
typename LFSU,
typename X,
typename LFSV,
typename M>
108 void jacobian_volume (
const EG& eg,
const LFSU& lfsu,
const X& x,
const LFSV& lfsv, M& mat)
const
110 if (entity_is_interior(lfsu))
112 baseop.jacobian_volume (eg, lfsu, x, lfsv, mat);
116 template<
typename EG,
typename LFSV,
typename R>
119 if (entity_is_interior(lfsv))
121 baseop.lambda_volume (eg, lfsv, r);
125 template<
typename EG,
typename LFSU,
typename X,
typename LFSV,
typename R>
127 const LFSV& lfsv, R& r)
const
129 if (entity_is_interior(lfsu))
131 baseop.alpha_volume_post_skeleton (eg, lfsu, x, lfsv, r);
135 template<
typename IG,
typename LFSU,
typename X,
typename LFSV,
typename R>
137 const LFSU& lfsu_s,
const X& x_s,
const LFSV& lfsv_s,
140 if (entity_is_interior(lfsu_s))
142 baseop.alpha_boundary (
ig, lfsu_s, x_s, lfsv_s, r_s);
146 template<
typename IG,
typename LFSU,
typename X,
typename LFSV,
typename M>
148 const LFSU& lfsu_s,
const X& x_s,
const LFSV& lfsv_s,
151 if (entity_is_interior(lfsu_s))
153 baseop.jacobian_boundary (
ig, lfsu_s, x_s, lfsv_s, mat_s);
156 template<
typename IG,
typename LFSU,
typename X,
typename LFSV,
typename R>
158 const LFSU& lfsu_s,
const X& x_s,
const LFSV& lfsv_s,
159 const LFSU& lfsu_n,
const X& x_n,
const LFSV& lfsv_n,
160 R& r_s, R& r_n)
const
162 if (entity_is_interior(lfsu_s))
164 baseop.alpha_skeleton (
ig, lfsu_s, x_s, lfsv_s, lfsu_n, x_n, lfsv_n, r_s, r_n);
167 template<
typename IG,
typename LFSU,
typename X,
typename LFSV,
typename M>
169 const LFSU& lfsu_s,
const X& x_s,
const LFSV& lfsv_s,
170 const LFSU& lfsu_n,
const X& x_n,
const LFSV& lfsv_n,
171 M& mat_ss, M& mat_sn,
172 M& mat_ns, M& mat_nn)
const
174 if (entity_is_interior(lfsu_s))
176 baseop.jacobian_skeleton (
ig, lfsu_s, x_s, lfsv_s, lfsu_n, x_n, lfsv_n, mat_ss, mat_sn, mat_ns, mat_nn);
187 template <
typename LFS>
188 bool entity_is_interior (
const LFS& lfs)
const {
191 for (std::size_t i = 0; i < cache.size(); i++)
193 if (subdomain_sum[cache.containerIndex(i)] < 2)
199 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
@ doSkeletonTwoSided
Definition: localoperator_ovlp_region.hh:51
@ doSkipEntity
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:147
void pattern_boundary(const LFSU &lfsu_s, const LFSV &lfsv_s, LocalPattern &pattern_ss) const
Definition: localoperator_ovlp_region.hh:91
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:168
@ doAlphaVolume
Definition: localoperator_ovlp_region.hh:41
void jacobian_volume(const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, M &mat) const
Definition: localoperator_ovlp_region.hh:108
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:136
void alpha_volume(const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, R &r) const
Definition: localoperator_ovlp_region.hh:99
@ doLambdaVolume
Definition: localoperator_ovlp_region.hh:47
bool skip_intersection(const IG &ig) const
Definition: localoperator_ovlp_region.hh:61
void pattern_volume(const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern) const
Definition: localoperator_ovlp_region.hh:67
@ doPatternBoundary
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:126
@ doAlphaSkeleton
Definition: localoperator_ovlp_region.hh:46
void pattern_volume_post_skeleton(const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern) const
Definition: localoperator_ovlp_region.hh:83
@ doSkipIntersection
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:75
@ doAlphaBoundary
Definition: localoperator_ovlp_region.hh:44
@ doAlphaVolumePostSkeleton
Definition: localoperator_ovlp_region.hh:42
void lambda_volume(const EG &eg, const LFSV &lfsv, R &r) const
Definition: localoperator_ovlp_region.hh:117
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:157
bool skip_entity(const EG &eg) const
Definition: localoperator_ovlp_region.hh:55
@ doPatternVolume
Definition: localoperator_ovlp_region.hh:35
@ doPatternSkeleton
Definition: localoperator_ovlp_region.hh:36
void setTime(double t)
Definition: localoperator_ovlp_region.hh:180
@ doLambdaBoundary
Definition: localoperator_ovlp_region.hh:48
@ isLinear
Definition: localoperator_ovlp_region.hh:52
@ doLambdaSkeleton
Definition: localoperator_ovlp_region.hh:49
@ doPatternVolumePostSkeleton
Definition: localoperator_ovlp_region.hh:37
Definition: genericdatahandle.hh:667
Definition: lfsindexcache.hh:979