56 enum { dimWorld = GridView::dimensionworld };
59 using DimMatrix = Dune::FieldMatrix<Scalar, dimWorld, dimWorld>;
60 using DimVector = Dune::FieldVector<Scalar, dimWorld>;
63 const GridView& gridView,
64 const CartesianIndexMapper& cartMapper,
66 std::function<std::array<double,dimWorld>(
int)> centroids,
68 bool enableDiffusivity,
69 bool enableDispersivity);
75 {
return permeability_[elemIdx]; }
101 Scalar
thermalHalfTrans(
unsigned insideElemIdx,
unsigned outsideElemIdx)
const;
103 Scalar thermalHalfTransBoundary(
unsigned insideElemIdx,
unsigned boundaryFaceIdx)
const;
108 Scalar
diffusivity(
unsigned elemIdx1,
unsigned elemIdx2)
const;
113 Scalar
dispersivity(
unsigned elemIdx1,
unsigned elemIdx2)
const;
129 void finishInit(
const std::function<
unsigned int(
unsigned int)>& map = {})
131 this->
update(
true, map,
true);
150 void update(
bool global,
const std::function<
unsigned int(
unsigned int)>& map = {},
bool applyNncMultRegT =
false);
153 void updateFromEclState_(
bool global);
155 void removeNonCartesianTransmissibilities_(
bool removeAll);
161 unsigned insideFaceIdx,
162 unsigned outsideFaceIdx,
163 unsigned insideCartElemIdx,
164 unsigned outsideCartElemIdx,
165 const TransMult& transMult,
166 const std::array<int, dimWorld>& cartDims,
173 std::array<std::vector<double>,3>
181 const std::array<std::vector<double>,3>& trans);
183 template <
class Intersection>
184 void computeFaceProperties(
const Intersection& intersection,
189 DimVector& faceCenterInside,
190 DimVector& faceCenterOutside,
191 DimVector& faceAreaNormal,
192 std::false_type)
const;
194 template <
class Intersection>
195 void computeFaceProperties(
const Intersection& intersection,
196 const int insideElemIdx,
197 const int insideFaceIdx,
198 const int outsideElemIdx,
199 const int outsideFaceIdx,
200 DimVector& faceCenterInside,
201 DimVector& faceCenterOutside,
202 DimVector& faceAreaNormal,
203 std::true_type)
const;
217 void applyNncToGridTrans_(
const std::unordered_map<std::size_t,int>& cartesianToCompressed);
225 void applyNncMultreg_(
const std::unordered_map<std::size_t,int>& globalToLocal);
227 void applyEditNncToGridTransHelper_(
const std::unordered_map<std::size_t,int>& globalToLocal,
228 const std::string& keyword,
const std::vector<NNCdata>& nncs,
229 const std::function<KeywordLocation(
const NNCdata&)>& getLocation,
230 const std::function<
void(
double&,
const double&)>& apply);
232 void extractPermeability_();
234 void extractPermeability_(
const std::function<
unsigned int(
unsigned int)>& map);
236 void extractPorosity_();
238 void extractDispersion_();
240 void computeHalfTrans_(Scalar& halfTrans,
241 const DimVector& areaNormal,
243 const DimVector& distance,
244 const DimMatrix& perm)
const;
246 void computeHalfDiffusivity_(Scalar& halfDiff,
247 const DimVector& areaNormal,
248 const DimVector& distance,
249 const Scalar& poro)
const;
251 DimVector distanceVector_(
const DimVector& center,
254 const std::array<std::vector<DimVector>, dimWorld>& axisCentroids)
const;
256 void applyMultipliers_(Scalar& trans,
258 unsigned cartElemIdx,
259 const TransMult& transMult)
const;
261 void applyNtg_(Scalar& trans,
264 const std::vector<double>& ntg)
const;
266 std::vector<DimMatrix> permeability_;
267 std::vector<Scalar> porosity_;
268 std::vector<Scalar> dispersion_;
269 std::unordered_map<std::uint64_t, Scalar> trans_;
270 const EclipseState& eclState_;
271 const GridView& gridView_;
272 const CartesianIndexMapper& cartMapper_;
274 std::function<std::array<double,dimWorld>(
int)> centroids_;
275 Scalar transmissibilityThreshold_;
276 std::map<std::pair<unsigned, unsigned>, Scalar> transBoundary_;
277 std::map<std::pair<unsigned, unsigned>, Scalar> thermalHalfTransBoundary_;
279 bool enableDiffusivity_;
280 bool enableDispersivity_;
281 std::unordered_map<std::uint64_t, Scalar> thermalHalfTrans_;
282 std::unordered_map<std::uint64_t, Scalar> diffusivity_;
283 std::unordered_map<std::uint64_t, Scalar> dispersivity_;
285 const LookUpData<Grid,GridView> lookUpData_;
286 const LookUpCartesianData<Grid,GridView> lookUpCartesianData_;
void applyAllZMultipliers_(Scalar &trans, unsigned insideFaceIdx, unsigned outsideFaceIdx, unsigned insideCartElemIdx, unsigned outsideCartElemIdx, const TransMult &transMult, const std::array< int, dimWorld > &cartDims, bool pinchTop)
Apply the Multipliers for the case PINCH(4)==TOPBOT.
Definition Transmissibility_impl.hpp:727