61 const Element& element,
62 const FVElementGeometry& fvGeometry,
63 const ElementVolumeVariables& elemVolVars,
64 const SubControlVolumeFace& scvf)
66 const auto geometry = element.geometry();
67 const auto& localBasis = fvGeometry.feLocalBasis();
70 std::vector<ShapeValue> shapeVals;
71 const auto ipLocal = geometry.local(scvf.ipGlobal());
72 jacInvT_ = geometry.jacobianInverseTransposed(ipLocal);
73 localBasis.evaluateJacobian(ipLocal, shapeJacobian_);
74 localBasis.evaluateFunction(ipLocal, shapeVals);
77 shapeValues_.resize(fvGeometry.numScv(), 0.0);
78 if (!scvf.isOnFracture())
79 std::copy(shapeVals.begin(), shapeVals.end(), shapeValues_.begin());
82 const auto thisFacetIdx = scvf.facetIndexInElement();
83 for (
const auto& scv: scvs(fvGeometry))
84 if (scv.isOnFracture() && scv.facetIndexInElement() == thisFacetIdx)
85 shapeValues_[scv.indexInElement()] = shapeVals[scv.localDofIndex()];
89 gradN_.resize(fvGeometry.numScv(), GlobalPosition(0.0));
90 if (!scvf.isOnFracture())
92 for (
const auto& scv: scvs(fvGeometry))
93 if (!scv.isOnFracture())
94 jacInvT_.mv(shapeJacobian_[scv.localDofIndex()][0], gradN_[scv.indexInElement()]);
98 const auto thisFacetIdx = scvf.facetIndexInElement();
101 std::vector<unsigned int> facetLocalDofs;
102 for (
const auto& scv : scvs(fvGeometry))
103 if (scv.isOnFracture() && scv.facetIndexInElement() == thisFacetIdx)
104 facetLocalDofs.push_back(scv.localDofIndex());
106 for (
const auto& scv: scvs(fvGeometry))
109 if (scv.isOnFracture() && scv.facetIndexInElement() == thisFacetIdx)
110 jacInvT_.mv(shapeJacobian_[scv.localDofIndex()][0], gradN_[scv.indexInElement()]);
113 else if (!scv.isOnFracture()
114 && std::find( facetLocalDofs.begin(),
115 facetLocalDofs.end(),
116 scv.localDofIndex() ) == facetLocalDofs.end())
118 jacInvT_.mv(shapeJacobian_[scv.localDofIndex()][0], gradN_[scv.indexInElement()]);