59 const std::optional<Scalar>& alq,
60 const Scalar thp_limit,
66 const SummaryState& summary_state,
67 const Scalar maxPerfPress,
69 const Scalar alq_value,
70 const Scalar thp_limit,
76 const SummaryState& summary_state,
78 const Scalar flo_rel_tol,
79 const int max_iteration,
80 const bool throwOnError,
85 const std::function<Scalar()>& alq_value,
87 const SummaryState& summary_state,
90 template<
class EvalWell>
92 const std::vector<EvalWell>& rates,
94 const SummaryState& summaryState,
100 const SummaryState& summaryState,
101 const Scalar rho)
const;
105 const std::vector<Scalar>& rates,
106 const SummaryState& summaryState)
const;
108 std::optional<Scalar>
111 const std::vector<Scalar>& rates,
113 const SummaryState& summaryState)
const;
115 std::optional<Scalar>
118 const std::vector<Scalar>& rates,
120 const SummaryState& summaryState,
121 const Scalar alq)
const;
123 std::pair<Scalar, Scalar>
126 const SummaryState& summary_state)
const;
130 const std::array<Scalar, 2>& range,
131 Scalar& low, Scalar& high,
132 std::optional<Scalar>& approximate_solution,
138 Scalar& min_thp, Scalar& max_thp);
142 template<
class ErrorPolicy>
143 std::optional<Scalar>
144 computeBhpAtThpLimitInjImpl(
const std::function<std::vector<Scalar>(
const Scalar)>& frates,
145 const SummaryState& summary_state,
147 const Scalar flo_rel_tol,
148 const int max_iteration,
152 std::optional<Scalar>
153 bhpMax(
const std::function<Scalar(
const Scalar)>& fflo,
154 const Scalar bhp_limit,
155 const Scalar maxPerfPress,
156 const Scalar vfp_flo_front,
160 std::optional<Scalar>
161 computeBhpAtThpLimit(
const std::function<std::vector<Scalar>(
const Scalar)>& frates,
162 const std::function<Scalar(
const std::vector<Scalar>)>& fbhp,
163 const std::array<Scalar, 2>& range,
167 Scalar getVfpBhpAdjustment(
const Scalar bph_tab,
const Scalar thp_limit)
const;
170 bool bisectBracket(
const std::function<Scalar(
const Scalar)>& eq,
171 const std::array<Scalar, 2>& range,
172 Scalar& low, Scalar& high,
173 std::optional<Scalar>& approximate_solution,
177 static bool bruteForceBracket(
const std::function<Scalar(
const Scalar)>& eq,
178 const std::array<Scalar, 2>& range,
179 Scalar& low, Scalar& high,
183 Scalar findThpFromBhpIteratively(
const std::function<Scalar(
const Scalar,
const Scalar)>& thp_func,
185 const Scalar thp_limit,
Scalar calculateThpFromBhp(const std::vector< Scalar > &rates, const Scalar bhp, const Scalar rho, const std::optional< Scalar > &alq, const Scalar thp_limit, DeferredLogger &deferred_logger) const
Calculates THP from BHP.
Definition WellBhpThpCalculator.cpp:111
std::optional< Scalar > computeBhpAtThpLimitProd(const std::function< std::vector< Scalar >(const Scalar)> &frates, const SummaryState &summary_state, const Scalar maxPerfPress, const Scalar rho, const Scalar alq_value, const Scalar thp_limit, DeferredLogger &deferred_logger) const
Compute BHP from THP limit for a producer.
Definition WellBhpThpCalculator.cpp:197
void updateThp(const Scalar rho, const std::function< Scalar()> &alq_value, WellState< Scalar, IndexTraits > &well_state, const SummaryState &summary_state, DeferredLogger &deferred_logger) const
Update THP.
Definition WellBhpThpCalculator.cpp:301
static bool bruteForceBracketCommonTHP(const std::function< Scalar(const Scalar)> &eq, const std::array< Scalar, 2 > &range, Scalar &low, Scalar &high, std::optional< Scalar > &approximate_solution, const Scalar &limit, DeferredLogger &deferred_logger)
Find limits using brute-force solver.
Definition WellBhpThpCalculator.cpp:1023
std::optional< Scalar > computeBhpAtThpLimitInj(const std::function< std::vector< Scalar >(const Scalar)> &frates, const SummaryState &summary_state, const Scalar rho, const Scalar flo_rel_tol, const int max_iteration, const bool throwOnError, DeferredLogger &deferred_logger) const
Compute BHP from THP limit for an injector.
Definition WellBhpThpCalculator.cpp:280