Commit Graph
100 Commits
Author SHA1 Message Date
Markus Blatt 8cafb0e92a Make MPI calls in gatherConvergenceReport with void* instead of const void*
Fixes compilation of PR #1612 with open-mpi 1.6.5.
Compiler complained about not being able to transform const void* to void*
as needed by MPI.
2018-11-15 09:30:51 +00:00
Markus Blatt 9f2f6705bc Merge pull request #1564 from dr-robertk/PR/fix-compile-dune-master
[bugfix][ISTLSolverEbos] make compile with current dune master.
2018-09-24 07:25:30 +02:00
Markus Blatt 5aa07fca69 Remove more dead code from the ISTLSolver.hpp fork for ebos.
These functions are also not used.
2018-09-21 16:15:32 +02:00
Markus Blatt abddcb74d3 Merge branch 'fix_build' into fix-issue-1574-and-more
It removes some dead code that appeared during the fork of
ISTLSolver.hpp for ebos.
2018-09-21 15:49:39 +02:00
Markus Blatt 2dd5a3d15c Fix compilation issue of flow_legacy without UMFPack.
The problem was only present if UMFPack was not found and therefore
FLOW_SUPPORT_AMG was defined to true. In that case we experienced compile
errors in a source branch that would never be executed. Therefore we remove
the code there and throw an exception.
2018-09-21 15:07:54 +02:00
Markus Blatt 8455c0457b ParallelFileMerger: Remove old local regex and fileWaringRegex_ instead 2018-09-05 16:42:13 +02:00
Markus Blatt 5aab0dfb7b Really only warn about CASENAME.[0-9]+.[A-Z]+.
Previously we did warn about files not starting with CASENAME.
2018-09-05 16:06:36 +02:00
Markus Blatt 07bc4396ab Let ParallelFileMerger only warn about CASENAME.[0-9]*.EXT files.
Previously the regex issued warning for all files containing ".[0-9]*." in the name
in the output directory. That was too general and created more warnings than we wanted.
2018-09-05 16:06:36 +02:00
Markus Blatt 0863f665aa [bugfix] Make parallel file merge work again for any --output-dir.
This fixes fallout from the merge of PR #1512. Since then the
ParallelFileMerger was always given the current directory even if
another output directory was requested. This resulted in
CASENAME.<procid>.<ext> files in that directory never being merged and removed.
Now the ParallelFileMerger gets the output directory path again.
2018-09-05 14:03:00 +02:00
Markus Blatt 9a692b2d09 Improvements to MILU help strings 2018-08-30 18:22:17 +02:00
Markus Blatt 324cb70d3e Renamed MIluVariant to MiluVariant to correct --m-ilu-variant parameter.
It should be --milu-variant and is it now. Maybe the parameter system
could be a bit smart and detect consecutive upper case letters and treat
them correctly.
2018-08-30 18:02:24 +02:00
Markus Blatt 8482b435eb Added clarifying comment on definedness of const_cast 2018-08-01 18:06:45 +02:00
Markus Blatt f850f04c93 Prevent unnecessary copies of vectors using references. 2018-08-01 15:22:07 +02:00
Markus Blatt 458cd8768f Rely less on implicit includes of header files 2018-08-01 15:20:45 +02:00
Markus Blatt 019835b123 Added support for red-black ordering to ILUn. 2018-07-20 14:43:40 +02:00
Markus Blatt 865a690243 Allow usage of red-black ILU0.
We introduced two runtime parameters for this: ilu_redblack and
ilu_reorder_spheres. If the last one is false, we try to preserve
the ordering within in the colors. Otherwise we try to achieve a D2
(alternative diagonal) ordering.
2018-07-20 14:43:40 +02:00
Markus Blatt 41e5779ae3 Extended test for the reordering 2018-07-20 14:43:40 +02:00
Markus Blatt 190272e21d Added two alternatives for reordering based on colors 2018-07-20 14:43:40 +02:00
Markus Blatt 3953b20215 Also return the number of vertices for each color from Welsh-Powell-Algorithm. 2018-07-20 14:43:40 +02:00
Markus Blatt a1650a58f4 Added Welsh Powell graph coloring 2018-07-20 14:43:40 +02:00
Markus Blatt 43c1714478 Added various other variants of MILU.
These versions are inspired by the ones used in SuperLU and the enums
to choose them have simuilar names, but without leading S (MILU_1-MILU_3).

The following variants are supported (chosen by the enum MILU_VARIANT):
ILU: plain ILU
MILU_1:  lump diagonal with dropped row entries.
MILU_2:  lump diagonal with the sum of the absolute values of the dropped row
         entries.
