Nektar++
Classes | Typedefs | Enumerations | Functions | Variables
Nektar::SolverUtils Namespace Reference

Classes

class  Advection
 Defines a callback function which evaluates the flux vector. More...
 
class  Advection3DHomogeneous1D
 
class  AdvectionFR
 
class  AdvectionNonConservative
 
class  AdvectionSystem
 A base class for PDEs which include an advection component. More...
 
class  AdvectionWeakDG
 
class  Diffusion
 
class  Diffusion3DHomogeneous1D
 
class  DiffusionLDG
 
class  DiffusionLDGNS
 
class  DiffusionLFR
 
class  DiffusionLFRNS
 
class  Driver
 Base class for the development of solvers. More...
 
class  DriverArnoldi
 Base class for the development of solvers. More...
 
class  DriverArpack
 Base class for the development of solvers. More...
 
class  DriverModifiedArnoldi
 
class  DriverStandard
 Base class for the development of solvers. More...
 
class  DriverSteadyState
 
class  EquationSystem
 A base class for describing how to solve specific equations. More...
 
class  Filter
 
class  FilterAeroForces
 
class  FilterAverageFields
 
class  FilterCellHistoryPoints
 
class  FilterCheckpoint
 
class  FilterEnergy
 
class  FilterEnergy1D
 Filter for one-dimensional energy spectrum. More...
 
class  FilterEnergyBase
 
class  FilterHistoryPoints
 
class  FilterModalEnergy
 
class  FilterThresholdMax
 
class  FilterThresholdMin
 
class  Forcing
 Defines a forcing term to be explicitly applied. More...
 
class  ForcingAbsorption
 
class  ForcingBody
 
class  ForcingNoise
 
class  ForcingProgrammatic
 
class  ForcingWavyness
 
class  HomoRSScalar
 Wrapper class for Riemann solver scalars. More...
 
class  HomoRSVector
 Wrapper class for Riemann solver scalars. More...
 
class  RiemannSolver
 The RiemannSolver class provides an abstract interface under which solvers for various Riemann problems can be implemented. More...
 
class  UnsteadySystem
 Base class for unsteady solvers. More...
 
class  UpwindLDGSolver
 Upwind scheme Riemann solver for LDG. More...
 
class  UpwindSolver
 Upwind scheme Riemann solver. More...
 

Typedefs

typedef boost::shared_ptr< AdvectionAdvectionSharedPtr
 A shared pointer to an Advection object. More...
 
typedef LibUtilities::NekFactory< std::string, Advection, std::string > AdvectionFactory
 Datatype of the NekFactory used to instantiate classes derived from the Advection class. More...
 
typedef boost::shared_ptr< AdvectionSystemAdvectionSystemSharedPtr
 Shared pointer to an AdvectionSystem class. More...
 
typedef std::vector< std::pair< std::string, std::string > > SummaryList
 
typedef boost::function< void(const int, const int, const Array< OneD, Array< OneD, NekDouble > > &, Array< OneD, Array< OneD, NekDouble > > &, Array< OneD, Array< OneD, NekDouble > > &)> DiffusionFluxVecCB
 
typedef boost::function< void(const Array< OneD, Array< OneD, NekDouble > > &, Array< OneD, Array< OneD, Array< OneD, NekDouble > > > &, Array< OneD, Array< OneD, Array< OneD, NekDouble > > > &)> DiffusionFluxVecCBNS
 
typedef boost::function< void(const Array< OneD, Array< OneD, NekDouble > > &, Array< OneD, NekDouble > &)> DiffusionArtificialDiffusion
 
typedef boost::shared_ptr< DiffusionDiffusionSharedPtr
 A shared pointer to an EquationSystem object. More...
 
typedef LibUtilities::NekFactory< std::string, Diffusion, std::string > DiffusionFactory
 Datatype of the NekFactory used to instantiate classes derived from the Diffusion class. More...
 
typedef boost::shared_ptr< DiffusionLDGNSDiffusionLDGNSSharedPtr
 
typedef boost::shared_ptr< DiffusionLFRNSDiffusionLFRNSSharedPtr
 
typedef boost::shared_ptr< DriverDriverSharedPtr
 A shared pointer to a Driver object. More...
 
