Nektar++
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Static Public Member Functions | Static Public Attributes | Protected Member Functions | Static Protected Attributes | Friends | List of all members
Nektar::SolverUtils::DriverAdaptive Class Reference

Base class for the adaptive polynomial order driver. More...

#include <DriverAdaptive.h>

Inheritance diagram for Nektar::SolverUtils::DriverAdaptive:
Inheritance graph
[legend]
Collaboration diagram for Nektar::SolverUtils::DriverAdaptive:
Collaboration graph
[legend]

Static Public Member Functions

static DriverSharedPtr create (const LibUtilities::SessionReaderSharedPtr &pSession)
 Creates an instance of this class. More...
 

Static Public Attributes

static std::string className
 Name of the class. More...
 

Protected Member Functions

SOLVER_UTILS_EXPORT DriverAdaptive (const LibUtilities::SessionReaderSharedPtr pSession)
 Constructor. More...
 
virtual SOLVER_UTILS_EXPORT ~DriverAdaptive ()
 Destructor. More...
 
virtual SOLVER_UTILS_EXPORT void v_InitObject (ostream &out=cout)
 Second-stage initialisation. More...
 
virtual SOLVER_UTILS_EXPORT void v_Execute (ostream &out=cout)
 Virtual function for solve implementation. More...
 
SOLVER_UTILS_EXPORT void ReplaceExpansion (Array< OneD, MultiRegions::ExpListSharedPtr > &fields, map< int, int > deltaP)
 Update EXPANSIONS tag inside XML schema to reflect new polynomial order distribution. More...
 
- Protected Member Functions inherited from Nektar::SolverUtils::Driver
 Driver (const LibUtilities::SessionReaderSharedPtr pSession)
 Initialises EquationSystem class members. More...
 
virtual SOLVER_UTILS_EXPORT
Array< OneD, NekDouble
v_GetRealEvl (void)
 
virtual SOLVER_UTILS_EXPORT
Array< OneD, NekDouble
v_GetImagEvl (void)
 

Static Protected Attributes

static std::string driverLookupId
 
- Static Protected Attributes inherited from Nektar::SolverUtils::Driver
static std::string evolutionOperatorLookupIds []
 
static std::string evolutionOperatorDef
 
static std::string driverDefault
 

Friends

class MemoryManager< DriverAdaptive >
 

Additional Inherited Members

- Public Member Functions inherited from Nektar::SolverUtils::Driver
virtual ~Driver ()
 Destructor. More...
 
SOLVER_UTILS_EXPORT void InitObject (ostream &out=cout)
 Initialise Object. More...
 
SOLVER_UTILS_EXPORT void Execute (ostream &out=cout)
 Execute driver. More...
 
SOLVER_UTILS_EXPORT Array
< OneD,
EquationSystemSharedPtr
GetEqu ()
 
SOLVER_UTILS_EXPORT Array
< OneD, NekDouble
GetRealEvl (void)
 
SOLVER_UTILS_EXPORT Array
< OneD, NekDouble
GetImagEvl (void)
 
- Protected Attributes inherited from Nektar::SolverUtils::Driver
LibUtilities::CommSharedPtr m_comm
 Communication object. More...
 
LibUtilities::SessionReaderSharedPtr m_session
 Session reader object. More...
 
LibUtilities::SessionReaderSharedPtr session_LinNS
 I the Coupling between SFD and arnoldi. More...
 
Array< OneD,
EquationSystemSharedPtr
m_equ
 Equation system to solve. More...
 
int m_nequ
 number of equations More...
 
enum EvolutionOperatorType m_EvolutionOperator
 Evolution Operator. More...
 

Detailed Description

Base class for the adaptive polynomial order driver.

Definition at line 48 of file DriverAdaptive.h.

Constructor & Destructor Documentation

Nektar::SolverUtils::DriverAdaptive::DriverAdaptive ( const LibUtilities::SessionReaderSharedPtr  pSession)
protected

Constructor.

Definition at line 56 of file DriverAdaptive.cpp.

