SPH
Diagnostics.h
Go to the documentation of this file.
1 #pragma once
2 
7 
9 #include "quantities/Storage.h"
10 #include <map>
11 
13 
17  std::string description;
18 
22  std::map<Size, std::string> offendingParticles;
23 };
24 
26 
31 class IDiagnostic : public Polymorphic {
32 public:
33  virtual DiagnosticsReport check(const Storage& storage, const Statistics& stats) const = 0;
34 };
35 
38 private:
39  Float radius;
40  Float limit;
41 
42 public:
43  struct Pair {
45  };
46 
50  explicit ParticlePairingDiagnostic(const Float radius = 2._f, const Float limit = 1.e-2_f)
51  : radius(radius)
52  , limit(limit) {}
53 
63  Array<Pair> getPairs(const Storage& storage) const;
64 
66  virtual DiagnosticsReport check(const Storage& storage, const Statistics& stats) const override;
67 };
68 
71  Float radius;
72  Float limit;
73 
74 public:
77  SmoothingDiscontinuityDiagnostic(const Float radius, const Float limit = 0.5_f)
78  : radius(radius)
79  , limit(limit) {}
80 
81  virtual DiagnosticsReport check(const Storage& storage, const Statistics& stats) const override;
82 };
83 
89 private:
90  Float factor;
91 
92 public:
94  explicit CourantInstabilityDiagnostic(const Float timescaleFactor);
95 
96  virtual DiagnosticsReport check(const Storage& storage, const Statistics& stats) const override;
97 };
98 
103 public:
104  virtual DiagnosticsReport check(const Storage& storage, const Statistics& stats) const override;
105 };
106 
NAMESPACE_SPH_BEGIN
Definition: BarnesHut.cpp:13
const float radius
Definition: CurveDialog.cpp:18
uint32_t Size
Integral type used to index arrays (by default).
Definition: Globals.h:16
double Float
Precision used withing the code. Use Float instead of float or double where precision is important.
Definition: Globals.h:13
#define NAMESPACE_SPH_END
Definition: Object.h:12
Return value of function that may fail, containing either SUCCEES (true) or error message.
Container for storing particle quantities and materials.
Generic dynamically allocated resizable storage.
Definition: Array.h:43
Expected-like class that does not contain any value.
Definition: Outcome.h:44
Checks for excessively large magnitudes of acceleration, indicating a numerical instability.
Definition: Diagnostics.h:88
CourantInstabilityDiagnostic(const Float timescaleFactor)
Definition: Diagnostics.cpp:84
virtual DiagnosticsReport check(const Storage &storage, const Statistics &stats) const override
Definition: Diagnostics.cpp:87
Base class of diagnostics of the run.
Definition: Diagnostics.h:31
virtual DiagnosticsReport check(const Storage &storage, const Statistics &stats) const =0
Checks for clamping of excesivelly low values of internal energy.
Definition: Diagnostics.h:102
virtual DiagnosticsReport check(const Storage &storage, const Statistics &stats) const override
Checks for particle pairs, indicating a pairing instability.
Definition: Diagnostics.h:37
ParticlePairingDiagnostic(const Float radius=2._f, const Float limit=1.e-2_f)
Definition: Diagnostics.h:50
virtual DiagnosticsReport check(const Storage &storage, const Statistics &stats) const override
Checks for particle pairs, returns SUCCESS if no pair is found.
Definition: Diagnostics.cpp:31
Array< Pair > getPairs(const Storage &storage) const
Returns the list of particles forming pairs, i.e. particles on top of each other or very close.
Definition: Diagnostics.cpp:10
Checks for large differences of smoothing length between neighbouring particles.
Definition: Diagnostics.h:70
SmoothingDiscontinuityDiagnostic(const Float radius, const Float limit=0.5_f)
Definition: Diagnostics.h:77
virtual DiagnosticsReport check(const Storage &storage, const Statistics &stats) const override
Definition: Diagnostics.cpp:47
Object holding various statistics about current run.
Definition: Statistics.h:22
Container storing all quantities used within the simulations.
Definition: Storage.h:230
Object containing a reported error message.
Definition: Diagnostics.h:15
std::string description
Description of the encountered problem.
Definition: Diagnostics.h:17
std::map< Size, std::string > offendingParticles
Problematic particles and optional error message for each of them.
Definition: Diagnostics.h:22
Base class for all polymorphic objects.
Definition: Object.h:88