Distinguish Background From Effective CTFs
SCON[0] holds the effective connection transmissibility factor, including pressure dependent multipliers such as those arising from rock compaction. This commit distinguishes SCON[0] from SCON[11], with the latter holding the background from geometry and "static" multipliers (WPIMULT, WELPI).
This commit is contained in:
parent
1129e95a16
commit
16ad535f7f
@ -44,7 +44,7 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
|
|||||||
|
|
||||||
namespace SConn {
|
namespace SConn {
|
||||||
enum index : std::vector<float>::size_type {
|
enum index : std::vector<float>::size_type {
|
||||||
ConnTrans = 0, // Connection transmissibility factor
|
EffConnTrans = 0, // Effective connection transmissibility factor (incl. ROCKTAB &c)
|
||||||
Depth = 1, // Connection centre depth
|
Depth = 1, // Connection centre depth
|
||||||
Diameter = 2, // Connection diameter
|
Diameter = 2, // Connection diameter
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
|
|||||||
CFDenom = 6, // Denominator in connection transmissibility
|
CFDenom = 6, // Denominator in connection transmissibility
|
||||||
// factor expression
|
// factor expression
|
||||||
|
|
||||||
item12 = 11, // Connection transmissibility factor
|
ConnTrans = 11, // Connection transmissibility factor
|
||||||
|
|
||||||
SegDistEnd = 20, // Distance to end of connection in segment
|
SegDistEnd = 20, // Distance to end of connection in segment
|
||||||
SegDistStart = 21, // Distance to start of connection in segment
|
SegDistStart = 21, // Distance to start of connection in segment
|
||||||
|
@ -180,7 +180,7 @@ namespace {
|
|||||||
return static_cast<float>(units.from_si(u, x));
|
return static_cast<float>(units.from_si(u, x));
|
||||||
};
|
};
|
||||||
|
|
||||||
sConn[Ix::ConnTrans] =
|
sConn[Ix::EffConnTrans] = sConn[Ix::ConnTrans] =
|
||||||
scprop(M::transmissibility, conn.CF());
|
scprop(M::transmissibility, conn.CF());
|
||||||
|
|
||||||
sConn[Ix::Depth] = scprop(M::length, conn.depth());
|
sConn[Ix::Depth] = scprop(M::length, conn.depth());
|
||||||
@ -193,8 +193,6 @@ namespace {
|
|||||||
|
|
||||||
sConn[Ix::CFDenom] = conn.ctfProperties().peaceman_denom;
|
sConn[Ix::CFDenom] = conn.ctfProperties().peaceman_denom;
|
||||||
|
|
||||||
sConn[Ix::item12] = sConn[Ix::ConnTrans];
|
|
||||||
|
|
||||||
if (conn.attachedToSegment()) {
|
if (conn.attachedToSegment()) {
|
||||||
const auto& [start, end] = *conn.perf_range();
|
const auto& [start, end] = *conn.perf_range();
|
||||||
sConn[Ix::SegDistStart] = scprop(M::length, start);
|
sConn[Ix::SegDistStart] = scprop(M::length, start);
|
||||||
@ -223,8 +221,15 @@ namespace {
|
|||||||
return static_cast<float>(units.from_si(u, x));
|
return static_cast<float>(units.from_si(u, x));
|
||||||
};
|
};
|
||||||
|
|
||||||
sConn[Ix::item12] = sConn[Ix::ConnTrans] =
|
sConn[Ix::EffConnTrans] = sConn[Ix::ConnTrans] =
|
||||||
scprop(M::transmissibility, xconn.trans_factor);
|
scprop(M::transmissibility, xconn.trans_factor);
|
||||||
|
|
||||||
|
// xconn.trans_factor == CTFAC == CF * rock compaction. Divide
|
||||||
|
// out the rock compaction contribution to infer the "real"
|
||||||
|
// connection transmissibility factor. No additional unit
|
||||||
|
// conversion needed since the rock compaction effect (keyword
|
||||||
|
// ROCKTAB) is imparted through a dimensionless multiplier.
|
||||||
|
sConn[Ix::ConnTrans] /= xconn.compact_mult;
|
||||||
}
|
}
|
||||||
} // SConn
|
} // SConn
|
||||||
|
|
||||||
|
@ -502,6 +502,7 @@ END
|
|||||||
c.pressure = 215.0;
|
c.pressure = 215.0;
|
||||||
c.index = connections[i].global_index();
|
c.index = connections[i].global_index();
|
||||||
c.trans_factor = connections[i].CF();
|
c.trans_factor = connections[i].CF();
|
||||||
|
c.compact_mult = 0.875;
|
||||||
|
|
||||||
const auto& global_index = connections[i].global_index();
|
const auto& global_index = connections[i].global_index();
|
||||||
sum_state.update_conn_var("PROD", "CWPR", global_index + 1, qw * (i + 1));
|
sum_state.update_conn_var("PROD", "CWPR", global_index + 1, qw * (i + 1));
|
||||||
@ -543,6 +544,7 @@ END
|
|||||||
c.pressure = 218.0;
|
c.pressure = 218.0;
|
||||||
c.index = connections[i].global_index();
|
c.index = connections[i].global_index();
|
||||||
c.trans_factor = connections[i].CF();
|
c.trans_factor = connections[i].CF();
|
||||||
|
c.compact_mult = 0.987;
|
||||||
|
|
||||||
const auto& global_index = connections[i].global_index();
|
const auto& global_index = connections[i].global_index();
|
||||||
sum_state.update_conn_var("WINJ", "CWIR", global_index+ 1, qw*(i + 1));
|
sum_state.update_conn_var("WINJ", "CWIR", global_index+ 1, qw*(i + 1));
|
||||||
@ -683,12 +685,12 @@ BOOST_AUTO_TEST_CASE(Declared_Connection_Data)
|
|||||||
const auto& sconn = amconn.getSConn();
|
const auto& sconn = amconn.getSConn();
|
||||||
int connNo = 1;
|
int connNo = 1;
|
||||||
auto i0 = (connNo - 1) * ih.nsconz;
|
auto i0 = (connNo - 1) * ih.nsconz;
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::ConnTrans], 2.55826545, 1.0e-5); // PROD - conn 1 : Transmissibility factor
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::EffConnTrans], 2.55826545, 1.0e-5); // PROD - conn 1 : Effective transmissibility factor
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::Depth], 7050., 1.0e-5); // PROD - conn 1 : Centre depth
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::Depth], 7050., 1.0e-5); // PROD - conn 1 : Centre depth
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::Diameter], 0.20, 1.0e-5); // PROD - conn 1 : diameter
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::Diameter], 0.20, 1.0e-5); // PROD - conn 1 : diameter
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::EffectiveKH], 1581.13879, 1.0e-5); // PROD - conn 1 : effective kh-product
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::EffectiveKH], 1581.13879, 1.0e-5); // PROD - conn 1 : effective kh-product
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::CFDenom], 4.37696314, 1.0e-5);
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::CFDenom], 4.37696314, 1.0e-5);
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::item12], 2.55826545, 1.0e-5); // PROD - conn 1 : Transmissibility factor
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::ConnTrans], 2.55826545 / 0.875, 1.0e-5); // PROD - conn 1 : Transmissibility factor
|
||||||
BOOST_CHECK_CLOSE(
|
BOOST_CHECK_CLOSE(
|
||||||
sconn[i0 + Ix::SegDistEnd], 130., 1.0e-5); // PROD - conn 1 : Distance to end of connection in segment
|
sconn[i0 + Ix::SegDistEnd], 130., 1.0e-5); // PROD - conn 1 : Distance to end of connection in segment
|
||||||
BOOST_CHECK_CLOSE(
|
BOOST_CHECK_CLOSE(
|
||||||
@ -698,12 +700,12 @@ BOOST_AUTO_TEST_CASE(Declared_Connection_Data)
|
|||||||
// Well no 2 - WINJ well
|
// Well no 2 - WINJ well
|
||||||
connNo = 3;
|
connNo = 3;
|
||||||
i0 = ih.ncwmax * ih.nsconz + (connNo - 1) * ih.nsconz;
|
i0 = ih.ncwmax * ih.nsconz + (connNo - 1) * ih.nsconz;
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::ConnTrans], 2.55826545, 1.0e-5); // WINJ - conn 3 : Transmissibility factor
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::EffConnTrans], 2.55826545, 1.0e-5); // WINJ - conn 3 : Effective transmissibility factor
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::Depth], 7250., 1.0e-5); // WINJ - conn 3 : Centre depth
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::Depth], 7250., 1.0e-5); // WINJ - conn 3 : Centre depth
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::Diameter], 0.20, 1.0e-5); // WINJ - conn 3 : diameter
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::Diameter], 0.20, 1.0e-5); // WINJ - conn 3 : diameter
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::EffectiveKH], 1581.13879, 1.0e-5); // WINJ - conn 3 : effective kh-product
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::EffectiveKH], 1581.13879, 1.0e-5); // WINJ - conn 3 : effective kh-product
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::CFDenom], 4.37696314, 1.0e-5);
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::CFDenom], 4.37696314, 1.0e-5);
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::item12], 2.55826545, 1.0e-5); // WINJ - conn 3 : Transmissibility factor
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::ConnTrans], 2.55826545 / 0.987, 1.0e-5); // WINJ - conn 3 : Transmissibility factor
|
||||||
BOOST_CHECK_CLOSE(
|
BOOST_CHECK_CLOSE(
|
||||||
sconn[i0 + Ix::SegDistEnd], 0., 1.0e-5); // WINJ - conn 3 : Distance to end of connection in segment
|
sconn[i0 + Ix::SegDistEnd], 0., 1.0e-5); // WINJ - conn 3 : Distance to end of connection in segment
|
||||||
BOOST_CHECK_CLOSE(
|
BOOST_CHECK_CLOSE(
|
||||||
@ -712,12 +714,12 @@ BOOST_AUTO_TEST_CASE(Declared_Connection_Data)
|
|||||||
|
|
||||||
connNo = 4;
|
connNo = 4;
|
||||||
i0 = ih.ncwmax * ih.nsconz + (connNo - 1) * ih.nsconz;
|
i0 = ih.ncwmax * ih.nsconz + (connNo - 1) * ih.nsconz;
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::ConnTrans], 2.55826545, 1.0e-5); // WINJ - conn 4 : Transmissibility factor
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::EffConnTrans], 2.55826545, 1.0e-5); // WINJ - conn 4 : Effective transmissibility factor
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::Depth], 7250., 1.0e-5); // WINJ - conn 4 : Centre depth
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::Depth], 7250., 1.0e-5); // WINJ - conn 4 : Centre depth
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::Diameter], 0.20, 1.0e-5); // WINJ - conn 4 : diameter
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::Diameter], 0.20, 1.0e-5); // WINJ - conn 4 : diameter
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::EffectiveKH], 1581.13879, 1.0e-5); // WINJ - conn 4 : effective kh-product
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::EffectiveKH], 1581.13879, 1.0e-5); // WINJ - conn 4 : effective kh-product
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::CFDenom], 4.37696314, 1.0e-5);
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::CFDenom], 4.37696314, 1.0e-5);
|
||||||
BOOST_CHECK_CLOSE(sconn[i0 + Ix::item12], 2.55826545, 1.0e-5); // WINJ - conn 4 : Transmissibility factor
|
BOOST_CHECK_CLOSE(sconn[i0 + Ix::ConnTrans], 2.55826545 / 0.987, 1.0e-5); // WINJ - conn 4 : Transmissibility factor
|
||||||
BOOST_CHECK_CLOSE(
|
BOOST_CHECK_CLOSE(
|
||||||
sconn[i0 + Ix::SegDistEnd], 0., 1.0e-5); // WINJ - conn 4 : Distance to end of connection in segment
|
sconn[i0 + Ix::SegDistEnd], 0., 1.0e-5); // WINJ - conn 4 : Distance to end of connection in segment
|
||||||
BOOST_CHECK_CLOSE(
|
BOOST_CHECK_CLOSE(
|
||||||
|
Loading…
Reference in New Issue
Block a user