MILU_3: if diagonal is positive add sum of dropped row entrires. Otherwise substract them.
MILU_4: if diagonal is positive add sum of dropped row entrires. Otherwise do nothing
2018-07-20 14:43:40 +02:00
Markus Blatt 63058559bc Added various other variants of MILU.
These versions are inspired by the ones used in SuperLU and the enums
to choose them have simuilar names, but without leading S (MILU_1-MILU_3).

The following variants are supported (chosen by the enum MILU_VARIANT):
ILU: plain ILU
MILU_1:  lump diagonal with dropped row entries.
MILU_2:  lump diagonal with the sum of the absolute values of the dropped row
         entries.
MILU_3: if diagonal is positive add sum of dropped row entrires. Otherwise substract them.
MILU_4: if diagonal is positive add sum of dropped row entrires. Otherwise do nothing
2018-07-20 14:42:46 +02:00
Markus Blatt 59b99d9ef9 Fixed unused variable warnings in test_milu 2018-07-20 14:42:46 +02:00
Markus Blatt e0a138e23c [MILU] Add dropped elements only to diagonal.
We did add the dropped matrix blocks to the diagonal blocks,
but this is not MILU where oone only modifies the diagonal.
With this patch we fix this behaviour and now only modify the
diagonal of the diagonal block.
2018-07-20 14:42:46 +02:00
Markus Blatt 397fc78405 Add additional MILU test. 2018-07-20 14:42:46 +02:00
Markus Blatt 0bae240a42 Allow user to choose modified ILU0 decomposition.
Using the parameter ilu_milu=true|false (default=false) the user can now choose
to use the modified ILU0 decomposition. If selected values will
not be dropped for nonzero entries but added to the diagonal of U.
This approach will result in A*e = L*U*e for vector e with all entries
beging 1.
2018-07-20 14:42:46 +02:00
Markus Blatt 5333a2430f Be verbose only when compiled with -DDEBUG 2018-07-20 14:42:46 +02:00
Markus Blatt e1e289dc1e Added MILU0 decomposition 2018-07-20 14:42:46 +02:00
Markus Blatt 1bd735428f Deactivate selection of CPR via eclipse keyword
as this preconditioner is still considered experimental
and fails miserably for some models. Users can select
CPR using the command line.
2018-06-15 15:34:01 +02:00
Markus Blatt e27fa72aee Use extended sparsity pattern also of we add well contributions to the preconditioner. 2018-03-07 13:54:21 +01:00
Markus Blatt 01b25f27ed Allow to add well contributions to both matrix and preconditioner matrix.
matrix_add_well_contributions=true will add to both the preconditioner matrix
and the matrix of the linear operator. preconditioner_add_well_contributions=true
will only add the contributions to the preconditioner matrix.
2018-03-05 16:48:10 +01:00
Markus Blatt dc86d972d2 Removed hack to access StandardWell::addWellContributions. 2018-03-05 16:48:03 +01:00
Markus Blatt 12d2114bd7 Add well contribution to preconditioner matrix and always use old operator approach for wells.
It turned out that applying the well part of the full matrix has to be
done after the application of the non-well interactions. Otherwise we
screw up the ordering so much that convergence suffers a lot.

