Commit Graph
100 Commits
Author SHA1 Message Date
Markus Blatt a0650012c3 ParallelRestart: use references and allow non-default template parameters.
packSize now uses a reference to map/unordered_map to prevent copying.
In addition we always specify all template parameters for the containers to
allow for sending data if non-default ones are used.
2019-11-25 13:04:40 +01:00
Markus Blatt 5c34b843f1 Use process instead of processor for MPI. 2019-11-19 15:56:18 +01:00
Markus Blatt b4ec2f0611 Use correct number of threads when printing banner.
At that stage flow did not set the number of thread in the case where
OMP_NUM_THREADS is not defined. That happens in setupParallelism which
is called when the simulator is run. Hence we have to manually compute
the number of threads similar to there.
2019-11-19 15:45:50 +01:00
Markus Blatt afc76a8b27 Print number of MPI/OMP threads at start and end. 2019-11-19 15:45:50 +01:00
Markus Blatt bc98b20118 Only filter in filterConnections_ on root process.
When filterConnections_ is called the grid is not load
balanced, yet. Currently that means that grid() will also return the
unbalanced grid and all processes will see the whole global grid.

We will change semantics of the unbalanced grid soon: Only the root
process will see the whole grid and the others will see an empty
partition of it. Hence filtering on this partition will remove all
connections on all wells in the schedule for non-root processes and
produce wrong results.

For non-root process the filtering needs to be done on the load
balanced grid. This is accomplished by this commit.
2019-11-14 23:41:17 +01:00
Markus Blatt a5506956fb renamed numWells to numLocalWells in BlackoilWellmodel
as this better reflects that it is not the number of wells in
the whole domain but just the one in the part of the domain
stored in the local process.
2019-11-01 15:11:21 +01:00
Markus Blatt 905403e2ed Fix BlackoilWellModel::numComponents for parallel runs.
In the case with active solvent (BlackoilWellModel::has_solvent_ is
true, e.g. case 2D_OILWATER_POLYMER.DATA) and one process have no
wells while another has some this lead to numComponents returning
different values. Later this lead to truncated message in MPI_Allgather.

The underlying problem was the usage of numWells() which returns just
the number of local wells. We resort to using wellsActive which
returns whether there any well active regardless which process knows it.
2019-11-01 15:07:00 +01:00
Markus Blatt c676b73822 Merge pull request #2120 from blattms/filter-connections-on-all-procs
Filter connections on non-IO ranks and remove parallel deadlock
2019-11-01 13:07:09 +01:00
Markus Blatt 671ab68709 Merge pull request #2117 from blattms/changelog-2019.10
Added entries to changelog concerning 2019.10 release
2019-10-30 21:50:11 +01:00
Markus Blatt a597539342 Filter connections on non-IO ranks, too.
This removes a deadlock experienced for some models
where we have specified connections to non-active cells.

On non-IO ranks we are using the local grid since in the
future there will be no global grid available. Wells connecting
cells not on these processors are neglected anyway.

Closes #2101
2019-10-30 13:46:43 +01:00
Markus Blatt e44f0445c4 Fixed indentation of a2db252 2019-10-30 08:55:05 +01:00
Markus Blatt a2db252271 Move BlackOilOnePhaseIndices to Opm namespace
to make it consistent with the rest. OPM/opm-models#530 development
must have been started before the renaming in OPM/opm-models#532
and somehow the old namespace survived.

downstream PR of OPM/opm-models#577
2019-10-29 17:04:37 +01:00
Markus Blatt 10db57f66b Only print usage information on one processes.
No matter whether requested via --help or printed due to a wrong
command line parameter.

Closes #2012.
2019-10-29 17:00:24 +01:00
Markus Blatt c7aebc66a8 Added entries to changelog concerning 2019.10 release 2019-10-29 13:27:07 +01:00
Markus Blatt b3141133e3 Merge pull request #2114 from akva2/update_rh_packaging
update redhat packaging
2019-10-28 11:59:53 +01:00
Markus Blatt 608b317ecc Allow different ElementMapper types in ElementIndexScatterHandle.
This is needed to support dune-fem where the local mapper might
be
`MultipleCodimMultipleGeomTypeMapper<GridView<GridPart2GridViewTraits<AdaptiveLeafGridPart<CpGrid, (PartitionIteratorType)4,
false> > >, Dune::Impl::MCMGFailLayout>`
as opposed to the global one being
`MultipleCodimMultipleGeomTypeMapper<GridView<DefaultLeafGridViewTraits<CpGrid>>, Dune::Impl::MCMGFailLayout>`.

