... 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.)
For some reason, it changed because of the transition to the primary
variable switching approach. Because I trust the new result more than
the old, let's make this the new reference solution.
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...)
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...
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).
normally, this should fine as it was before this patch because the
non-restarted tests produces more timesteps than the restarted one and
only the last file gets verified, but it used to be quite a hack and
one never knows, so it's wise to explicitly specify this as a
dependency.
Also, this change makes sure that ctest is aware of the number of
cores required by a test, which should lead to less contention...
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.
most warnings were in DUNE and ALUGrid, but these have been
ignored. Also fixing some of these warnings (in particular the
"parameter foo is unused" ones) would make the code harder to read and
understand, so they have been ignored, too...