20 #ifndef OPM_SATFUNC_CONSISTENCY_CHECK_MODULE_HPP 21 #define OPM_SATFUNC_CONSISTENCY_CHECK_MODULE_HPP 23 #include <opm/simulators/utils/ParallelCommunication.hpp> 30 #include <string_view> 34 template <
typename Scalar>
35 struct EclEpsScalingPointsInfo;
44 template <
typename Scalar>
55 virtual ~Check() =
default;
93 virtual std::string
condition()
const = 0;
103 virtual void columnNames(std::string* headers)
const = 0;
137 const std::size_t numSamplePoints);
176 this->formatPointID_ = formatPointID;
186 void addCheck(std::unique_ptr<Check> check);
251 using RandomBitGenerator = std::minstd_rand;
254 struct ViolationSample
259 std::vector<std::size_t> count{};
266 std::vector<std::size_t> pointID{};
275 std::vector<Scalar> checkValues{};
284 using ViolationCollection = std::array
291 std::string pointName_{};
294 std::size_t numSamplePoints_;
305 std::vector<typename std::vector<Scalar>::size_type> startCheckValues_{};
310 ViolationCollection violations_{};
314 std::vector<std::unique_ptr<Check>> battery_{};
322 std::unique_ptr<RandomBitGenerator> urbg_{};
341 const Parallel::Communication& comm,
342 ViolationSample& violation);
349 void buildStructure(ViolationSample& violation);
383 template <
typename PopulateCheckValues>
384 void processViolation(ViolationSample& violation,
385 const std::size_t checkIx,
386 const std::size_t pointID,
387 PopulateCheckValues&& populateCheckValues);
404 const std::size_t checkIx,
405 const std::size_t pointID);
420 void incorporateRankViolations(
const std::size_t* count,
421 const std::size_t* pointID,
422 const Scalar* checkValues,
423 ViolationSample& violation);
432 std::size_t getSampleIndex(
const std::size_t sampleSize);
436 void ensureRandomBitGeneratorIsInitialised();
445 std::vector<std::size_t>::size_type
446 violationPointIDStart(
const std::size_t checkIx)
const;
458 typename std::vector<Scalar>::size_type
459 violationValueStart(
const std::size_t checkIx,
460 const std::size_t sampleIx)
const;
475 void writeReportHeader(
const Check* currentCheck,
476 const std::size_t violationCount,
494 void writeTabulatedReportSample(
const std::size_t nValueChar,
495 const Check* currentCheck,
496 const ViolationSample& violation,
497 const std::size_t checkIx,
510 std::pair<std::vector<std::string>, std::string::size_type>
511 formatPointIDs(
const ViolationSample& violation,
512 const std::size_t checkIx)
const;
521 std::vector<std::string>
522 collectColumnHeaders(
const Check* currentCheck)
const;
534 std::vector<std::size_t>
535 sortedPointIndices(
const ViolationSample& violation,
536 const std::size_t checkIx)
const;
550 std::size_t numPoints(
const ViolationSample& violation,
551 const std::size_t checkIx)
const;
562 std::size_t numPoints(
const std::size_t violationCount)
const;
580 return static_cast<typename ViolationCollection::size_type
>(level);
599 template <
typename Body>
600 void checkLoop(Body&& body);
618 template <
typename Body>
619 void checkLoop(Body&& body)
const;
624 #endif // OPM_SATFUNC_CONSISTENCY_CHECK_MODULE_HPP void checkEndpoints(const std::size_t pointID, const EclEpsScalingPointsInfo< Scalar > &endPoints)
Run current set of checks against a specific set of end-points.
Definition: SatfuncConsistencyChecks.cpp:122
Call-back interface for an individual check.
Definition: SatfuncConsistencyChecks.hpp:51
virtual std::size_t numExportedCheckValues() const =0
Number of Scalar values involved in the check.
void resetCheckSet()
Clear current set of end-point checks.
Definition: SatfuncConsistencyChecks.cpp:86
void finaliseCheckSet()
Commit current set of checks and build requisite internal support structures.
Definition: SatfuncConsistencyChecks.cpp:109
virtual bool isViolated() const =0
Whether or not last set of end-points violated this particular check.
SatfuncConsistencyChecks & operator=(const SatfuncConsistencyChecks &rhs)=delete
Deleted assignment operator.
ViolationLevel
Severity level for consistency condition violation.
Definition: SatfuncConsistencyChecks.hpp:107
std::function< void(std::string_view)> ReportRecordOutput
Call-back function type for outputting a single record of a consistency condition violation report...
Definition: SatfuncConsistencyChecks.hpp:122
virtual void columnNames(std::string *headers) const =0
Retrieve names of the exported check values.
bool anyFailedStandardChecks() const
Whether or not any checks failed at the Standard level.
Definition: SatfuncConsistencyChecks.cpp:165
void addCheck(std::unique_ptr< Check > check)
Add specific check to in-progress check set.
Definition: SatfuncConsistencyChecks.cpp:100
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition: blackoilbioeffectsmodules.hh:45
virtual void test(const EclEpsScalingPointsInfo< Scalar > &endPoints)=0
Run specific check against a set of saturation function end-points.
Definition: SatfuncCheckPointInterface.hpp:28
Consistency condition violated, but we're able to continue the run.
virtual void exportCheckValues(Scalar *exportedCheckValues) const =0
Get a linearised copy of the Scalar values involved in the check.
SatfuncConsistencyChecks & setPointIDFormatCallback(const PointIDFormatCallback &formatPointID)
Replace formatting function for end-point IDs.
Definition: SatfuncConsistencyChecks.hpp:174
~SatfuncConsistencyChecks()=default
Destructor.
SatfuncConsistencyChecks(std::string_view pointName, const std::size_t numSamplePoints)
Constructor.
Definition: SatfuncConsistencyChecks.cpp:51
virtual std::string condition() const =0
Textual representation of the consistency condition.
std::function< std::string(std::size_t)> PointIDFormatCallback
Call-back function type for formatting a numeric end-point ID.
Definition: SatfuncConsistencyChecks.hpp:125
void reportFailures(const ViolationLevel level, const ReportRecordOutput &emitReportRecord) const
Generate textual summary output of all failed consistency checks at specific level.
Definition: SatfuncConsistencyChecks.cpp:178
Implementation helper. Must be last enumerator.
Consistency condition violated and we're not able to continue the run.
Platform for running sets of consistency checks against collection of saturation function end-points...
Definition: SatfuncConsistencyChecks.hpp:45
bool anyFailedCriticalChecks() const
Whether or not any checks failed at the Critical level.
Definition: SatfuncConsistencyChecks.cpp:171
void collectFailures(int root, const Parallel::Communication &comm)
Collect consistency violations from all ranks in MPI communicator.
Definition: SatfuncConsistencyChecks.cpp:150
virtual bool isCritical() const =0
Whether or not this check is critical to the simulator's ability to run the case. ...
virtual std::string description() const =0
Descriptive textual summary of this check.
virtual ~Check()=default
Virtual destructor since class has virtual functions.