My Project
Loading...
Searching...
No Matches
BlackoilModelParametersEbos.hpp
1/*
2 Copyright 2015 SINTEF ICT, Applied Mathematics.
3
4 This file is part of the Open Porous Media project (OPM).
5
6 OPM is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 OPM is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with OPM. If not, see <http://www.gnu.org/licenses/>.
18*/
19
20#ifndef OPM_BLACKOILMODELPARAMETERS_EBOS_HEADER_INCLUDED
21#define OPM_BLACKOILMODELPARAMETERS_EBOS_HEADER_INCLUDED
22
23#include <opm/models/discretization/common/fvbaseproperties.hh>
24
25#include <opm/models/utils/basicproperties.hh>
26#include <opm/models/utils/parametersystem.hh>
27#include <opm/models/utils/propertysystem.hh>
28
29#include <opm/simulators/flow/SubDomain.hpp>
30
31#include <stdexcept>
32#include <string>
33
34namespace Opm::Properties {
35
36namespace TTag {
38}
39
40template<class TypeTag, class MyTypeTag>
42 using type = UndefinedProperty;
43};
44template<class TypeTag, class MyTypeTag>
45struct DbhpMaxRel {
46 using type = UndefinedProperty;
47};
48template<class TypeTag, class MyTypeTag>
50 using type = UndefinedProperty;
51};
52template<class TypeTag, class MyTypeTag>
54 using type = UndefinedProperty;
55};
56template<class TypeTag, class MyTypeTag>
60template<class TypeTag, class MyTypeTag>
62 using type = UndefinedProperty;
63};
64template<class TypeTag, class MyTypeTag>
66 using type = UndefinedProperty;
67};
68template<class TypeTag, class MyTypeTag>
70 using type = UndefinedProperty;
71};
72template<class TypeTag, class MyTypeTag>
74 using type = UndefinedProperty;
75};
76template<class TypeTag, class MyTypeTag>
80template<class TypeTag, class MyTypeTag>
82 using type = UndefinedProperty;
83};
84template<class TypeTag, class MyTypeTag>
86 using type = UndefinedProperty;
87};
88template<class TypeTag, class MyTypeTag>
92template<class TypeTag, class MyTypeTag>
94 using type = UndefinedProperty;
95};
96template<class TypeTag, class MyTypeTag>
100template<class TypeTag, class MyTypeTag>
104template<class TypeTag, class MyTypeTag>
108template<class TypeTag, class MyTypeTag>
112template<class TypeTag, class MyTypeTag>
116template<class TypeTag, class MyTypeTag>
120// parameters for multisegment wells
121template<class TypeTag, class MyTypeTag>
125template<class TypeTag, class MyTypeTag>
129template<class TypeTag, class MyTypeTag>
131 using type = UndefinedProperty;
132};
133template<class TypeTag, class MyTypeTag>
135 using type = UndefinedProperty;
136};
137template<class TypeTag, class MyTypeTag>
139 using type = UndefinedProperty;
140};
141template<class TypeTag, class MyTypeTag>
143 using type = UndefinedProperty;
144};
145template<class TypeTag, class MyTypeTag>
147 using type = UndefinedProperty;
148};
149template<class TypeTag, class MyTypeTag>
153template<class TypeTag, class MyTypeTag>
157template<class TypeTag, class MyTypeTag>
159 using type = UndefinedProperty;
160};
161template<class TypeTag, class MyTypeTag>
163 using type = UndefinedProperty;
164};
165template<class TypeTag, class MyTypeTag>
169template<class TypeTag, class MyTypeTag>
173template<class TypeTag, class MyTypeTag>
177template<class TypeTag, class MyTypeTag>
181// Network solver parameters
182template<class TypeTag, class MyTypeTag>
186template<class TypeTag, class MyTypeTag>
188 using type = UndefinedProperty;
189};
190template<class TypeTag, class MyTypeTag>
192 using type = UndefinedProperty;
193};
194template<class TypeTag, class MyTypeTag>
196 using type = UndefinedProperty;
197};
198template<class TypeTag, class MyTypeTag>
202template<class TypeTag, class MyTypeTag>
206template<class TypeTag, class MyTypeTag>
210template<class TypeTag, class MyTypeTag>
214template<class TypeTag, class MyTypeTag>
216 using type = UndefinedProperty;
217};
218template<class TypeTag, class MyTypeTag>
222template<class TypeTag, class MyTypeTag>
226template<class TypeTag, class MyTypeTag>
230template<class TypeTag>
231struct DbhpMaxRel<TypeTag, TTag::FlowModelParameters> {
232 using type = GetPropType<TypeTag, Scalar>;
233 static constexpr type value = 1.0;
234};
235template<class TypeTag>
236struct DwellFractionMax<TypeTag, TTag::FlowModelParameters> {
237 using type = GetPropType<TypeTag, Scalar>;
238 static constexpr type value = 0.2;
239};
240template<class TypeTag>
241struct MaxResidualAllowed<TypeTag, TTag::FlowModelParameters> {
242 using type = GetPropType<TypeTag, Scalar>;
243 static constexpr type value = 1e7;
244};
245template<class TypeTag>
246struct RelaxedMaxPvFraction<TypeTag, TTag::FlowModelParameters> {
247 using type = GetPropType<TypeTag, Scalar>;
248 static constexpr type value = 0.03;
249};
250template<class TypeTag>
251struct ToleranceMb<TypeTag, TTag::FlowModelParameters> {
252 using type = GetPropType<TypeTag, Scalar>;
253 static constexpr type value = 1e-6;
254};
255template<class TypeTag>
256struct ToleranceCnv<TypeTag, TTag::FlowModelParameters> {
257 using type = GetPropType<TypeTag, Scalar>;
258 static constexpr type value = 1e-2;
259};
260template<class TypeTag>
261struct ToleranceCnvRelaxed<TypeTag, TTag::FlowModelParameters> {
262 using type = GetPropType<TypeTag, Scalar>;
263 static constexpr type value = 1;
264};
265template<class TypeTag>
266struct ToleranceWells<TypeTag, TTag::FlowModelParameters> {
267 using type = GetPropType<TypeTag, Scalar>;
268 static constexpr type value = 1e-4;
269};
270template<class TypeTag>
271struct ToleranceWellControl<TypeTag, TTag::FlowModelParameters> {
272 using type = GetPropType<TypeTag, Scalar>;
273 static constexpr type value = 1e-7;
274};
275template<class TypeTag>
276struct MaxWelleqIter<TypeTag, TTag::FlowModelParameters> {
277 static constexpr int value = 30;
278};
279template<class TypeTag>
280struct UseMultisegmentWell<TypeTag, TTag::FlowModelParameters> {
281 static constexpr bool value = true;
282};
283template<class TypeTag>
284struct MaxSinglePrecisionDays<TypeTag, TTag::FlowModelParameters> {
285 using type = GetPropType<TypeTag, Scalar>;
286 static constexpr type value = 20.0;
287};
288template<class TypeTag>
289struct MinStrictCnvIter<TypeTag, TTag::FlowModelParameters> {
290 static constexpr int value = 0;
291};
292template<class TypeTag>
293struct SolveWelleqInitially<TypeTag, TTag::FlowModelParameters> {
294 static constexpr bool value = true;
295};
296template<class TypeTag>
297struct UpdateEquationsScaling<TypeTag, TTag::FlowModelParameters> {
298 static constexpr bool value = false;
299};
300template<class TypeTag>
301struct UseUpdateStabilization<TypeTag, TTag::FlowModelParameters> {
302 static constexpr bool value = true;
303};
304template<class TypeTag>
305struct MatrixAddWellContributions<TypeTag, TTag::FlowModelParameters> {
306 static constexpr bool value = false;
307};
308template<class TypeTag>
309struct TolerancePressureMsWells<TypeTag, TTag::FlowModelParameters> {
310 using type = GetPropType<TypeTag, Scalar>;
311 static constexpr type value = 0.01*1e5;
312};
313template<class TypeTag>
314struct MaxPressureChangeMsWells<TypeTag, TTag::FlowModelParameters> {
315 using type = GetPropType<TypeTag, Scalar>;
316 static constexpr type value = 10*1e5;
317};
318template<class TypeTag>
319struct MaxNewtonIterationsWithInnerWellIterations<TypeTag, TTag::FlowModelParameters> {
320 static constexpr int value = 8;
321};
322template<class TypeTag>
323struct MaxInnerIterMsWells<TypeTag, TTag::FlowModelParameters> {
324 static constexpr int value = 100;
325};
326template<class TypeTag>
327struct MaxInnerIterWells<TypeTag, TTag::FlowModelParameters> {
328 static constexpr int value = 50;
329};
330template<class TypeTag>
331struct ShutUnsolvableWells<TypeTag, TTag::FlowModelParameters> {
332 static constexpr bool value = true;
333};
334template<class TypeTag>
335struct AlternativeWellRateInit<TypeTag, TTag::FlowModelParameters> {
336 static constexpr bool value = true;
337};
338template<class TypeTag>
339struct StrictOuterIterWells<TypeTag, TTag::FlowModelParameters> {
340 static constexpr int value = 6;
341};
342template<class TypeTag>
343struct StrictInnerIterWells<TypeTag, TTag::FlowModelParameters> {
344 static constexpr int value = 40;
345};
346template<class TypeTag>
347struct RegularizationFactorWells<TypeTag, TTag::FlowModelParameters> {
348 using type = GetPropType<TypeTag, Scalar>;
349 static constexpr type value = 100;
350};
351template<class TypeTag>
352struct EnableWellOperabilityCheck<TypeTag, TTag::FlowModelParameters> {
353 static constexpr bool value = true;
354};
355template<class TypeTag>
356struct EnableWellOperabilityCheckIter<TypeTag, TTag::FlowModelParameters> {
357 static constexpr bool value = false;
358};
359template<class TypeTag>
360struct RelaxedWellFlowTol<TypeTag, TTag::FlowModelParameters> {
361 using type = GetPropType<TypeTag, Scalar>;
362 static constexpr type value = 1e-3;
363};
364template<class TypeTag>
365struct RelaxedPressureTolMsw<TypeTag, TTag::FlowModelParameters> {
366 using type = GetPropType<TypeTag, Scalar>;
367 static constexpr type value = 1.0e4;
368};
369template<class TypeTag>
370struct MaximumNumberOfWellSwitches<TypeTag, TTag::FlowModelParameters> {
371 static constexpr int value = 3;
372};
373template<class TypeTag>
374struct UseAverageDensityMsWells<TypeTag, TTag::FlowModelParameters> {
375 static constexpr bool value = false;
376};
377template<class TypeTag>
378struct LocalWellSolveControlSwitching<TypeTag, TTag::FlowModelParameters> {
379 static constexpr bool value = false;
380};
381
382// Network solver parameters
383template<class TypeTag>
384struct NetworkMaxStrictIterations<TypeTag, TTag::FlowModelParameters> {
385 static constexpr int value = 100;
386};
387template<class TypeTag>
388struct NetworkMaxIterations<TypeTag, TTag::FlowModelParameters> {
389 static constexpr int value = 200;
390};
391template<class TypeTag>
392struct NonlinearSolver<TypeTag, TTag::FlowModelParameters> {
393 static constexpr auto value = "newton";
394};
395template<class TypeTag>
396struct LocalSolveApproach<TypeTag, TTag::FlowModelParameters> {
397 static constexpr auto value = "jacobi";
398};
399template<class TypeTag>
400struct MaxLocalSolveIterations<TypeTag, TTag::FlowModelParameters> {
401 static constexpr int value = 20;
402};
403template<class TypeTag>
404struct LocalToleranceScalingMb<TypeTag, TTag::FlowModelParameters> {
405 using type = GetPropType<TypeTag, Scalar>;
406 static constexpr type value = 1.0;
407};
408template<class TypeTag>
409struct LocalToleranceScalingCnv<TypeTag, TTag::FlowModelParameters> {
410 using type = GetPropType<TypeTag, Scalar>;
411 static constexpr type value = 0.01;
412};
413template<class TypeTag>
414struct NlddNumInitialNewtonIter<TypeTag, TTag::FlowModelParameters> {
415 using type = int;
416 static constexpr auto value = type{1};
417};
418template<class TypeTag>
419struct NumLocalDomains<TypeTag, TTag::FlowModelParameters> {
420 using type = int;
421 static constexpr auto value = 0;
422};
423template<class TypeTag>
424struct LocalDomainsPartitioningImbalance<TypeTag, TTag::FlowModelParameters> {
426 static constexpr auto value = type{1.03};
427};
428template<class TypeTag>
429struct LocalDomainsPartitioningMethod<TypeTag, TTag::FlowModelParameters> {
430 static constexpr auto value = "zoltan";
431};
432template<class TypeTag>
433struct LocalDomainsOrderingMeasure<TypeTag, TTag::FlowModelParameters> {
434 static constexpr auto value = "pressure";
435};
436// if openMP is available, determine the number threads per process automatically.
437#if _OPENMP
438template<class TypeTag>
439struct ThreadsPerProcess<TypeTag, TTag::FlowModelParameters> {
440 static constexpr int value = -1;
441};
442#endif
443
444} // namespace Opm::Properties
445
446namespace Opm
447{
449 template <class TypeTag>
451 {
452 private:
454
455 public:
464 double relaxed_max_pv_fraction_;
474 // TODO: it might need to distinguish between rate control and pressure control later
480
483
486
489
492
495
498
501
504
507
510
514
517
520
523
526
533
535 std::string deck_file_name_;
536
539
544
547
550
553
556
559
561 std::string nonlinear_solver_;
563 DomainSolveApproach local_solve_approach_{DomainSolveApproach::Jacobi};
564
565 int max_local_solve_iterations_;
566
567 double local_tolerance_scaling_mb_;
568 double local_tolerance_scaling_cnv_;
569
570 int nldd_num_initial_newton_iter_{1};
571 int num_local_domains_{0};
572 double local_domain_partition_imbalance_{1.03};
573 std::string local_domain_partition_method_;
574 DomainOrderingMeasure local_domain_ordering_{DomainOrderingMeasure::AveragePressure};
575
578 {
579 dbhp_max_rel_= EWOMS_GET_PARAM(TypeTag, Scalar, DbhpMaxRel);
580 dwell_fraction_max_ = EWOMS_GET_PARAM(TypeTag, Scalar, DwellFractionMax);
581 max_residual_allowed_ = EWOMS_GET_PARAM(TypeTag, Scalar, MaxResidualAllowed);
582 relaxed_max_pv_fraction_ = EWOMS_GET_PARAM(TypeTag, Scalar, RelaxedMaxPvFraction);
583 tolerance_mb_ = EWOMS_GET_PARAM(TypeTag, Scalar, ToleranceMb);
584 tolerance_cnv_ = EWOMS_GET_PARAM(TypeTag, Scalar, ToleranceCnv);
585 tolerance_cnv_relaxed_ = EWOMS_GET_PARAM(TypeTag, Scalar, ToleranceCnvRelaxed);
586 tolerance_wells_ = EWOMS_GET_PARAM(TypeTag, Scalar, ToleranceWells);
587 tolerance_well_control_ = EWOMS_GET_PARAM(TypeTag, Scalar, ToleranceWellControl);
588 max_welleq_iter_ = EWOMS_GET_PARAM(TypeTag, int, MaxWelleqIter);
589 use_multisegment_well_ = EWOMS_GET_PARAM(TypeTag, bool, UseMultisegmentWell);
590 tolerance_pressure_ms_wells_ = EWOMS_GET_PARAM(TypeTag, Scalar, TolerancePressureMsWells);
591 relaxed_tolerance_flow_well_ = EWOMS_GET_PARAM(TypeTag, Scalar, RelaxedWellFlowTol);
592 relaxed_tolerance_pressure_ms_well_ = EWOMS_GET_PARAM(TypeTag, Scalar, RelaxedPressureTolMsw);
593 max_pressure_change_ms_wells_ = EWOMS_GET_PARAM(TypeTag, Scalar, MaxPressureChangeMsWells);
594 max_inner_iter_ms_wells_ = EWOMS_GET_PARAM(TypeTag, int, MaxInnerIterMsWells);
595 strict_inner_iter_wells_ = EWOMS_GET_PARAM(TypeTag, int, StrictInnerIterWells);
596 strict_outer_iter_wells_ = EWOMS_GET_PARAM(TypeTag, int, StrictOuterIterWells);
597 regularization_factor_wells_ = EWOMS_GET_PARAM(TypeTag, Scalar, RegularizationFactorWells);
598 max_niter_inner_well_iter_ = EWOMS_GET_PARAM(TypeTag, int, MaxNewtonIterationsWithInnerWellIterations);
599 shut_unsolvable_wells_ = EWOMS_GET_PARAM(TypeTag, bool, ShutUnsolvableWells);
600 max_inner_iter_wells_ = EWOMS_GET_PARAM(TypeTag, int, MaxInnerIterWells);
601 maxSinglePrecisionTimeStep_ = EWOMS_GET_PARAM(TypeTag, Scalar, MaxSinglePrecisionDays) *24*60*60;
602 min_strict_cnv_iter_ = EWOMS_GET_PARAM(TypeTag, int, MinStrictCnvIter);
603 solve_welleq_initially_ = EWOMS_GET_PARAM(TypeTag, bool, SolveWelleqInitially);
604 update_equations_scaling_ = EWOMS_GET_PARAM(TypeTag, bool, UpdateEquationsScaling);
605 use_update_stabilization_ = EWOMS_GET_PARAM(TypeTag, bool, UseUpdateStabilization);
606 matrix_add_well_contributions_ = EWOMS_GET_PARAM(TypeTag, bool, MatrixAddWellContributions);
607 check_well_operability_ = EWOMS_GET_PARAM(TypeTag, bool, EnableWellOperabilityCheck);
608 check_well_operability_iter_ = EWOMS_GET_PARAM(TypeTag, bool, EnableWellOperabilityCheckIter);
609 max_number_of_well_switches_ = EWOMS_GET_PARAM(TypeTag, int, MaximumNumberOfWellSwitches);
610 use_average_density_ms_wells_ = EWOMS_GET_PARAM(TypeTag, bool, UseAverageDensityMsWells);
611 local_well_solver_control_switching_ = EWOMS_GET_PARAM(TypeTag, bool, LocalWellSolveControlSwitching);
612 nonlinear_solver_ = EWOMS_GET_PARAM(TypeTag, std::string, NonlinearSolver);
613 std::string approach = EWOMS_GET_PARAM(TypeTag, std::string, LocalSolveApproach);
614 if (approach == "jacobi") {
615 local_solve_approach_ = DomainSolveApproach::Jacobi;
616 } else if (approach == "gauss-seidel") {
617 local_solve_approach_ = DomainSolveApproach::GaussSeidel;
618 } else {
619 throw std::runtime_error("Invalid domain solver approach '" + approach + "' specified.");
620 }
621
622 max_local_solve_iterations_ = EWOMS_GET_PARAM(TypeTag, int, MaxLocalSolveIterations);
623 local_tolerance_scaling_mb_ = EWOMS_GET_PARAM(TypeTag, double, LocalToleranceScalingMb);
624 local_tolerance_scaling_cnv_ = EWOMS_GET_PARAM(TypeTag, double, LocalToleranceScalingCnv);
625 nldd_num_initial_newton_iter_ = EWOMS_GET_PARAM(TypeTag, int, NlddNumInitialNewtonIter);
626 num_local_domains_ = EWOMS_GET_PARAM(TypeTag, int, NumLocalDomains);
627 local_domain_partition_imbalance_ = std::max(1.0, EWOMS_GET_PARAM(TypeTag, double, LocalDomainsPartitioningImbalance));
628 local_domain_partition_method_ = EWOMS_GET_PARAM(TypeTag, std::string, LocalDomainsPartitioningMethod);
629 deck_file_name_ = EWOMS_GET_PARAM(TypeTag, std::string, EclDeckFileName);
630 network_max_strict_iterations_ = EWOMS_GET_PARAM(TypeTag, int, NetworkMaxStrictIterations);
631 network_max_iterations_ = EWOMS_GET_PARAM(TypeTag, int, NetworkMaxIterations);
632 std::string measure = EWOMS_GET_PARAM(TypeTag, std::string, LocalDomainsOrderingMeasure);
633 if (measure == "residual") {
634 local_domain_ordering_ = DomainOrderingMeasure::Residual;
635 } else if (measure == "pressure") {
636 local_domain_ordering_ = DomainOrderingMeasure::AveragePressure;
637 } else {
638 throw std::runtime_error("Invalid domain ordering '" + measure + "' specified.");
639 }
640 }
641
642 static void registerParameters()
643 {
644 EWOMS_REGISTER_PARAM(TypeTag, Scalar, DbhpMaxRel, "Maximum relative change of the bottom-hole pressure in a single iteration");
645 EWOMS_REGISTER_PARAM(TypeTag, Scalar, DwellFractionMax, "Maximum absolute change of a well's volume fraction in a single iteration");
646 EWOMS_REGISTER_PARAM(TypeTag, Scalar, MaxResidualAllowed, "Absolute maximum tolerated for residuals without cutting the time step size");
647 EWOMS_REGISTER_PARAM(TypeTag, Scalar, RelaxedMaxPvFraction, "The fraction of the pore volume of the reservoir "
648 "where the volumetric error (CNV) may be voilated during strict Newton iterations.");
649 EWOMS_REGISTER_PARAM(TypeTag, Scalar, ToleranceMb, "Tolerated mass balance error relative to total mass present");
650 EWOMS_REGISTER_PARAM(TypeTag, Scalar, ToleranceCnv, "Local convergence tolerance (Maximum of local saturation errors)");
651 EWOMS_REGISTER_PARAM(TypeTag, Scalar, ToleranceCnvRelaxed, "Relaxed local convergence tolerance that applies for iterations after the iterations with the strict tolerance");
652 EWOMS_REGISTER_PARAM(TypeTag, Scalar, ToleranceWells, "Well convergence tolerance");
653 EWOMS_REGISTER_PARAM(TypeTag, Scalar, ToleranceWellControl, "Tolerance for the well control equations");
654 EWOMS_REGISTER_PARAM(TypeTag, int, MaxWelleqIter, "Maximum number of iterations to determine solution the well equations");
655 EWOMS_REGISTER_PARAM(TypeTag, bool, UseMultisegmentWell, "Use the well model for multi-segment wells instead of the one for single-segment wells");
656 EWOMS_REGISTER_PARAM(TypeTag, Scalar, TolerancePressureMsWells, "Tolerance for the pressure equations for multi-segment wells");
657 EWOMS_REGISTER_PARAM(TypeTag, Scalar, RelaxedWellFlowTol, "Relaxed tolerance for the well flow residual");
658 EWOMS_REGISTER_PARAM(TypeTag, Scalar, RelaxedPressureTolMsw, "Relaxed tolerance for the MSW pressure solution");
659 EWOMS_REGISTER_PARAM(TypeTag, Scalar, MaxPressureChangeMsWells, "Maximum relative pressure change for a single iteration of the multi-segment well model");
660 EWOMS_REGISTER_PARAM(TypeTag, int, MaxInnerIterMsWells, "Maximum number of inner iterations for multi-segment wells");
661 EWOMS_REGISTER_PARAM(TypeTag, int, StrictInnerIterWells, "Number of inner well iterations with strict tolerance");
662 EWOMS_REGISTER_PARAM(TypeTag, int, StrictOuterIterWells, "Number of newton iterations for which wells are checked with strict tolerance");
663 EWOMS_REGISTER_PARAM(TypeTag, int, MaxNewtonIterationsWithInnerWellIterations, "Maximum newton iterations with inner well iterations");
664 EWOMS_REGISTER_PARAM(TypeTag, bool, ShutUnsolvableWells, "Shut unsolvable wells");
665 EWOMS_REGISTER_PARAM(TypeTag, int, MaxInnerIterWells, "Maximum number of inner iterations for standard wells");
666 EWOMS_REGISTER_PARAM(TypeTag, bool, AlternativeWellRateInit, "Use alternative well rate initialization procedure");
667 EWOMS_REGISTER_PARAM(TypeTag, Scalar, RegularizationFactorWells, "Regularization factor for wells");
668 EWOMS_REGISTER_PARAM(TypeTag, Scalar, MaxSinglePrecisionDays, "Maximum time step size where single precision floating point arithmetic can be used solving for the linear systems of equations");
669 EWOMS_REGISTER_PARAM(TypeTag, int, MinStrictCnvIter, "Minimum number of Newton iterations before relaxed tolerances can be used for the CNV convergence criterion");
670 EWOMS_REGISTER_PARAM(TypeTag, bool, SolveWelleqInitially, "Fully solve the well equations before each iteration of the reservoir model");
671 EWOMS_REGISTER_PARAM(TypeTag, bool, UpdateEquationsScaling, "Update scaling factors for mass balance equations during the run");
672 EWOMS_REGISTER_PARAM(TypeTag, bool, UseUpdateStabilization, "Try to detect and correct oscillations or stagnation during the Newton method");
673 EWOMS_REGISTER_PARAM(TypeTag, bool, MatrixAddWellContributions, "Explicitly specify the influences of wells between cells in the Jacobian and preconditioner matrices");
674 EWOMS_REGISTER_PARAM(TypeTag, bool, EnableWellOperabilityCheck, "Enable the well operability checking");
675 EWOMS_REGISTER_PARAM(TypeTag, bool, EnableWellOperabilityCheckIter, "Enable the well operability checking during iterations");
676 EWOMS_REGISTER_PARAM(TypeTag, int, MaximumNumberOfWellSwitches, "Maximum number of times a well can switch to the same control");
677 EWOMS_REGISTER_PARAM(TypeTag, bool, UseAverageDensityMsWells, "Approximate segment densitities by averaging over segment and its outlet");
678 EWOMS_REGISTER_PARAM(TypeTag, bool, LocalWellSolveControlSwitching, "Allow control switching during local well solutions");
679 EWOMS_REGISTER_PARAM(TypeTag, int, NetworkMaxStrictIterations, "Maximum iterations in network solver before relaxing tolerance");
680 EWOMS_REGISTER_PARAM(TypeTag, int, NetworkMaxIterations, "Maximum number of iterations in the network solver before giving up");
681 EWOMS_REGISTER_PARAM(TypeTag, std::string, NonlinearSolver, "Choose nonlinear solver. Valid choices are newton or nldd.");
682 EWOMS_REGISTER_PARAM(TypeTag, std::string, LocalSolveApproach, "Choose local solve approach. Valid choices are jacobi and gauss-seidel");
683 EWOMS_REGISTER_PARAM(TypeTag, int, MaxLocalSolveIterations, "Max iterations for local solves with NLDD nonlinear solver.");
684 EWOMS_REGISTER_PARAM(TypeTag, Scalar, LocalToleranceScalingMb, "Set lower than 1.0 to use stricter convergence tolerance for local solves.");
685 EWOMS_REGISTER_PARAM(TypeTag, Scalar, LocalToleranceScalingCnv, "Set lower than 1.0 to use stricter convergence tolerance for local solves.");
686 EWOMS_REGISTER_PARAM(TypeTag, int, NlddNumInitialNewtonIter, "Number of initial global Newton iterations when running the NLDD nonlinear solver.");
687 EWOMS_REGISTER_PARAM(TypeTag, int, NumLocalDomains, "Number of local domains for NLDD nonlinear solver.");
688 EWOMS_REGISTER_PARAM(TypeTag, Scalar, LocalDomainsPartitioningImbalance, "Subdomain partitioning imbalance tolerance. 1.03 is 3 percent imbalance.");
689 EWOMS_REGISTER_PARAM(TypeTag, std::string, LocalDomainsPartitioningMethod, "Subdomain partitioning method. "
690 "Allowed values are 'zoltan', 'simple', and the name of a partition file ending with '.partition'.");
691 EWOMS_REGISTER_PARAM(TypeTag, std::string, LocalDomainsOrderingMeasure, "Subdomain ordering measure. "
692 "Allowed values are 'pressure' and 'residual'.");
693 }
694 };
695} // namespace Opm
696
697#endif // OPM_BLACKOILMODELPARAMETERS_EBOS_HEADER_INCLUDED
Definition AquiferInterface.hpp:35
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition BlackoilPhases.hpp:27
DomainOrderingMeasure
Measure to use for domain ordering.
Definition SubDomain.hpp:37
DomainSolveApproach
Solver approach for NLDD.
Definition SubDomain.hpp:31
Solver parameters for the BlackoilModel.
Definition BlackoilModelParametersEbos.hpp:451
double tolerance_cnv_relaxed_
Relaxed local convergence tolerance (can be used when iter >= min_strict_cnv_iter_ && cnvViolatedPV <...
Definition BlackoilModelParametersEbos.hpp:470
int max_niter_inner_well_iter_
Maximum newton iterations with inner well iterations.
Definition BlackoilModelParametersEbos.hpp:500
double dbhp_max_rel_
Max relative change in bhp in single iteration.
Definition BlackoilModelParametersEbos.hpp:457
double tolerance_wells_
Well convergence tolerance.
Definition BlackoilModelParametersEbos.hpp:472
bool shut_unsolvable_wells_
Whether to shut unsolvable well.
Definition BlackoilModelParametersEbos.hpp:503
int max_inner_iter_ms_wells_
Maximum inner iteration number for ms wells.
Definition BlackoilModelParametersEbos.hpp:488
bool matrix_add_well_contributions_
Whether to add influences of wells between cells to the matrix and preconditioner matrix.
Definition BlackoilModelParametersEbos.hpp:538
std::string nonlinear_solver_
Nonlinear solver type: newton or nldd.
Definition BlackoilModelParametersEbos.hpp:561
int network_max_iterations_
Maximum number of iterations in the network solver before giving up.
Definition BlackoilModelParametersEbos.hpp:558
bool solve_welleq_initially_
Solve well equation initially.
Definition BlackoilModelParametersEbos.hpp:519
bool use_update_stabilization_
Try to detect oscillation or stagnation.
Definition BlackoilModelParametersEbos.hpp:525
double tolerance_pressure_ms_wells_
Tolerance for the pressure equations for multisegment wells.
Definition BlackoilModelParametersEbos.hpp:477
int network_max_strict_iterations_
Maximum number of iterations in the network solver before relaxing tolerance.
Definition BlackoilModelParametersEbos.hpp:555
std::string deck_file_name_
The file name of the deck.
Definition BlackoilModelParametersEbos.hpp:535
DomainSolveApproach local_solve_approach_
'jacobi' and 'gauss-seidel' supported.
Definition BlackoilModelParametersEbos.hpp:563
double tolerance_cnv_
Local convergence tolerance (max of local saturation errors).
Definition BlackoilModelParametersEbos.hpp:468
bool update_equations_scaling_
Update scaling factors for mass balance equations.
Definition BlackoilModelParametersEbos.hpp:522
bool use_average_density_ms_wells_
Whether to approximate segment densities by averaging over segment and its outlet.
Definition BlackoilModelParametersEbos.hpp:549
double relaxed_tolerance_flow_well_
Relaxed tolerance for for the well flow residual.
Definition BlackoilModelParametersEbos.hpp:479
double tolerance_mb_
Relative mass balance tolerance (total mass balance error).
Definition BlackoilModelParametersEbos.hpp:466
double relaxed_tolerance_pressure_ms_well_
Relaxed tolerance for the MSW pressure solution.
Definition BlackoilModelParametersEbos.hpp:482
double max_pressure_change_ms_wells_
Maximum pressure change over an iteratio for ms wells.
Definition BlackoilModelParametersEbos.hpp:485
bool check_well_operability_
Whether to check well operability.
Definition BlackoilModelParametersEbos.hpp:541
int min_strict_cnv_iter_
Minimum number of Newton iterations before we can use relaxed CNV convergence criterion.
Definition BlackoilModelParametersEbos.hpp:516
BlackoilModelParametersEbos()
Construct from user parameters or defaults.
Definition BlackoilModelParametersEbos.hpp:577
bool use_multisegment_well_
Whether to use MultisegmentWell to handle multisegment wells it is something temporary before the mul...
Definition BlackoilModelParametersEbos.hpp:532
double max_residual_allowed_
Absolute max limit for residuals.
Definition BlackoilModelParametersEbos.hpp:461
int strict_outer_iter_wells_
Newton iteration where wells are stricly convergent.
Definition BlackoilModelParametersEbos.hpp:494
double tolerance_well_control_
Tolerance for the well control equations.
Definition BlackoilModelParametersEbos.hpp:475
double maxSinglePrecisionTimeStep_
Tolerance for time step in seconds where single precision can be used for solving for the Jacobian.
Definition BlackoilModelParametersEbos.hpp:513
int strict_inner_iter_wells_
Strict inner iteration number for wells.
Definition BlackoilModelParametersEbos.hpp:491
int max_number_of_well_switches_
Maximum number of times a well can switch to the same controt.
Definition BlackoilModelParametersEbos.hpp:546
double regularization_factor_wells_
Regularization factor for wells.
Definition BlackoilModelParametersEbos.hpp:497
bool local_well_solver_control_switching_
Whether to allow control switching during local well solutions.
Definition BlackoilModelParametersEbos.hpp:552
double dwell_fraction_max_
Max absolute change in well volume fraction in single iteration.
Definition BlackoilModelParametersEbos.hpp:459
bool check_well_operability_iter_
Whether to check well operability during iterations.
Definition BlackoilModelParametersEbos.hpp:543
int max_inner_iter_wells_
Maximum inner iteration number for standard wells.
Definition BlackoilModelParametersEbos.hpp:506
int max_welleq_iter_
Maximum iteration number of the well equation solution.
Definition BlackoilModelParametersEbos.hpp:509
Definition BlackoilModelParametersEbos.hpp:166
Definition BlackoilModelParametersEbos.hpp:45
Definition BlackoilModelParametersEbos.hpp:49
Definition BlackoilModelParametersEbos.hpp:41
Definition BlackoilModelParametersEbos.hpp:117
Definition BlackoilModelParametersEbos.hpp:113
Definition BlackoilModelParametersEbos.hpp:227
Definition BlackoilModelParametersEbos.hpp:219
Definition BlackoilModelParametersEbos.hpp:223
Definition BlackoilModelParametersEbos.hpp:195
Definition BlackoilModelParametersEbos.hpp:207
Definition BlackoilModelParametersEbos.hpp:203
Definition BlackoilModelParametersEbos.hpp:178
Definition BlackoilModelParametersEbos.hpp:109
Definition BlackoilModelParametersEbos.hpp:130
Definition BlackoilModelParametersEbos.hpp:162
Definition BlackoilModelParametersEbos.hpp:199
Definition BlackoilModelParametersEbos.hpp:154
Definition BlackoilModelParametersEbos.hpp:126
Definition BlackoilModelParametersEbos.hpp:53
Definition BlackoilModelParametersEbos.hpp:89
Definition BlackoilModelParametersEbos.hpp:81
Definition BlackoilModelParametersEbos.hpp:170
Definition BlackoilModelParametersEbos.hpp:93
Definition BlackoilModelParametersEbos.hpp:187
Definition BlackoilModelParametersEbos.hpp:183
Definition BlackoilModelParametersEbos.hpp:211
Definition BlackoilModelParametersEbos.hpp:191
Definition BlackoilModelParametersEbos.hpp:215
Definition BlackoilModelParametersEbos.hpp:150
Definition BlackoilModelParametersEbos.hpp:57
Definition BlackoilModelParametersEbos.hpp:146
Definition BlackoilModelParametersEbos.hpp:138
Definition BlackoilModelParametersEbos.hpp:158
Definition BlackoilModelParametersEbos.hpp:97
Definition BlackoilModelParametersEbos.hpp:134
Definition BlackoilModelParametersEbos.hpp:142
Definition BlackoilModelParametersEbos.hpp:37
Definition BlackoilModelParametersEbos.hpp:69
Definition BlackoilModelParametersEbos.hpp:65
Definition BlackoilModelParametersEbos.hpp:61
Definition BlackoilModelParametersEbos.hpp:122
Definition BlackoilModelParametersEbos.hpp:77
Definition BlackoilModelParametersEbos.hpp:73
Definition BlackoilModelParametersEbos.hpp:101
Definition BlackoilModelParametersEbos.hpp:174
Definition BlackoilModelParametersEbos.hpp:85
Definition BlackoilModelParametersEbos.hpp:105