typedef LibUtilities::NekFactory< std::string, Driver, const LibUtilities::SessionReaderSharedPtr & > DriverFactory
 Datatype of the NekFactory used to instantiate classes derived from the Driver class. More...
 
typedef boost::shared_ptr< EquationSystemEquationSystemSharedPtr
 A shared pointer to an EquationSystem object. More...
 
typedef LibUtilities::NekFactory< std::string, EquationSystem, const LibUtilities::SessionReaderSharedPtr & > EquationSystemFactory
 Datatype of the NekFactory used to instantiate classes derived from the EquationSystem class. More...
 
typedef boost::shared_ptr< FilterFilterSharedPtr
 A shared pointer to a Driver object. More...
 
typedef LibUtilities::NekFactory< std::string, Filter, const LibUtilities::SessionReaderSharedPtr &, const std::map< std::string, std::string > & > FilterFactory
 Datatype of the NekFactory used to instantiate classes derived from the Driver class. More...
 
typedef LibUtilities::NekFactory< std::string, Forcing, const LibUtilities::SessionReaderSharedPtr &, const Array< OneD, MultiRegions::ExpListSharedPtr > &, const unsigned int &, const TiXmlElement * > ForcingFactory
 Declaration of the forcing factory. More...
 
typedef boost::function< const Array< OneD, const NekDouble > &()> RSScalarFuncType
 
typedef boost::function< const Array< OneD, const Array< OneD, NekDouble > > &()> RSVecFuncType
 
typedef boost::function< NekDouble()> RSParamFuncType
 
typedef boost::shared_ptr< RiemannSolverRiemannSolverSharedPtr
 A shared pointer to an EquationSystem object. More...
 
typedef LibUtilities::NekFactory< std::string, RiemannSolverRiemannSolverFactory
 Datatype of the NekFactory used to instantiate classes derived from the RiemannSolver class. More...
 

Enumerations

enum  EvolutionOperatorType {
  eNonlinear, eDirect, eAdjoint, eTransientGrowth,
  eSkewSymmetric, eAdaptiveSFD
}
 

Functions

AdvectionFactoryGetAdvectionFactory ()
 Gets the factory for initialising advection objects. More...
 
void UpdateGeometry (SpatialDomains::MeshGraphSharedPtr graph, Array< OneD, MultiRegions::ExpListSharedPtr > &fields)
 Update geometry according to displacement that is in current fields. More...
 
void AddSummaryItem (SummaryList &l, const std::string &name, const std::string &value)
 Adds a summary item to the summary info list. More...
 
void AddSummaryItem (SummaryList &l, const std::string &name, const int &value)
 Adds a summary item to the summary info list. More...
 
void AddSummaryItem (SummaryList &l, const std::string &name, const NekDouble &value)
 Adds a summary item to the summary info list. More...
 
DiffusionFactoryGetDiffusionFactory ()
 
DriverFactoryGetDriverFactory ()
 
EquationSystemFactoryGetEquationSystemFactory ()
 
FilterFactoryGetFilterFactory ()
 
ForcingFactoryGetForcingFactory ()
 Declaration of the forcing factory singleton. More...
 
RiemannSolverFactoryGetRiemannSolverFactory ()
 

Variables

SOLVER_UTILS_EXPORT typedef boost::shared_ptr< ForcingForcingSharedPtr
 A shared pointer to an EquationSystem object. More...
 
SOLVER_UTILS_EXPORT typedef boost::shared_ptr< ForcingProgrammaticForcingProgrammaticSharedPtr
 A shared pointer to an EquationSystem object. More...
 

Typedef Documentation

Datatype of the NekFactory used to instantiate classes derived from the Advection class.

Definition at line 163 of file Advection.h.

A shared pointer to an Advection object.

Definition at line 158 of file Advection.h.

Shared pointer to an AdvectionSystem class.

Definition at line 68 of file AdvectionSystem.h.

Definition at line 69 of file Diffusion.h.

Datatype of the NekFactory used to instantiate classes derived from the Diffusion class.

Definition at line 168 of file Diffusion.h.