Kudos got Atgeirr for inspiration based on his testing.
2018-03-02 20:57:43 +01:00
Markus Blatt f07874cf42 Cleanup code.
Removed unused boolean switch in WellModelMatrixAdapter and removed commented code.
2018-03-02 20:57:10 +01:00
Markus Blatt af3c45dd6a Do not add additional entries to matrix when not adding well contributions. 2018-03-02 20:55:58 +01:00
Markus Blatt 44d31f9dcc Removed unused variable warning in addWellContributions. 2018-02-26 16:23:13 +01:00
Markus Blatt 8aa0973cfc Removed unsused friend declaration.
This seemed to be a leftover from the approach taken
before the refactoring of the well code.
2018-02-26 16:20:41 +01:00
Markus Blatt 247241c037 Added test for multMatrixTransposed. 2018-02-26 16:11:53 +01:00
Markus Blatt 3be954fe98 Move multMatrixTransposed for better testability.
Otherwise we need to deal with the property system of ewoms.
2018-02-26 15:49:59 +01:00
Markus Blatt e53374b8ec Check which each well whether to call apply for well contributions.
This allows for different implementations of wells in well_container
when adding well contributions to the matrix.
2018-02-26 15:47:25 +01:00
Markus Blatt 455cf79d8d Fixed comments in StandardWell 2018-02-26 15:16:07 +01:00
Markus Blatt 5ec804d362 Prevent unused variable warning 2018-02-26 15:16:07 +01:00
Markus Blatt 3f0d6f7dca Space 2018-02-26 15:16:07 +01:00
Markus Blatt 96a636f25b Let WellModel decide whether to apply well contributions.
It queries the Well whether the jacobian also contains well contributions.
If not then it applies them in the operator in addition. Thus the
well knows whether that is needed or not.
2018-02-26 15:16:07 +01:00
Markus Blatt afb806bc3e Remove effectless typedef in version check.
The typedef is the same and has no effect since we
switched to Dune::FMatrixHelp::invertMatrix.
2018-02-26 15:16:07 +01:00
Markus Blatt 8e78f02230 Use Dune::FMatrixHelp::invertMatrix for inversion
Thus we always take advantage of the specializations in ISTLSolver.hpp
and do need to take care about the type of the matrix block.
2018-02-26 15:12:14 +01:00
Markus Blatt b5d55b9fb2 Fix indentation and whitespace. 2018-02-26 14:35:04 +01:00
Markus Blatt 2e7313ac08 Cater for move of CpGrid header 2018-02-26 14:35:04 +01:00
Markus Blatt 9221bc958b Added missing header includes 2018-02-26 14:35:04 +01:00
Markus Blatt 01b90bce05 Improve well matrix products 2018-02-26 14:35:04 +01:00
Markus Blatt 22dfa6f135 Setup auxiliary module only once with all possible well completions.
Clearing the auxiliary modules will result in the sparsity pattern being
recomputed. Previously we did this before each nonlinear solve. But for the
master branch the sparsity pattern was only computed once for the whole
simulation.

To get the same behaviour (one sparsity pattern computation) we change the
auxiliary module to include all well perforations that might become active
during the simulation and do this once up front of a simulator run.

Please note that the new matrix entries might also improve convergence for
the ILU if the well is not active.
2018-02-26 14:35:04 +01:00
Markus Blatt 07f61c2a2b Add auxiliary module in BlackoilModelEbos constructor.
Previously, we did this during assemble. Unfortunately, this resulted
in the sparsity pattern being recomputed every time instead of just
once for a non-linear solve.
2018-02-26 14:35:04 +01:00
Markus Blatt 799cbb4b62 Add influences by well perforations to matrix.
This is only done upon request and uses the auxiliary module approach
provided by ewoms.

In the case of adding the influences we do not execute applyWellModelScaleAdd
or applyWellModel in the operator
2018-02-26 14:35:04 +01:00
Markus Blatt d0fcd1a8e9 Add non neighboring connections induced by well perforations to matrix sparsity pattern
This is only done upon request and uses the auxiliary module approach
provided by ewoms.
2018-02-26 14:32:50 +01:00
Markus Blatt 8456a84ec9 Prevent unused variable warning when compiling test_blackoil_amg 2018-02-07 16:58:51 +01:00
Markus Blatt e5de96e5f4 Make test_blackoil_amg compile.
There was typo in the last fix.
2018-02-07 16:58:09 +01:00
Markus Blatt a82598abe7 include ErrorMacros.hpp to safely make use of OPM_THROW (and not abort) 2018-02-07 16:56:12 +01:00
Markus Blatt f381336dff Remove unused function parameters and default arguments for AMG construction.
It turned out that they are not needed and used.
2018-02-07 16:32:00 +01:00
Markus Blatt bf3132e9cf Fixes unused variable warning 2018-02-06 19:48:26 +01:00
Markus Blatt cda0c22d0f Avoid negation in if clause 2018-02-06 15:36:23 +01:00
Markus Blatt 034b1840ae Fixed comment about smoother arguments needed for construction 2018-02-06 15:34:13 +01:00
Markus Blatt 4c590c17d6 Moved definition of CPRParameter to top of header as needed for constructor call. 2018-02-06 15:32:35 +01:00
Markus Blatt fc9acf963e Spelling fixes in BlackoilAmg.hpp 2018-02-06 15:31:50 +01:00
Markus Blatt 14cde5bafc Made use of range based for for graph traversal. 2018-02-06 15:30:24 +01:00
Markus Blatt a8dde44afc Removed dead code und commented code. 2018-02-06 15:28:10 +01:00
Markus Blatt 6bcfce1733 Prevent problems to due oversight in parallel AMG.
Currently we run into issues with the parallel AMG if
redistribution happened on the coarsest level. That is
not detected by AMG and it will construct smoothers on
all processors present before the redistribution. Some of
them will get OwnerOverlapCommunication objects that have
an invalid MPI communicator in them (MPI_COMM_NULL) and an
MPI_ERROR will be raised as we communicate in the constructor.