58  : Driver(pSession)
59 {
60 }
Driver(const LibUtilities::SessionReaderSharedPtr pSession)
Initialises EquationSystem class members.
Definition: Driver.cpp:76
Nektar::SolverUtils::DriverAdaptive::~DriverAdaptive ( )
protectedvirtual

Destructor.

Definition at line 65 of file DriverAdaptive.cpp.

66 {
67 }

Member Function Documentation

static DriverSharedPtr Nektar::SolverUtils::DriverAdaptive::create ( const LibUtilities::SessionReaderSharedPtr pSession)
inlinestatic

Creates an instance of this class.

Definition at line 54 of file DriverAdaptive.h.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr().

56  {
57  DriverSharedPtr p =
59  p->InitObject();
60  return p;
61  }
boost::shared_ptr< Driver > DriverSharedPtr
A shared pointer to a Driver object.
Definition: Driver.h:52
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
void Nektar::SolverUtils::DriverAdaptive::ReplaceExpansion ( Array< OneD, MultiRegions::ExpListSharedPtr > &  fields,
map< int, int >  deltaP 
)
protected

Update EXPANSIONS tag inside XML schema to reflect new polynomial order distribution.

Parameters
fieldsInput fields.
deltaPMap of polynomial order expansions

Definition at line 378 of file DriverAdaptive.cpp.

References Nektar::LibUtilities::BasisTypeMap, Nektar::ParseUtils::GenerateSeqString(), Nektar::SolverUtils::Driver::m_session, and Nektar::LibUtilities::ShapeTypeMap.

Referenced by v_Execute().

