74 const InteractionVolume& iv,
75 const FVElementGeometry& fvGeometry)
77 const auto& scv = iv.localScv(ivLocalScvIdx);
81 const auto& firstGridScvf = fvGeometry.scvf(iv.localScvf(scv.localScvfIndex(0)).gridScvfIndex());
82 const auto& secondGridScvf = fvGeometry.scvf(iv.localScvf(scv.localScvfIndex(1)).gridScvfIndex());
84 typename MLGTraits::template CornerStorage<dim, dimWorld>::Type corners;
85 corners[0] = fvGeometry.scv( scv.gridScvIndex() ).center();
86 corners[1] = firstGridScvf.facetCorner();
87 corners[2] = secondGridScvf.facetCorner();
88 corners[3] = secondGridScvf.vertexCorner();
91 typename LocalScvType::LocalBasis basis;
92 basis[0] = corners[1] - corners[0];
93 basis[1] = corners[2] - corners[0];
94 if ( !fvGeometry.gridGeometry().mpfaHelper().isRightHandSystem(basis) )
95 swap(corners[1], corners[2]);
97 return ScvGeometry(Dune::GeometryTypes::cube(ScvGeometry::mydimension), corners);
100 DUNE_THROW(Dune::NotImplemented,
"Mpfa-o local scv geometry computation in 3d");
102 DUNE_THROW(Dune::InvalidStateException,
"Mpfa only works in 2d or 3d");