Commit Graph

1733 Commits

Author SHA1 Message Date
Atgeirr Flø Rasmussen
c7e6070d31 Correctly override NOSIM. 2016-06-30 15:30:49 +02:00
Atgeirr Flø Rasmussen
86b66863b4 Merge pull request from qilicun/format-step-output
Format step output
2016-06-30 09:19:54 +02:00
Liu Ming
d3e6a657cd Initial well iterations as a special number, output it if it is valid. 2016-06-30 09:04:44 +08:00
Liu Ming
136839bd20 fix warnings. 2016-06-29 16:42:43 +08:00
Joakim Hove
09f22f370a Will look for param: 'nosim' and override deck. 2016-06-29 08:03:38 +02:00
Liu Ming
e6930df28c make assemble method return IterationReport. 2016-06-28 16:20:33 +08:00
Atgeirr Flø Rasmussen
baeab02bd6 Adapt to changed updateWellControls() signature. 2016-06-28 15:50:50 +08:00
Markus Blatt
79670b1c29 Prevent signed-unsigned-comparison warning. 2016-06-28 15:50:50 +08:00
Markus Blatt
c7cca46b2c Adds missing parallel reduction to euclidianNorm for multiple components 2016-06-28 15:50:50 +08:00
Markus Blatt
72d0b8123b Fixes the parallel Euclidian product for multiple phases.
This is used to compute the Euclidian product for the saturations.
Thes are ordered in an interleaved manner (all saturations for cell
with index 0, the all for index 1, ...). Up to now the implementation
assumed a different ordering: blockwise (all saturations for phase 0 first,
then all saturations phase 1, ...).
With this commit the computation uses the right assumption.
2016-06-28 15:50:50 +08:00
Markus Blatt
302d881557 Removed trailing underscore for local variable. 2016-06-28 15:50:50 +08:00
Markus Blatt
b4feb28389 Make numWellVars work for null well pointers. 2016-06-28 15:50:50 +08:00
Markus Blatt
1a1797a061 Set wellsActive to false for null well pointers. 2016-06-28 15:50:50 +08:00
Markus Blatt
68f9180a65 Allow access to wells pointer for wells.
Using &stdwells.wells() throws an assertion for null pointers
without -DNDEBUG, but was used nevertheless. That prevented running
models without wells.
2016-06-28 15:50:50 +08:00
Markus Blatt
227b7f49b7 Do not store number of phases in StandardWells.
The wells pointer might be null and we need to access its number of
phases in the constructor to store it. With this commit we prevent that
storage and simply ask the well struct whenever we need the number of
phases. Of course the code using it needs to check that there are wells
but that is done in most parts of the opm-simulators currently
(MultiSegmentWells and Solvent are/might be an exception).
2016-06-28 15:50:50 +08:00
Markus Blatt
f0cdacc7a0 Fix handling of no wells in WellStateFullyImplicitBlackoil.hpp
In that case we cannot call numPhases() on the wells as it produces
a floating point exception. As we do not use that information in this case
anyway, we simply use -1 instead to prevent the call.
2016-06-28 15:50:50 +08:00
Atgeirr Flø Rasmussen
6572aeed5e Add sequential models for black oil.
This commit adds sequential solvers, including a simulator variant
using them (flow_sequential.cpp) with an integration test (running
SPE1, same as for fully implicit).

The sequential code is capable of running several (but not all) test
cases without tuning or special parameters, but reducing ds_max a bit
(from default 0.2 to say 0.1) helps with transport solver
convergence. The Norne model runs fine (esp. with a little tuning). A
parameter iterate_to_fully_implicit (defaults to false) is available,
when set the simulator will iterate with alternating pressure and
transport solves towards the fully implicit solution. Although that
takes a lot extra time it serves as a correctness check.

Performance is not competitive with fully implicit at this point:
essentially both the pressure and transport models inherit the fully
implicit model and do a lot of double (or triple) work. The point has
been to establish a proof of concept and baseline for further
experiments, without disturbing the base model too much (or at all, if
possible).

Changes to existing code has been minimized by merging most such
changes as smaller PRs already, the only remaining such change is to
NewtonIterationBlackoilInterleaved. Admittedly, that code (to solve
the pressure system with AMG) is not ideal because it duplicates
similar code in CPRPreconditioner.hpp and is not parallel. I propose
to address this later by refactoring the "solve elliptic system" code
from CPRPreconditioner into a separate class that can be used also
from here
2016-06-28 15:50:50 +08:00
Atgeirr Flø Rasmussen
2c50e208dd Clone the Wells pointer for output use later. 2016-06-28 15:50:50 +08:00
Tor Harald Sandve
9bfb3f909e Allow for 2 phase initialization using EQUIL 2016-06-28 15:50:50 +08:00
Markus Blatt
4c9d359638 Print all well switching in parallel.
As for each well only one process is responsible, the output process
does not see all wells. Ergo some well switching information was never
printed in a parallel run.