Closes #2095.
2019-10-22 14:49:55 +02:00
Markus Blatt 9751984021 Merge pull request #2033 from blattms/avoid_equil_grid-rebased
Avoid using global grid (equilGrid) on non-IO processes.
2019-10-21 11:47:17 +02:00
Markus Blatt c7d9cdef9a Merge pull request #2061 from joakim-hove/is-iorank
stdout logging only for rank 0
2019-10-21 10:12:45 +02:00
Markus Blatt 3dad4f21e8 Fixed unused parameter warning wehn compiling without MPI. 2019-10-18 16:23:22 +02:00
Markus Blatt 42247105bf Addressed reviewer's comments. 2019-10-18 16:23:22 +02:00
Markus Blatt 0bc1630cc9 CollectToIORank: Made localIdxToGlobalIdx lookup working.
Since the indexMaps do not contain the global element index anymore
(but the global id). The old code did not work anymore.

Unfortunately, we are using CpGrid specific functions (scatterData)
to get the mapping. Therefore this might be broken if other grids are
used.
2019-10-15 14:03:24 +02:00
Markus Blatt 9735bdadfc Load restart with global grid only available on one processor.
For this the master (IO) rank loads the RestartValue and then
broadcasts it to the other ranks.
2019-10-15 14:03:24 +02:00
Markus Blatt 7e5c810125 Fixes unused variable warning in standard wells.
Only occurs when compiling with -DNDEBUG since the body of the
for-loop is an assert using the loop variable. Loop is now deactivated.
2019-10-15 09:16:36 +02:00
Markus Blatt 7784d53198 Fix wrong globalSize.
That has gotten a little to big and hence the vector
globalCartesianIndex_ and DistributedIndexMapping::ranks_ ,too.
2019-10-14 14:32:22 +02:00
Markus Blatt 1124b82f05 Move translation of global cartesian index of global grid to IoRank.
Previously, it was still assumed that all ranks knew the global grid
and each map on CollectDataToIORank::indexMaps_ was a mapping of
send/receive index to the index of the cell using the mapper of  the
corresponding global grid.

With this patch inside of CollectDataToIORank::DistributeIndexMapping
indexMaps is a mapping from send/receive index to global cartesian
index until the destructor is run. Inside of the destructor of the
iorank the remapping to mapped index of the global grid happens and
the ranks array is computed.
2019-10-14 14:32:22 +02:00
Markus Blatt 39979ad3f7 Only access globalTransmissibility on IO rank in EclWriter.
For other ranks this will not be available in the future.
2019-10-14 14:32:22 +02:00
Markus Blatt 5812b767ef Always initialize mpiRank in constructor and use it consistently.
We cannot use grid->comm().rank() to check whether we are an
IORank since for an unbalanced grid this will always be zero in the
master branch.
2019-10-14 14:32:22 +02:00
Markus Blatt cb396dfac6 Make sure subclass functions are not called before subclass is initialized.
This at least slightly improves the old design. In that design the
subclass had no own constructor but inherited the one of the base class.
That base class constructor called certain subclass
functions (createGrids_, filterConnections_, updateOutputDir_, and
finalizeInit_)that would initialize raw pointers of the
subclass. Hence subclasses where not allowed to have non-pod members
and those used later (e.g. deleted in the destructor) had to be
initialized in these functions.

The new (still ugly) design introduces constructors into the
subclasses and skips inheriting constructors. Now one must call a base
class function classImplementationInit which will still call the
functions createGrids_, filterConnections_, updateOutputDir_, and
finalizeInit_, but at least at this point the baseclass is fully
constructed and the subclass is constructed as much as
possible/needed (non-pod types will be initialized now.)
2019-10-14 14:32:22 +02:00
Markus Blatt 4e6bbddbf5 Use global grid only on IO process in EclWriter 2019-10-14 14:32:22 +02:00
Markus Blatt bcff77fb4a Construct and ECLTranmissibility only on IO process, 2019-10-14 14:32:22 +02:00
Markus Blatt 42c20171eb make and use equilGrid only on IO process.
With the change of CPgrid to only holding the grid on one process
it will be an empty grid on all other processes. This has really
strange side effects like Schedule::filterConnections removing all
well perforations on theses processes.
2019-10-14 14:32:22 +02:00
Markus Blatt 5001645d6a Make code compile without MPI. 2019-10-14 14:32:22 +02:00
Markus Blatt e4e8425bad Merge pull request #1858 from dr-robertk/PR/cleanup-sparsematrixadapter
Cleanup SparseMatrixAdapter.
2019-10-09 12:44:52 +02:00
Markus Blatt a0fa87e81f Make sure subclass functions are not called before subclass is initialized.
This at least slightly improves the old design. In that design the
subclass had no own constructor but inherited the one of the base class.
That base class constructor called certain subclass
functions (createGrids_, filterConnections_, updateOutputDir_, and
finalizeInit_)that would initialize raw pointers of the
subclass. Hence subclasses where not allowed to have non-pod members
and those used later (e.g. deleted in the destructor) had to be
initialized in these functions.

