Merge pull request #1790 from joakim-hove/network-vfp0
When defining branch properties: vfp == 0 should delete branch
This commit is contained in:
commit
6f45df5e93
@ -40,6 +40,7 @@ public:
|
||||
bool has_node(const std::string& name) const;
|
||||
void add_node(Node node);
|
||||
void add_branch(Branch branch);
|
||||
void drop_branch(const std::string& uptree_node, const std::string& downtree_node);
|
||||
const Node& node(const std::string& name) const;
|
||||
const Node& root() const;
|
||||
std::vector<Branch> downtree_branches(const std::string& node) const;
|
||||
|
@ -73,6 +73,20 @@ void ExtNetwork::add_branch(Branch branch)
|
||||
this->m_branches.push_back( std::move(branch) );
|
||||
}
|
||||
|
||||
void ExtNetwork::drop_branch(const std::string& uptree_node, const std::string& downtree_node) {
|
||||
auto downtree_branches = this->downtree_branches( downtree_node );
|
||||
if (downtree_branches.empty()) {
|
||||
auto branch_iter = std::find_if(this->m_branches.begin(), this->m_branches.end(), [&uptree_node, &downtree_node](const Branch& b) { return (b.uptree_node() == uptree_node && b.downtree_node() == downtree_node); });
|
||||
if (branch_iter != this->m_branches.end())
|
||||
this->m_branches.erase( branch_iter );
|
||||
|
||||
this->m_nodes.erase( downtree_node );
|
||||
} else {
|
||||
for (const auto& branch : downtree_branches)
|
||||
this->drop_branch(branch.uptree_node(), branch.downtree_node());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
std::optional<Branch> ExtNetwork::uptree_branch(const std::string& node) const {
|
||||
if (!this->has_node(node))
|
||||
|
@ -3286,6 +3286,9 @@ void Schedule::handleBRANPROP(const DeckKeyword& keyword, std::size_t report_ste
|
||||
const auto& downtree_node = record.getItem<BP::DOWNTREE_NODE>().get<std::string>(0);
|
||||
const auto& uptree_node = record.getItem<BP::UPTREE_NODE>().get<std::string>(0);
|
||||
int vfp_table = record.getItem<BP::VFP_TABLE>().get<int>(0);
|
||||
if (vfp_table == 0)
|
||||
ext_network->drop_branch( uptree_node, downtree_node );
|
||||
else {
|
||||
auto alq_eq = Network::Branch::AlqEqfromString( record.getItem<BP::ALQ_SURFACE_DENSITY>().get<std::string>(0));
|
||||
if (alq_eq == Network::Branch::AlqEQ::ALQ_INPUT) {
|
||||
double alq_value = record.getItem<BP::ALQ>().get<double>(0);
|
||||
@ -3293,6 +3296,7 @@ void Schedule::handleBRANPROP(const DeckKeyword& keyword, std::size_t report_ste
|
||||
} else
|
||||
ext_network->add_branch( Network::Branch(downtree_node, uptree_node, vfp_table, alq_eq));
|
||||
}
|
||||
}
|
||||
this->updateNetwork(ext_network, report_step);
|
||||
}
|
||||
|
||||
|
@ -189,9 +189,20 @@ NODEPROP
|
||||
B1 1* YES NO 1* /
|
||||
C1 1* YES NO 'GROUP' /
|
||||
/
|
||||
|
||||
TSTEP
|
||||
10 /
|
||||
|
||||
BRANPROP
|
||||
-- Downtree Uptree #VFP ALQ
|
||||
C1 PLAT-A 0 1* /
|
||||
/
|
||||
|
||||
|
||||
)";
|
||||
|
||||
auto sched = make_schedule(deck_string);
|
||||
{
|
||||
const auto& network = sched.network(0);
|
||||
const auto& b1 = network.node("B1");
|
||||
BOOST_CHECK(b1.as_choke());
|
||||
@ -225,4 +236,33 @@ NODEPROP
|
||||
|
||||
BOOST_CHECK(network.active());
|
||||
}
|
||||
{
|
||||
const auto& network = sched.network(1);
|
||||
const auto& b1 = network.node("B1");
|
||||
BOOST_CHECK(b1.as_choke());
|
||||
BOOST_CHECK(!b1.add_gas_lift_gas());
|
||||
BOOST_CHECK(b1.name() == b1.target_group());
|
||||
BOOST_CHECK(!b1.terminal_pressure());
|
||||
|
||||
BOOST_CHECK_EQUAL(network.downtree_branches("PLAT-A").size(), 1);
|
||||
for (const auto& b : network.downtree_branches("PLAT-A")) {
|
||||
BOOST_CHECK_EQUAL(b.uptree_node(), "PLAT-A");
|
||||
BOOST_CHECK(b.downtree_node() == "B1");
|
||||
}
|
||||
|
||||
|
||||
const auto& platform_uptree = network.uptree_branch("PLAT-A");
|
||||
BOOST_CHECK(!platform_uptree.has_value());
|
||||
|
||||
const auto& B1_uptree = network.uptree_branch("B1");
|
||||
BOOST_CHECK(B1_uptree.has_value());
|
||||
BOOST_CHECK_EQUAL(B1_uptree->downtree_node(), "B1");
|
||||
BOOST_CHECK_EQUAL(B1_uptree->uptree_node(), "PLAT-A");
|
||||
|
||||
BOOST_CHECK_THROW( network.uptree_branch("C1"), std::out_of_range);
|
||||
BOOST_CHECK_THROW( network.node("C1"), std::out_of_range);
|
||||
|
||||
BOOST_CHECK(network.active());
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user