51 const std::map<std::string, std::string> &pParams) :
54 if (pParams.find(
"OutputFile") == pParams.end())
60 ASSERTL0(!(pParams.find(
"OutputFile")->second.empty()),
61 "Missing parameter 'OutputFile'.");
70 if (pParams.find(
"OutputFrequency") == pParams.end())
84 if (pParams.find(
"OutputPlane") == pParams.end())
90 m_outputPlane = atoi(pParams.find(
"OutputPlane")->second.c_str());
94 ASSERTL0(pParams.find(
"Points") != pParams.end(),
95 "Missing parameter 'Points'.");
114 const Array<OneD, const MultiRegions::ExpListSharedPtr> &pFields,
118 "No history points in stream.");
124 Array<OneD, NekDouble> gloCoord(3,0.0);
125 int dim = pFields[0]->GetGraph()->GetSpaceDimension();
134 NekDouble Z = (pFields[0]->GetHomogeneousBasis()
138 cout <<
"Reseting History point from " << gloCoord[2]
139 <<
" to " << Z << endl;
149 gloCoord[1], gloCoord[2]);
160 int vRank = vComm->GetRank();
162 Array<OneD, int> procList(vHP, -1 );
163 Array<OneD, int> idList (vHP, -1 );
164 Array<OneD, NekDouble> dist (vHP, 1e16);
165 Array<OneD, NekDouble> dist_loc(vHP, 1e16);
166 std::vector<Array<OneD, NekDouble> > LocCoords;
171 for (i = 0; i < vHP; ++i)
173 Array<OneD, NekDouble> locCoords(3);
179 idList[i] = pFields[0]->GetExpIndex(gloCoord,locCoords,
183 LocCoords.push_back(locCoords);
191 pFields[0]->GetExp(idList[i])->GetGeom();
193 Array<OneD, NekDouble> coordVals(e->GetTotPoints());
195 for (
int j = 0; j < g->GetCoordim(); ++j)
197 e->BwdTrans(g->GetCoeffs(j), coordVals);
198 NekDouble x = e->PhysEvaluate(locCoords, coordVals)
213 for (i = 0; i < vHP; ++i)
215 if (dist_loc[i] == dist[i])
233 Array<OneD, const unsigned int> IDs
234 = pFields[0]->GetZIDs();
235 for(j = 0; j < IDs.num_elements(); ++j)
243 if(j != IDs.num_elements())
263 for (i = 0; i < vHP; ++i)
267 if (procList[i] != vRank)
279 Array<OneD, NekDouble> >
287 if (vComm->GetRank() == 0)
289 for (i = 0; i < vHP; ++i)
298 + boost::lexical_cast<std::string>(gloCoord[0])
300 + boost::lexical_cast<std::string>(gloCoord[1])
302 + boost::lexical_cast<std::string>(gloCoord[2])
303 +
" cannot be found in the mesh.");
309 cout <<
"Warning: History point " << i <<
" at ("
310 << gloCoord[0] <<
"," << gloCoord[1] <<
","
311 << gloCoord[2] <<
") lies a distance of "
312 << sqrt(dist[i]) <<
" from the manifold." << endl;
320 for (i = 0; i < pFields.num_elements(); ++i)
334 for (i = 0; i < vHP; ++i)
373 int numFields = pFields.num_elements();
375 Array<OneD, NekDouble> data(numPoints*numFields, 0.0);
376 Array<OneD, NekDouble> gloCoord(3, 0.0);
377 std::list<std::pair<SpatialDomains::PointGeomSharedPtr, Array<OneD, NekDouble> > >
::iterator x;
379 Array<OneD, NekDouble> physvals;
380 Array<OneD, NekDouble> locCoord;
384 for (j = 0; j < numFields; ++j)
391 locCoord = (*x).second;
392 expId = (*x).first->GetVid();
394 physvals = pFields[j]->GetPlane(
m_outputPlane)->UpdatePhys() + pFields[j]->GetPhys_Offset(expId);
397 if(pFields[j]->GetPhysState() ==
false)
399 pFields[j]->GetPlane(
m_outputPlane)->GetExp(expId)->BwdTrans(pFields[j]->GetPlane(
m_outputPlane)->GetCoeffs() + pFields[j]->GetCoeff_Offset(expId),physvals);
403 data[
m_historyLocalPointMap[k]*numFields+j] = pFields[j]->GetExp(expId)->StdPhysEvaluate(locCoord,physvals);
411 locCoord = (*x).second;
412 expId = (*x).first->GetVid();
414 physvals = pFields[j]->UpdatePhys() + pFields[j]->GetPhys_Offset(expId);
417 if(pFields[j]->GetPhysState() ==
false)
419 pFields[j]->GetExp(expId)->BwdTrans(pFields[j]->GetCoeffs() + pFields[j]->GetCoeff_Offset(expId),physvals);
423 data[
m_historyLocalPointMap[k]*numFields+j] = pFields[j]->GetExp(expId)->StdPhysEvaluate(locCoord,physvals);
433 if (vComm->GetRank() == 0)
441 for (
int j = 0; j < numFields; ++j)
457 if (pFields[0]->GetComm()->GetRank() == 0)