mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Merge pull request #518 from blattms/communicate-rock-properties
Communicate rock properties, too.
This commit is contained in:
@@ -119,6 +119,7 @@ namespace Opm
|
|||||||
/// Constructor for properties on a subgrid
|
/// Constructor for properties on a subgrid
|
||||||
BlackoilPropsAdFromDeck::BlackoilPropsAdFromDeck(const BlackoilPropsAdFromDeck& props,
|
BlackoilPropsAdFromDeck::BlackoilPropsAdFromDeck(const BlackoilPropsAdFromDeck& props,
|
||||||
const int number_of_cells)
|
const int number_of_cells)
|
||||||
|
: rock_(number_of_cells)
|
||||||
{
|
{
|
||||||
const int original_size = props.cellPvtRegionIdx_.size();
|
const int original_size = props.cellPvtRegionIdx_.size();
|
||||||
if (number_of_cells > original_size) {
|
if (number_of_cells > original_size) {
|
||||||
@@ -131,7 +132,6 @@ BlackoilPropsAdFromDeck::BlackoilPropsAdFromDeck(const BlackoilPropsAdFromDeck&
|
|||||||
materialLawManager_ = props.materialLawManager_;
|
materialLawManager_ = props.materialLawManager_;
|
||||||
|
|
||||||
// Copy properties that do not depend on the postion within the grid.
|
// Copy properties that do not depend on the postion within the grid.
|
||||||
rock_ = props.rock_;
|
|
||||||
satprops_ = props.satprops_;
|
satprops_ = props.satprops_;
|
||||||
phase_usage_ = props.phase_usage_;
|
phase_usage_ = props.phase_usage_;
|
||||||
props_ = props.props_;
|
props_ = props.props_;
|
||||||
|
|||||||
@@ -231,6 +231,7 @@ private:
|
|||||||
BlackoilState& recvState_;
|
BlackoilState& recvState_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// \brief A DUNE data handle for sending the blackoil properties
|
||||||
class BlackoilPropsDataHandle
|
class BlackoilPropsDataHandle
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -242,12 +243,13 @@ public:
|
|||||||
BlackoilPropsDataHandle(const BlackoilPropsAdFromDeck& sendProps,
|
BlackoilPropsDataHandle(const BlackoilPropsAdFromDeck& sendProps,
|
||||||
BlackoilPropsAdFromDeck& recvProps)
|
BlackoilPropsAdFromDeck& recvProps)
|
||||||
: sendProps_(sendProps), recvProps_(recvProps),
|
: sendProps_(sendProps), recvProps_(recvProps),
|
||||||
size_(1)
|
size_(11) // full permeability tensor 9 + porosity 1 + pvt region index
|
||||||
{
|
{
|
||||||
// satOilMax might be non empty. In this case we will need to send it, too.
|
// satOilMax might be non empty. In this case we will need to send it, too.
|
||||||
// It has to have the same size as the cellPvtRegionIdx_
|
|
||||||
if ( sendProps.satOilMax_.size()>0 )
|
if ( sendProps.satOilMax_.size()>0 )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// satOilMax has to have the same size as the cellPvtRegionIdx_
|
||||||
recvProps_.satOilMax_.resize(recvProps_.cellPvtRegionIdx_.size(),
|
recvProps_.satOilMax_.resize(recvProps_.cellPvtRegionIdx_.size(),
|
||||||
-std::numeric_limits<double>::max());
|
-std::numeric_limits<double>::max());
|
||||||
++size_;
|
++size_;
|
||||||
@@ -264,7 +266,6 @@ public:
|
|||||||
{
|
{
|
||||||
if ( T::codimension == 0)
|
if ( T::codimension == 0)
|
||||||
{
|
{
|
||||||
// We only send cellPvtRegionIdx_, and maybe satOilMax_
|
|
||||||
return size_;
|
return size_;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -278,7 +279,12 @@ public:
|
|||||||
assert( T::codimension == 0);
|
assert( T::codimension == 0);
|
||||||
|
|
||||||
buffer.write(sendProps_.cellPvtRegionIndex()[e.index()]);
|
buffer.write(sendProps_.cellPvtRegionIndex()[e.index()]);
|
||||||
if ( size_ > 1 ) {
|
for( std::size_t i = 0; i < 9; ++i )
|
||||||
|
{
|
||||||
|
buffer.write(sendProps_.rock_.permeability_[e.index()*9+i]);
|
||||||
|
}
|
||||||
|
buffer.write(sendProps_.rock_.porosity_[e.index()]);
|
||||||
|
if ( size_ > 11 ) {
|
||||||
buffer.write(sendProps_.satOilMax_[e.index()]);
|
buffer.write(sendProps_.satOilMax_[e.index()]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -290,7 +296,15 @@ public:
|
|||||||
double val;
|
double val;
|
||||||
buffer.read(val);
|
buffer.read(val);
|
||||||
recvProps_.cellPvtRegionIdx_[e.index()]=val;
|
recvProps_.cellPvtRegionIdx_[e.index()]=val;
|
||||||
if ( size_ > 1 ) {
|
for( std::size_t i = 0; i < 9; ++i )
|
||||||
|
{
|
||||||
|
buffer.read(val);
|
||||||
|
recvProps_.rock_.permeability_[e.index()*9+i]
|
||||||
|
= val;
|
||||||
|
}
|
||||||
|
buffer.read(val);
|
||||||
|
recvProps_.rock_.porosity_[e.index()]=val;
|
||||||
|
if ( size_ > 11 ) {
|
||||||
buffer.read(val);
|
buffer.read(val);
|
||||||
recvProps_.satOilMax_[e.index()]=val;
|
recvProps_.satOilMax_[e.index()]=val;
|
||||||
}
|
}
|
||||||
@@ -302,8 +316,12 @@ public:
|
|||||||
private:
|
private:
|
||||||
/// \brief The properties where we will retieve the values to be sent.
|
/// \brief The properties where we will retieve the values to be sent.
|
||||||
const BlackoilPropsAdFromDeck& sendProps_;
|
const BlackoilPropsAdFromDeck& sendProps_;
|
||||||
// \brief The properties where we will store the received values.
|
/// \brief The properties where we will store the received values.
|
||||||
BlackoilPropsAdFromDeck& recvProps_;
|
BlackoilPropsAdFromDeck& recvProps_;
|
||||||
|
/// \brief The number of entries to send.
|
||||||
|
///
|
||||||
|
/// full permeability tensor 9 + porosity 1 + pvt region index and
|
||||||
|
/// in some case satOilMax
|
||||||
std::size_t size_;
|
std::size_t size_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user