381 {
382  int nExp, nDim;
383 
384  // Get field definitions
385  std::vector<LibUtilities::FieldDefinitionsSharedPtr> fielddefs =
386  fields[0]->GetFieldDefinitions();
387 
388  int expDim = 2;
389 
390  if (fielddefs[0]->m_numHomogeneousDir == 1)
391  {
392  nDim = 3;
393  }
394  else
395  {
396  nDim = 2;
397  }
398 
399  // Add variables to field definition
400  for (int i = 0; i < fielddefs.size(); ++i)
401  {
402  for (int j = 0; j < fields.num_elements(); ++j)
403  {
404  fielddefs[i]->m_fields.push_back(m_session->GetVariable(j));
405  }
406  }
407 
408  // Get tinyxml objects
409  TiXmlElement *exp_tag = m_session->GetElement("NEKTAR/EXPANSIONS");
410 
411  // Clear current expansions
412  exp_tag->Clear();
413 
414  // Write new expansion information
415  for (int f = 0; f < fielddefs.size(); ++f)
416  {
417  nExp = fielddefs[f]->m_elementIDs.size();
418 
419  //---------------------------------------------
420  // Write ELEMENTS
421  TiXmlElement *elemTag = new TiXmlElement("ELEMENTS");
422  exp_tag->LinkEndChild(elemTag);
423 
424  // Write FIELDS
425  std::string fieldsString;
426  {
427  std::stringstream fieldsStringStream;
428  bool first = true;
429  for (std::vector<int>::size_type i = 0;
430  i < fielddefs[f]->m_fields.size(); i++)
431  {
432  if (!first)
433  {
434  fieldsStringStream << ",";
435  }
436  fieldsStringStream << fielddefs[f]->m_fields[i];
437  first = false;
438  }
439  fieldsString = fieldsStringStream.str();
440  }
441  elemTag->SetAttribute("FIELDS", fieldsString);
442 
443  // Write SHAPE
444  std::string shapeString;
445  {
446  std::stringstream shapeStringStream;
447  shapeStringStream
448  << LibUtilities::ShapeTypeMap[fielddefs[f]->m_shapeType];
449  if (fielddefs[f]->m_numHomogeneousDir == 1)
450  {
451  shapeStringStream << "-HomogenousExp1D";
452  }
453  else if (fielddefs[f]->m_numHomogeneousDir == 2)
454  {
455  shapeStringStream << "-HomogenousExp2D";
456  }
457 
458  shapeString = shapeStringStream.str();
459  }
460  elemTag->SetAttribute("SHAPE", shapeString);
461 
462  // Write BASIS
463  std::string basisString;
464  {
465  std::stringstream basisStringStream;
466  bool first = true;
467  for (std::vector<LibUtilities::BasisType>::size_type i = 0;
468  i < fielddefs[f]->m_basis.size(); i++)
469  {
470  if (!first)
471  {
472  basisStringStream << ",";
473  }
474  basisStringStream
475  << LibUtilities::BasisTypeMap[fielddefs[f]->m_basis[i]];
476  first = false;
477  }
478  basisString = basisStringStream.str();
479  }
480  elemTag->SetAttribute("BASIS", basisString);
481 
482  // Write homogeneuous length details
483  if (fielddefs[f]->m_numHomogeneousDir)
484  {
485  std::string homoLenString;
486  {
487  std::stringstream homoLenStringStream;
488  bool first = true;
489  for (int i = 0; i < fielddefs[f]->m_numHomogeneousDir; ++i)
490  {
491  if (!first)
492  {
493  homoLenStringStream << ",";
494  }
495  homoLenStringStream
496  << fielddefs[f]->m_homogeneousLengths[i];
497  first = false;
498  }
499  homoLenString = homoLenStringStream.str();
500  }
501  elemTag->SetAttribute("HOMOGENEOUSLENGTHS", homoLenString);
502  }
503 
504  // Write homogeneuous planes/lines details
505  if (fielddefs[f]->m_numHomogeneousDir)
506  {
507  if (fielddefs[f]->m_homogeneousYIDs.size() > 0)
508  {
509  std::string homoYIDsString;
510  {
511  std::stringstream homoYIDsStringStream;
512  bool first = true;
513  for (int i = 0; i < fielddefs[f]->m_homogeneousYIDs.size();
514  i++)
515  {
516  if (!first)
517  {
518  homoYIDsStringStream << ",";
519  }
520  homoYIDsStringStream
521  << fielddefs[f]->m_homogeneousYIDs[i];
522  first = false;
523  }
524  homoYIDsString = homoYIDsStringStream.str();
525  }
526  elemTag->SetAttribute("HOMOGENEOUSYIDS", homoYIDsString);
527  }
528 
529  if (fielddefs[f]->m_homogeneousZIDs.size() > 0)
530  {
531  std::string homoZIDsString;
532  {
533  std::stringstream homoZIDsStringStream;
534  bool first = true;
535  for (int i = 0; i < fielddefs[f]->m_homogeneousZIDs.size();
536  i++)
537  {
538  if (!first)
539  {
540  homoZIDsStringStream << ",";
541  }
542  homoZIDsStringStream
543  << fielddefs[f]->m_homogeneousZIDs[i];
544  first = false;
545  }
546  homoZIDsString = homoZIDsStringStream.str();
547  }
548  elemTag->SetAttribute("HOMOGENEOUSZIDS", homoZIDsString);
549  }
550  }
551 
552  // Write NUMMODESPERDIR
553  std::string numModesString;
554  {
555  std::stringstream numModesStringStream;
556 
557  numModesStringStream << "MIXORDER:";
558  bool first = true;
559  int eId;
560  Array<OneD, int> order(nDim, 0);
561  for (int n = 0; n < nExp; n++)
562  {
563  eId = fielddefs[f]->m_elementIDs[n];
564 
565  for (int i = 0; i < expDim; i++)
566  {
567  order[i] = deltaP[eId];
568  }
569 
570  for (int i = 0; i < nDim; i++)
571  {
572  if (fielddefs[f]->m_uniOrder)
573  {
574  order[i] += fielddefs[f]->m_numModes[i];
575  }
576  else
577  {
578  order[i] += fielddefs[f]->m_numModes[n * nDim + i];
579  }
580 
581  if (!first)
582  {
583  numModesStringStream << ",";
584  }
585 
586  numModesStringStream << order[i];
587  first = false;
588  }
589  }
590  numModesString = numModesStringStream.str();
591  }
592  elemTag->SetAttribute("NUMMODESPERDIR", numModesString);
593 
594  // Write IDs. Should ideally look at ways of compressing this stream if
595  // just sequential.
596  elemTag->SetAttribute(
597  "ID", ParseUtils::GenerateSeqString(fielddefs[f]->m_elementIDs));
598  }
599 }
const char *const BasisTypeMap[]
Definition: Foundations.hpp:47
static std::string GenerateSeqString(const std::vector< unsigned int > &elmtids)
Definition: ParseUtils.hpp:159
const char *const ShapeTypeMap[]
Definition: ShapeType.hpp:66
LibUtilities::SessionReaderSharedPtr m_session
Session reader object.
Definition: Driver.h:88
void Nektar::SolverUtils::DriverAdaptive::v_Execute ( ostream &  out = cout)
protectedvirtual