With this patch we detect this situaton and set the pointer to
OwnerOverlapCommunication to null to prevent communication. A
sanity check that the matrix has zero rows has been added.
2018-02-06 13:19:59 +01:00
Markus Blatt 28e566ba02 [bugfix] Prevent indexing an array of zero size for matrices with zero rows. 2018-02-06 12:45:13 +01:00
Markus Blatt ffda4f96d5 Adjust test to changed constructor. 2018-02-06 12:44:21 +01:00
Markus Blatt cfa311e055 recover compilation support for dune versions <2.6 2018-02-05 22:09:37 +00:00
Markus Blatt cf1cdbd375 Improved documentation 2018-02-05 22:37:01 +01:00
Markus Blatt 8fc20456c5 Allow user to request aggregating the pressure system before solving it.
For this we added a new parameter cpr_pressure_aggregation. If it is true
we will aggregate the pressure already for the first system.
2018-02-05 22:37:01 +01:00
Markus Blatt e24d338ddc Resort to support the usual parameters (as for flow_legacy)
These are solver_approach=cpr cpr_use_amg=(true|false), etc.
2018-02-05 22:37:01 +01:00
Markus Blatt c367382a59 Prepare to use ILU for pressure system. 2018-02-05 22:37:01 +01:00
Markus Blatt abacbe2cfc Do not use expensive aggregation when forming pressure system unless requested.
That means that for traditional CPR no aggregation is used and we simply extract
the pressure component.
2018-02-05 22:37:01 +01:00
Markus Blatt 5d8da52679 Use decoupling strategy of Scheichl/Masson in the CPR preconditioner.
Often it is claimed by CPR-AMG evangelists that this will make the pressure
system more elliptic. That may be the case. But even more important it also
decouples the pressure from the saturations.

Without this approach the pressure correction influences the smoothing of the
full system too much and e.g. for Norne CPR is worse than simple block ILU0.
2018-02-05 22:37:01 +01:00
Markus Blatt 6d21214fa7 Switch to ParallelOverlappingILU0 for CPRPreconditioner.
This seems to have been forgotten previously. Now the code int CPRPreconditioner.hpp
uses ParallelOverlappingILU0 instead of SeqILU[0n]/BlockPreconditioner which
makes the code more slim.
2018-02-05 22:37:01 +01:00
Markus Blatt e6e18a3aa9 Make Blackoil system amg / CPR (flow_ebos) DUNE 2.6 aware. 2018-02-05 22:37:01 +01:00
Markus Blatt c089a59cba Fix compiler lookup of get method. 2018-02-05 22:37:01 +01:00
Markus Blatt f5d81513da First version of a AMG for the Blackoil equations.
The approach is inspired by Geiger's system-amg but we use dune-istl
aggregation AMG for it. On the fine level all unknowns attached to a cell
form a matrix block and are treated fully coupled. To form the first
coarse level system we use only the pressure component to guide the aggregation
and neglect all other unknowns on the fine level. All other level are formed
in the usual way by scalar aggregation.

