62 const InteractionVolume& iv,
63 const FVElementGeometry& fvGeometry)
65 const auto& scv = iv.localScv(ivLocalScvIdx);
69 const auto& firstGridScvf = fvGeometry.scvf(iv.localScvf(scv.localScvfIndex(0)).gridScvfIndex());
70 const auto& secondGridScvf = fvGeometry.scvf(iv.localScvf(scv.localScvfIndex(1)).gridScvfIndex());
72 typename MLGTraits::template CornerStorage<dim, dimWorld>::Type corners;
73 corners[0] = fvGeometry.scv( scv.gridScvIndex() ).center();
74 corners[1] = fvGeometry.facetCorner(firstGridScvf);
75 corners[2] = fvGeometry.facetCorner(secondGridScvf);
76 corners[3] = fvGeometry.vertexCorner(secondGridScvf);
79 typename LocalScvType::LocalBasis basis;
80 basis[0] = corners[1] - corners[0];
81 basis[1] = corners[2] - corners[0];
82 if ( !fvGeometry.gridGeometry().mpfaHelper().isRightHandSystem(basis) )
83 swap(corners[1], corners[2]);
85 return ScvGeometry(Dune::GeometryTypes::cube(ScvGeometry::mydimension), corners);
88 DUNE_THROW(Dune::NotImplemented,
"Mpfa-o local scv geometry computation in 3d");
90 DUNE_THROW(Dune::InvalidStateException,
"Mpfa only works in 2d or 3d");