39 #include <boost/core/ignore_unused.hpp> 
   52         ProcessMapping::create,
 
   53         "Add mapping coordinates to output file.");
 
   68     int npoints  = 
m_f->m_exp[0]->GetNpoints();
 
   69     int expdim   = 
m_f->m_graph->GetMeshDimension();
 
   70     int spacedim = expdim;
 
   71     if ((
m_f->m_numHomogeneousDir) == 1 || (
m_f->m_numHomogeneousDir) == 2)
 
   75     int nfields   = 
m_f->m_variables.size();
 
   76     int addfields = expdim;
 
   78     string fieldNames[3] = {
"xCoord", 
"yCoord", 
"zCoord"};
 
   79     for (
int i = 0; i < addfields; ++i)
 
   81         m_f->m_variables.push_back(fieldNames[i]);
 
   85     if (
m_f->m_exp[0]->GetNumElmts() == 0)
 
   90     m_f->m_exp.resize(nfields + addfields);
 
   96     if (
m_f->m_fieldMetaDataMap.count(
"MappingCartesianVel"))
 
   98         if (
m_f->m_fieldMetaDataMap[
"MappingCartesianVel"] == 
"False")
 
  100             m_f->m_fieldMetaDataMap[
"MappingCartesianVel"] = 
"True";
 
  104             for (
int i = 0; i < spacedim; ++i)
 
  107                 if (
m_f->m_exp[0]->GetWaveSpace())
 
  109                     m_f->m_exp[0]->HomogeneousBwdTrans(
m_f->m_exp[i]->GetPhys(),
 
  119             mapping->ContravarToCartesian(vel, vel);
 
  121             for (
int i = 0; i < spacedim; ++i)
 
  123                 if (
m_f->m_exp[0]->GetWaveSpace())
 
  125                     m_f->m_exp[0]->HomogeneousFwdTrans(
 
  126                         vel[i], 
m_f->m_exp[i]->UpdatePhys());
 
  131                                  m_f->m_exp[i]->UpdatePhys(), 1);
 
  133                 m_f->m_exp[i]->FwdTrans_IterPerExp(
 
  134                     m_f->m_exp[i]->GetPhys(), 
m_f->m_exp[i]->UpdateCoeffs());
 
  141     mapping->GetCartesianCoordinates(coords[0], coords[1], coords[2]);
 
  144     for (
int i = 0; i < addfields; ++i)
 
  146         m_f->m_exp[nfields + i] =
 
  147             m_f->AppendExpList(
m_f->m_numHomogeneousDir);
 
  149                      m_f->m_exp[nfields + i]->UpdatePhys(), 1);
 
  150         m_f->m_exp[nfields + i]->FwdTrans_IterPerExp(
 
  151             coords[i], 
m_f->m_exp[nfields + i]->UpdateCoeffs());
 
  159     field[0] = f->m_exp[0];
 
  165     if (f->m_fieldMetaDataMap.count(
"Time"))
 
  167         string s_time = f->m_fieldMetaDataMap[
"Time"];
 
  168         time          = atof(s_time.c_str());
 
  176     int npoints  = f->m_exp[0]->GetNpoints();
 
  177     int expdim   = f->m_graph->GetMeshDimension();
 
  178     int spacedim = expdim + f->m_numHomogeneousDir;
 
  183     for (
int i = 0; i < 3; i++)
 
  189     string fieldNames[3]    = {
"x", 
"y", 
"z"};
 
  190     string velFieldNames[3] = {
"vx", 
"vy", 
"vz"};
 
  193     if (f->m_fieldMetaDataMap.count(
"MappingType"))
 
  195         if (f->m_fieldMetaDataMap[
"MappingType"] == 
"Expression")
 
  200             if (f->m_fieldMetaDataMap.count(
"MappingExpression"))
 
  202                 funcName = f->m_fieldMetaDataMap[
"MappingExpression"];
 
  208             if (f->m_fieldMetaDataMap.count(
"MappingVelExpression"))
 
  210                 velFuncName = f->m_fieldMetaDataMap[
"MappingVelExpression"];
 
  219             for (
int i = 0; i < 3; i++)
 
  223             f->m_exp[0]->GetCoords(coords[0], coords[1], coords[2]);
 
  226             std::string s_FieldStr;
 
  227             for (
int i = 0; i < 3; i++)
 
  229                 s_FieldStr = fieldNames[i];
 
  230                 if (f->m_session->DefinesFunction(funcName, s_FieldStr))
 
  233                         f->m_session->GetFunction(funcName, s_FieldStr);
 
  234                     ffunc->Evaluate(coords[0], coords[1], coords[2], time,
 
  244             if (f->m_session->DefinesFunction(velFuncName))
 
  246                 for (
int i = 0; i < 3; i++)
 
  248                     s_FieldStr = velFieldNames[i];
 
  249                     if (f->m_session->DefinesFunction(velFuncName, s_FieldStr))
 
  252                             f->m_session->GetFunction(velFuncName, s_FieldStr);
 
  253                         ffunc->Evaluate(coords[0], coords[1], coords[2], time,
 
  260             mapping->SetFromFunction(
false);
 
  261             mapping->UpdateMapping(time, coords_new, coords_vel);
 
  263         else if (f->m_fieldMetaDataMap[
"MappingType"] == 
"File")
 
  265             ASSERTL0(f->m_fieldMetaDataMap.count(
"FileName"),
 
  266                      "FileName parameter for Mapping missing in field file.");
 
  267             string fileName = f->m_fieldMetaDataMap[
"FileName"];
 
  268             std::vector<LibUtilities::FieldDefinitionsSharedPtr> FieldDef;
 
  269             std::vector<std::vector<NekDouble> > FieldData;
 
  271             f->FieldIOForFile(fileName)->Import(fileName, FieldDef, FieldData);
 
  273             for (
int j = 0; j < spacedim; ++j)
 
  275                 int ncoeffs = f->m_exp[0]->GetNcoeffs();
 
  277                 for (
int i = 0; i < FieldData.size(); ++i)
 
  279                     f->m_exp[j]->ExtractDataToCoeffs(
 
  280                         FieldDef[i], FieldData[i], fieldNames[j], fieldcoeffs);
 
  282                 bool wavespace = f->m_exp[0]->GetWaveSpace();
 
  283                 f->m_exp[0]->SetWaveSpace(
false);
 
  285                 f->m_exp[0]->BwdTrans(fieldcoeffs, coords_new[j]);
 
  288                 if (
std::find(FieldDef[0]->m_fields.begin(),
 
  289                               FieldDef[0]->m_fields.end(),
 
  290                               velFieldNames[j]) != FieldDef[0]->m_fields.end())
 
  292                     for (
int i = 0; i < FieldData.size(); ++i)
 
  294                         f->m_exp[j]->ExtractDataToCoeffs(
 
  295                             FieldDef[i], FieldData[i], velFieldNames[j],
 
  298                     f->m_exp[0]->BwdTrans(fieldcoeffs, coords_vel[j]);
 
  300                 f->m_exp[0]->SetWaveSpace(wavespace);
 
  303             mapping->SetFromFunction(
false);
 
  304             mapping->UpdateMapping(time, coords_new, coords_vel);
 
  312         for (
int i = 0; i < 3; i++)
 
  317         f->m_exp[0]->GetCoords(coords[0], coords[1], coords[2]);
 
  318         mapping->SetFromFunction(
false);
 
  319         mapping->UpdateMapping(time, coords, coords_vel);
 
#define ASSERTL0(condition, msg)
 
FieldSharedPtr m_f
Field object.
 
virtual ~ProcessMapping()
 
virtual void Process(po::variables_map &vm)
Write mesh to output file.
 
static GlobalMapping::MappingSharedPtr GetMapping(FieldSharedPtr f)
 
Abstract base class for processing modules.
 
static GLOBAL_MAPPING_EXPORT MappingSharedPtr Load(const LibUtilities::SessionReaderSharedPtr &pSession, const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields)
Return a pointer to the mapping, creating it on first call.
 
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
 
std::shared_ptr< Field > FieldSharedPtr
 
std::pair< ModuleType, std::string > ModuleKey
 
ModuleFactory & GetModuleFactory()
 
GLOBAL_MAPPING_EXPORT typedef std::shared_ptr< Mapping > MappingSharedPtr
A shared pointer to a Mapping object.
 
std::shared_ptr< Equation > EquationSharedPtr
 
InputIterator find(InputIterator first, InputIterator last, InputIterator startingpoint, const EqualityComparable &value)
 
The above copyright notice and this permission notice shall be included.
 
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)