Currently,it has to be requested for flow_ebos manually by passing
"linear_solver_use_amg=true amg_blackoil_system=true" to it.
2018-02-05 22:37:01 +01:00
Markus Blatt f32743cf31 Disregard non-active cells when writing MPI_RANK in writeInitial.
This saves space and it is allowed and recommended (spacewise) to
use integer arrays with only values for active cells in writeInitial.
2017-11-22 14:18:32 +01:00
Markus Blatt 9402f4bde1 Make CellOwnerHandle available without MPI
and thus make compilation succeed in this case as using
it is perfectly find even if MPI is not there.
2017-11-21 15:06:36 +01:00
Markus Blatt e7688a2ca0 Use MPI_RANK as ECL keyword (max length is 8)
MPI_RANKS was one character to long and rose an exception with message
"Error: Program threw an exception: Keyword is too long."
2017-11-21 11:17:40 +01:00
Markus Blatt 073f63ac4c Adapt writeInitial call to use integer vectors for printing ranks
This adapts to the new function signature as of PR 216 in opm-output. It uses the
newly introduced map of integer vectors to print the MPI ranks in a parallel run.
2017-11-20 15:30:50 +01:00
Markus Blatt 602f3962f3 Use MatrixBlock instead of FieldMatrix for DUNE 2.5.0
3x3 matrix block inversion in FieldMatrix is numerically unstable
including version 2.5.0. Therefore the previous if clause was wrong
as it activated the use of FieldMatrix already for 2.5.0 (the version
in Debian stable). With this commit we use MatrixBlock for version 2.5.0.
2017-10-25 16:32:48 +02:00
Markus Blatt 15dfe31d80 Revert "Communicate the ebos solution at the beginning of the run method."
This reverts commit 9adc4d5d3c.
2017-10-17 08:26:39 +00:00
Markus Blatt 2bdafdb602 [cleanup] Removes unnecessary if clauses for unsupported DUNE versions.
We are targetting DUNE 2.4.* and 2.5.* currently. Therefore this commit removes
the if checks for lower versions to cleanup the code.
2017-10-11 21:25:18 +02:00
Markus Blatt 56cd0f5d24 Removed unnecessary version if in transmult test 2017-10-11 16:20:36 +02:00
Markus Blatt 6a5dc78249 [cleanup] Removes unnecessary if clauses for unsupported DUNE versions.
We are targetting DUNE 2.4.* and 2.5.* currently. Therefore this commit removes
the if checks for lower versions to cleanup the code.
2017-10-11 15:53:45 +02:00
Markus Blatt 9adc4d5d3c Communicate the ebos solution at the beginning of the run method.
Currently, the ReservoirState passed to the method and converted
to the initial solution of the Ebos simulator might have wrong
values in the ghost layer (this is the case for SPE9, Norne, Model 2).
This commit uses the syncOverlap method to update these values once they
are converted to the Ebos solution. The  ReservoirState remains untouched.
This is enough to have consistent values throughout the simulation and only
introduces one additional communication step.
2017-10-05 14:33:48 +02:00
Markus Blatt 03a94c1cde Got rid of false warning for empty opm_common_DIR. 2017-09-26 16:39:50 +02:00
Markus Blatt 54acb69d7a Drop support for OPM_COMMON_ROOT.
Users should either rely in sibling search, use opm-common_DIR, or
set CMAKE_PREFIX_PATH correctly to find opm-common.
2017-09-25 14:03:01 +02:00
Markus Blatt a26cec6a6c Allow arbitrary clone directories and <prefix><module-name><postfix> build directories 2017-09-25 13:54:04 +02:00
Markus Blatt 0b83f68cdc Warn if OPM_COMMON_ROOT and opm-common_DIR are set and use the latter. 2017-09-25 13:53:34 +02:00
Markus Blatt f6db28eb5d Changed find_package call to require opm-common.
Previously, QUIET was passed to opm-common which would
not even print a message if there is a problem. Now cmake
will fail if OPM_COMMON_ROOT is not set, and neither guessing
opm_common_DIR did  work nor searching in the default locations.
2017-09-25 13:53:34 +02:00
Markus Blatt e59084c540 Added deprecation warning if OPM_COMMON_ROOT is used 2017-09-25 13:53:34 +02:00
Markus Blatt b2c6092127 Added warning if opm-common_DIR is not an existing directory. 2017-09-25 13:53:29 +02:00
Markus Blatt 149d531c68 Added sibling search mechanism using ${PROJECT_BINARY_DIR} for opm-common
If sibling search is activated and opm-common_DIR is not set, then
we try to determine the build directory layout from ${PROJECT_BINARY_DIR}.
The following two possibilities are supported:
 + <modules-build-dir>/<project-name>
 + <project-name>/<build-dir>
where <project-name> is the case sensitive module name (in this case
opm-common).

This results in the following search precedence:
1. User set opm-common_DIR
2. sibling directories search (if the directories exist)
3. Default (system) CMake search path
2017-09-15 15:26:53 +02:00
Markus Blatt da86d1c0bd Introduced mandatory call to project in top level CMakeLists.txt
Somehow this was never called in the OPM modules. But the CMake documentation
actually says:
"The top-level ``CMakeLists.txt`` file for a project must contain a
literal, direct call to the ``project()`` command; loading one
through the ``include()`` command is not sufficient.  If no such
call exists CMake will implicitly add one to the top that enables the
default languages (``C`` and ``CXX``).
"

Without it some variables (like CMAKE_PROJECT_NAME) are not correctly defined.
2017-09-15 15:26:53 +02:00
Markus Blatt a1f960b467 Reallow logging fatal errors for well convergence on all ranks 2017-09-07 14:45:00 +00:00
Markus Blatt 5d1eff5107 Log debug messages about wells only on master.
Previously all ranks logged the message and did clutter the
output files quite a bit.
2017-09-07 14:17:56 +00:00