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;
190 #endif //DUNE_PDELAB_BACKEND_ISTL_GENEO_LOCALOPERATOR_OVLP_REGION_HH