typedef boost::function<void ( const int, const int, const Array<OneD, Array<OneD, NekDouble> >&, Array<OneD, Array<OneD, NekDouble> >&, Array<OneD, Array<OneD, NekDouble> >&)> Nektar::SolverUtils::DiffusionFluxVecCB

Definition at line 58 of file Diffusion.h.

Definition at line 64 of file Diffusion.h.

Definition at line 123 of file DiffusionLDGNS.h.

Definition at line 201 of file DiffusionLFRNS.h.

A shared pointer to an EquationSystem object.

Definition at line 164 of file Diffusion.h.

Datatype of the NekFactory used to instantiate classes derived from the Driver class.

Definition at line 60 of file Driver.h.

typedef boost::shared_ptr<Driver> Nektar::SolverUtils::DriverSharedPtr

A shared pointer to a Driver object.

Definition at line 52 of file Driver.h.

Datatype of the NekFactory used to instantiate classes derived from the EquationSystem class.

Definition at line 65 of file EquationSystem.h.

A shared pointer to an EquationSystem object.

Definition at line 56 of file EquationSystem.h.

typedef LibUtilities::NekFactory< std::string, Filter, const LibUtilities::SessionReaderSharedPtr&, const std::map<std::string, std::string>& > Nektar::SolverUtils::FilterFactory

Datatype of the NekFactory used to instantiate classes derived from the Driver class.

Definition at line 61 of file Filter.h.

typedef boost::shared_ptr<Filter> Nektar::SolverUtils::FilterSharedPtr

A shared pointer to a Driver object.

Definition at line 50 of file Filter.h.

Declaration of the forcing factory.

Definition at line 61 of file Forcing.h.

Datatype of the NekFactory used to instantiate classes derived from the RiemannSolver class.

Definition at line 198 of file RiemannSolver.h.

A shared pointer to an EquationSystem object.

Definition at line 194 of file RiemannSolver.h.

typedef boost::function< NekDouble ()> Nektar::SolverUtils::RSParamFuncType

Definition at line 60 of file RiemannSolver.h.

typedef boost::function< const Array<OneD, const NekDouble>& ()> Nektar::SolverUtils::RSScalarFuncType

Definition at line 56 of file RiemannSolver.h.

typedef boost::function< const Array<OneD, const Array<OneD, NekDouble> >& ()> Nektar::SolverUtils::RSVecFuncType

Definition at line 58 of file RiemannSolver.h.

typedef std::vector<std::pair<std::string, std::string> > Nektar::SolverUtils::SummaryList

Definition at line 47 of file Misc.h.

Enumeration Type Documentation

Enumerator
eNonlinear 
eDirect 
eAdjoint 
eTransientGrowth 
eSkewSymmetric 
eAdaptiveSFD 

Definition at line 5 of file SolverUtils.hpp.

Function Documentation

SOLVER_UTILS_EXPORT void Nektar::SolverUtils::AddSummaryItem ( SummaryList l,
const std::string &  name,
const std::string &  value 
)
SOLVER_UTILS_EXPORT void Nektar::SolverUtils::AddSummaryItem ( SummaryList l,
const std::string &  name,
const int &  value 
)

Adds a summary item to the summary info list.

Definition at line 59 of file Misc.cpp.

63  {
64  l.push_back(std::make_pair(name, boost::lexical_cast<std::string>(value)));
65  }
SOLVER_UTILS_EXPORT void Nektar::SolverUtils::AddSummaryItem ( SummaryList l,
const std::string &  name,
const NekDouble value 
)

Adds a summary item to the summary info list.

Definition at line 68 of file Misc.cpp.

72  {
73  l.push_back(std::make_pair(
74  name, str(boost::format("%g") % value)));
75  }
SOLVER_UTILS_EXPORT AdvectionFactory & Nektar::SolverUtils::GetAdvectionFactory ( )

Gets the factory for initialising advection objects.

Returns
The advection factory.

Definition at line 46 of file Advection.cpp.

Referenced by Nektar::SolverUtils::Advection3DHomogeneous1D::Advection3DHomogeneous1D(), Nektar::SolverUtils::EquationSystem::SessionSummary(), Nektar::NonlinearSWE::v_InitObject(), Nektar::LinearSWE::v_InitObject(), Nektar::APE::v_InitObject(), Nektar::NonlinearPeregrine::v_InitObject(), Nektar::UnsteadyInviscidBurger::v_InitObject(), Nektar::UnsteadyAdvection::v_InitObject(), Nektar::IncNavierStokes::v_InitObject(), Nektar::UnsteadyAdvectionDiffusion::v_InitObject(), and Nektar::CompressibleFlowSystem::v_InitObject().

