Changed: Unifying parsing of the projection method option into a common method.
This commit is contained in:
@@ -128,7 +128,7 @@ bool SIMoptions::parseOutputTag (const TiXmlElement* elem)
|
||||
utl::getAttribute(elem,"nw",nViz[2]);
|
||||
}
|
||||
|
||||
else if (!strcasecmp(elem->Value(), "logging")) {
|
||||
else if (!strcasecmp(elem->Value(),"logging")) {
|
||||
utl::getAttribute(elem,"output_pid",printPid);
|
||||
if (printPid != -1 && printPid != IFEM::getOptions().printPid) {
|
||||
IFEM::getOptions().printPid = printPid;
|
||||
@@ -166,8 +166,7 @@ bool SIMoptions::parseOutputTag (const TiXmlElement* elem)
|
||||
}
|
||||
|
||||
else if (!strcasecmp(elem->Value(),"hdf5")) {
|
||||
if (elem->FirstChild())
|
||||
{
|
||||
if (elem->FirstChild()) {
|
||||
hdf5 = elem->FirstChild()->Value();
|
||||
size_t pos = hdf5.find_last_of('.');
|
||||
if (pos < hdf5.size())
|
||||
@@ -177,22 +176,13 @@ bool SIMoptions::parseOutputTag (const TiXmlElement* elem)
|
||||
hdf5 = "(default)";
|
||||
}
|
||||
|
||||
else if (!strcasecmp(elem->Value(),"projection"))
|
||||
else if (!strcasecmp(elem->Value(),"projection")) {
|
||||
std::string type;
|
||||
if (utl::getAttribute(elem,"type",type))
|
||||
this->parseProjectionMethod(type.c_str());
|
||||
for (const TiXmlNode* ch = elem->FirstChild(); ch; ch = ch->NextSibling())
|
||||
if (!strcasecmp(ch->Value(),"global"))
|
||||
project[GLOBAL] = "Greville point projection";
|
||||
else if (!strcasecmp(ch->Value(),"dgl2"))
|
||||
project[DGL2] = "Discrete global L2-projection";
|
||||
else if (!strcasecmp(ch->Value(),"cgl2"))
|
||||
project[CGL2] = "Continuous global L2-projection";
|
||||
else if (!strcasecmp(ch->Value(),"scr"))
|
||||
project[SCR] = "Superconvergent recovery";
|
||||
else if (!strcasecmp(ch->Value(),"vdsa"))
|
||||
project[VDSA] = "VDSA projected";
|
||||
else if (!strcasecmp(ch->Value(),"quasi"))
|
||||
project[QUASI] = "Quasi-interpolated";
|
||||
else if (!strcasecmp(ch->Value(),"lsq"))
|
||||
project[LEASTSQ] = "Least-square projected";
|
||||
this->parseProjectionMethod(ch->Value());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -267,22 +257,33 @@ bool SIMoptions::parseOldOptions (int argc, char** argv, int& i)
|
||||
ncv = atoi(argv[++i]);
|
||||
else if (!strcmp(argv[i],"-shift") && i < argc-1)
|
||||
shift = atof(argv[++i]);
|
||||
else if (!strcasecmp(argv[i],"-grvl"))
|
||||
project[GLOBAL] = "Greville point projection";
|
||||
else if (!strcasecmp(argv[i],"-dgl2"))
|
||||
project[DGL2] = "Discrete global L2-projection";
|
||||
else if (!strcasecmp(argv[i],"-cgl2"))
|
||||
project[CGL2] = "Continuous global L2-projection";
|
||||
else if (!strcasecmp(argv[i],"-scr"))
|
||||
project[SCR] = "Superconvergent recovery";
|
||||
else if (!strcasecmp(argv[i],"-vdsa"))
|
||||
project[VDSA] = "VDSA projected";
|
||||
else if (!strcasecmp(argv[i],"-quasi"))
|
||||
project[QUASI] = "Quasi-interpolated";
|
||||
else if (!strcasecmp(argv[i],"-lsq"))
|
||||
project[LEASTSQ] = "Least-square projected";
|
||||
else if (!strcasecmp(argv[i],"-controller"))
|
||||
enableController = true;
|
||||
else if (argv[i][0] == '-')
|
||||
return this->parseProjectionMethod(argv[i]+1);
|
||||
else
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool SIMoptions::parseProjectionMethod (const char* ptype)
|
||||
{
|
||||
if (!strcasecmp(ptype,"global") || !strcasecmp(ptype,"grvl"))
|
||||
project[GLOBAL] = "Greville point projection";
|
||||
else if (!strcasecmp(ptype,"dgl2"))
|
||||
project[DGL2] = "Discrete global L2-projection";
|
||||
else if (!strcasecmp(ptype,"cgl2"))
|
||||
project[CGL2] = "Continuous global L2-projection";
|
||||
else if (!strcasecmp(ptype,"scr"))
|
||||
project[SCR] = "Superconvergent recovery";
|
||||
else if (!strcasecmp(ptype,"vdsa"))
|
||||
project[VDSA] = "VDSA projected";
|
||||
else if (!strcasecmp(ptype,"quasi"))
|
||||
project[QUASI] = "Quasi-interpolated";
|
||||
else if (!strcasecmp(ptype,"lsq"))
|
||||
project[LEASTSQ] = "Least-square projected";
|
||||
else
|
||||
return false;
|
||||
|
||||
@@ -297,9 +298,9 @@ bool SIMoptions::ignoreOldOptions (int argc, char** argv, int& i)
|
||||
}
|
||||
|
||||
|
||||
utl::LogStream& SIMoptions::print (utl::LogStream& os, bool extraBlankLine) const
|
||||
utl::LogStream& SIMoptions::print (utl::LogStream& os, bool addBlankLine) const
|
||||
{
|
||||
if (extraBlankLine) os <<"\n";
|
||||
if (addBlankLine) os <<"\n";
|
||||
|
||||
os <<"\nEquation solver: "<< solver;
|
||||
|
||||
|
||||
@@ -15,11 +15,13 @@
|
||||
#define SIM_OPTIONS_H_
|
||||
|
||||
#include "ASMenums.h"
|
||||
#include "LogStream.h"
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <map>
|
||||
|
||||
namespace utl {
|
||||
class LogStream;
|
||||
}
|
||||
class TiXmlElement;
|
||||
|
||||
|
||||
@@ -48,6 +50,8 @@ public:
|
||||
bool parseEigSolTag(const TiXmlElement* elem);
|
||||
//! \brief Parses a subelement of the \a resultoutput XML-tag.
|
||||
bool parseOutputTag(const TiXmlElement* elem);
|
||||
//! \brief Parses a projection method XML-tag.
|
||||
bool parseProjectionMethod(const char* ptype);
|
||||
|
||||
//! \brief Parses obsolete command-line arguments (backward compatibility).
|
||||
bool parseOldOptions(int argc, char** argv, int& i);
|
||||
@@ -58,7 +62,7 @@ public:
|
||||
bool dumpHDF5(const char* defaultName);
|
||||
|
||||
//! \brief Prints out the simulation options to the given stream.
|
||||
utl::LogStream& print(utl::LogStream& os, bool extraBlankLine = false) const;
|
||||
utl::LogStream& print(utl::LogStream& os, bool addBlankLine = false) const;
|
||||
|
||||
public:
|
||||
ASM::Discretization discretization; //!< Spatial discretization option
|
||||
@@ -87,7 +91,7 @@ public:
|
||||
std::string log_prefix; //!< Prefix for process log files
|
||||
|
||||
//! \brief Enum defining the available projection methods.
|
||||
enum ProjectionMethod { GLOBAL, DGL2, CGL2, SCR, VDSA, QUASI, LEASTSQ };
|
||||
enum ProjectionMethod { NONE, GLOBAL, DGL2, CGL2, SCR, VDSA, QUASI, LEASTSQ };
|
||||
//! \brief Projection method name mapping.
|
||||
typedef std::map<ProjectionMethod,std::string> ProjectionMap;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user