45 #include <boost/math/special_functions/fpclassify.hpp>
51 ModuleKey ProcessInterpPointDataToFld::className =
54 ProcessInterpPointDataToFld::create,
55 "Interpolates given discrete data using a finite difference "
56 "approximation to a fld file given a xml file");
64 "coordinate id to use for interpolation");
76 if(
m_f->m_comm->TreatAsRankZero())
78 cout <<
"ProcessInterpPointDataToFld: interpolating data to field..."
87 "No input points found");
89 int nFields =
m_f->m_fieldPts->GetNFields();
91 "No field values provided in input");
94 m_f->m_exp.resize(nFields+1);
95 for(i = 1; i < nFields; ++i)
97 m_f->m_exp[i] =
m_f->AppendExpList(0);
100 int totpoints =
m_f->m_exp[0]->GetTotPoints();
107 m_f->m_exp[0]->GetCoords(coords[0],coords[1],coords[2]);
109 int coord_id =
m_config[
"interpcoord"].as<
int>();
110 ASSERTL0(coord_id <= m_f->m_fieldPts->GetDim() - 1,
111 "interpcoord is bigger than the Pts files dimension");
115 if (
m_f->m_session->GetComm()->GetRank() == 0)
117 m_f->m_fieldPts->setProgressCallback(
119 cout <<
"Interpolating: ";
121 m_f->m_fieldPts->Interpolate(coords, intFields, coord_id);
123 for(i = 0; i < totpoints; ++i)
125 for(j = 0; j < nFields; ++j)
127 m_f->m_exp[j]->SetPhys(i, intFields[j][i]);
131 if(
m_f->m_session->GetComm()->GetRank() == 0)
137 for(i = 0; i < nFields; ++i)
139 m_f->m_exp[i]->FwdTrans_IterPerExp(
m_f->m_exp[i]->GetPhys(),
140 m_f->m_exp[i]->UpdateCoeffs());
145 std::vector<LibUtilities::FieldDefinitionsSharedPtr> FieldDef
146 =
m_f->m_exp[0]->GetFieldDefinitions();
147 std::vector<std::vector<NekDouble> > FieldData(FieldDef.size());
149 for (j = 0; j < nFields; ++j)
151 for (i = 0; i < FieldDef.size(); ++i)
153 FieldDef[i]->m_fields.push_back(
m_f->m_fieldPts->GetFieldName(j));
155 m_f->m_exp[j]->AppendFieldData(FieldDef[i], FieldData[i]);
159 m_f->m_fielddef = FieldDef;
160 m_f->m_data = FieldData;
#define ASSERTL0(condition, msg)
pair< ModuleType, string > ModuleKey
map< string, ConfigOption > m_config
List of configuration values.
FieldSharedPtr m_f
Field object.
virtual ~ProcessInterpPointDataToFld()
boost::shared_ptr< Field > FieldSharedPtr
Represents a command-line configuration option.
static PtsFieldSharedPtr NullPtsField
void PrintProgressbar(const int position, const int goal) const
ModuleFactory & GetModuleFactory()
Abstract base class for processing modules.
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, tDescription pDesc="")
Register a class with the factory.