47 {
48  typedef Loki::SingletonHolder<AdvectionFactory,
49  Loki::CreateUsingNew,
50  Loki::NoDestroy,
51  Loki::SingleThreaded> Type;
52  return Type::Instance();
53 }
LibUtilities::NekFactory< std::string, Advection, std::string > AdvectionFactory
Datatype of the NekFactory used to instantiate classes derived from the Advection class...
Definition: Advection.h:163
SOLVER_UTILS_EXPORT DiffusionFactory & Nektar::SolverUtils::GetDiffusionFactory ( )

Definition at line 42 of file Diffusion.cpp.

Referenced by Nektar::SolverUtils::Diffusion3DHomogeneous1D::Diffusion3DHomogeneous1D(), Nektar::SolverUtils::EquationSystem::SessionSummary(), Nektar::UnsteadyDiffusion::v_InitObject(), Nektar::UnsteadyAdvectionDiffusion::v_InitObject(), and Nektar::CompressibleFlowSystem::v_InitObject().

43  {
44  typedef Loki::SingletonHolder<DiffusionFactory,
45  Loki::CreateUsingNew,
46  Loki::NoDestroy,
47  Loki::SingleThreaded> Type;
48  return Type::Instance();
49  }
LibUtilities::NekFactory< std::string, Diffusion, std::string > DiffusionFactory
Datatype of the NekFactory used to instantiate classes derived from the Diffusion class...
Definition: Diffusion.h:168
SOLVER_UTILS_EXPORT DriverFactory & Nektar::SolverUtils::GetDriverFactory ( )

Definition at line 64 of file Driver.cpp.

Referenced by Nektar::VortexWaveInteraction::ExecuteStreak(), Nektar::VortexWaveInteraction::ExecuteWave(), and main().

65 {
66  typedef Loki::SingletonHolder<DriverFactory,
67  Loki::CreateUsingNew,
68  Loki::NoDestroy,
69  Loki::SingleThreaded> Type;
70  return Type::Instance();
71 }
LibUtilities::NekFactory< std::string, Driver, const LibUtilities::SessionReaderSharedPtr & > DriverFactory
Datatype of the NekFactory used to instantiate classes derived from the Driver class.
Definition: Driver.h:60
SOLVER_UTILS_EXPORT EquationSystemFactory & Nektar::SolverUtils::GetEquationSystemFactory ( )

Definition at line 81 of file EquationSystem.cpp.

Referenced by Nektar::VortexWaveInteraction::ExecuteRoll(), Nektar::VortexWaveInteraction::ExecuteStreak(), main(), Nektar::SolverUtils::Driver::v_InitObject(), and Nektar::VortexWaveInteraction::VortexWaveInteraction().

82  {
83  typedef Loki::SingletonHolder<EquationSystemFactory,
84  Loki::CreateUsingNew,
85  Loki::NoDestroy,
86  Loki::ClassLevelLockable> Type;
87  return Type::Instance();
88  }
LibUtilities::NekFactory< std::string, EquationSystem, const LibUtilities::SessionReaderSharedPtr & > EquationSystemFactory
Datatype of the NekFactory used to instantiate classes derived from the EquationSystem class...
SOLVER_UTILS_EXPORT FilterFactory & Nektar::SolverUtils::GetFilterFactory ( )

Definition at line 42 of file Filter.cpp.

Referenced by Nektar::SolverUtils::UnsteadySystem::v_InitObject().

43  {
44  typedef Loki::SingletonHolder<FilterFactory,
45  Loki::CreateUsingNew,
46  Loki::NoDestroy,
47  Loki::SingleThreaded> Type;
48  return Type::Instance();
49  }
LibUtilities::NekFactory< std::string, Filter, const LibUtilities::SessionReaderSharedPtr &, const std::map< std::string, std::string > & > FilterFactory
Datatype of the NekFactory used to instantiate classes derived from the Driver class.
Definition: Filter.h:61
SOLVER_UTILS_EXPORT ForcingFactory & Nektar::SolverUtils::GetForcingFactory ( )