The new (still ugly) design introduces constructors into the
subclasses and skips inheriting constructors. Now one must call a base
class function classImplementationInit which will still call the
functions createGrids_, filterConnections_, updateOutputDir_, and
finalizeInit_, but at least at this point the baseclass is fully
constructed and the subclass is constructed as much as
possible/needed (non-pod types will be initialized now.)
2019-10-01 21:18:17 +02:00
Markus Blatt 777a7acb5b Merge pull request #1962 from atgeirr/fix-nullptr-dereference
Use a dummy SequentialInformation object for the serial case.
2019-08-08 11:54:38 +02:00
Markus Blatt 0823cdc5dd Merge pull request #1942 from andrthu/edge-weights-method
Allow for different methods of specifying the edge weights when load balancing.
2019-07-23 12:36:07 +02:00
Markus Blatt 3e8127cb54 Merge pull request #1884 from akva2/buildsys_clean
changed: simplify buildsystem a little
2019-06-21 15:41:55 +02:00
Markus Blatt 35ad7a60e2 Notify user that we are aborting because of unused keywords. 2019-06-21 13:11:21 +02:00
Markus Blatt 2f28bb3758 Merge pull request #1878 from atgeirr/flexible-solver-revision
Small fixes for the FlexibleSolver system.
2019-06-13 11:21:54 +02:00
Markus Blatt 337c637fa0 Write transmissibility between direct vertical neighbors into TRANZ.
In the case where two were direct vertical neighbors in the grid
but not in the underlying cartesian grid (e.g. because of MINPV or
pinch outs), we treated them as NNCs and wrote the transmissibilty
to TRANNC.

With this patch we detect this situation (two neighbor cells with identical
i and i and no active cells between them) and do not create an NNC
in the eclipse output files but write the transmissibility to TRANZ.
2019-05-21 11:24:17 +02:00
Markus Blatt b885c1a013 Let only master process print information about exception.
Previously, each process did this in a parallel run which
clutters the terminal output quite a bit in a parallel run.
2019-05-15 11:14:06 +02:00
Markus Blatt 9b0e86a172 Abort if flow is run with unknown keywords.
This change will print the encountered unknown keywords to std::cerr
(albeit in the format ThisKeyword and not --this-keyword) and abort
before running the simulator.
2019-05-15 10:03:07 +02:00
Markus Blatt 18a404768e If requested always print version and exit.
Previously this was only done if there were no other parameters on the
command line. That approach feels a bit unusual.
2019-05-13 14:40:42 +02:00
Markus Blatt 781fb46e61 [bugfix] Search all NNCs when applying EDITNNC.
The latter is not sorted. Therefore we either need to search the whole
range or sort it before processing it. Io pted for the former.
2019-05-08 13:50:51 +02:00
Markus Blatt d2efdcfaa5 Implement correct ignore thresholds for NNC with/without EDITNNC.
It seems like eclipse ignores NNCs with small transmissibility.
Small means less than 1e-6 for Eclipse (Even if it says that it
is ignoring values below 1e-5 and/or zero values)!.
This commit now implements the same threshold during IO.

Also fixes a bug when applying EDITNNC, it needs to have cell1<=cell2 to work.
2019-05-08 13:50:51 +02:00
Markus Blatt 7849ce690d Make sortNncAndApplyEditnnc return vector of NNCData ready to be processed.
Previously the vector of NNCData was passed in as a reference and sorted.
Unfortunately, it needed to be transformed later to meet all prerequisites.
With this commit we do this transformations in sortNncAndApplyEditnnc.
Furthermore EDITNNC data is passed by value as it is not needed
outside and should usually not be to big. It was copied outside anyway!
2019-05-08 13:50:50 +02:00
Markus Blatt f02c2d4114 Factor out sorting of NNC and application of EDITNNC for reuse. 2019-05-08 13:50:50 +02:00
Markus Blatt 583741d5b1 Ignore NNCs with zero transmissibility during output. 2019-05-08 13:50:26 +02:00
Markus Blatt 5aa0399c67 Write NNCs once and honor them when writing fault transmissibility
We first add all NNCs specified in the deck to the ouput
and then determine additional NNCs by iterating over all faces that
connect cells that are not connected in the underlying cartesian grid.
Therefore we need to make sure that we do not output NNCs twice
and for faults that also have a specified NNC we need to substract
the transmissibility specified via NNC.
2019-05-08 13:50:26 +02:00
Markus Blatt 184be292ea [bugfix] Use NNC data with applied EDITNCC for transmissibility.
Unfortunately, we first created NNC with applied EDITNNC and then
still used the original NNC data to set the transmissibility. Thus
we were actually ignoring EDITNNC.

