Commit cf94c701 authored by Dennis Gläser's avatar Dennis Gläser Committed by Timo Koch
Browse files

[mpfa][iavol] make other mpfa methods using o-method on the boundaries work again

We now call the Implementation from the o-method interaction volume because we need
to incorporate some terms in the problems with facet coupling.
Todo: Problems using interior interaction volumes that inherit from the o-method
specialization AND use the o-method on the boundaries do not work at the moment. We
would have to tell the o-method the actual implementation somehow introducing a new
template parameter for the implementation.
parent 0055268a
......@@ -97,10 +97,13 @@ public:
template<class TypeTag, class Traits>
class CCMpfaOInteractionVolume : public CCMpfaInteractionVolumeBase<TypeTag, Traits>
{
// The interaction volume implementation has to be friend,
// The interaction volume implementations have to be friend,
// because some methods use the mpfa-o interaction volume as base
friend typename GET_PROP_TYPE(TypeTag, InteractionVolume);
using Implementation = typename GET_PROP_TYPE(TypeTag, InteractionVolume);
friend typename Traits::BoundaryInteractionVolume;
// We assume the actual implementation always to be the boundary-specific implementation
using Implementation = typename Traits::BoundaryInteractionVolume;
using ParentType = CCMpfaInteractionVolumeBase<TypeTag, Traits>;
using Problem = typename GET_PROP_TYPE(TypeTag, Problem);
......
......@@ -43,12 +43,8 @@ class CCMpfaOFpsInteractionVolumeTraits : public CCMpfaOInteractionVolumeTraits<
public:
// Interior boundaries can not yet be handled by the currend o-method fps implementation
// In that case we use the o-interactionvolume, otherwise we use its own interaction volumes at the boundary
// TODO Fix the std::conditional
using BoundaryInteractionVolume = typename CCMpfaOInteractionVolumeTraits<TypeTag>::BoundaryInteractionVolume;
// using BoundaryInteractionVolume = typename std::conditional<GET_PROP_VALUE(TypeTag, EnableInteriorBoundaries),
// typename CCMpfaOInteractionVolumeTraits<TypeTag>::BoundaryInteractionVolume,
// typename CCMpfaInteractionVolumeImplementation<TypeTag, MpfaMethods::oMethodFps>
// >::type;
// TODO Implement this using std::conditional
using BoundaryInteractionVolume = CCMpfaInteractionVolumeImplementation<TypeTag, MpfaMethods::oMethodFps>;
// The local sub-control volume type differs from the standard mpfa-o method
using LocalScvType = CCMpfaOFpsLocalScv<TypeTag>;
......@@ -202,8 +198,7 @@ private:
auto&& localScv = this->localScv_(localScvIdx);
auto&& globalScv = this->fvGeometry_().scv(localScv.globalIndex());
auto&& element = this->localElement_(localScvIdx);
auto D = makeTensor_(getTensor(element, this->elemVolVars_()[globalScv], globalScv));
auto D = makeTensor_(getTensor(this->problem_(), element, this->elemVolVars_()[globalScv], this->fvGeometry_(), globalScv));
// the local finite element basis
const auto& localBasis = feCache_.get(localScv.geometry().type()).localBasis();
......@@ -248,7 +243,7 @@ private:
auto&& localScv = this->localScv_(localScvIdx);
auto&& globalScv = this->fvGeometry_().scv(localScv.globalIndex());
auto&& element = this->localElement_(localScvIdx);;
auto D = makeTensor_(getTensor(element, this->elemVolVars_()[globalScv], globalScv));
auto D = makeTensor_(getTensor(this->problem_(), element, this->elemVolVars_()[globalScv], this->fvGeometry_(), globalScv));
// the local finite element bases of the scvs
const auto& localBasis = feCache_.get(localScv.geometry().type()).localBasis();
......
Supports Markdown
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