Declaration of the forcing factory singleton.

Definition at line 42 of file Forcing.cpp.

Referenced by Nektar::VortexWaveInteraction::ExecuteRoll(), and Nektar::SolverUtils::Forcing::Load().

43  {
44  typedef Loki::SingletonHolder<ForcingFactory,
45  Loki::CreateUsingNew,
46  Loki::NoDestroy,
47  Loki::SingleThreaded> Type;
48  return Type::Instance();
49  }
LibUtilities::NekFactory< std::string, Forcing, const LibUtilities::SessionReaderSharedPtr &, const Array< OneD, MultiRegions::ExpListSharedPtr > &, const unsigned int &, const TiXmlElement * > ForcingFactory
Declaration of the forcing factory.
Definition: Forcing.h:61
SOLVER_UTILS_EXPORT RiemannSolverFactory & Nektar::SolverUtils::GetRiemannSolverFactory ( )

Retrieves the singleton instance of the Riemann solver factory.

Definition at line 63 of file RiemannSolver.cpp.

Referenced by Nektar::LinearSWE::v_InitObject(), Nektar::NonlinearSWE::v_InitObject(), Nektar::APE::v_InitObject(), Nektar::NonlinearPeregrine::v_InitObject(), Nektar::UnsteadyInviscidBurger::v_InitObject(), Nektar::UnsteadyAdvection::v_InitObject(), Nektar::UnsteadyAdvectionDiffusion::v_InitObject(), and Nektar::CompressibleFlowSystem::v_InitObject().

64  {
65  typedef Loki::SingletonHolder<RiemannSolverFactory,
66  Loki::CreateUsingNew,
67  Loki::NoDestroy,
68  Loki::SingleThreaded> Type;
69  return Type::Instance();
70  }
LibUtilities::NekFactory< std::string, RiemannSolver > RiemannSolverFactory
Datatype of the NekFactory used to instantiate classes derived from the RiemannSolver class...
SOLVER_UTILS_EXPORT void Nektar::SolverUtils::UpdateGeometry ( SpatialDomains::MeshGraphSharedPtr  graph,
Array< OneD, MultiRegions::ExpListSharedPtr > &  fields 
)

Update geometry according to displacement that is in current fields.

Adds a summary item to the summary info list.

Parameters
graphThe MeshGraph of the current geometry.
fieldsThe fields containing the displacement.

Definition at line 57 of file Deform.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL1, Nektar::StdRegions::eBackwards, Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::LibUtilities::eGaussRadauMAlpha1Beta0, Nektar::LibUtilities::eModified_A, Nektar::LibUtilities::eNodalTriElec, Nektar::LibUtilities::eOrtho_A, Nektar::LibUtilities::eOrtho_B, Nektar::LibUtilities::eTriangle, Nektar::StdRegions::StdExpansion::FwdTrans(), Nektar::SpatialDomains::Geometry2D::GetEdge(), Nektar::SpatialDomains::Geometry3D::GetFace(), Nektar::LibUtilities::BasisKey::GetNumPoints(), Nektar::LibUtilities::BasisKey::GetPointsType(), Nektar::LibUtilities::Interp2D(), Nektar::StdRegions::StdNodalTriExp::ModalToNodal(), and Vmath::Vadd().

Referenced by Nektar::Utilities::ProcessDeform::Process(), and Nektar::IterativeElasticSystem::v_DoSolve().