This commit fixes this by using the data structure that has EDITNNC
applied.
2019-04-26 21:25:59 +02:00
Markus Blatt c9a06f8bb6 Initialize all members of Opm::Data::Connection 2019-04-25 10:00:59 +02:00
Markus Blatt b847f36ec8 Removes warning about unused variable. 2019-04-25 10:00:59 +02:00
Markus Blatt 66ef71e67a Removes warning about ignored return type qualifier on function. 2019-04-25 10:00:59 +02:00
Markus Blatt 3aa60433ad Removes unsigned-signed integer comparison warnings. 2019-04-25 10:00:59 +02:00
Markus Blatt 48c3802bf3 Removes unused function parameter warnings. 2019-04-25 10:00:59 +02:00
Markus Blatt a270994ad0 Support compiling Cpr without any MPI support.
There is a problem compiling upstream
Hierarchy::recalculateGalerkin() without MPI. Therefore we
reimplement that method in our AMG version. Fixes will travel
upstream.

Apart from that we made sure that all types have a meaning even
if there is no MPI found and that we at least have redistribute method
to call even if using SequentialInformation. In that case the method
does nothing but prevents compilation errors complaining about missing
parallel functionality.
2019-04-11 18:43:07 +02:00
Markus Blatt 26e1a9a94d Support DUNE 2.4 with CPR.
This version does not support the DirectsolverSelector struct and we
therefore implemented a fallback.
2019-04-11 14:15:04 +02:00
Markus Blatt 9f49e3fc26 Also pass the parseContext and errorGuard to Opm::checkDeck()
This is now mandated since the checkDeck interface was changed recently.
Otherwise compilation errors out.
2019-04-10 15:01:52 +02:00
Markus Blatt 81b7af1d8a Support DUNE 2.5 with CPR reusing hierarchy 2019-04-10 15:01:35 +02:00
Markus Blatt 29e893dc8e Make sure the the OwnerOverlopCommunication object stays alive.
As the AMG hierarchy is kept and uses the initial OwnerOverlopCommunication object
we need to make sure that this object lives as long as the hierarchy. We assure
this by storing a shared_ptr to it in ISTLSolverEbosCpr and reuse it to construct
the WellModelMatrixAdapter.
2019-04-10 14:40:46 +02:00
Markus Blatt 8057c2ba83 Use a shared pointer to the OwnerOverlapCommunication in WellModelMatrixAdapter.
Previously the OwnerOverlapCommunication object was owned by the adapter as a
unique_ptr was used. The change to shared_ptr makes it possible to to extract
it and reuse even if OwnerOverlapCommunication is thrown away.
2019-04-10 14:40:46 +02:00
Markus Blatt 6538b59d9e Added parallel CPR that reuses the matrix hierarchy.
Currently this just compiles but still segfaults in parallel.
2019-04-10 14:40:46 +02:00
Markus Blatt 831f41c0e3 Cater for empty fipnum vectors in output code.
Due to loadbalancing this vector might be empty under some circumstances.
Hence the old code would dereference the end iterator which is a bug.
2019-03-22 15:14:08 +01:00
Markus Blatt 2575cf715c Merge pull request #1724 from blattms/strip-milu-debug-out
Remove bogus debug output printing in MILU.
2019-02-07 16:34:41 +01:00
Markus Blatt 29464cd832 Remove bogus debug output printing in MILU.
Somehow some standard output when running MILU () is still there and
it really clutters the output and and makes it unusable. This commit
removes it from flow.
2019-02-06 10:37:35 +01:00
Markus Blatt 3b8ef5f004 one line per variable as requested. 2019-01-16 13:16:45 +01:00
Markus Blatt d87c5764b9 Use doxygen style suggested by reviewer. 2019-01-16 13:16:45 +01:00
Markus Blatt ace49a2c22 Adhere to CamelCase for types, functions, and variables.
This seems to be covered for types and functions by our coding style
with room for interpretation. For variables the coding styles asks for
underlines though, but nevermind.
2019-01-16 13:16:45 +01:00
Markus Blatt fb0f04d814 [bugfix] Cater for multiple EDITNNC entry for same cell pair. 2019-01-16 13:16:45 +01:00
Markus Blatt 64326dad53 [bugfix] Prevent accessing elements beyond end of NNC entries. 2019-01-16 13:16:45 +01:00
Markus Blatt 362476a494 [bugfix] Prevent double scaling of NNC with EDITNNC resembled trans
The former order resulted of first apply NCC to the grid
transmissibilities and then applying EDITNNC resulted in NNCs being
scaled twices. The reason is that applyNNCToGridTrans_ scales the NNC
with EDITNNC. With the patch the order of the function calls is
reversed to prevent double scaling.
2019-01-16 13:16:45 +01:00
Markus Blatt 5e83a26908 Process values from NNC keyword for those connection resembled by grid.
This is includes neighboring connection and NNCs due to faults. In both
cases the transmissibilities of specified via NNC are added to the set or
computed ones.