Virtual function for solve implementation.

Implements Nektar::SolverUtils::Driver.

Definition at line 77 of file DriverAdaptive.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, Nektar::LibUtilities::eOrtho_A, Nektar::LibUtilities::eOrtho_B, Nektar::LibUtilities::eQuadrilateral, Nektar::LibUtilities::eTriangle, Nektar::GlobalMapping::Mapping::Load(), Nektar::SolverUtils::Driver::m_comm, Nektar::SolverUtils::Driver::m_equ, Nektar::SolverUtils::Driver::m_session, Nektar::GlobalMapping::MappingSharedPtr, Nektar::LibUtilities::ReduceMax, ReplaceExpansion(), Nektar::SolverUtils::Driver::v_InitObject(), Vmath::Vmul(), Vmath::Vsub(), and Vmath::Vsum().

78 {
79  time_t starttime, endtime;
80  NekDouble CPUtime;
81 
82  m_equ[0]->PrintSummary(out);
83 
84  // First run using original order
85  time(&starttime);
86  m_equ[0]->DoInitialise();
87 
88  // Obtain initial time in case a restart was used
89  NekDouble startTime = m_equ[0]->GetFinalTime();
90  m_equ[0]->DoSolve();
91 
92  // Load session parameters and solver info
93  bool isHomogeneous1D;
94  int nRuns, minP, maxP, sensorVar;
95  NekDouble lowerTol, upperTol;
96  m_session->LoadParameter ("NumRuns", nRuns, 1);
97  m_session->LoadParameter ("AdaptiveMinModes", minP, 4);
98  m_session->LoadParameter ("AdaptiveMaxModes", maxP, 12);
99  m_session->LoadParameter ("AdaptiveLowerTolerance", lowerTol, 1e-8);
100  m_session->LoadParameter ("AdaptiveUpperTolerance", upperTol, 1e-6);
101  m_session->LoadParameter ("AdaptiveSensorVariable", sensorVar, 0);
102  m_session->MatchSolverInfo("Homogeneous", "1D", isHomogeneous1D, false);
103 
104  // Get number of elements and planes
105  int nExp, nPlanes;
106  if (isHomogeneous1D)
107  {
108  nExp = m_equ[0]->UpdateFields()[0]->GetPlane(0)->GetExpSize();
109  nPlanes = m_equ[0]->UpdateFields()[0]->GetZIDs().num_elements();
110  }
111  else
112  {
113  nExp = m_equ[0]->UpdateFields()[0]->GetExpSize();
114  nPlanes = 1;
115  }
116 
117  int nFields = m_equ[0]->UpdateFields().num_elements();
118  int numSteps = m_session->GetParameter("NumSteps");
119  NekDouble period = m_session->GetParameter("TimeStep") * numSteps;
120 
121  Array<OneD, NekDouble> coeffs, phys, physReduced, tmpArray;
122 
123  // Get mapping
126  m_equ[0]->UpdateFields());
127 
128  // Adaptive loop
130  for (int i = 1; i < nRuns; i++)
131  {
132  // Get field expansions
134  m_equ[0]->UpdateFields();
135 
136  // Determine the change to be applied in the order
137  map<int, int> deltaP;
138  int offset = 0;
139  for (int n = 0; n < nExp; n++)
140  {
141  offset = fields[sensorVar]->GetPhys_Offset(n);
142  Exp = fields[sensorVar]->GetExp(n);
143 
144  int P = Exp->GetBasis(0)->GetNumModes();
145  int Q = Exp->GetBasis(1)->GetNumModes();
146  int qa = Exp->GetBasis(0)->GetNumPoints();
147  int qb = Exp->GetBasis(1)->GetNumPoints();
148 
149  // Declare orthogonal basis.
150  LibUtilities::PointsKey pa(qa, Exp->GetBasis(0)->GetPointsType());
151  LibUtilities::PointsKey pb(qb, Exp->GetBasis(1)->GetPointsType());
152 
154  switch (Exp->GetGeom()->GetShapeType())
155  {
157  {
159  pa);
161  pb);
162  OrthoExp = MemoryManager<
163  StdRegions::StdQuadExp>::AllocateSharedPtr(Ba, Bb);
164  break;
165  }
167  {
169  pa);
171  pb);
172  OrthoExp =
174  Ba, Bb);
175  break;
176  }
177  default:
178  ASSERTL0(false, "Shape not supported.");
179  break;
180  }
181 
182  int nq = OrthoExp->GetTotPoints();
183 
184  NekDouble error = 0;
185  NekDouble fac = 0;
186  NekDouble tmp = 0;
187 
188  coeffs = Array<OneD, NekDouble>(OrthoExp->GetNcoeffs());
189  physReduced = Array<OneD, NekDouble>(OrthoExp->GetTotPoints());
190  tmpArray = Array<OneD, NekDouble>(OrthoExp->GetTotPoints(), 0.0);
191 
192  // Refinement based only on one variable
193  for (int plane = 0; plane < nPlanes; plane++)
194  {
195  if (isHomogeneous1D)
196  {
197  phys =
198  fields[sensorVar]->GetPlane(plane)->GetPhys() + offset;
199  }
200  else
201  {
202  phys = fields[sensorVar]->GetPhys() + offset;
203  }
204 
205  // Project solution to lower order
206  OrthoExp->FwdTrans(phys, coeffs);
207  OrthoExp->BwdTrans(coeffs, physReduced);
208 
209  // Calculate error =||phys-physReduced||^2 / ||phys||^2
210  Vmath::Vsub(nq, phys, 1, physReduced, 1, tmpArray, 1);
211  Vmath::Vmul(nq, tmpArray, 1, tmpArray, 1, tmpArray, 1);
212  tmp = Exp->Integral(tmpArray);
213 
214  Vmath::Vmul(nq, phys, 1, phys, 1, tmpArray, 1);
215  fac = Exp->Integral(tmpArray);
216 
217  tmp = abs(tmp / fac);
218 
219  if (tmp != tmp)
220  {
221  ASSERTL0(false,
222  "Adaptive procedure encountered NaN value.");
223  }
224 
225  // Get maximum value along planes
226  error = (tmp > error) ? tmp : error;
227  }
228 
229  // Combine planes from different processes
230  m_session->GetComm()->GetColumnComm()->AllReduce(
231  error, LibUtilities::ReduceMax);
232 
233  // Override tolerances if function is defined
234  if (m_session->DefinesFunction("AdaptiveLowerTolerance"))
235  {
236  int nq = Exp->GetTotPoints();
237 
238  // Obtain points from the the element
239  Array<OneD, NekDouble> xc0, xc1, xc2;
240  xc0 = Array<OneD, NekDouble>(nq, 0.0);
241  xc1 = Array<OneD, NekDouble>(nq, 0.0);
242  xc2 = Array<OneD, NekDouble>(nq, 0.0);
243  Exp->GetCoords(xc0, xc1, xc2);
244 
245  // Evaluate function from session file
246  Array<OneD, NekDouble> tolerance(nq, 0.0);
248  m_session->GetFunction("AdaptiveLowerTolerance", 0);
249  ffunc->Evaluate(xc0, xc1, xc2, tolerance);
250  lowerTol = Vmath::Vsum(nq, tolerance, 1) / nq;
251  }
252 
253  if (m_session->DefinesFunction("AdaptiveUpperTolerance"))
254  {
255  int nq = Exp->GetTotPoints();
256 
257  // Obtain points from the the element
258  Array<OneD, NekDouble> xc0, xc1, xc2;
259  xc0 = Array<OneD, NekDouble>(nq, 0.0);
260  xc1 = Array<OneD, NekDouble>(nq, 0.0);
261  xc2 = Array<OneD, NekDouble>(nq, 0.0);
262  Exp->GetCoords(xc0, xc1, xc2);
263 
264  // Evaluate function from session file
265  Array<OneD, NekDouble> tolerance(nq, 0.0);
267  m_session->GetFunction("AdaptiveUpperTolerance", 0);
268  ffunc->Evaluate(xc0, xc1, xc2, tolerance);
269  upperTol = Vmath::Vsum(nq, tolerance, 1) / nq;
270  }
271 
272  // Determine what to do with the polynomial order
273  if ((error > upperTol) && (P < maxP))
274  {
275  deltaP[Exp->GetGeom()->GetGlobalID()] = 1;
276  }
277  else if ((error < lowerTol) && P > minP)
278  {
279  deltaP[Exp->GetGeom()->GetGlobalID()] = -1;
280  }
281  else
282  {
283  deltaP[Exp->GetGeom()->GetGlobalID()] = 0;
284  }
285  }
286 
287  // Write new expansion section to the session reader
288  ReplaceExpansion(fields, deltaP);
289 
290  // Reset GlobalLinSys Manager to avoid using too much memory
291  //
292  // @todo This could be made better by replacing individual matrices
293  // within the linear system.
296  ClearManager(std::string("GlobalLinSys"));
297 
298  int chkNumber = m_equ[0]->GetCheckpointNumber();
299  int chkSteps = m_equ[0]->GetCheckpointSteps();
300 
301  // Initialise driver again
303 
304  // Update mapping (must be before m_equ[0]->DoInitialise();)
305  mapping->ReplaceField(m_equ[0]->UpdateFields());
306 
307  // Set chkSteps to zero to avoid writing initial condition
308  m_equ[0]->SetCheckpointSteps(0);
309 
310  // Initialise equation
311  m_equ[0]->DoInitialise();
312  m_equ[0]->SetInitialStep(i * numSteps);
313  m_equ[0]->SetSteps(i * numSteps + numSteps);
314  m_equ[0]->SetTime(startTime + i * period);
315  m_equ[0]->SetBoundaryConditions(startTime + i * period);
316  m_equ[0]->SetCheckpointNumber(chkNumber);
317  m_equ[0]->SetCheckpointSteps(chkSteps);
318 
319  // Project solution to new expansion
320  for (int n = 0; n < nFields; n++)
321  {
322  m_equ[0]->UpdateFields()[n]->ExtractCoeffsToCoeffs(
323  fields[n], fields[n]->GetCoeffs(),
324  m_equ[0]->UpdateFields()[n]->UpdateCoeffs());
325  m_equ[0]->UpdateFields()[n]->BwdTrans_IterPerExp(
326  m_equ[0]->UpdateFields()[n]->GetCoeffs(),
327  m_equ[0]->UpdateFields()[n]->UpdatePhys());
328  }
329 
330  // Solve equation
331  m_equ[0]->DoSolve();
332  }
333 
334  time(&endtime);
335 
336  m_equ[0]->Output();
337 
338  if (m_comm->GetRank() == 0)
339  {
340  CPUtime = difftime(endtime, starttime);
341  cout << "-------------------------------------------" << endl;
342  cout << "Total Computation Time = " << CPUtime << "s" << endl;
343  cout << "-------------------------------------------" << endl;
344  }
345 
346  // Evaluate and output computation time and solution accuracy.
347  // The specific format of the error output is essential for the
348  // regression tests to work.
349 
350  // Evaluate L2 Error
351  for (int i = 0; i < m_equ[0]->GetNvariables(); ++i)
352  {
353  Array<OneD, NekDouble> exactsoln(m_equ[0]->GetTotPoints(), 0.0);
354 
355  // Evaluate "ExactSolution" function, or zero array
356  m_equ[0]->EvaluateExactSolution(i, exactsoln, m_equ[0]->GetFinalTime());
357 
358  NekDouble vL2Error = m_equ[0]->L2Error (i, exactsoln);
359  NekDouble vLinfError = m_equ[0]->LinfError(i, exactsoln);
360 
361  if (m_comm->GetRank() == 0)
362  {
363  out << "L 2 error (variable " << m_equ[0]->GetVariable(i)
364  << ") : " << vL2Error << endl;
365  out << "L inf error (variable " << m_equ[0]->GetVariable(i)
366  << ") : " << vLinfError << endl;
367  }
368  }
369 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:161
virtual SOLVER_UTILS_EXPORT void v_InitObject(ostream &out=cout)
Definition: Driver.cpp:90
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
Principle Orthogonal Functions .
Definition: BasisType.h:47
Principle Orthogonal Functions .
Definition: BasisType.h:46
Defines a specification for a set of points.
Definition: Points.h:58
double NekDouble
boost::shared_ptr< Expansion > ExpansionSharedPtr
Definition: Expansion.h:68
GLOBAL_MAPPING_EXPORT typedef boost::shared_ptr< Mapping > MappingSharedPtr
A shared pointer to a Mapping object.
Definition: Mapping.h:51
Describe a linear system.
boost::shared_ptr< Equation > EquationSharedPtr
void Vsub(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Subtract vector z = x-y.
Definition: Vmath.cpp:329
A global linear system.
Definition: GlobalLinSys.h:74
Array< OneD, EquationSystemSharedPtr > m_equ
Equation system to solve.
Definition: Driver.h:94
LibUtilities::CommSharedPtr m_comm
Communication object.
Definition: Driver.h:85
T Vsum(int n, const T *x, const int incx)
Subtract return sum(x)
Definition: Vmath.cpp:723
boost::shared_ptr< StdExpansion > StdExpansionSharedPtr
SOLVER_UTILS_EXPORT void ReplaceExpansion(Array< OneD, MultiRegions::ExpListSharedPtr > &fields, map< int, int > deltaP)
Update EXPANSIONS tag inside XML schema to reflect new polynomial order distribution.
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.
Definition: Mapping.cpp:264
Describes the specification for a Basis.
Definition: Basis.h:50
LibUtilities::SessionReaderSharedPtr m_session
Session reader object.
Definition: Driver.h:88
void Vmul(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x*y.
Definition: Vmath.cpp:169
void Nektar::SolverUtils::DriverAdaptive::v_InitObject ( ostream &  out = cout)
protectedvirtual

Second-stage initialisation.

Reimplemented from Nektar::SolverUtils::Driver.

Definition at line 72 of file DriverAdaptive.cpp.

References Nektar::SolverUtils::Driver::v_InitObject().

73 {
75 }
virtual SOLVER_UTILS_EXPORT void v_InitObject(ostream &out=cout)
Definition: Driver.cpp:90

Friends And Related Function Documentation

friend class MemoryManager< DriverAdaptive >
friend

Definition at line 51 of file DriverAdaptive.h.

Member Data Documentation

string Nektar::SolverUtils::DriverAdaptive::className
static
Initial value:

Name of the class.

Definition at line 64 of file DriverAdaptive.h.

string Nektar::SolverUtils::DriverAdaptive::driverLookupId
staticprotected
Initial value:

Definition at line 84 of file DriverAdaptive.h.