Nektar++
Metric.cpp
Go to the documentation of this file.
1///////////////////////////////////////////////////////////////////////////////
2//
3// File: Metric.cpp
4//
5// For more information, please see: http://www.nektar.info
6//
7// The MIT License
8//
9// Copyright (c) 2006 Division of Applied Mathematics, Brown University (USA),
10// Department of Aeronautics, Imperial College London (UK), and Scientific
11// Computing and Imaging Institute, University of Utah (USA).
12//
13// Permission is hereby granted, free of charge, to any person obtaining a
14// copy of this software and associated documentation files (the "Software"),
15// to deal in the Software without restriction, including without limitation
16// the rights to use, copy, modify, merge, publish, distribute, sublicense,
17// and/or sell copies of the Software, and to permit persons to whom the
18// Software is furnished to do so, subject to the following conditions:
19//
20// The above copyright notice and this permission notice shall be included
21// in all copies or substantial portions of the Software.
22//
23// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29// DEALINGS IN THE SOFTWARE.
30//
31// Description: Implementation of the metric base class.
32//
33///////////////////////////////////////////////////////////////////////////////
34
35#include <Metric.h>
36#include <boost/algorithm/string.hpp>
37
38using namespace std;
39
40namespace Nektar
41{
43{
44 static MetricFactory instance;
45 return instance;
46}
47
48/**
49 * @brief Constructor.
50 */
51Metric::Metric(TiXmlElement *metric, bool generate)
52 : m_generate(generate), m_metric(metric)
53{
54 if (!metric->Attribute("id"))
55 {
56 cerr << "Metric has no ID" << endl;
57 }
58 if (!metric->Attribute("type"))
59 {
60 cerr << "Metric has no type" << endl;
61 }
62 m_id = atoi(metric->Attribute("id"));
63 m_type = boost::to_upper_copy(string(metric->Attribute("type")));
64}
65
66/// Calls a metric's \p v_Test function (or \p v_Generate if \p m_generate).
67bool Metric::Test(std::istream &pStdout, std::istream &pStderr)
68{
69 if (m_generate)
70 {
71 v_Generate(pStdout, pStderr);
72 return true;
73 }
74 else
75 {
76 return v_Test(pStdout, pStderr);
77 }
78}
79} // namespace Nektar
Datatype of the NekFactory used to instantiate classes derived from the Advection class.
Definition: Metric.h:129
bool Test(std::istream &pStdout, std::istream &pStderr)
Calls a metric's v_Test function (or v_Generate if m_generate).
Definition: Metric.cpp:67
Metric(TiXmlElement *metric, bool generate)
Constructor.
Definition: Metric.cpp:51
virtual bool v_Test(std::istream &pStdout, std::istream &pStderr)=0
Virtual function to test the metric. Should be redefined in derived classes.
virtual void v_Generate(std::istream &pStdout, std::istream &pSrderr)=0
Virtual function to generate the metric. Should be redefined in derived classes.
int m_id
Stores the ID of this metric.
Definition: Metric.h:92
std::string m_type
Stores the type of this metric (uppercase).
Definition: Metric.h:94
bool m_generate
Determines whether to generate this metric or not.
Definition: Metric.h:96
MetricFactory & GetMetricFactory()
Definition: Metric.cpp:42
STL namespace.