This fixes "make install" which would otherwise fail with a diagnostic
message of the form
CMake Error at cmake_install.cmake:64 (FILE):
file INSTALL cannot find
opm/autodiff/ConservativeSparseSparseProduct.h
Thanks to HudsonBuildServer for highlighting the issue.
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
The 'props_' table of PVT functions has one entry for each active
phase. Fix four instances of indexing into the table using the
canonical rather than active phase indices.
This is necessary, but not sufficient, to run two-phase problems
without a "dummy" third phase.
This commit replaces an if-else-based query of the primaryVariable_
with the equivalent switch() statement for uniformity with the rest
of the implementation.
This commit introduces support for the RESV control mode of
prediction (WCONPROD) and history-matching (WCONHIST) alike. The
implementation uses class SurfaceToReservoirVoidage<> to compute
coefficients that convert component rates at surface conditions
(i.e., the primary degrees of freedom in the well residual) to phase
rates at reservoir condition. The resulting coefficients can be
entered directly into system matrix of the linearised residual.
Note: We abuse the "distr" mechanism of struct WellControls to store
the conversion coefficients. This may require refactorisation and
clarification at a later stage. In the meantime, it allows for
transparent assembly of well equations--irrespective of surface- or
reservoir (voidage) rates.
Note: We do not yet support injectors controlled by total reservoir
voidage rate--either in history-matching (WCONINJH) or
prediction-scenario capacity.
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.
This was copy-pasted into the class at its inception (a94f1921) and
never used thereafter. If we need it we can bring it back in
modified form at a later stage.
This commit adds a simple facility for converting component rates at
surface conditions to voidage rates at reservoir conditions. It is
intentionally limited in scope and meant to be employed only in the
context of class FullyImplicitBlackoilSolver<> or something very
similar. In particular, class SurfaceToReservoirVoidage<> assumes
that it will be used to compute conversion coefficients for
component rates to voidage rates, and that those coefficients will
typically be entered into the coefficient matrix of a linearised
residual.
Add a trivial test just to demonstrate the setup and calling
process. This is not a feature or correctness test.
The solver (class FullyImplicitBlackoilSolver<>) gained the ability
to do control mode switching/updating in commit 4a22c56 at which
point using WellsManager::conditionsMet() ceased to be useful. This
is a preparatory step towards adding support for RESV-type control
modes.
If we need this type of behaviour in the Simulator*, we can bring it
back (in modified form) at a later time.
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.
Commit 5112b8a misinterpreted the role of index 'i' and, as a result,
installed code that would only define one-sided gravity potentials of
the first cell (roughly)--albeit eventually using the geometry of the
last active cell.
This commit restores the original, intended behaviour.
Class FullyImplicitBlackoilSolver<Grid> already features a list of
"all" cells, built at object construction time. There's no need to
re-compute that list on every call to variableState() (when Gas is
active).
The "xvar" exists only if Gas is active. Therefore, we cannot
extract that variable from "vars" unless we know that Gas is an
active phase. Failing to do so would wrongfully increment 'nextvar'
whence the final BHP variable would be an out-of-bounds access.
Methods 'computeRelperm()' and 'computePressures()' *always* return
a three-element vector of phase properties. We must therefore
translate to canonical phase indices before indexing into the
results.
This changeset disables the effect of commit 778e87d. There appears
to be an unforeseen interaction between the calls to
Find_Package (Boost)
that are implied by module 'opm-parser-prereqs.cmake' and the one
that's directly invoked in 'Findopm-parser.cmake'. Until the
situation can be fully analysed and a complete solution implemented,
this is a temporary measure to restore the build of opm-core and
downstream OPM modules.
The build system depends on knowing if MPI is available. Explicitly
search for MPI to honour that requirement. Don't rely on ISTL's
transitive searching for the same.
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.
That's the convention used elsewhere in the build system and we
should honour that convention. While here, remove the assignment to
PROGRAM_SOURCE_FILES because that variable is no longer referenced
once we start to run the hooks.
This commit adds a few annotations to closing braces on namespaces
and one "#ifdef" conditional. This is an aid to (hopefully) avoid
the problem fixed in commit 688d65e.
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.
The "opm-parser" module is expected to become dependent upon the ERT
library. Defer searching for the parser module until we've
established whether or not ERT is availble.
Suggested by: @andlaus
While reformatting the parser-prereqs file I accidentally replaced
the feature search 'CXX11Features' with 'CXX10Features'. This
commit fixes that blunder.
In propagating the requirements for opm-benchmarks to the other
modules I accidentally removed the 'opm-parser' prerequisite (see
commit 86439d6 for details). This commit restores that prerequisite.
The benchmark library uses Boost::iostreams to do decompression. Since
we only scan for the Boost dependency once, this submodule is added to
all of the projects in order to have a coherent dependency on Boost.
This commit makes a few adjustments to the white-space of file
'opm-parser-prereqs.cmake' to honour the conventions of the other
*-prereqs.cmake files within the OPM project's module suites.
No functional changes.
Commit 70505ff raised opm-core's "Boost" requirement to version 1.44
in order to reflect the requirements of the opm-parser module. This
commit propagates that requirement to all other known modules.
Commit 4aa0eaf introduced density and viscosity evaluators into the
BlackoilPropsAdInterface that accepted an externally assignable
condition to distinguish saturated from unsaturated cases. As a
result of a few low-level technical problems with that approach,
this commit changes those affected interfaces to use the black-oil
specific 'PhasePresence' facility of opm-core's commit a033329.
Update callers accordingly.