opm-simulators/opm/simulators/wells/FractionCalculator.hpp
Paul 9d735b8d6e add group target calculation
added temporary output

mainly rebasing

rebasing

some further attempts

fixed target calculations

remove some case specific choices

clean up

some clean up

generalised code for calculating target rate in groupControlledWells

small rebase fix

<double> replaced by <Scalar>

<double> replaced by <Scalar> (2)
2024-12-19 12:11:00 +00:00

81 lines
2.7 KiB
C++

/*
Copyright 2019 Norce.
This file is part of the Open Porous Media project (OPM).
OPM is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OPM is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OPM. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef OPM_FRACTION_CALCULATOR_HEADER_INCLUDED
#define OPM_FRACTION_CALCULATOR_HEADER_INCLUDED
#include <opm/input/eclipse/Schedule/Group/GuideRate.hpp>
#include <string>
namespace Opm {
template<class Scalar> class GroupState;
struct PhaseUsage;
class Schedule;
template<class Scalar> class WellState;
}
namespace Opm::WGHelpers {
template<class Scalar>
class FractionCalculator
{
public:
FractionCalculator(const Schedule& schedule,
const WellState<Scalar>& well_state,
const GroupState<Scalar>& group_state,
const SummaryState& summary_state,
const int report_step,
const GuideRate* guide_rate,
const GuideRateModel::Target target,
const PhaseUsage& pu,
const bool is_producer,
const Phase injection_phase);
Scalar fraction(const std::string& name,
const std::string& control_group_name,
const bool always_include_this);
Scalar localFraction(const std::string& name,
const std::string& always_included_child);
private:
std::string parent(const std::string& name);
Scalar guideRateSum(const Group& group,
const std::string& always_included_child);
Scalar guideRate(const std::string& name,
const std::string& always_included_child);
int groupControlledWells(const std::string& group_name,
const std::string& always_included_child);
GuideRate::RateVector getGroupRateVector(const std::string& group_name);
const Schedule& schedule_;
const WellState<Scalar>& well_state_;
const GroupState<Scalar>& group_state_;
const SummaryState& summary_state_;
int report_step_;
const GuideRate* guide_rate_;
GuideRateModel::Target target_;
const PhaseUsage& pu_;
bool is_producer_;
Phase injection_phase_;
};
} // namespace Opm::WGHelpers
#endif // OPM_FRACTION_CALCULATOR_HEADER_INCLUDED