60  {
61  // Clear existing curvature.
62  SpatialDomains::CurveMap &curvedEdges = graph->GetCurvedEdges();
63  SpatialDomains::CurveMap &curvedFaces = graph->GetCurvedFaces();
64  curvedEdges.clear();
65  curvedFaces.clear();
66 
67  int i, j, k, l, dim;
68 
69  // Sets to hold IDs of updated vertices to avoid duplicating effort.
70  set<int> updatedVerts, updatedEdges, updatedFaces;
71 
72  dim = graph->GetSpaceDimension();
75 
76  for (i = 0; i < fields[0]->GetExpSize(); ++i)
77  {
78  LocalRegions::ExpansionSharedPtr exp = fields[0]->GetExp(i);
79  int offset = fields[0]->GetPhys_Offset(i);
80  int nquad = exp->GetTotPoints();
81 
82  // Extract displacement for this element, allocate storage for
83  // elemental coordinates.
84  for (j = 0; j < dim; ++j)
85  {
86  phys[j] = Array<OneD, NekDouble>(
87  nquad, fields[j]->UpdatePhys() + offset);
88  coord[j] = Array<OneD, NekDouble>(nquad);
89  }
90 
91  // In 2D loop over edges.
92  if (dim == 2)
93  {
94  exp->GetCoords(coord[0], coord[1]);
95 
97  boost::dynamic_pointer_cast<SpatialDomains::Geometry2D>(
98  exp->GetGeom());
99 
100  for (j = 0; j < exp->GetNedges(); ++j)
101  {
103 
104  // This edge has already been processed.
105  if (updatedEdges.find(edge->GetGlobalID()) !=
106  updatedEdges.end())
107  {
108  continue;
109  }
110 
111  // Extract edge displacement.
112  int nEdgePts = exp->GetEdgeNumPoints(j);
113  Array<OneD, Array<OneD, NekDouble> > edgePhys (dim);
114  Array<OneD, Array<OneD, NekDouble> > edgeCoord(dim);
115 
116  const LibUtilities::BasisKey B(
117  LibUtilities::eModified_A, nEdgePts,
121  StdRegions::StdSegExp>::AllocateSharedPtr(B);
122 
123  for (k = 0; k < dim; ++k)
124  {
125  edgePhys [k] = Array<OneD, NekDouble>(nEdgePts);
126  edgeCoord[k] = Array<OneD, NekDouble>(nEdgePts);
127  exp->GetEdgePhysVals(j, seg, phys [k], edgePhys [k]);
128  exp->GetEdgePhysVals(j, seg, coord[k], edgeCoord[k]);
129  }
130 
131  // Update verts
132  for (k = 0; k < 2; ++k)
133  {
134  int id = edge->GetVid(k);
135  if (updatedVerts.find(id) != updatedVerts.end())
136  {
137  continue;
138  }
139 
141  edge->GetVertex(k);
142 
143  pt->UpdatePosition(
144  (*pt)(0) + edgePhys[0][k*(nEdgePts-1)],
145  (*pt)(1) + edgePhys[1][k*(nEdgePts-1)],
146  (*pt)(2));
147 
148  updatedVerts.insert(id);
149  }
150 
151  // Update curve
153  SpatialDomains::Curve>::AllocateSharedPtr(
154  edge->GetGlobalID(),
156 
157  for (k = 0; k < nEdgePts; ++k)
158  {
162  dim, edge->GetGlobalID(),
163  edgeCoord[0][k] + edgePhys[0][k],
164  edgeCoord[1][k] + edgePhys[1][k], 0.0);
165 
166  curve->m_points.push_back(vert);
167  }
168 
169  curvedEdges[edge->GetGlobalID()] = curve;
170  updatedEdges.insert(edge->GetGlobalID());
171  }
172  }
173  else if (dim == 3)
174  {
175  exp->GetCoords(coord[0], coord[1], coord[2]);
176 
178  boost::dynamic_pointer_cast<SpatialDomains::Geometry3D>(
179  exp->GetGeom());
180 
181  for (j = 0; j < exp->GetNfaces(); ++j)
182  {
184 
185  // This edge has already been processed.
186  if (updatedFaces.find(face->GetGlobalID()) !=
187  updatedFaces.end())
188  {
189  continue;
190  }
191 
192  // Extract face displacement.
193  LibUtilities::BasisKey B0 = exp->DetFaceBasisKey(j,0);
194  LibUtilities::BasisKey B1 = exp->DetFaceBasisKey(j,1);
195  int nq0 = B0.GetNumPoints();
196  int nq1 = B1.GetNumPoints();
197 
200  B1.GetPointsType()
202  "Deformation requires GLL points in both "
203  "directions on a face.");
204 
206 
208  StdRegions::Orientation orient = exp->GetForient(j);
209 
210  if (face->GetShapeType() == LibUtilities::eTriangle)
211  {
213  AllocateSharedPtr(B0, B1);
214  }
215  else
216  {
218  AllocateSharedPtr(B0, B1);
219  }
220 
221  for (k = 0; k < dim; ++k)
222  {
223  Array<OneD, NekDouble> tmp(nq0*nq1);
224  newPos[k] = Array<OneD, NekDouble>(nq0*nq1);
225  exp->GetFacePhysVals(
226  j, faceexp, phys [k], tmp, orient);
227  exp->GetFacePhysVals(
228  j, faceexp, coord[k], newPos[k], orient);
229  Vmath::Vadd(
230  nq0*nq1, tmp, 1, newPos[k], 1, newPos[k], 1);
231  }
232 
233  // Now interpolate face onto a more reasonable set of
234  // points.
235  int nq = max(nq0, nq1);
236  LibUtilities::PointsKey edgePts(
240 
242 
243  for (k = 0; k < dim; ++k)
244  {
245  intPos[k] = Array<OneD, NekDouble>(nq*nq);
247  faceexp->GetPointsKeys()[0],
248  faceexp->GetPointsKeys()[1],
249  newPos[k], edgePts, edgePts, intPos[k]);
250  }
251 
252  int edgeOff[2][4][2] = {
253  {
254  {0, 1},
255  {nq-1, nq},
256  {nq*(nq-1), -nq},
257  {-1,-1}
258  },
259  {
260  {0, 1},
261  {nq-1, nq},
262  {nq*nq-1, -1},
263  {nq*(nq-1), -nq}
264  }
265  };
266 
267  for (k = 0; k < face->GetNumVerts(); ++k)
268  {
269  // Update verts
270  int id = face->GetVid(k);
271  const int o =
272  face->GetShapeType() - LibUtilities::eTriangle;
273 
274  if (updatedVerts.find(id) == updatedVerts.end())
275  {
277  face->GetVertex(k);
278  pt->UpdatePosition(
279  intPos[0][edgeOff[o][k][0]],
280  intPos[1][edgeOff[o][k][0]],
281  intPos[2][edgeOff[o][k][0]]);
282  updatedVerts.insert(id);
283  }
284 
285  // Update edges
286  id = face->GetEid(k);
287  if (updatedEdges.find(id) == updatedEdges.end())
288  {
290  = face->GetEdge(k);
294  edge->GetGlobalID(),
296 
297  const int offset = edgeOff[o][k][0];
298  const int pos = edgeOff[o][k][1];
299 
300  if (face->GetEorient(k) == StdRegions::eBackwards)
301  {
302  for (l = nq-1; l >= 0; --l)
303  {
304  int m = offset + pos*l;
308  dim, edge->GetGlobalID(),
309  intPos[0][m], intPos[1][m],
310  intPos[2][m]);
311  curve->m_points.push_back(vert);
312  }
313  }
314  else
315  {
316  for (l = 0; l < nq; ++l)
317  {
318  int m = offset + pos*l;
322  dim, edge->GetGlobalID(),
323  intPos[0][m], intPos[1][m],
324  intPos[2][m]);
325  curve->m_points.push_back(vert);
326  }
327  }
328 
329  curvedEdges[edge->GetGlobalID()] = curve;
330  updatedEdges.insert(edge->GetGlobalID());
331  }
332  }
333 
334  // Update face-interior curvature
336  face->GetShapeType() == LibUtilities::eTriangle ?
339 
341  SpatialDomains::Curve>::AllocateSharedPtr(
342  face->GetGlobalID(),
343  pType);
344 
345  if (face->GetShapeType() == LibUtilities::eTriangle)
346  {
347  // This code is probably pretty crappy. Have to go from
348  // GLL-GLL points -> GLL-Gauss-Radau -> nodal triangle
349  // points.
350  const LibUtilities::BasisKey B0(
354  const LibUtilities::BasisKey B1(
358  StdRegions::StdNodalTriExp nodalTri(B0, B1, pType);
359  StdRegions::StdTriExp tri (B0, B1);
360 
361  for (k = 0; k < dim; ++k)
362  {
363  Array<OneD, NekDouble> nodal(nq*nq);
364 
366  faceexp->GetBasis(0)->GetBasisKey(),
367  faceexp->GetBasis(1)->GetBasisKey(),
368  newPos[k], B0, B1, nodal);
369 
370  Array<OneD, NekDouble> tmp1(nq*(nq+1)/2);
371  Array<OneD, NekDouble> tmp2(nq*(nq+1)/2);
372 
373  tri.FwdTrans(nodal, tmp1);
374  nodalTri.ModalToNodal(tmp1, tmp2);
375  newPos[k] = tmp2;
376  }
377 
378  for (l = 0; l < nq*(nq+1)/2; ++l)
379  {
383  dim, face->GetGlobalID(),
384  newPos[0][l], newPos[1][l], newPos[2][l]);
385  curve->m_points.push_back(vert);
386  }
387  }
388  else
389  {
390  for (l = 0; l < nq*nq; ++l)
391  {
395  dim, face->GetGlobalID(),
396  intPos[0][l], intPos[1][l], intPos[2][l]);
397  curve->m_points.push_back(vert);
398  }
399  }
400 
401  curvedFaces[face->GetGlobalID()] = curve;
402  updatedFaces.insert(face->GetGlobalID());
403  }
404  }
405  }
406 
407  // Reset geometry information
408  for (i = 0; i < fields.num_elements(); ++i)
409  {
410  fields[i]->Reset();
411  }
412  }
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
Principle Modified Functions .
Definition: BasisType.h:49
Geometry2DSharedPtr GetFace(int i)
Return face i in this element.
Definition: Geometry3D.cpp:79
PointsType GetPointsType() const
Return type of quadrature.
Definition: Basis.h:151
boost::shared_ptr< Curve > CurveSharedPtr
Definition: Curve.hpp:62
Gauss Radau pinned at x=-1, .
Definition: PointsType.h:57
Principle Orthogonal Functions .
Definition: BasisType.h:47
Class representing a segment element in reference space.
Definition: StdSegExp.h:54
void Interp2D(const BasisKey &fbasis0, const BasisKey &fbasis1, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, const BasisKey &tbasis1, Array< OneD, NekDouble > &to)
this function interpolates a 2D function evaluated at the quadrature points of the 2D basis...
Definition: Interp.cpp:116
boost::shared_ptr< StdExpansion2D > StdExpansion2DSharedPtr
int GetNumPoints() const
Return points order at which basis is defined.
Definition: Basis.h:128
boost::shared_ptr< StdExpansion1D > StdExpansion1DSharedPtr
Principle Orthogonal Functions .
Definition: BasisType.h:46
Defines a specification for a set of points.
Definition: Points.h:58
boost::shared_ptr< Geometry2D > Geometry2DSharedPtr
Definition: Geometry2D.h:59
3D geometry information
Definition: Geometry3D.h:70
2D geometry information
Definition: Geometry2D.h:65
const Geometry1DSharedPtr GetEdge(int i) const
Definition: Geometry2D.cpp:80
boost::shared_ptr< Expansion > ExpansionSharedPtr
Definition: Expansion.h:68
boost::shared_ptr< Geometry1D > Geometry1DSharedPtr
Definition: Geometry1D.h:48
boost::unordered_map< int, CurveSharedPtr > CurveMap
Definition: Curve.hpp:63
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:165
Describes the specification for a Basis.
Definition: Basis.h:50
boost::shared_ptr< PointGeom > PointGeomSharedPtr
Definition: Geometry.h:60
1D Gauss-Lobatto-Legendre quadrature points
Definition: PointsType.h:50
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.
Definition: Vmath.cpp:285
2D Nodal Electrostatic Points on a Triangle
Definition: PointsType.h:68
boost::shared_ptr< Geometry3D > Geometry3DSharedPtr
Definition: Geometry3D.h:52

Variable Documentation

SOLVER_UTILS_EXPORT typedef boost::shared_ptr<ForcingProgrammatic> Nektar::SolverUtils::ForcingProgrammaticSharedPtr

A shared pointer to an EquationSystem object.

Definition at line 52 of file ForcingProgrammatic.h.

SOLVER_UTILS_EXPORT typedef boost::shared_ptr<Forcing> Nektar::SolverUtils::ForcingSharedPtr