diff --git a/dumux/multidomain/facet/cellcentered/tpfa/darcyslaw.hh b/dumux/multidomain/facet/cellcentered/tpfa/darcyslaw.hh index 56e3ca98e9cbd93cb1ce45d4d6b156e3f7441e40..805a34bd59c64e13eed4d7e9dae16dcb4441e2ac 100644 --- a/dumux/multidomain/facet/cellcentered/tpfa/darcyslaw.hh +++ b/dumux/multidomain/facet/cellcentered/tpfa/darcyslaw.hh @@ -242,7 +242,6 @@ class CCTpfaFacetCouplingDarcysLawImpl<ScalarType, FVGridGeometry, /*isNetwork*/ //! xi factor for the coupling conditions static const Scalar xi = getParamFromGroup<Scalar>(problem.paramGroup(), "FacetCoupling.Xi", 1.0); - static const Scalar oneMinusXi = 1.0 - xi; const auto insideScvIdx = scvf.insideScvIdx(); const auto& insideScv = fvGeometry.scv(insideScvIdx); @@ -275,28 +274,12 @@ class CCTpfaFacetCouplingDarcysLawImpl<ScalarType, FVGridGeometry, /*isNetwork*/ fvGeometry.scv(outsideScvIdx), outsideVolVars.permeability(), outsideVolVars.extrusionFactor()); - const Scalar xiWIn = xi*wIn; - const Scalar xiWOut = xi*wOut; - const Scalar oneMinusXiWIn = oneMinusXi*wIn; - const Scalar oneMinusXiWOut = oneMinusXi*wOut; - // assemble matrices - Dune::FieldMatrix<Scalar, 2, 2> A, B; - A[0][0] = xiWIn+wFacet; - A[0][1] = oneMinusXiWOut; - A[1][0] = oneMinusXiWIn; - A[1][1] = xiWOut-wFacet; + const Scalar factor = wIn * wFacet / ( wIn * wOut * ( 2.0 * xi - 1.0 ) + wFacet * ( xi * ( wIn + wOut ) + wFacet ) ); - B[0][0] = xiWIn; - B[0][1] = oneMinusXiWOut; - B[1][0] = oneMinusXiWIn; - B[1][1] = xiWOut; - - // tij = C(A^-1)B - const Scalar detA = A[0][0]*A[1][1] - A[1][0]*A[0][1]; - tij[Cache::insideTijIdx] = xiWIn - xiWIn*(A[1][1]*B[0][0] - A[0][1]*B[1][0])/detA; - tij[Cache::outsideTijIdx] = -xiWIn*(A[1][1]*B[0][1] - A[0][1]*B[1][1])/detA; - tij[Cache::facetTijIdx] = -xiWIn*wFacet*(A[1][1] + A[0][1])/detA; + tij[Cache::insideTijIdx] = factor * ( wOut * xi + wFacet ); + tij[Cache::outsideTijIdx] = factor * ( wOut * ( 1.0 - xi ) ); + tij[Cache::facetTijIdx] = factor * ( - wOut - wFacet ); } else {