these are mostly stylistic: the function bodies of most new methods
have been moved to the _impl.hpp file and the Simulator classes are
now templated on the grid type, so it should be not too hard to switch
them to Dune::CpGrid.
since SimulatorFullyImplicitCompressiblePolymer is now a template, the
opaque pointer stuff is also removed and the contents of the .cpp file
basically became _impl.hpp. for SimulatorFullyImplicitBlackoilPolymer,
the opaque pointer stuff was removed for the same reasons as for
SimulatorFullyImplicitBlackoil.
the actual unification of code is not yet done, but this patch points
out the direction of where this will go.
Also note that some synchronization with the ordinary blackoil
simulator (FLOW) was necessary to make it compile.
Finnally, the parser currently likes to throw an exception (also for
the opm-polymer master) when eating the opm-data polymer test
case. This prevented me from properly testing this patch:
```
and@heuristix:~/src/opm-polymer|simplify_simulator > ./bin/flow_polymer deck_filename=/home/and/src/opm-data/polymer_test_suit/simple2D/2D_THREEPHASE_POLY_HETER.DATA
================ Test program for fully implicit three-phase black-oil flow ===============
--------------- Reading parameters ---------------
deck_filename found at /, value is /home/and/src/opm-data/polymer_test_suit/simple2D/2D_THREEPHASE_POLY_HETER.DATA
output not found. Using default value 'true'.
output_dir not found. Using default value 'output'.
Program threw an exception: IOConfig: Reading GRIDFILE keyword from GRID section: Output of GRID file is not supported
terminate called after throwing an instance of 'std::runtime_error'
what(): IOConfig: Reading GRIDFILE keyword from GRID section: Output of GRID file is not supported
Aborted
```
i.e., removing redundant namespace open- and closings due to the fact
that the property system now resides in the 'Ewoms' namspace instead
of in 'Opm', and making the headercheck work for all headers.
for the Richards model we can't use the CO2 injection problem because
this problem cannot be simulated by the Richards model. (Well,
strictly speaking the Richards model *can* simulate it, but it would
only produce garbage because the assumptions of the Richards model are
violated by that problem.)
this works by introducing a splice called "LocalLinearizerSplice". The
the current local linearizer (which is based on the finite difference
method) is the default and can be set explicitly by setting the splice
to "FiniteDifferenceLocalLinearizer", the new linearizer using
automatic differentiation can be selected by setting the splice to
"AutoDiffLocalLinearizer".
As it turns out initializing the Geology on a distributed grid
result in wrong values for e.g. saturation. Therefore with this
commit we resort to initializing the global geology and distribute
it using communication.
Previously we used the size of the communicator within the CpGrid to check
whether we are running in parallel and need to redistribute the grid.
Unfortunately, this is MPI_COMM_SELF until we actually loadbalance and redistribute.
Therefore we now use the size of the MPI_Helper (i.e. MPI_COMM_WORLD) which
gives us the number of all available processes.
Note that the wrong behaviour was provoked with 656e5de331. Before that we
redistributed in any case which luckily included runs with more than 1 process.
Any argument that is not handled by the parameter parser will
be assumed to be a deck filename. Only one is accepted, and if
given, it will override any deck_filename=<something> on the
command line or in parameter files.
FYI:
The parameter parser handles arguments of the following types:
key=value (note no space around = or in strings)
parameterfile.xml
parameterfile.param
This makes some API changes to AutoDiffBlock.
- Add overload for the constant() constructor taking rvalue ref.
- Add overload for the variable() constructor taking rvalue ref.
- Make the function() constructor *require* rvalue refs.
- Add a swap() function.
The remaining changes in this commit are follow-ups especially
to the third change (adding std::move in many places), and
some removal of unnecessary block pattern arguments from calls to
the constant() static method.
now the generic part of the update of the solution vector is done in
the base class and the derived classes can chose to only do the update
of the primary variables of the individual DOFs.
With now generic implementation of the initStateEquil in opm-core
we added the necessary grid helper functionlality for CpGrid and activated
the processing if the EQUIL keyword is there.
Previously BlackoilPropsDataHandle did hold a grid for sending
and receiving that were either not used or we could prevent their
usage. Therefore this commit removes them from the class and queries
all needed information from the property objects.
1) swatinit() is changed to setSwatInitScaling() to make it obvious that
we are modifying the props.
2) the descriptions of saturation and pc now makes more sense
3) the method is removed from the sibling class and the interface and
the type of new_props is changed from BlackoilPropsAdInterface to
BlackoilPropsAdFromDeck
5) The same modification is added to sim_fibo_ad_cp
The capillary pressure function in new_props is scaled to match the
capillary pressure function in props.
This is a temporary workaround while the simulator uses two different
property object.
Previously, we had to use two layers of overlap cells such the
innermost layer contains the rightvalues automatically (as it is
surrounded by internal edges). No we use communication to get
the correct values in the whole overlap region and one layer
suffices as it should.
With this commit we add the possibility to start with a global representation
of a simulator that is read on each process and afterwards this presentation
is redistributed among the processors together with the properties and
state data needed to initialize the simulation.
There still is no parallel well handling and no parallel output. But with the
equilibrium example of @dr-robertk and deactivated output we can already
perform parallel runs.
As with opm-core we use boost::any to provide additional
information about a parallel run. It is used to set a
ParallelISTLInformation object and and fill it with the
information obtained from a parallel Cpgrid.
Note that the simulator currently compiles sucessfully. Still,
we have to test the runs and do debugging.
This reverts commit c6c271f3ee. After a
more thorough investigation, the cannonical name of these quantities
turned out to be "* formation volume factor"...
this also fixes the SuperLU backend with __float128 on Dune 2.4. The
problem is that due to some hacks within dune-istl, the AMG solver
can't be used because it calls the direct solver directly without an
option to disable this. (This could be fixed in a similar fashion as
the SuperLU backend by copying everything into data structures which
use 'double' before calling into ISTL, but this is a thing for another
time.)
... and use the parallel AMG solver for the CO2 injection problem.
this makes performance comparisions with Dumux much easier as the
solver performance should be more similar.
1) Add the possibility for the user to chose between local and global
coordinate permeability in the transmissibility calculations.
2) Trow for CpGrid
3) Add default for switch
this helps to keep the core blackoil model code lean and mean and it
is also less confusing for newbies because the ECL blackoil simulator
is not a "test" anymore.
in case somebody wonders, "ebos" stands for "&eWoms &Black-&Oil
&Simulator". I picked this name because it is short, a syllable, has
not been taken by anything else (as far as I know) and "descriptive"
names are rare for programs anyway: everyone who does not yet know
about 'git' or 'emacs' and tells me that based on their names they
must be a source-code managment system and an editor gets a crate of
beer sponsored by me!
This code is required in the first place because opm-material always
specifies all parameters in terms of the wetting saturations while the
gas is the non-wetting phase in a gas-oil system.
GCC 4.8 provides 'nullptr' in C++11 mode. That capability is
detected at configuration time and stored in <config.h> and we need
it when targeting Dune 2.2.1 to avoid diagnostics of the form
[...]/dune/common/nullptr.hh:27:1:
error: expected ‘;’ after class definition
} nullptr = {}; // and whose name is nullptr
^
[...]/dune/common/nullptr.hh:27:1:
error: qualifiers can only be specified for objects and functions
[...]/dune/common/nullptr.hh:27:3:
error: expected unqualified-id before ‘nullptr’
} nullptr = {}; // and whose name is nullptr
missing: the simulator using dune-cornerpoint. Once again, this is
because there is no good way to convert an intersection to a unique
global index (yet).
this does not disrupt the block nature of the linearized matrix
(i.e. Dune::BCRSMatrix is still used), but if the number of auxiliary
equations is smaller than that of the "main" discretization, the
superfluous equations are padded. if the number of additional
equations are larger than that of the equation, additional DOFs are
added.
the biggest change is that it is now based on a new approach: the well
model now always calculates the bottom hole pressure for the full well
when asked for a source term. This change makes it possible to
implement cross flow within wells properly and should also make the
well model physically correct.
Also, the well model now uses the connection transmissibility factor
which makes it possible to use this quantity if it is specified by the
deck...
The porv is computed if needed and the Eclipsestate will return false on
this test before it is called.
This commit applies the change to the sim_fibo_ad_cp.cpp
the goal is to make it faster on computers with many cores: The
easiest way to do this is to ensure that the longest running tests are
not taking too much time and that they need about the same time. Thus
this patch contains the following changes which limits the CPU time
taken by each test to about two minutes in debug mode on my machine:
- the water-air problem using the non-isothermal primary variable
switching model now uses an 16x16 instead of a 32x32 grid. as a
compensation it now runs for a year instead of 5000 seconds and the
global grid refinement is now tested.
- the end time of the lens problem ctests is now 3000 instead of
30000 seconds. The binary itself does not change at all.
- sort the tests in the CMakeLists.txt roughly in the order of their
required time. (this will cause ctest not having to wait for long
running test which were started late for too long.)
Currently, there are two abstract interface for the grids. One that
usually returns pods and arrays of them that also can be used by C
and is used also in opm-core, and one that returns Eigen datastructures
needed within opm-autodiff.
This commit adds a postfix ToEigen to those functions (faceCells, and
cellCentroidsZ) one could imagine to also return pods and arrays of them.
This should at least resolve the confusion about the two faceCells functions.
The next step will be issue #192Fixes#176
Also add some other features that have been added to sim_fibo_ad
but not to sim_fibo_ad_cp:
- (Un)Strict parsing parameter.
- EQUIL init (currently throws, since initEquil not yet made generic).
Total time will be written to walltime.txt, and single step times to
step_timing.txt (changed suffix from param to txt). This did not work
properly before this fix (step_timing file was overwritten each step).
This commit changes the API of class SimulatorFullyImplicitBlackoil<>
in order to support wells controlled by (total) reservoir voidage
volume rates. Specifically, we switch to holding a mutable Wells
object (backed by a std::shared_ptr<>) in class Impl rather than a
reference to a WellsManager. This allows dynamically updating rate
distributions and targets of individual well controls. That, in
turn, is a prerequisite to supporting ECL-style "RESV" control
modes--be it in prediction or history matching capacity.
While in the process of API changes, also prepare for the second
stage of "WCONHIST/RESV" support: Accept a ScheduleConstPtr that
holds the input deck's notion of the history matching vs. prediction
controls. We need to distinguish the two in order to support the
exact semantics of "WCONHIST/RESV".
Update SimFIBO<> clients accordingly.
it was used for debugging intersection mappers. to make this include
work, dune-cornerpoint must be available and that the intersection
mapper PR must be merged.
this means that all code which could potentially throw an exception is
moved to this method(). (In particular FluidSystem::init() proved
troublesome in the past.) Besides avoiding segmentation the faults
which stem from exceptions thrown in constructors, this also has the
advantage that simulations which spend a noticable amount of time to
initialize stop at the "correct" place, i.e. after the "Finish init of
the problem" message was printed by the simulator...
this regressed after time step index of the initial solution was
changed from 0 (actually, this was also 0 for the first time step...)
to -1 in b30af664.
The refactorisation of class FullyImplicitBlackoilSolver<Grid> to
defer transmissibility and pore-volume calculation to the client in
order to support multipliers (net-to-gross &c) accidentally ended up
removing all effects of gravity. This commit restores those effects.
this is required to implement pore volume and permeability multipliers
as discussed with [at]bska and [at]joakim-hove.
Note that this implies that the DerivedGeology class can't be
instantiated anymore if there is no EclipseState object. Thus all code
paths and tests that don't load a deck are removed by this patch. If
this is undesireable, there are two options: First, don't require
EclipseState for DerivedGeology which would imply to make the about 10
required multiplier functions part of the
BlackoilPropertiesAdInterface, or second, one can copy-and-paste the
DerivedGeology class as it was before this patch, derive from a newly
introduced DerivedGeologyInterface and pass DerivedGeologyInterface
objects to the simulator. IMHO, the second solution would be a bit
better but it would involve substantial overhead to implement and to
maintain it.
Anyway, in the mean time simulators cannot be instantiated without
decks.
this method checks that the difference in the storage terms before and
after a time step is the same as the accumulated fluxes over the
domain boundary plus the source terms.
... and actually use it for the lens problems. This seems to have been
disabled for debugging and later it was probably forgotten to turn it
on again. This led to some minor bit-rot in that code...
The reason for this is to be able to modify the tolerance according to
grid size: The NewtonTolerance parameter has been renamed to
NewtonRawTolerance and for the porous media models is divided by the
square root of the volume of the smallst finite volume in the grid to
get the final tolerance for the Newton method. This is necessary
because very large grids need to achive a higher volumetric accuracy
in the residual than very small ones...
basically the init() method was split into a finishInit() method which
fills the data structures allocated in the constructor with meaningful
data and into applyInitialSolution() which does just that (and no
more!)
"intensive" means that the value of these quantities at a given
spatial location does not depend on any value of the neighboring
intensive quantities. In contrast, "extensive" quantities depend in
the intensive quantities of the environment of the spatial location.
this change is necessary is because the previous nomenclature was very
specific to finite volume discretizations, but the models themselves
were already rather generic. (i.e., "volume variables" are the
intensive quantities of finite volume methods and "flux variables"
are the extensive ones.)
this basically means using Opm::EclipseState instead of the raw deck
for these keywords.
with this, property modifiers like ADD, MULT, COPY and friends are
supported for at least the PERM* keywords. If additional keywords are
required these can be added relatively easily as well.
no ctest regressions have been observed with this patch on my machine.
this basically means using Opm::EclipseState instead of the raw deck
for these keywords.
with this, property modifiers like ADD, MULT, COPY and friends are
supported for at least the PERM* keywords. If additional keywords are
required these can be added relatively easily as well.
no ctest regressions have been observed with this patch on my machine.
this basically means using Opm::EclipseState instead of the raw deck
for these keywords.
with this, property modifiers like ADD, MULT, COPY and friends are
supported for at least the PERM* keywords. If additional keywords are
required these can be added relatively easily as well.
no ctest regressions have been observed with this patch on my machine.
i.e. reading the grid properties from EclipseState instead of from the
raw deck. This requires that all deck files exhibit a GRID and a
SCHEDULE section or else EclipseState will throw in the constructor.
The following is changed in this commit:
- The constructor for NewtonIterationBlackoilSimple now takes
a parameter object instead of a linear solver.
- The fully implicit black-oil simulators can now use the CPR
preconditioning strategy (by passing use_cpr=true) or the
simple strategy (the default).
Note that as of this commit, the CPR preconditioning still has
not been implemented properly, and behaves just like the simple
strategy.
because "manager" sounds less religious than "creator" and the
GridCreators did all kinds of other stuff besides creating the grid.
this patch also gets rid of the static function inside these classes,
which should make them easier to understand...
this also comes with moving responsibilities around and some smaller
cleanups for the grid creation. (although grid creation could be
possibly done by the simulator now, the GridCreator concept has not
been abandoned, yet...)
Function GridManager::createGrdecl() generally allocates memory
(using std::malloc()) for the MAPAXES keyword data output of the
'grdecl' structure. Release those resources before leaving the
scope to prevent memory leak introduced in commit fdca540.
This commit switches to using the convenience method
GridManager::createGrdecl()
to construct a "struct grdecl" that can be passed directly into
CpGrid::processEclipseFormat(). The practical benefit is that we
get to leverage the opm-parser that's in active development rather
than the calcifying "EclipseGridParser" that will only become less
relevant in the future. We also don't parse the data twice.
Note: This is mostly compile tested. In the few actual tests I ran,
I got into trouble with internal assertions in processEclipseFormat.
That problem is not yet analysed.
Conflicts:
examples/sim_fibo_ad.cpp
opm/autodiff/FullyImplicitBlackoilSolver_impl.hpp
This brings the "CpGrid support" branch up to date with respect to
recent changes in opm-autodiff master.
this makes the simulator quite a bit more maintainable: setting
USE_NEW_PARSER to 0 did not even compile after the the constructor for
the wells manager which took the old deck was removed last
week. Since, according to Atgeirr, SPE-1 is now producing exactly the
same results as before, it also does no longer make too much sense to
keep that code on life support...
These used to be needed to be enabled by the problem, but doing it in
the generic code is more fool proof and thus better.
On my laptop, volume variable caching caused the linearization time
for first time step of the isothermal vertex-centered CO2 injection
problem using the flash model go from 33.7 to 15.7 seconds, and
enabling thermodynamic hints in addition yielded a linearization time
of "only" 9.5 seconds. (that is for a debug build compiled with clang
3.3.)
this is implemented by extending the existing functionality for hints
and leads to a significant reduction of the volume variables updates
required. unfortunately, the performance with cached volume variables
is basically identical to the non-cached case, so they are disabled by
default...
anyway, this makes the thermodynamic hints code more robust and
cleaner, so it does not hurt to add it...
i.e., the simulator does not deal with any output operations
anymore. This makes sense because report steps are handled by
Opm::TimeMap and the constructor for the simulator already needs more
arguments than appropriate even without this...
Manually resolved conficts in the following files
examples/sim_fibo_ad.cpp
opm/autodiff/FullyImplicitBlackoilSolver_impl.hpp
opm/autodiff/SimulatorFullyImplicitBlackoil_impl.hpp
In additions examples/sim_fibo_ad_cp.cpp was adapted to compile again.
i.e. it now uses Opm::EclipseState. This change required to re-add the
the epoch concept in some sense, but the loop variables now call it
"episode" which sounds less ethernal IMO.
this allows to retrieve the name of the problem before it is
instantiated. this is required to be able to print the "Initializing
problem" message at the correct point (i.e., before instantiating the
problem).
and some other minor changes. (if you need line search the issue is
probably caused a different problem and line search would be just a
work-around anyway.)
This should make things a much more robust, partially because now the
linear and the non-linear solvers use the same convergence criterion.
Also, this patch includes some collateral indentation improvements.
Since the SimulationTimer, EclipseWriter and WellsManager stuff has
not (yet?) been merged, the old parser is required to be around. Use
my parser-integrate-hacks_for_norne branches to test your stuff on the
Norne deck...
this required to abandon the "Epoch" stuff which the new parser does
not have (as well as the ECLIPSE file format knows nothing about
epochs). Handling well controls properly thus has to wait until Joakim
and Kristian finish refurbishing the WellsManager, so as a stop-gap
measure, only the first "epoch" is run.
This includes:
- Using the class FullyImplicitBlackoilResidual instead of
in-class definition for the residual object.
- Changing residual field name mass_balance to material_balance_eq.
- Letting the simulator and solver classes accept a
FullyImplicitSystemSolverInterface instead of a LinearSolverInterface.
- In sim_fibo_ad and test_implicit_ad, instantiate class
FullyImplicitSystemSolverSimple, replicating existing behaviour.
This makes eWoms multi-discretization capable. Along the way, this
fixes some bugs and does a medium sized reorganization of the source tree.
This is a squashed patch of the following commits:
--------
1st commit message:
add initial version of the element centered finite volume discretization
currently, it is a misnomer as it is just a copy of the vertex
centered discretization plus some renames...
--------
2nd commit message:
rename [VE]cfvModel -> [VE]cfvDiscretization
--------
3rd commit message:
ecfv: prelimary changes required to make it compile
but not work yet...
--------
4th commit message:
Rename *FvElementGeometry to *Stencil
"Stencil" seems to be the standard expression for this concept...
(also, it is not specific to finite volume methods and is shorter.)
--------
5th commit message:
refactor the stencil class for the element centered finite volume discretization
--------
6th commit message:
ECFV: some work on the stencil class
--------
7th commit message:
ECFV: make the boundary handling code compile
--------
8th commit message:
rename elemContext() to elementContext()
--------
9th commit message:
ECFV: make the VTK output modules compile
--------
10th commit message:
stencil: introduce the concept of primary DOFs
also save an vector of all element pointers in the stencil.
--------
11th commit message:
ECFV: try to fix assembly; add missing timeIdx arguments to the num*() methods
--------
12th commit message:
ECFV: fix stupid mistake in the assembler
--------
13th commit message:
ECFV: remove a few implicit DOF == vertex assumptions
the black-oil example now runs without valgrind complaints until it encounters
a negative oil mole fraction.
--------
14th commit message:
VCFV: make everything compile again
all vertex centered FV examples should now work again...
--------
15th commit message:
rename [ev]cfvmodel.hh to [ev]cfvdiscretization.hh
the classes have already been renamed.
--------
16th commit message:
ECFV: make it work to the point where it can write out the initial solution.
--------
17th commit message:
ECFV: make it work
the local residual/jacobian needed some work in distinguishing primary
and secondary DOFs and there was an minor issue with the serialization
code.
for some reason, it seems still not correct. (-> convergence is too slow.)
--------
18th commit message:
VCFV: make it compile for the black oil model again
--------
19th commit message:
VCFV: make it compile with the remaining models again
--------
20th commit message:
flash model: make it work with ECFV
although this breaks its compatibility with VCFV. (-> next commit)
--------
21st commit message:
adapt the VCFV to make it compatible with the flash model again
--------
22nd commit message:
make all models compile with VCFV again
--------
23rd commit message:
VCFV: more cleanups of the stencil
VcfvStencil now does not have any public attributes anymore. TODO: do
not export attributes in the SubControlVolume and SubControlVolumeFace
classes.
--------
24th commit message:
VCFV: actually update the element pointer
--------
25th commit message:
change the blackoil model back to ECFV
--------
26th commit message:
immiscible model: make it compatible with the ECFV discretization
--------
27th commit message:
PVS model: make it work with ECFV
--------
28th commit message:
NCP model: make it work with ECFV
--------
29th commit message:
rename Vcfv*VelocityModule to *VelocityModule
--------
30th commit message:
richards model: make it work with ECFV
--------
31st commit message:
unify the ECFV and the VCFV VTK output modules
and other cleanups
--------
32nd commit message:
unify the common code of the VCFV and the ECFV disctretizations
--------
33rd commit message:
unify the element contexts between element and vertex centered finite volumes
--------
34th commit message:
unify the local jacobian class of the finite volume discretizations
--------
35th commit message:
replace [VE]vcf(LocalResidual|ElementContext|BoundaryContext|ConstraintsContext) by generic code
--------
36th commit message:
replace the [EV]cfvLocalResidual by generic code
--------
37th commit message:
unify the MultiPhaseProblem and Problem classes, introduce NullBorderListCreator
--------
38th commit message:
remove the discretization specific boundary context
--------
39th commit message:
unify the [EV]cfvDiscretization classes
--------
40th commit message:
Unify [EV]cfvMultiPhaseFluxVariables
--------
41st commit message:
Unify the [EC]cfvNewton* classes
--------
42nd commit message:
Unify [EV]cfvVolumeVariables
--------
43rd commit message:
unify [EV]cfvAssembler
--------
44th commit message:
unified flux variables: fix stupid mistake when calculating pressure gradients
--------
45th commit message:
unify what's to unify for the [EV]CFV properties
--------
46th commit message:
make the method to calculate gradients and values at flux approximation points changeable
Currently, this is used by the vertex centered finite volume method to
be able to use P1-finite element gradients instead of two-point
ones...
--------
47th commit message:
make the restart code work correctly, use the correct DofMapper for VCFV
--------
48th commit message:
actually use the gradient calculator in a model
the immiscible model in this case
--------
49th commit message:
move some files around to where they belong, use the new gradient calculation code in all models
TODO: proper handling of boundary gradients
--------
50th commit message:
fix the stokes model
currently it only works with the vertex centered finite volume
discretization, but the plan is to soon move it to a staggered grid
scheme anyway...
--------
51st commit message:
move all models back to using the vertex centered finite volume discretization by default
--------
52nd commit message:
models: some variable renames and documentation fixes
- scv -> dof
- vert -> dof
- vertex -> dof
- replace 'VCFV'
- fix some typos
--------
53rd commit message:
don't expect UG anymore
since it is quite non-free and hard to get. we now use ALUGrid instead!
--------
54th commit message:
temporarily disable jacobian recycling
--------
55th commit message:
fix writing/reading restart files using the generic code
--------
56th commit message:
fix bug where fluxes were only counted once in the stencil
this only affected the vertex centered finite volumes discretization...
--------
57th commit message:
boundary gradients: use the center of the sub-control volume adjacent to a boundary segment
--------
58th commit message:
make it compile on GCC
--------
59th commit message:
get rid of most hacks
for this, partial reassemble and jacobian recycling was brought
back. For the this and the remaining stuff the main trick is the
introduction of the GridCommHandleFactory concept which constructs
communication handles suited for the respective spatial
discretization...
--------
60th commit message:
fix a few annoying bugs
first, default the convergence criterion for the linear solver did not
honor the initial residual which lead to linear solver breakdowns,
then some debugging code was left in the discrete fracture model and
then there was a bug in the TP gradient approximation class...
this has the consequence that we need a new reference solution for the
discrete fracture problem...
--------
61st commit message:
iterative linear solver: remove the code for the non-default convergence criteria
--------
62nd commit message:
provide the FE cache instead of the local FE
this fixes a segfault in the stokes model caused by the fact that the
local FE was not initialized at this point.
--------
63rd commit message:
(Navier-)Stokes: fix bug due to the transition to unit normals
now, all tests pass for this branch. The only things which need to be
fixed are some annoying performance regressions compared to master and
some bug in the splices feature of the property system...
--------
64th commit message:
some fix for the local residual of the immiscible model
--------
65th commit message:
Navier-Stokes: implement SCV center gradients
There seems to be a bug in the previous implementation (the jacobian
inverse transposed is evaluated using the local, not the global
geometry), so the reference solution for the stokes2c test problem has
also been updated...
--------
66th commit message:
remove the ALUGrid specialization of the LensGridCreator and the YaspGrid one for the fingerproblem
using different grid seems to sometimes cause a different vertex
order, which in turn causes the respective test to fail if the
reference solution was computed using the other grid...
--------
67th commit message:
VCFV: use the correct BorderListCreator
this makes MPI parallel computations work again. apart from
performance regressions, this branch does not exhibit any known
regressions compared to master anymore...
--------
68th commit message:
make verything compile with the element centered finite volume discretization
except the Navier-Stokes and the two-phase DFM models, of course...
--------
69th commit message:
minor fixes
- make the navier-stokes model slighly more generic by using the
proper (in,ex)teriorIndex() methods on sub-control volumes
- make the signature of the calculateValue() template method of the
common two-point gradient approximator match the one of the vertex
centered finite volume one
--------
70th commit message:
fix fallout from the Big Rebase
--------
71st commit message:
ECFV: some bugs in the boundary
--------
72nd commit message:
make computeFlux() compute area-specific quantities
--------
73rd commit message:
fix more bugs in the element centered FV discretization
now eWoms should match Dumux pretty closely...
--------
74th commit message:
coalesce the common code of the multi phase porous medium models into "MultiPhaseBaseModel"
--------
75th commit message:
update reference solutions
these were changed because of the screw-up with the area of boundary
segments...
--------
76th commit message:
rename "ImplicitBase" to "FvBase"
because in eWoms, everything is implicit and these are currently the
base classes for all finite volume discretizations.
--------
77th commit message:
make the spatial discretization selectable using a splice
This requires an opm-core with a the patches from
https://github.com/OPM/opm-core/pull/446 merged...
--------
78th commit message:
rename the properties used for splices to *Splice
--------
79th commit message:
move the files in 'tests/models' to 'tests'
since 'tests' was empty except for the 'models' subdirectory...
--------
80th commit message:
improve and fix the tutorial
--------
81st commit message:
remove the -fno-strict-aliasing flag from the provided option files
seems like recent versions of Dune have been adapted...
--------
82nd commit message:
also compile all CO2 injection simulations using the element centered finite volume discretization
--------
83rd commit message:
PVS model: make it work properly with the element-centered finite volume discretiation
because DOF != number of vertices
The most severe change probably is the removal of the AutoDiff
debugging helper functions which were useful from within a debugger
but unfortunately had to rely on a presumed linker bug in order not to
be removed in the final binary.
Also, some private attributes were unused. These have been removed and
the constructors of their respective classes have been adapted. Once
their intended functionality is actually implemented, they should be
brought back on an as-needed basis.
Thanks to @bska for the review!
The three-argument WellsManager constructor needs access to the real
permeability field lest a null-pointer dereference result when the
problem actually contains any wells.
we do not have a decoupled tutorial anymore since, well, the decoupled
models have been removed. Also since the move to the Opm CMake based
build system, the "How to create a new folder" section in the handbook
was obsolete.
There is some code in place now to create wells for the no-deck case,
but since it does not work correctly yet, the simulator intercepts this
and throws.
Fall back to Eigen's BiCGSTAB solver if UMFPACK is not available. The
BiCGSTAB is built into Eigen and consequently always available when
Eigen is found.
Only public member names have been treated so far. Local variables
will be done shortly, classes maybe not before the next release
cycle. Everything old could be marked deprecated.
Reviewed by Benjamin and Christoph.
Dumux-Svn-Revison: 10761
Ported-By: Andreas Lauser <andreas.lauser@iws.uni-stuttgart.de>
- special status of saturation. In particular, it deals with the
capitalized "S"-indices:
S0Idx -> s0Idx
SnIdx -> snIdx
SwIdx -> swIdx
SOrX1Idx -> sOrX1Idx
SOrX2Idx -> sOrX2Idx
SnOrXidx -> snOrXIdx
SwOrXIdx -> swOrXIdx
Reviewed by Christoph.
Dumux-Svn-Revison: 10756
Ported-By: Andreas Lauser <andreas.lauser@iws.uni-stuttgart.de>
Code is now functionally complete apart from lacking miscibility,
not writing to all promised output variables and not writing the
promised output to disk. Initial testing has been unsuccessful,
so there are bugs in the code.
- time steps for the pressure model can be choosen larger than for the
transport model
- locally small time steps of the std::explicit scheme are less
restrictive
- reviewed by Bernd
Dumux-Svn-Revison: 10700
Ported-By: Andreas Lauser <andreas.lauser@iws.uni-stuttgart.de>
Specifically,
- #include <config.h> where appropriate (all .cpp files)
- Adjust include statements to account for sub-directory locations
of .hpp files.
- Changed interface.
- Read tracerheads (tracer start locations) from file in compute_tof_from_files.
- Initialize tracerheads from wells in compute_tof.
Interface change: solver now requires a linear solver (for the multi-cell blocks only).
Implementation uses new private method assembleSingleCell(), that is a modified copy
of solveSingleCell(). Should refactor.
- it now can generate and install the API documentation ('make install-html')
- the information of the dune.module file is now used much more extensively
- presence of the valgrind headers is tested
- tests which cannot be run for a configuration will now appear as
'skipped' in CDash
- adding tests does not require modifying the toplevel CMakeList.txt anymore
- introduction of the 'EwomsAddTest' cmake macro which removes quite a bit of the
copy-and-paste from the CMakeLists.txt.
- various small loose ends have been fixed
Also:
- Add use_tensorial_basis parameter allowing run-time choice of basis.
- Remove degree argument from solveTof() method, degree is instead obtained
from parameters in constructors. Modified compute_tof* programs to match.
The limiter is experimental and unfinished, untested work in progress.
Limiter is therefore inactive by default.
Also fixed a minor bug: use_cvi_ was not initialized.
this is somewhat similar to what is currently done in the 'implicit'
branch of dumux, but it takes things further:
- ewoms/boxmodels/common -> ewoms/disc/vcfv
(vcfv == vertex centered finite volumes)
- ewoms/boxmodels/vtk -> ewoms/vtk
(possibly this will move to ewoms/io/vtk, TBD)
- ewoms/boxmodels -> ewoms/models
- test/boxmodels -> test/implicit
- the files for the common VCFV code have been renamed from "box*" to
"vcfv\1" and the classes they contain have been renamed accordingly.
The rationale is to reflect the fact that multiple discretizations may
be chosen for any physical model. (Once these discretizations are
implemented, obviously.) All tests still compile for the autotools and
cmake build systems
instead of typing 'make test/common/propertysystem/test_propertysystem'
in the toplevel build directory, one can now just type
'make test_propertysystem'
eWoms hereby declares full independence. Humor aside, the main
technical advantage of this is, that it is now possible to easily
install both, Dumux and eWoms on a system using a package management
system without bad tricks.
Another polymer-specific overload of computeFractionalFlow()
has been added in support of this (this overload deals with
compressible properties.
Also added pressure normalization for situations with arbitrary
absolute pressure.
A polymer-specific overload of computeFractionalFlow()
has been added in support of this.
Also added a minor feature: pressure normalization for
situations with arbitrary absolute pressure.
They do this by using the class PolymerInflowFromDeck
instead of PolymerInflowBasic if there is a WPOLYMER
keyword somewhere in the deck epochs. If there is no
WPOLYMER, the parameters 'poly_start_days' etc. will
be used to construct an instance of PolymerInflowBasic
instead.
Before, it was a single number for the whole domain. It could vary
with time, though.
Simulator behaviour should be identical before and after this commit.
This touches the classes TransportModel*Polymer, Simulator*Polymer,
and the computeInjectedProduced() functions. The PolymerInflow class
and its usage has been replaced with PolymerInflowInterface, and
a subclass PolymerInflowBasic has been created which provides the
old behaviour (using parameters poly_start_days, poly_end_days and
poly_amount).
in addition to last time, don't add authors that are responsible than
5 lines in a file. This mainly makes a difference for very short files
like the .cc files...
finally, the documentation builds without any warnings from
doxygen. This does not mean that the documentation is correct, though:
Quite a bit of prose is still required for the model and problem
descriptions...
"runtime" parameters are gone now, as are groups. both where flawed
concepts: parameters can be overwritten at runtime by definition, and
a parameter that has no compile-time fallback just degrades
performance and is a hassle to deal with because it has to be
specified in a parameter file. The other killed feature, parameter
groups, just made it harder to figure out what the correct command
line argument was to change the parameter (was it
--linear.solver-tolerance, --linear-solver.tolerance or
--linear-solver-tolerance?) and did not provide much value otherwise.
as a consequence all parameters now have compile-time defaults which
allows us to remove the auto-loading of a parameter file at
startup. (These files became quite obnoxious in eWoms when problems
declared their independence from models.)
Finally all parameters must now be registered before they can be used
which allows to properly include them in the usage message.
this time we ignore the commits 024955b5, f34d3482, 292c0084,
153374e8, 54c9450f, 6bc12abc, ee0eb46b, a1f3edc6, 5858986f and
0c4b9162 because these are huge commits that either dealt with white
space clean ups or just moved some files around. Also for the total
lines in a source file we only account for the non-ignored lines.
This time hopfully for good. There were a few bugs in the script to
update them, and the metric was slightly chanted: Now, only authors
that contributed more than 5% of the lines of a file are listed. We
now also properly ignore the copyright headers and the changes made in
commit 024955b5 as the latter just moved a lot of files around.
Conflicts:
Makefile.am
opm/core/fluid/BlackoilPropertiesFromDeck.hpp
opm/core/fluid/SaturationPropsFromDeck.cpp
opm/core/fluid/SaturationPropsFromDeck.hpp
opm/core/fluid/blackoil/BlackoilPvtProperties.cpp
opm/core/fluid/blackoil/BlackoilPvtProperties.hpp
opm/core/fluid/blackoil/SinglePvtDead.cpp
This merge combines three more-or-less orthogonal features
for saturation tables: the option to use StoneII or Simple
three-phase behaviour, the option to fit a spline or not,
and finally setting the number of samples used (if spline
fitting).
Interfaces have changed, the most top-level one being
that BlackoilPropertiesFromDeck::init() now also takes
a ParameterGroup argument.
Recall that the class that used to be called SinglePvtDead has
been renamed to SinglePvtDeadSpline. If 'props_use_spline' is true,
that class is used (this is the default), which makes a monotone
spline that is uniformly, densely sampled. The new class simply
uses linear interpolation in the input tables.
while the git history might be not entirely accurate, it is certainly
much better what is currently there. the authors are sorted by the
number of lines changed in the file.
- the prefix "simple" should only be used if a more complex version of
the same component is available
- deprecated Oil and SimpleDNAPL
approved by coffee break
Dumux-Svn-Revison: 8943
Ported-By: Andreas Lauser <andreas.lauser@iws.uni-stuttgart.de>
This is a change from taking a vector containing the mapping to
deck-consistent logical cartesian indices. The mapping is contained
in the UnstructuredGrid::global_cell member, and may be null. The
change therefore saves the overhead of constructing a vector as a
copy of the data in the grid or (if null) as an identity mapping.
Now we may have a grid generated from deck input using the
keywords DXV, DYV, DZV, which will have a null pointer for
the global_cell mapping. We check if this pointer is null,
and create an identity mapping in this case. The mapping is
needed by the *PropertiesFromDeck classes (and helpers).
this hopefully reduces confusion about what which parameter means. the
Domain* parameters specify the physical size of the simulated domain,
the Cells* specify how many cells the grid has into the direction of
each axis.
the immiscible(ni) model is a model that is independent on the number
of phases and assumes immiscibility. this change is along the lines of
the previous commit for the compositional primary variable switching
model.
to make them self-descriptive and consistent with the other parameters
and properties "TEnd" is renamed to "EndTime" and "DtInitial" to
"InitialTimeStepSize".
Tensor -> DimMatrix
refElem -> refElement
gv -> gridView
remove "AtIP" suffix
*Index -> *Idx for variables
remove ${MODEL_NAME}Index property
consistent argument names for compute(Storage|Flux|Source) in the local residuals
also remove the "MassUpwindWeight" and "UpwindWeight" properties as
they were not really useful.
I also removed the deprecation stuff, as IMO it is more confusing than
helpful. (Ever tried to set the
SpatialParameters instead of SpatialParams in your problem?)
Also move the decoupled spatial parameters from dumux/material to
dumux/decoupled because they are specific to the decoupled models.
most includes are now sorted by abstraction levels, with the most
abstract header first. also some system headers like <string> are now
explicitly included in every file where some of their classes are
used.
the switches are the introduction of "smart primary variables", rate
vectors, and changing the capillary pressure API for the multi-phase
models to the one previously used by the MpNc model.
- this renames historyIdx to timeIdx (I think it expresses what it is meant for better)
- rename localIdx to "spaceIdx" in the problems/spatial parameters
- add a "timeIdx" argument to the problem's methods