Nektar++
Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
Nektar::MetricPrecon Class Reference

#include <MetricPrecon.h>

Inheritance diagram for Nektar::MetricPrecon:
[legend]

Static Public Member Functions

static MetricSharedPtr create (TiXmlElement *metric, bool generate)
 
- Static Public Member Functions inherited from Nektar::MetricRegex
static MetricSharedPtr create (TiXmlElement *metric, bool generate)
 

Static Public Attributes

static std::string type
 
static std::string defaultTolerance = "2"
 
- Static Public Attributes inherited from Nektar::MetricRegex
static std::string type
 

Protected Member Functions

 MetricPrecon (TiXmlElement *metric, bool generate)
 
void v_Generate (std::istream &pStdout, std::istream &pStderr) override
 Virtual function to generate the metric. Should be redefined in derived classes. More...
 
- Protected Member Functions inherited from Nektar::MetricRegex
 MetricRegex (TiXmlElement *metric, bool generate)
 Constructor. More...
 
bool v_Test (std::istream &pStdout, std::istream &pStderr) override
 Test output against a regex expression and set of matches. More...
 
void v_Generate (std::istream &pStdout, std::istream &pStderr) override
 Test output against a regex expression and set of matches. More...
 
virtual bool v_Test (std::istream &pStdout, std::istream &pStderr)=0
 Virtual function to test the metric. Should be redefined in derived classes. More...
 
virtual void v_Generate (std::istream &pStdout, std::istream &pSrderr)=0
 Virtual function to generate the metric. Should be redefined in derived classes. More...
 

Protected Attributes

std::string m_varTolerance
 
- Protected Attributes inherited from Nektar::MetricRegex
std::regex m_regex
 Storage for the boost regex. More...
 
std::vector< std::vector< MetricRegexFieldValue > > m_matches
 Stores the multiple matches defined in each <MATCH> tag. More...
 
bool m_unordered = false
 If true, regex matches may be in any order in output. More...
 
bool m_useStderr = false
 If true, use stderr for testing/generation instead of stdout. More...
 
- Protected Attributes inherited from Nektar::Metric
int m_id
 Stores the ID of this metric. More...
 
std::string m_type
 Stores the type of this metric (uppercase). More...
 
bool m_generate
 Determines whether to generate this metric or not. More...
 
bool m_average = false
 Indicates whether a metric supports averaging results from multiple runs. More...
 
TiXmlElement * m_metric
 Pointer to XML structure containing metric definition. More...
 

Additional Inherited Members

- Public Member Functions inherited from Nektar::MetricRegex
 ~MetricRegex () override
 
- Public Member Functions inherited from Nektar::Metric
 Metric (TiXmlElement *metric, bool generate)
 Constructor. More...
 
virtual ~Metric ()=default
 
bool Test (std::istream &pStdout, std::istream &pStderr)
 Calls a metric's v_Test function (or v_Generate if m_generate). More...
 
void Generate (std::istream &pStdout, std::istream &pStderr)
 
std::string GetType ()
 Return metric type. More...
 
int GetID ()
 Return metric ID. More...
 
bool SupportsAverage () const
 Return whether this metric supports averaging results from multiple runs. More...
 

Detailed Description

Definition at line 43 of file MetricPrecon.h.

Constructor & Destructor Documentation

◆ MetricPrecon()

Nektar::MetricPrecon::MetricPrecon ( TiXmlElement *  metric,
bool  generate 
)
protected

Definition at line 45 of file MetricPrecon.cpp.

46 : MetricRegex(metric, generate)
47{
48 // Set up the regular expression. This (optionally) matches a variable
49 // name if it exists: first field is variable name, second field is L2
50 // error.
51 m_regex = "^CG iterations made = (\\d+) .*";
52
53 // Find the number of iterations to match against.
54 TiXmlElement *value = metric->FirstChildElement("value");
55 ASSERTL0(value || m_generate, "Missing value tag for precon metric!");
56
57 while (value)
58 {
59 // Set up a match with two fields which correspond with the
60 // subexpression above. The first is the variable name, second is
61 // the precon iteration count.
62 ASSERTL0(value->Attribute("tolerance"),
63 "Missing tolerance in preconditioner metric");
64 ASSERTL0(!EmptyString(value->GetText()),
65 "Missing value in preconditioner metric.");
66
67 MetricRegexFieldValue val;
68 val.m_value = value->GetText();
69 val.m_useIntTolerance = true;
70 val.m_intTolerance = atoi(value->Attribute("tolerance"));
71
72 if (!m_generate)
73 {
74 std::vector<MetricRegexFieldValue> tmp(1);
75 tmp[0] = val;
76 m_matches.push_back(tmp);
77 }
78 else
79 {
80 m_varTolerance = value->Attribute("tolerance");
81 }
82
83 value = value->NextSiblingElement("value");
84 }
85}
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:208
bool m_generate
Determines whether to generate this metric or not.
Definition: Metric.h:96
std::string m_varTolerance
Definition: MetricPrecon.h:57
MetricRegex(TiXmlElement *metric, bool generate)
Constructor.
Definition: MetricRegex.cpp:51
std::vector< std::vector< MetricRegexFieldValue > > m_matches
Stores the multiple matches defined in each <MATCH> tag.
Definition: MetricRegex.h:84
std::regex m_regex
Storage for the boost regex.
Definition: MetricRegex.h:82
bool EmptyString(const char *s)
Check to see whether the given string s is empty (or null).
Definition: Metric.h:50

