40#include <boost/core/ignore_unused.hpp>
41#include <boost/format.hpp>
53 "averaging of several field files. Must specify inputfld and range of "
59 ConfigOption(
false,
"NotSet",
"Fld file form which to average");
71 "Need to specify inputfld=file_%.fld ");
73 "Need to specify range=ns,dn,ne[include]");
75 std::string infilename =
m_config[
"inputfld"].as<
string>();
76 std::vector<int> range;
78 "Failed to interpret range string");
81 "range string should contain 3 values nstart, deltan, nend[include].");
83 vector<LibUtilities::FieldDefinitionsSharedPtr> FieldDef;
84 vector<vector<double>> FieldData;
86 for (
int i = range[0]; i <= range[2]; i += range[1])
90 string inputfldname = filenameformat.str();
91 vector<LibUtilities::FieldDefinitionsSharedPtr> tempFieldDef;
92 vector<vector<double>> tempFieldData;
97 m_f->m_graph->GetExpansionInfo();
103 if (!expansions.size())
111 for (
auto &expIt : expansions)
113 ElementGIDs[i++] = expIt.second->m_geomShPtr->GetGlobalID();
115 m_f->FieldIOForFile(inputfldname)
116 ->Import(inputfldname, tempFieldDef, tempFieldData,
121 m_f->FieldIOForFile(inputfldname)
122 ->Import(inputfldname, tempFieldDef, tempFieldData,
126 if (FieldDef.size() == 0)
128 FieldDef = tempFieldDef;
131 if (FieldData.size() < tempFieldData.size())
133 FieldData.resize(tempFieldData.size());
136 for (
size_t i = 0; i < tempFieldData.size(); ++i)
138 if (FieldData[i].size() < tempFieldData[i].size())
140 FieldData[i].resize(tempFieldData[i].size(), 0.);
142 Vmath::Vadd(FieldData[i].size(), tempFieldData[i].data(), 1,
143 FieldData[i].data(), 1, FieldData[i].data(), 1);
145 if (
m_f->m_comm->GetSpaceComm()->GetRank() == 0 && vm.count(
"verbose"))
147 std::cout <<
"File " << inputfldname <<
" processed." << std::endl;
158 int numHomoDir =
m_f->m_numHomogeneousDir;
159 int nfields = FieldDef[0]->m_fields.size();
160 m_f->m_exp.resize(nfields);
161 for (
int i = 1; i < nfields; ++i)
163 m_f->m_exp[i] =
m_f->AppendExpList(numHomoDir);
165 m_f->m_variables = FieldDef[0]->m_fields;
167 for (
int j = 0; j < nfields; ++j)
170 for (
int i = 0; i < FieldDef.size(); ++i)
172 m_f->m_exp[j]->ExtractDataToCoeffs(FieldDef[i], FieldData[i],
174 m_f->m_exp[j]->UpdateCoeffs());
177 m_f->m_exp[j]->UpdateCoeffs(), 1,
178 m_f->m_exp[j]->UpdateCoeffs(), 1);
179 m_f->m_exp[j]->BwdTrans(
m_f->m_exp[j]->GetCoeffs(),
180 m_f->m_exp[j]->UpdatePhys());
#define ASSERTL0(condition, msg)
FieldSharedPtr m_f
Field object.
std::map< std::string, ConfigOption > m_config
List of configuration values.
ProcessAverageFld(FieldSharedPtr f)
virtual ~ProcessAverageFld()
virtual void v_Process(po::variables_map &vm) override
Write mesh to output file.
static std::shared_ptr< Module > create(FieldSharedPtr f)
Creates an instance of this class.
static ModuleKey className
Abstract base class for processing modules.
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
static bool GenerateVector(const std::string &str, std::vector< T > &out)
Takes a comma-separated string and converts it to entries in a vector.
std::shared_ptr< Field > FieldSharedPtr
std::pair< ModuleType, std::string > ModuleKey
ModuleFactory & GetModuleFactory()
static FieldMetaDataMap NullFieldMetaDataMap
std::map< int, ExpansionInfoShPtr > ExpansionInfoMap
The above copyright notice and this permission notice shall be included.
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
Represents a command-line configuration option.