From 2988b48bd3a7227c31aaf15eafe0611ad8fdc0ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A5rd=20Skaflestad?= Date: Wed, 13 Jun 2012 17:07:56 +0200 Subject: [PATCH] computeFractionalFlow(): Reuse the output array in all intermediate calculations. This eliminates a number of free-store operations and data movements. --- opm/core/utility/miscUtilities.cpp | 12 ++++++------ opm/core/utility/miscUtilitiesBlackoil.cpp | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/opm/core/utility/miscUtilities.cpp b/opm/core/utility/miscUtilities.cpp index 289b68ba..16c59b17 100644 --- a/opm/core/utility/miscUtilities.cpp +++ b/opm/core/utility/miscUtilities.cpp @@ -280,16 +280,16 @@ namespace Opm std::vector& fractional_flows) { const int num_phases = props.numPhases(); - std::vector pc_mobs(cells.size() * num_phases); - computePhaseMobilities(props, cells, saturations, pc_mobs); - fractional_flows.resize(cells.size() * num_phases); - for (size_t i = 0; i < cells.size(); ++i) { + + computePhaseMobilities(props, cells, saturations, fractional_flows); + + for (std::vector::size_type i = 0; i < cells.size(); ++i) { double phase_sum = 0.0; for (int phase = 0; phase < num_phases; ++phase) { - phase_sum += pc_mobs[i * num_phases + phase]; + phase_sum += fractional_flows[i * num_phases + phase]; } for (int phase = 0; phase < num_phases; ++phase) { - fractional_flows[i * num_phases + phase] = pc_mobs[i * num_phases + phase] / phase_sum; + fractional_flows[i * num_phases + phase] /= phase_sum; } } } diff --git a/opm/core/utility/miscUtilitiesBlackoil.cpp b/opm/core/utility/miscUtilitiesBlackoil.cpp index 44e14559..af088e05 100644 --- a/opm/core/utility/miscUtilitiesBlackoil.cpp +++ b/opm/core/utility/miscUtilitiesBlackoil.cpp @@ -206,16 +206,16 @@ namespace Opm std::vector& fractional_flows) { const int num_phases = props.numPhases(); - std::vector pc_mobs(cells.size() * num_phases); - computePhaseMobilities(props, cells, p, z, s, pc_mobs); - fractional_flows.resize(cells.size() * num_phases); - for (size_t i = 0; i < cells.size(); ++i) { + + computePhaseMobilities(props, cells, p, z, s, fractional_flows); + + for (std::vector::size_type i = 0; i < cells.size(); ++i) { double phase_sum = 0.0; for (int phase = 0; phase < num_phases; ++phase) { - phase_sum += pc_mobs[i * num_phases + phase]; + phase_sum += fractional_flows[i * num_phases + phase]; } for (int phase = 0; phase < num_phases; ++phase) { - fractional_flows[i * num_phases + phase] = pc_mobs[i * num_phases + phase] / phase_sum; + fractional_flows[i * num_phases + phase] /= phase_sum; } } }