Therefore with this commit the well switching
message is printed regardless on which process it appears.
2016-06-28 15:50:50 +08:00
Liu Ming
ad01934670 initial IterationReport. 2016-06-28 15:48:20 +08:00
Liu Ming
4000582952 use only one ostringstream. 2016-06-28 15:00:58 +08:00
Liu Ming
c6586d36c8 return IterationReport for assemble and solver well eq methods. 2016-06-28 14:37:48 +08:00
Liu Ming
9bf934363c output iterations depends on conditions. 2016-06-28 13:45:20 +08:00
Atgeirr Flø Rasmussen
d2300e79e4 Merge pull request from blattms/fix-euclidian-norm
Fixes the parallel Euclidian product for multiple phases.
2016-06-28 00:25:46 +02:00
Atgeirr Flø Rasmussen
85fdb20c4e Adapt to changed updateWellControls() signature. 2016-06-27 16:52:45 +02:00
Atgeirr Flø Rasmussen
5e18aab106 Merge pull request from blattms/fix-wells-for-null-pointers
Fix wells for null pointers
2016-06-27 16:24:01 +02:00
Atgeirr Flø Rasmussen
bcf210c03e Merge pull request from blattms/print-all-well-switching-in-parallel
Print all well switching in parallel.
2016-06-27 16:22:02 +02:00
Markus Blatt
b76887ca0b Prevent signed-unsigned-comparison warning. 2016-06-27 15:42:07 +02:00
Markus Blatt
6c69b2fd99 Adds missing parallel reduction to euclidianNorm for multiple components 2016-06-27 15:33:54 +02:00
Markus Blatt
9149c6ad13 Fixes the parallel Euclidian product for multiple phases.
This is used to compute the Euclidian product for the saturations.
Thes are ordered in an interleaved manner (all saturations for cell
with index 0, the all for index 1, ...). Up to now the implementation
assumed a different ordering: blockwise (all saturations for phase 0 first,
then all saturations phase 1, ...).
With this commit the computation uses the right assumption.
2016-06-27 15:33:54 +02:00
Atgeirr Flø Rasmussen
4d834ee371 Merge pull request from blattms/fix-wellstate-for-no-wells
Fix handling of no wells in WellStateFullyImplicitBlackoil.hpp
2016-06-27 14:54:48 +02:00
Markus Blatt
90132a3bc5 Removed trailing underscore for local variable. 2016-06-27 14:40:14 +02:00
Markus Blatt
a1832f2e5e Make numWellVars work for null well pointers. 2016-06-27 13:06:16 +02:00
Markus Blatt
f04eec04ba Set wellsActive to false for null well pointers. 2016-06-27 13:05:37 +02:00
Markus Blatt
c20620534a Allow access to wells pointer for wells.
Using &stdwells.wells() throws an assertion for null pointers
without -DNDEBUG, but was used nevertheless. That prevented running
models without wells.
2016-06-27 13:03:30 +02:00
Markus Blatt
9a7b77af9c Do not store number of phases in StandardWells.
The wells pointer might be null and we need to access its number of
phases in the constructor to store it. With this commit we prevent that
storage and simply ask the well struct whenever we need the number of
phases. Of course the code using it needs to check that there are wells
but that is done in most parts of the opm-simulators currently
(MultiSegmentWells and Solvent are/might be an exception).
2016-06-27 12:14:17 +02:00
Markus Blatt
5ed788ce6f Fix handling of no wells in WellStateFullyImplicitBlackoil.hpp
In that case we cannot call numPhases() on the wells as it produces
a floating point exception. As we do not use that information in this case
anyway, we simply use -1 instead to prevent the call.
2016-06-27 11:57:04 +02:00
Atgeirr Flø Rasmussen
80b8b5f12f Merge pull request from atgeirr/sequential
Experimental sequential solvers
2016-06-27 11:38:13 +02:00
Atgeirr Flø Rasmussen
7489f15ee9 Add sequential models for black oil.
This commit adds sequential solvers, including a simulator variant
using them (flow_sequential.cpp) with an integration test (running
SPE1, same as for fully implicit).

The sequential code is capable of running several (but not all) test
cases without tuning or special parameters, but reducing ds_max a bit
(from default 0.2 to say 0.1) helps with transport solver
convergence. The Norne model runs fine (esp. with a little tuning). A
parameter iterate_to_fully_implicit (defaults to false) is available,
when set the simulator will iterate with alternating pressure and
transport solves towards the fully implicit solution. Although that
takes a lot extra time it serves as a correctness check.

Performance is not competitive with fully implicit at this point:
essentially both the pressure and transport models inherit the fully
implicit model and do a lot of double (or triple) work. The point has
been to establish a proof of concept and baseline for further
experiments, without disturbing the base model too much (or at all, if
possible).

Changes to existing code has been minimized by merging most such
changes as smaller PRs already, the only remaining such change is to
NewtonIterationBlackoilInterleaved. Admittedly, that code (to solve
the pressure system with AMG) is not ideal because it duplicates
similar code in CPRPreconditioner.hpp and is not parallel. I propose
to address this later by refactoring the "solve elliptic system" code
from CPRPreconditioner into a separate class that can be used also
from here
2016-06-27 10:28:09 +02:00
Atgeirr Flø Rasmussen
c1e5a64329 Merge pull request from totto82/fix_2p_equil_init
Allow for 2 phase initialization using EQUIL
2016-06-24 14:42:54 +02:00
Atgeirr Flø Rasmussen
e7c70ddb71 Clone the Wells pointer for output use later. 2016-06-21 12:00:10 +02:00
Liu Ming
c2285c720d output date in step output. 2016-06-21 11:30:01 +08:00
Liu Ming
5e1e0d3711 initial wellIterations members. 2016-06-21 10:01:13 +08:00
Liu Ming
922490a9d8 Merge remote-tracking branch 'remotes/opm/master' into format-step-output 2016-06-21 09:28:30 +08:00
Liu Ming
0dfe945f25 output new step messages. 2016-06-21 09:28:08 +08:00
Liu Ming
66b8a2379b write residuals to PRT file. 2016-06-21 09:27:19 +08:00
Liu Ming
b14ebe7616 return well iterations. 2016-06-21 08:35:44 +08:00
Liu Ming
969f6f1d1b return well iteration from simulators. 2016-06-21 08:35:33 +08:00
Atgeirr Flø Rasmussen
82d0c81c13 Merge pull request from atgeirr/add-store-fluxes
Changes to well model for supporting sequential approach.
2016-06-20 22:46:35 +02:00