Commit Graph

2192 Commits

Author SHA1 Message Date
Bård Skaflestad
2e70fc407e Add Oil Phase Saturation Function Consistency Checks
This commit introduces a set of consistency checks for the oil phase
saturation functions.  These plug into the framework introduced in
commit c3939c544 (PR #5438).  We implement the following four checks
for the gas/oil two-phase system

  - 0 <= SOGCR < 1
  - SWL + SGU <= 1
  - SOGCR < 1 - SWL - SGL
  - SOGCR < 1 - SWL - SGCR

which all guarantee a non-negative (mobile) oil saturation in the
gas/oil system.  Similarly, we implement the following four checks
for the oil/water two-phase system

  - 0 <= SOWCR < 1
  - SGL + SWU <= 1
  - SOWCR < 1 - SWL - SGL
  - SOWCR < 1 - SWCR - SGL

which provide the same guarantees as outlined above, but for the
oil/water system.

We add a base class, PhaseCheckBase<Scalar>, which provides a common
representation of the violated/critical predicates and implement the
specific checks as derived types of this base class.
2024-09-03 12:35:44 +02:00
Arne Morten Kvarving
e3a16df477 add imported opm-models code to buildsystem 2024-09-03 10:49:49 +02:00
Arne Morten Kvarving
bc46647aa5 Import opm-models 2024-09-02 10:55:19 +02:00
Bård Skaflestad
0b40277e01 Revise Convergence Report Collection Procedure
This commit switches the parallel implemenation of function
Opm::gatherConvergenceReport() into using the general serialisation
framework (classes Opm::Serializer<> and Opm::Mpi::Packer).  In
particular, we add serializeOp() functions to each of the types

  - ConvergenceReport
  - ConvergenceReport::ReservoirFailure
  - ConvergenceReport::ReservoirConvergenceMetric
  - ConvergenceReport::WellFailure

and defer the job of converting the objects between in-memory and
byte stream representations to Opm::Serializer<>.  The new special
purpose class CollectConvReports inherits from the latter and uses
its pack() and unpack() member functions, along with its internal
m_buffer data member, to distribute each rank's convergence report
object to all ranks.  We add this feature here, in a very narrowly
scoped use case, to enable testing and experimentation before we
consider adding this distribution mechanism as a general feature in
Opm::MpiSerializer.
2024-08-27 10:50:06 +02:00
Bård Skaflestad
1a6b063824
Merge pull request #5559 from akva2/janitoring
do not capture compile time data in lambda
2024-08-26 10:34:36 +02:00
Arne Morten Kvarving
fb9f7541f3 do not capture compile time data in lambda
quells clang warnings
2024-08-26 08:27:34 +02:00
Tobias Meyer Andersen
d925d62bf2 refactor cusparsematrixoperations 2024-08-23 11:15:18 +02:00
Tobias Meyer Andersen
d2681b26ed refactor opm_cuda_safe_call 2024-08-23 11:12:13 +02:00
Tobias Meyer Andersen
85a9ad2b61 refactor cuistl folder names 2024-08-22 15:32:21 +02:00
Tobias Meyer Andersen
5919b417e3 refactor cuview 2024-08-22 15:27:23 +02:00
Tobias Meyer Andersen
fba1858f42 refactor cuvector 2024-08-22 15:20:20 +02:00
Tobias Meyer Andersen
3aa1767548 refactor cusparsematrix 2024-08-22 15:14:33 +02:00
Tobias Meyer Andersen
0c1ea3ee4d refactor cuseqilu0 2024-08-22 15:07:53 +02:00
Tobias Meyer Andersen
1721a1071f refactor cuowneroverlapcopy 2024-08-22 14:46:38 +02:00
Tobias Meyer Andersen
158619083e refacor cujac 2024-08-22 14:40:23 +02:00
Tobias Meyer Andersen
d17ee3315b refactor CuDILU 2024-08-22 14:28:33 +02:00
Tobias Meyer Andersen
69897753e8 refactor CuBuffer 2024-08-22 14:12:30 +02:00
Tobias Meyer Andersen
3f4ae4ddf4 refactor cuistl namespace 2024-08-22 13:52:50 +02:00
jakobtorben
5d54c50ba0 Add method for defining if preconditioners should be recreated 2024-08-20 17:57:38 +02:00
Arne Morten Kvarving
965c89d7a2 added: (restart-)serialization test for MixingRateControls 2024-08-19 14:03:47 +02:00
Arne Morten Kvarving
b902f83fa6 BlackoilModelParameters: introduce translation unit 2024-08-16 17:15:53 +02:00
Arne Morten Kvarving
280704e2e0 move AdaptiveTimeStepping parameters to TypeTag-free parameter system 2024-08-16 13:22:17 +02:00
Arne Morten Kvarving
e2b8715b42 move EclTimeStepping parameters to TypeTag-free parameter system 2024-08-16 13:22:17 +02:00
Arne Morten Kvarving
3716ee664d move BlackoilModel parameters to TypeTag-free parameter system 2024-08-16 13:20:04 +02:00
Arne Morten Kvarving
aab40a32e2 move EnableTerminalOutput parameter to TypeTag-free parameter system 2024-08-16 13:17:56 +02:00
Arne Morten Kvarving
64557a136d NewtonMaxIterations moved to TypeTag-free parameter system 2024-08-13 20:13:28 +02:00
Arne Morten Kvarving
0195f8f113 NewtonTolerance moved to TypeTag-free parameter system 2024-08-13 20:13:28 +02:00
Arne Morten Kvarving
43f9a46b51 ContinueOnConvergenceError moved to TypeTag-free parameter system 2024-08-13 13:31:11 +02:00
Arne Morten Kvarving
9e11888ccb ThreadsPerProcess moved to TypeTag-free parameter system 2024-08-12 14:48:56 +02:00
Kjetil Olsen Lye
eb3d4e9203
Merge pull request #5441 from multitalentloes/add_opm_cuilu0
Add OpmCuILU0 and clean up cuistl
2024-08-12 09:46:37 +02:00
Tobias Meyer Andersen
7a30aaa46e Add an OPM implementation of ILU0
improve file structure in cuistl
run clang-format
2024-08-09 15:52:42 +02:00
Arne Morten Kvarving
edb99264ea add test for new parameter system 2024-08-09 15:29:27 +02:00
Arne Morten Kvarving
e1bcd00a36 adapt to ParameterSystem typetag removal 2024-08-09 10:56:07 +02:00
Arne Morten Kvarving
a65ddff8f6 changed: BlackoilModel parameters moved to Opm::Parameters namespace 2024-08-06 09:50:02 +02:00
Arne Morten Kvarving
d75b91aaba changed: SimulatorFullyImplicitBlackoil parameters moved to Opm::Parameters namespace 2024-08-06 09:50:02 +02:00
Kjetil Olsen Lye
51e8bb7191
Merge pull request #5392 from multitalentloes/add_CuBuffer
Add CuBuffer and CuView
2024-08-05 15:29:59 +02:00
Tobias Meyer Andersen
e8ac31da16 add CuBuffer and CuView to cuISTL 2024-08-01 16:38:16 +02:00
Tor Harald Sandve
f678c082de Adapt to inj prefix and cleanup 2024-08-01 11:23:00 +02:00
Tor Harald Sandve
5f8916c0c3 Use cell temperature in perforated cell to compute reservoir rates 2024-08-01 11:14:29 +02:00
Markus Blatt
03dc006b88
Merge pull request #5488 from lisajulia/fix/ACTIONX-COMPDAT
Fix/actionx compdat
2024-07-30 17:18:04 +02:00
Lisa Julia Nebel
3d8c1a11b7 Add option to compare two parallel runs 2024-07-25 16:26:20 +02:00
Atgeirr Flø Rasmussen
3e3dd7fa26 BSD and macOS getopts require options first. 2024-07-25 16:19:59 +02:00
Markus Blatt
ca2ef490aa
Merge pull request #5408 from BigDataAccelerate/cpr_rocsparse
rocsparse CPR initial version
2024-07-16 18:57:40 +02:00
Lisa Julia Nebel
c92bad8cfe Change asserts to BOOST_REQUIRE_* in test_tasklets_failure 2024-07-15 14:56:26 +02:00
Lisa Julia Nebel
c78a629528 Fix indentation 2024-07-15 14:52:47 +02:00
Lisa Julia Nebel
0a70296eb9 Change pointer to tasklet runners to smart pointer and add comment about why they are created on the heap 2024-07-15 14:51:52 +02:00
Lisa Julia Nebel
c73a51650f Change lock mechanism to std::lock_guard 2024-07-15 14:22:28 +02:00
Lisa Julia Nebel
4d0179cffc Implement a more polling-based interface for the tasklets failure mechanism 2024-07-12 15:12:41 +02:00
Razvan Nane
8963bf16f9 fix tests 2024-07-12 11:47:25 +02:00
Lisa Julia Nebel
f86623a70c Add test for failing tasklets 2024-07-09 09:44:13 +02:00
Atgeirr Flø Rasmussen
db1be5e92b Fix Damaris test.
The h5diff program returns 1 (failure) if there are any differences at all,
even if using a relative or absolute difference tolerance and seeing no
differences above the tolerance. In that situation, the output will be empty,
but the return value 1.

To make this test behave similar to the other regression tests, we now check
if its output is empty instead.

Also: set relative tolerance to 0.01 and remove the absolute test. This test
is not meant to trigger for numerics changes, but should capture errors in
the writing of the HDF5 file.
2024-07-08 15:57:10 +02:00
Atgeirr Flø Rasmussen
874b136ce9 Enable running test on BSD/MacOS.
BSD getopts() require options first.
2024-07-08 15:55:41 +02:00
Kjetil Olsen Lye
f3b5e0d14d
Merge pull request #5433 from multitalentloes/useRecomendedBlockSize
Autotune thread block size
2024-07-08 14:17:39 +02:00
Tobias Meyer Andersen
085c3a9b16 add new constructor arguments in test instantiations 2024-07-08 11:35:26 +02:00
Arne Morten Kvarving
5c46d9cde5 add damaris test support to update_reference_data.sh 2024-07-03 21:01:54 +02:00
Arne Morten Kvarving
82cd3a2e01 changed: NewtonMaxIterations parameter moved to Opm::Parameters namespace 2024-07-01 14:13:48 +02:00
Arne Morten Kvarving
514eddc950 changed: NewtonTolerance parameter moved to Opm::Parameters namespace 2024-07-01 14:13:48 +02:00
Bård Skaflestad
9f8075e8a0
Merge pull request #5455 from akva2/fvbasediscretization_param_split
Adjust to to changes in fvbaseproperties.hh (moving of parameters to Opm::Parmeters namespace)
2024-07-01 13:22:26 +02:00
Arne Morten Kvarving
3e1c8baa35 changed: ContinueOnConvergenceError parameter moved to Opm::Parameters namespace 2024-06-28 14:43:11 +02:00
Arne Morten Kvarving
afa62ee428 changed: ThreadsPerProcess parameter moved to Opm::Parameters namespace 2024-06-28 14:43:11 +02:00
Bård Skaflestad
0c71d0701c Add MPI Support to Saturation Function Consistency Checks
This commit adds a new public member function

    SatfuncConsistencyChecks<>::collectFailures(root, comm)

which aggregates consistency check violations from all ranks in the
MPI communication object 'comm' onto rank 'root' of 'comm'.  This
amounts to summing the total number of violations from all ranks and
potentially resampling the failure points for reporting purposes.

To this end, extract the body of function processViolation() into a
general helper which performs reservoir sampling and records point
IDs and which uses a call-back function to populate the check values
associated to a single failed check.  Re-implement the original
function in terms of this helper by wrapping exportCheckValues() in
a lambda function.  Extract similar helpers for numPoints() and
anyFailedChecks(), and add a new helper function

    SatfuncConsistencyChecks<>::incorporateRankViolations()

which brings sampled points from an MPI rank into the 'root's
internal data structures.

One caveat applies here.  Our current approach to collecting check
failures implies that calling member function reportFailures() is
safe only on the 'root' process in a parallel run.  On the other
hand functions anyFailedChecks() and anyFailedCriticalChecks() are
safe, and guaranteed to return the same answer, on all MPI ranks.

On a final note, the internal helper functions are at present mostly
implemented in terms of non-owning pointers.  I intend to switch to
using 'std::span<>' once we enable C++20 mode.
2024-06-28 11:04:53 +02:00
Kjetil Olsen Lye
9b414419e7
Merge pull request #5404 from multitalentloes/add_dilu_LU_splitting
Add cudilu lu splitting
2024-06-27 14:30:45 +02:00
Bård Skaflestad
c3939c5444 Add New Platform for Saturation Function Consistency Checks
The intention is that this will ultimately replace the existing
RelpermDiagnostics component which does not really work in parallel
and which does not report enough context to help diagnose underlying
issues.  For now, though, we just add the shell of a new set of
checks and hook that up to the build.

Class SatfuncConsistencyChecks<Scalar> manages a configurable set of
consistency checks, the implementations of which must publicly
derive from SatfuncConsistencyChecks<Scalar>::Check.  Client code
will configure a set of checks by first calling

    SatfuncConsistencyChecks<Scalar>::resetCheckSet()

then register individual checks by calling

    SatfuncConsistencyChecks<Scalar>::addCheck()

and finally build requisite internal structures by calling

    SatfuncConsistencyChecks<Scalar>::finaliseCheckSet()

Client code will then run the checks by calling

    SatfuncConsistencyChecks<Scalar>::checkEndpoints()

typically in a loop.  Class SatfuncConsistencyChecks<Scalar> will
count consistency check failures and attribute these to each
individual check as needed.  We also maintain separate counts for
"Standard" and "Critical" failures.  The former will typically
generate warnings while the latter will typically cause the
simulation run to stop.  Individual checks get to decide which check
is "Critical", and client code gets to decide how to respond to
"Critical" failures.

Member function SatfuncConsistencyChecks<Scalar>::reportFailures()
will generate a textual report of the known set of consistency check
failures at a give severity level.

As an internal implementation detail, SatfuncConsistencyChecks uses
"reservoir sampling"
(https://en.wikipedia.org/wiki/Reservoir_sampling) to track details
about individual failed checks.  We maintain at most a fixed number
of individual points (constructor argument).
2024-06-26 12:17:00 +02:00
Bård Skaflestad
26cd7ab993 Move opm/core/props to opm/simulators/utils
The opm/core directory is no longer meaningful, and it contains only
components which might collectively be described as simulator
utilities.
2024-06-25 12:22:09 +02:00
Tobias Meyer Andersen
82ff782d5f clang format 2024-06-18 11:42:00 +02:00
Svenn Tveit
84cdef1135 Fix solution tracers and well output.
-Only output or restart solution tracers for gas/oil tracers with DISGAS/VAPOIL enabled (no solution tracers in water phase!).
-Initial tracers (free/solution) will be set to zero initially if TBLK/TVDP is not given.
- Do not calculate mass transfer between free and solution tracers if it is not necessary.
-Calculate well rates using updated tracer concentrations
2024-06-10 14:50:56 +02:00
Svenn Tveit
61cfcfa523 Fixed vector input in tracer serialization test 2024-06-10 14:50:56 +02:00
Lisa Julia Nebel
ecf7bd1e52 Test for skipping the ghost entries using Jacobi preconditioner 2024-06-07 14:40:58 +02:00
Tobias Meyer Andersen
9b2f41ad96 Add option to split the matrix into diagonal,
strictly lower and stricly upper part.
Add tests checking that the result matches
the CPU dilu implementation.
2024-06-05 13:35:54 +02:00
Stein Krogstad
6318335d76 Update test_vfpproperties 2024-05-31 14:11:10 +02:00
Arne Morten Kvarving
bcbac79486
Merge pull request #5380 from akva2/linalg_template_scalar
LinAlg classes: template Scalar type
2024-05-31 08:40:11 +02:00
Kai Bao
e968da28bb renaming calcRates to calcResvCoeff
and calcInjRates to calcInjResvCoeff.
2024-05-29 22:29:12 +02:00
Bård Skaflestad
a3a2b7a978 Make SummaryState Objects Aware of Undefined UDQ Value
This PR switches to calling the SummaryState constructor which is
aware of the value of undefined UDQs (OPM/opm-common#4052) directly.

While here, also sort headers, split some long lines, and prefer
initialisation lists to constructor body assignments.
2024-05-29 09:16:56 +02:00
Arne Morten Kvarving
ff39bc3b03 WellContribution: template Scalar type 2024-05-24 14:09:11 +02:00
Bård Skaflestad
9841c5d21c
Merge pull request #5377 from akva2/equil_template_scalar
InitStateEquil: template Scalar type
2024-05-23 10:48:04 +02:00
Arne Morten Kvarving
4bef925974 InitStateEquil: use Scalar type from FluidSystem 2024-05-23 09:39:49 +02:00
Arne Morten Kvarving
4cfb7a8566 EquilibrationHelpers: template Scalar type 2024-05-23 09:38:27 +02:00
Arne Morten Kvarving
bac2087b85 WellProdIndexCalculator: template Scalar type 2024-05-22 15:21:37 +02:00
Arne Morten Kvarving
27d99f78ec ParallelWBPCalculation: template Scalar type 2024-05-22 10:51:12 +02:00
Arne Morten Kvarving
b68a854909 ParallelPAvgDynamicSourceData: template Scalar type 2024-05-22 10:51:07 +02:00
Arne Morten Kvarving
0481c7c0b2 adjust to PAvgCalculator templating 2024-05-22 10:51:07 +02:00
Arne Morten Kvarving
59e6d4db08 adjust to PAvgDynamicSourceData templating 2024-05-22 10:51:07 +02:00
Arne Morten Kvarving
16f5290038 ParallelWellInfo: template Scalar type 2024-05-22 09:48:22 +02:00
Arne Morten Kvarving
81189b89c7 PerforationData: template Scalar type 2024-05-22 09:48:07 +02:00
Arne Morten Kvarving
d5d16eaee4 VFPHelpers: move some functions into a class with static members
and template Scalar type
2024-05-21 17:01:30 +02:00
Arne Morten Kvarving
29d142b5e4 VFPProdProperties: template Scalar type 2024-05-21 17:01:30 +02:00
Arne Morten Kvarving
b74b170d5b fixed: build with dune-fem 2.9 2024-05-16 10:58:08 +02:00
Bård Skaflestad
a05d1358c6
Merge pull request #5362 from akva2/janitoring
fixed: use getCommuncation instead of getCollectiveCommuncation
2024-05-16 09:36:28 +02:00
Arne Morten Kvarving
ff80e92e9d fixed: also run the RestartSerialization tests without dune-fem
we want both tests when dune-fem is present
2024-05-16 09:14:15 +02:00
Arne Morten Kvarving
2cc2c89b5d fixed: use getCommuncation instead of getCollectiveCommuncation
latter causes a deprecation warning
2024-05-16 09:11:38 +02:00
Atgeirr Flø Rasmussen
226410cd44
Merge pull request #5303 from akva2/gaslift_template_scalar
GasLift: template Scalar type
2024-05-14 09:59:42 +02:00
Arne Morten Kvarving
66131bd350
Merge pull request #5253 from multitalentloes/script_test
Add HIP support
2024-05-07 08:02:53 +02:00
Tobias Meyer Andersen
e9d6b326cc Add HIP support for AMD GPUs
This commits adds cmake functionality that can
hipify the cuistl framework to support AMD GPUs.

Some tests have been written as HIP does not mirror
CUDA exactly.

CONVERT_CUDA_TO_HIP is the new CMAKE argument.
CMAKE version is increased to include HIP
as a language (3.21 required).

A macro is added to create a layer of indirection
that will make only cuistl files that have been
changed rehipified.

Some BDA stuff is extracted to make sure CUDA
is not accidentally included.
2024-05-06 15:56:53 +02:00
Bård Skaflestad
027eed16e9 Report CNV Violation Pore-Volume Fraction to INFOITER
This commit includes the fraction of pore-volume whose CNV targets
are violated as a new per-iteration quantity in the INFOITER file
(--output-extra-convergence-info=iteration), with the column header
"CnvErrPvFrac".  We collect the values which are already calculated
in

    BlackoilModel<>::getReservoirConvergence()

and store these as a pair of numerator and denominator in the
ConvergenceReport class.  Note that we need both the numerator and
the denominator in order to aggregate contributions from multiple
ranks.

While here, also make a few more objects 'const' and calculate
column widths directly instead of the maximum number of characters
in writeConvergenceHeader().
2024-05-06 11:31:47 +02:00
Atgeirr Flø Rasmussen
da5f20a0d9
Merge pull request #5145 from multitalentloes/add_gpu_direct
Add GPU Direct
2024-04-29 14:08:25 +02:00
Arne Morten Kvarving
09065dd130 GasLiftSingleWellGeneric: template Scalar type 2024-04-24 15:31:13 +02:00
Arne Morten Kvarving
772b00bc19 GasLiftGroupInfo: template Scalar type 2024-04-24 15:31:13 +02:00
Arne Morten Kvarving
3ec8a22e59 fixed: use the eclipse grid from the eclipse state in test_nonnc
if we use a separate instance the actnum arrays get out of sync. in
particular the two cells with PORV == 0 will not be marked as inactive
in the actnum array of the separate instance. this leads to a segfault
in lookUpData as the field props will have those cells filtered, while the grid
still has the cells active.
2024-04-24 10:30:46 +02:00
Arne Morten Kvarving
cc5f692bb3 test_nonnc: convert to boost unit test 2024-04-24 10:30:15 +02:00
Bård Skaflestad
74df895f67
Merge pull request #5301 from atgeirr/fix-option-order-bsd
BSD versions of getopt(), including macOS, require options first.
2024-04-23 14:47:17 +02:00