28#ifndef OPM_TRANSMISSIBILITY_HPP
29#define OPM_TRANSMISSIBILITY_HPP
31#include <dune/common/fvector.hh>
32#include <dune/common/fmatrix.hh>
34#include <opm/grid/common/CartesianIndexMapper.hpp>
35#include <opm/grid/LookUpData.hh>
42#include <unordered_map>
53template<
class Gr
id,
class Gr
idView,
class ElementMapper,
class CartesianIndexMapper,
class Scalar>
56 enum { dimWorld = GridView::dimensionworld };
59 using DimMatrix = Dune::FieldMatrix<Scalar, dimWorld, dimWorld>;
60 using DimVector = Dune::FieldVector<Scalar, dimWorld>;
63 const GridView& gridView,
66 std::function<std::array<double,dimWorld>(
int)>
centroids,
75 {
return permeability_[elemIdx]; }
131 this->update(
true, TransUpdateQuantities::All,
map,
true);
162 void updateFromEclState_(
bool global);
164 void removeNonCartesianTransmissibilities_(
bool removeAll);
168 DimVector faceCenter;
171 unsigned cartElemIdx;
181 const std::array<int, dimWorld>&
cartDims);
187 std::array<std::vector<double>,3>
195 const std::array<std::vector<double>,3>& trans);
197 template <
class Intersection>
198 void computeFaceProperties(
const Intersection& intersection,
202 std::false_type)
const;
204 template <
class Intersection>
205 void computeFaceProperties(
const Intersection& intersection,
209 std::true_type)
const;
237 void applyNncMultreg_(
const std::unordered_map<std::size_t,int>& globalToLocal);
239 void applyEditNncToGridTransHelper_(
const std::unordered_map<std::size_t,int>& globalToLocal,
240 const std::string&
keyword,
const std::vector<NNCdata>&
nncs,
242 const std::function<
void(Scalar&,
const Scalar&)>& apply);
244 void extractPermeability_();
246 void extractPermeability_(
const std::function<
unsigned int(
unsigned int)>&
map);
248 void extractPorosity_();
250 void extractDispersion_();
252 static Scalar computeHalfTrans_(
const DimVector&
areaNormal,
255 const DimMatrix& perm);
257 static Scalar computeHalfDiffusivity_(
const DimVector&
areaNormal,
261 DimVector distanceVector_(
const DimVector& faceCenter,
262 const unsigned&
cellIdx)
const;
264 void applyMultipliers_(Scalar& trans,
266 unsigned cartElemIdx,
269 static void applyNtg_(Scalar& trans,
271 const std::vector<double>&
ntg);
273 std::vector<DimMatrix> permeability_;
274 std::vector<Scalar> porosity_;
275 std::vector<Scalar> dispersion_;
276 std::unordered_map<std::uint64_t, Scalar> trans_;
277 const EclipseState& eclState_;
278 const GridView& gridView_;
279 const CartesianIndexMapper& cartMapper_;
281 std::function<std::array<double,dimWorld>(
int)> centroids_;
282 std::vector<std::array<double,dimWorld>> centroids_cache_;
283 Scalar transmissibilityThreshold_;
284 std::map<std::pair<unsigned, unsigned>, Scalar> transBoundary_;
285 std::map<std::pair<unsigned, unsigned>, Scalar> thermalHalfTransBoundary_;
287 bool enableDiffusivity_;
288 bool enableDispersivity_;
289 bool warnEditNNC_ =
true;
290 std::unordered_map<std::uint64_t, Scalar> thermalHalfTrans_;
291 std::unordered_map<std::uint64_t, Scalar> diffusivity_;
292 std::unordered_map<std::uint64_t, Scalar> dispersivity_;
300 std::pair<std::uint32_t, std::uint32_t> isIdReverse(
const std::uint64_t&
id);
301 std::uint64_t directionalIsId(std::uint32_t
elemIdx1, std::uint32_t
elemIdx2);
Definition GenericThresholdPressure.hpp:40
Definition FlowGenericProblem.hpp:51
Definition Transmissibility.hpp:54
Scalar diffusivity(unsigned elemIdx1, unsigned elemIdx2) const
Return the diffusivity for the intersection between two elements.
Definition Transmissibility_impl.hpp:150
void applyEditNncToGridTrans_(const std::unordered_map< std::size_t, int > &globalToLocal)
Multiplies the grid transmissibilities according to EDITNNC.
Definition Transmissibility_impl.hpp:1167
void applyEditNncrToGridTrans_(const std::unordered_map< std::size_t, int > &globalToLocal)
Resets the grid transmissibilities according to EDITNNCR.
Definition Transmissibility_impl.hpp:1180
Scalar thermalHalfTrans(unsigned insideElemIdx, unsigned outsideElemIdx) const
Return the thermal "half transmissibility" for the intersection between two elements.
Definition Transmissibility_impl.hpp:136
void finishInit(const std::function< unsigned int(unsigned int)> &map={})
Actually compute the transmissibility over a face as a pre-compute step.
Definition Transmissibility.hpp:129
Scalar transmissibilityBoundary(unsigned elemIdx, unsigned boundaryFaceIdx) const
Return the transmissibility for a given boundary segment.
Definition Transmissibility_impl.hpp:129
std::array< std::vector< double >, 3 > createTransmissibilityArrays_(const std::array< bool, 3 > &is_tran)
Creates TRANS{XYZ} arrays for modification by FieldProps data.
Definition Transmissibility_impl.hpp:819
void applyAllZMultipliers_(Scalar &trans, const FaceInfo &inside, const FaceInfo &outside, const TransMult &transMult, const std::array< int, dimWorld > &cartDims)
Apply the Multipliers for the case PINCH(4)==TOPBOT.
Definition Transmissibility_impl.hpp:741
TransUpdateQuantities
Compute all transmissibilities.
Definition Transmissibility.hpp:157
void applyPinchNncToGridTrans_(const std::unordered_map< std::size_t, int > &cartesianToCompressed)
Applies the previous calculate transmissibilities to the NNCs created via PINCH.
Definition Transmissibility_impl.hpp:1057
void resetTransmissibilityFromArrays_(const std::array< bool, 3 > &is_tran, const std::array< std::vector< double >, 3 > &trans)
overwrites calculated transmissibilities
Definition Transmissibility_impl.hpp:901
const DimMatrix & permeability(unsigned elemIdx) const
Return the permeability for an element.
Definition Transmissibility.hpp:74
Scalar transmissibility(unsigned elemIdx1, unsigned elemIdx2) const
Return the transmissibility for the intersection between two elements.
Definition Transmissibility_impl.hpp:122
Scalar dispersivity(unsigned elemIdx1, unsigned elemIdx2) const
Return the dispersivity for the intersection between two elements.
Definition Transmissibility_impl.hpp:160
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition blackoilboundaryratevector.hh:37
constexpr auto getPropValue()
get the value data member of a property
Definition propertysystem.hh:242
Definition Transmissibility.hpp:167