This is the first step for supporting NNC in flow.
2019-01-16 13:16:45 +01:00
Markus Blatt 2dd0b62eff [bugfix] Added missing ) to make code compile 2019-01-16 12:03:01 +01:00
Markus Blatt 4f4f5cbca3 [bugfix] Only strip ".DATA" or "." extensions.
As there might models named MODEL.01.DATA for which a call
"flow MODEL.01" would have stripped the extension.
2019-01-16 12:03:01 +01:00
Markus Blatt 20d12f5b53 [bugfix] Use file not filename to remove files not in current directory.
Passing just the filename to remove only will remove files in the
current directory. When --output-dir the files would not have been
removed.
2019-01-16 12:01:46 +01:00
Markus Blatt 0c2edcfe47 Remove debugging output 2019-01-16 11:56:47 +01:00
Markus Blatt 89ec35e0d2 Make BlackoilWellModel::hasTHPConstraints() work correctly in parallel.
Previously, this method did not take parallelism into account but just
checked the local wells for the constraints. Depending on the load balancing
of the wells this sometimes led to different return values of the function on different
processors. As the output is used to limit the time step size, different processors
were sometimes using different time steps in their local computations. This screwed
up convergence checks int the nonlinear operator such that only some processor thought
convergence was already achieved while others wanted to do more iterations.

With this commit the method now returns whether there is any well on any processor
with the constraint being true.
2019-01-14 22:14:01 +01:00
Markus Blatt 4b6144bb65 Only warn and show parallel logging fallout on demand.
This commit adds an option that allows to enable detecting parallel
logging fallout (option --enable-logging-fallout-warning). It is now
false by default (previous behavior was as if the option was true).

If option is true a warning will be printed for any process with nonzero
rank that does try to log to *.PRT or *.DBG and the logged output will be appended
to these files at the end.
2019-01-14 13:06:21 +01:00
Markus Blatt 52270e7ac7 Use uppercase basename for *DBG and *PRT files for any extension.
Previously runs of flow started with 'flow base.' Would result in base..DBG
files; note the double dot and the case sensitivity. Now the file will be
BASE.DBG in this case. Note that any extension will be stipped (not only
.DATA as before).
2019-01-14 13:03:03 +01:00
Markus Blatt 84acf3965f Do not log messages during getWriteRestartFile query on all procs.
Previously all processes reported
Warning: Fast restart using SAVE is not supported. Standard restart file is written instead.
Now this is done only on the master process where logging is activated.
2018-12-07 15:56:45 +01:00
Markus Blatt d7d9a3ecd8 bugfix: Fallback to SeqILUn in tracer code for DUNE < 2.6
In that versions SeqILU was not there.
2018-12-07 12:08:03 +01:00
Markus Blatt a2be89d586 bugfix: Use a typedef that is actually defined.
Fixes `error: ‘LinearSolverScalar’ was not declared in this scope`.
2018-12-07 12:06:29 +01:00
Markus Blatt 7c2f6d9275 Refactored loop which applies the EDITNCC. 2018-12-05 10:15:42 +01:00
Markus Blatt 7a4b817010 Add spaces where requested by coding standard 2018-12-03 16:46:03 +01:00
Markus Blatt cfac47ddbc Apply multiplicators from EDITNNC from the Deck. 2018-11-20 14:00:45 +01:00
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