References ASSERTL0, Nektar::EmptyString(), Nektar::Metric::m_generate, Nektar::MetricRegexFieldValue::m_intTolerance, Nektar::MetricRegex::m_matches, Nektar::MetricRegex::m_regex, Nektar::MetricRegexFieldValue::m_useIntTolerance, Nektar::MetricRegexFieldValue::m_value, and m_varTolerance.

Referenced by create().

Member Function Documentation

◆ create()

static MetricSharedPtr Nektar::MetricPrecon::create ( TiXmlElement *  metric,
bool  generate 
)
inlinestatic

Definition at line 46 of file MetricPrecon.h.

47 {
48 return MetricSharedPtr(new MetricPrecon(metric, generate));
49 }
MetricPrecon(TiXmlElement *metric, bool generate)
std::shared_ptr< Metric > MetricSharedPtr
A shared pointer to an EquationSystem object.
Definition: Metric.h:124

References MetricPrecon().

◆ v_Generate()

void Nektar::MetricPrecon::v_Generate ( std::istream &  pStdout,
std::istream &  pSrderr 
)
overrideprotectedvirtual

Virtual function to generate the metric. Should be redefined in derived classes.

Parameters
pStdoutReference to test output stream.
pSrderrReference to test error stream.

Implements Nektar::Metric.

Definition at line 87 of file MetricPrecon.cpp.

88{
89 // Run MetricRegex to generate matches.
90 MetricRegex::v_Generate(pStdout, pStderr);
91
92 // First remove all existing values.
93 m_metric->Clear();
94
95 // Now create new values.
96 for (int i = 0; i < m_matches.size(); ++i)
97 {
98 ASSERTL0(m_matches[i].size() == 1,
99 "Wrong number of matches for regular expression.");
100
101 std::string tol = MetricPrecon::defaultTolerance;
102 TiXmlElement *value = new TiXmlElement("value");
103
104 if (m_varTolerance != "")
105 {
106 tol = m_varTolerance;
107 }
108
109 value->SetAttribute("tolerance", tol);
110 value->LinkEndChild(new TiXmlText(m_matches[i][0].m_value));
111 m_metric->LinkEndChild(value);
112 }
113}
TiXmlElement * m_metric
Pointer to XML structure containing metric definition.
Definition: Metric.h:101
static std::string defaultTolerance
Definition: MetricPrecon.h:52
void v_Generate(std::istream &pStdout, std::istream &pStderr) override
Test output against a regex expression and set of matches.

References ASSERTL0, defaultTolerance, Nektar::MetricRegex::m_matches, Nektar::Metric::m_metric, m_varTolerance, and Nektar::MetricRegex::v_Generate().

Member Data Documentation

◆ defaultTolerance

std::string Nektar::MetricPrecon::defaultTolerance = "2"
static

Definition at line 52 of file MetricPrecon.h.

Referenced by v_Generate().

◆ m_varTolerance

std::string Nektar::MetricPrecon::m_varTolerance
protected

Definition at line 57 of file MetricPrecon.h.

Referenced by MetricPrecon(), and v_Generate().

◆ type

std::string Nektar::MetricPrecon::type
static
Initial value:
=
std::string RegisterCreatorFunction(std::string key, CreatorFunction func)
Definition: Metric.h:133
static MetricSharedPtr create(TiXmlElement *metric, bool generate)
Definition: MetricPrecon.h:46
MetricFactory & GetMetricFactory()
Definition: Metric.cpp:42

Definition at line 51 of file MetricPrecon.h.