39 #include <boost/core/ignore_unused.hpp> 52 ProcessAddFld::create,
53 "add two fields together with optional scaling. Must specify fromfld and " 54 "scaling is optionally specified with input option scale.");
61 ConfigOption(
false,
"NotSet",
"Fld file form which to add field");
63 if(f->m_inputfiles.count(
"xml"))
79 boost::ignore_unused(vm);
81 string scalestr =
m_config[
"scale"].as<
string>();
85 "Need to specify fromfld=file.fld ");
86 string fromfld =
m_config[
"fromfld"].as<
string>();
88 vector<LibUtilities::FieldDefinitionsSharedPtr> fromFieldDef;
89 vector<vector<double> > fromFieldData;
94 m_f->m_graph->GetExpansions();
100 if (!expansions.size())
108 for (
auto &expIt : expansions)
110 ElementGIDs[i++] = expIt.second->m_geomShPtr->GetGlobalID();
112 m_f->FieldIOForFile(fromfld)->Import(
113 fromfld, fromFieldDef, fromFieldData,
118 m_f->FieldIOForFile(fromfld)->Import(
119 fromfld, fromFieldDef, fromFieldData,
123 bool samelength =
true;
124 if (fromFieldData.size() !=
m_f->m_data.size())
130 for (
int i = 0; i < fromFieldData.size(); ++i)
132 int datalen = fromFieldData[i].size();
134 Vmath::Smul(datalen, scale, &(fromFieldData[i][0]), 1,
135 &(fromFieldData[i][0]), 1);
139 if (datalen !=
m_f->m_data[i].size())
149 "Input fields have partitions of different length and so xml " 150 "file needs to be specified");
151 for (
int i = 0; i <
m_f->m_data.size(); ++i)
153 int datalen =
m_f->m_data[i].size();
156 &(fromFieldData[i][0]), 1, &(
m_f->m_data[i][0]), 1);
163 if (
m_f->m_exp[0]->GetNumElmts() == 0)
168 int nfields =
m_f->m_variables.size();
169 int ncoeffs =
m_f->m_exp[0]->GetNcoeffs();
172 for (
int j = 0; j < nfields; ++j)
177 auto it =
find (fromFieldDef[0]->m_fields.begin(),
178 fromFieldDef[0]->m_fields.end(),
179 m_f->m_variables[j]);
181 ASSERTL0(it != fromFieldDef[0]->m_fields.end(),
182 "Could not find field " +
m_f->m_variables[j] +
" in from field");
185 for (
int i = 0; i < fromFieldData.size(); ++i)
187 m_f->m_exp[j]->ExtractDataToCoeffs(
188 fromFieldDef[i], fromFieldData[i],
190 m_f->m_exp[j]->UpdateCoeffs());
194 m_f->m_exp[j]->UpdateCoeffs(), 1);
195 m_f->m_exp[j]->BwdTrans(
196 m_f->m_exp[j]->GetCoeffs(),
197 m_f->m_exp[j]->UpdatePhys());
#define ASSERTL0(condition, msg)
std::map< std::string, ConfigOption > m_config
List of configuration values.
Represents a command-line configuration option.
std::shared_ptr< Field > FieldSharedPtr
std::pair< ModuleType, std::string > ModuleKey
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
ModulePriority m_priority
InputIterator find(InputIterator first, InputIterator last, InputIterator startingpoint, const EqualityComparable &value)
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
Abstract base class for processing modules.
virtual void Process(po::variables_map &vm)
Write mesh to output file.
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
static FieldMetaDataMap NullFieldMetaDataMap
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.
std::map< int, ExpansionShPtr > ExpansionMap
ModuleFactory & GetModuleFactory()
FieldSharedPtr m_f
Field object.