36 #ifndef NEKTAR_SOLVERUTILS_EQUATIONSYSTEM_H 
   37 #define NEKTAR_SOLVERUTILS_EQUATIONSYSTEM_H 
   69         class EquationSystem : 
public boost::enable_shared_from_this<EquationSystem>
 
  106             boost::shared_ptr<T> 
as()
 
  108 #if defined __INTEL_COMPILER && BOOST_VERSION > 105200 
  109                 typedef typename boost::shared_ptr<T>::element_type E;
 
  110                 E * p = 
dynamic_cast< E* 
>( shared_from_this().get() );
 
  112                 return boost::shared_ptr<T>( shared_from_this(), p );
 
  114                 return boost::dynamic_pointer_cast<T>( shared_from_this() );
 
  142                 std::string pFunctionName,
 
  144                 const int domain = 0);
 
  148                 std::vector<std::string> pFieldNames,
 
  150                 const std::string& pName,
 
  152                 const int domain = 0);
 
  156                 std::vector<std::string> pFieldNames,
 
  158                 const std::string& pName,
 
  160                 const int domain = 0);
 
  164                 std::string pFieldName,
 
  166                 const std::string& pFunctionName,
 
  168                 const int domain = 0);
 
  172                 std::string pFieldName,
 
  173                 const std::string &pFunctionName,
 
  183                 bool dumpInitialConditions = 
true,
 
  184                 const int domain = 0);
 
  197                 bool                         Normalised = 
false);
 
  202                 bool         Normalised = 
false)
 
  227                 bool UseContCoeffs = 
false);
 
  241                 bool NumericalFluxIncludesNormal = 
true,
 
  242                 bool InFieldIsInPhysSpace = 
false,
 
  249                 bool NumericalFluxIncludesNormal = 
true,
 
  250                 bool InFieldIsInPhysSpace = 
false);
 
  260                 std::vector<std::string> &variables);
 
  270                 const std::string &outname,
 
  273                 std::vector<std::string> &variables);
 
  277                 const std::string &infile,
 
  282                                       const std::string &infile, 
 
  289                 const std::string &infile, 
 
  290                 std::vector<std::string> &fieldStr, 
 
  296                 const std::string &infile, 
 
  298                 std::string &pFieldName);
 
  404                 const bool modbasis);
 
  408                 const string & s1, 
const string& s2) ;
 
  458             map<std::string, Array<OneD, Array<OneD,  unsigned int> > > 
m_interpInds;
 
  582                 bool Normalised = 
false);
 
  595                 bool dumpInitialConditions = 
true,
 
  596                 const int domain = 0);
 
  619                 std::vector<std::string>             &variables);
 
  625                 const int i, 
Array<OneD,
 
  630                 const int i, 
const int j,
 
  635                 const int i, 
Array<OneD,
 
  659                                                       const int goal)
 const 
  744             return v_L2Error(field, exactsoln, Normalised);
 
  764             if (
m_session->GetComm()->GetRank() == 0)
 
  766                 std::vector<std::pair<std::string, std::string> > vSummary;
 
  769                 out << 
"=======================================================================" << endl;
 
  770                 SummaryList::const_iterator x;
 
  771                 for (x = vSummary.begin(); x != vSummary.end(); ++x)
 
  775                     out << x->first << 
": " << x->second << endl;
 
  777                 out << 
"=======================================================================" << endl;
 
  787                                                          bool dumpInitialConditions,
 
  819             return m_fields[0]->GetNcoeffs(eid);
 
  824             return m_graph->GetExpansions().begin()->second->m_basisKeyVector[0]
 
  830             return m_fields[0]->EvalBasisNumModesMaxPerExp();
 
  850             return m_fields[0]->GetTrace()->GetNpoints();
 
  860             return m_fields[0]->GetPhys_Offset(n);
 
  865             return m_fields[0]->GetCoeff_Offset(n);
 
  875             return m_fields[0]->GetTotPoints(n);
 
  885             return (
m_fields.num_elements() - 1);
 
virtual SOLVER_UTILS_EXPORT void v_GenerateSummary(SummaryList &l)
Virtual function for generating summary information. 
 
bool m_singleMode
Flag to determine if single homogeneous mode is used. 
 
SOLVER_UTILS_EXPORT void NumFluxforScalar(const Array< OneD, Array< OneD, NekDouble > > &ufield, Array< OneD, Array< OneD, Array< OneD, NekDouble > > > &uflux)
 
f SOLVER_UTILS_EXPORT void AdvectionNonConservativeForm(const Array< OneD, Array< OneD, NekDouble > > &V, const Array< OneD, const NekDouble > &u, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wk=NullNekDouble1DArray)
Compute the non-conservative advection. 
 
SOLVER_UTILS_EXPORT void InitialiseBaseFlow(Array< OneD, Array< OneD, NekDouble > > &base)
Perform initialisation of the base flow. 
 
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 std::string DescribeFunction(std::string pFieldName, const std::string &pFunctionName, const int domain)
Provide a description of a function for a given field name. 
 
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_gradtan
1 x nvariable x nq 
 
A base class for describing how to solve specific equations. 
 
int nocase_cmp(const string &s1, const string &s2)
 
static Array< OneD, NekDouble > NullNekDouble1DArray
 
SOLVER_UTILS_EXPORT NekDouble L2Error(unsigned int field, const Array< OneD, NekDouble > &exactsoln, bool Normalised=false)
Compute the L2 error between fields and a given exact solution. 
 
NekDouble m_time
Current time of simulation. 
 
SOLVER_UTILS_EXPORT void WeakAdvectionNonConservativeForm(const Array< OneD, Array< OneD, NekDouble > > &V, const Array< OneD, const NekDouble > &u, Array< OneD, NekDouble > &outarray, bool UseContCoeffs=false)
Compute the inner product . 
 
NekDouble m_timestep
Time step size. 
 
SOLVER_UTILS_EXPORT void SetUpTraceNormals(void)
 
SOLVER_UTILS_EXPORT void SetSteps(const int steps)
 
std::vector< std::pair< std::string, std::string > > SummaryList
 
NekDouble m_lambda
Lambda constant in real system if one required. 
 
SOLVER_UTILS_EXPORT int GetNvariables()
 
bool m_halfMode
Flag to determine if half homogeneous mode is used. 
 
NekDouble m_LhomZ
physical length in Z direction (if homogeneous) 
 
virtual SOLVER_UTILS_EXPORT NekDouble v_L2Error(unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray, bool Normalised=false)
Virtual function for the L_2 error computation between fields and a given exact solution. 
 
SOLVER_UTILS_EXPORT const Array< OneD, int > GetNumExpModesPerExp()
 
Array< OneD, bool > m_checkIfSystemSingular
Flag to indicate if the fields should be checked for singularity. 
 
int m_expdim
Expansion dimension. 
 
SOLVER_UTILS_EXPORT void Checkpoint_Output(const int n)
Write checkpoint file of m_fields. 
 
NekDouble m_LhomX
physical length in X direction (if homogeneous) 
 
SOLVER_UTILS_EXPORT Array< OneD, MultiRegions::ExpListSharedPtr > & UpdateFields()
 
enum MultiRegions::ProjectionType m_projectionType
Type of projection; e.g continuous or discontinuous. 
 
map< std::string, Array< OneD, Array< OneD, unsigned int > > > m_interpInds
Map of the interpolation indices for a specific filename. 
 
SOLVER_UTILS_EXPORT Array< OneD, NekDouble > ErrorExtraPoints(unsigned int field)
Compute error (L2 and L_inf) over an larger set of quadrature points return [L2 Linf]. 
 
ProjectionType
Type of Galerkin projection. 
 
SOLVER_UTILS_EXPORT void WeakAdvectionGreensDivergenceForm(const Array< OneD, Array< OneD, NekDouble > > &F, Array< OneD, NekDouble > &outarray)
Compute the inner product . 
 
NekDouble m_checktime
Time between checkpoints. 
 
bool m_useFFT
Flag to determine if FFT is used for homogeneous transform. 
 
NekDouble m_LhomY
physical length in Y direction (if homogeneous) 
 
bool m_specHP_dealiasing
Flag to determine if dealisising is usde for the Spectral/hp element discretisation. 
 
SOLVER_UTILS_EXPORT int GetNumExpModes()
 
SOLVER_UTILS_EXPORT void TransCoeffToPhys()
Transform from coefficient to physical space. 
 
SOLVER_UTILS_EXPORT void InitObject()
Initialises the members of this object. 
 
virtual SOLVER_UTILS_EXPORT void v_ExtraFldOutput(std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables)
 
SOLVER_UTILS_EXPORT void PrintProgressbar(const int position, const int goal) const 
 
virtual SOLVER_UTILS_EXPORT NekDouble v_LinfError(unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray)
Virtual function for the L_inf error computation between fields and a given exact solution...
 
int m_npointsZ
number of points in Z direction (if homogeneous) 
 
virtual SOLVER_UTILS_EXPORT ~EquationSystem()
Destructor. 
 
std::string m_sessionName
Name of the session. 
 
int m_nchk
Number of checkpoints written so far. 
 
int m_NumMode
Mode to use in case of single mode analysis. 
 
SOLVER_UTILS_EXPORT void WeakAdvectionDivergenceForm(const Array< OneD, Array< OneD, NekDouble > > &F, Array< OneD, NekDouble > &outarray)
Compute the inner product . 
 
boost::shared_ptr< SessionReader > SessionReaderSharedPtr
 
std::map< std::string, std::string > FieldMetaDataMap
 
int m_checksteps
Number of steps between checkpoints. 
 
SOLVER_UTILS_EXPORT int GetCoeff_Offset(int n)
 
LibUtilities::CommSharedPtr m_comm
Communicator. 
 
SOLVER_UTILS_EXPORT void SetModifiedBasis(const bool modbasis)
 
SOLVER_UTILS_EXPORT LibUtilities::FieldMetaDataMap & UpdateFieldMetaDataMap()
Get hold of FieldInfoMap so it can be updated. 
 
SOLVER_UTILS_EXPORT void ResetSessionName(std::string newname)
Reset Session name. 
 
SOLVER_UTILS_EXPORT int GetTotPoints()
 
SOLVER_UTILS_EXPORT const std::string GetVariable(unsigned int i)
 
SOLVER_UTILS_EXPORT void Output()
Perform output operations after solve. 
 
NekDouble m_fintime
Finish time of the simulation. 
 
virtual SOLVER_UTILS_EXPORT void v_InitObject()
Initialisation object for EquationSystem. 
 
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_tanbasis
2 x m_spacedim x nq 
 
SOLVER_UTILS_EXPORT void CopyToPhysField(const int i, Array< OneD, NekDouble > &output)
 
boost::shared_ptr< EquationSystem > EquationSystemSharedPtr
A shared pointer to an EquationSystem object. 
 
int m_steps
Number of steps to take. 
 
SOLVER_UTILS_EXPORT int NoCaseStringCompare(const string &s1, const string &s2)
Perform a case-insensitive string comparison. 
 
Array< OneD, Array< OneD, NekDouble > > m_traceNormals
Array holding trace normals for DG simulations in the forwards direction. 
 
int m_HomoDirec
number of homogenous directions 
 
SOLVER_UTILS_EXPORT void FwdTransFields()
 
Array< OneD, MultiRegions::ExpListSharedPtr > m_derivedfields
Array holding all dependent variables. 
 
SOLVER_UTILS_EXPORT void WeakDGDiffusion(const Array< OneD, Array< OneD, NekDouble > > &InField, Array< OneD, Array< OneD, NekDouble > > &OutField, bool NumericalFluxIncludesNormal=true, bool InFieldIsInPhysSpace=false)
Calculate weak DG Diffusion in the LDG form. 
 
boost::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object. 
 
SOLVER_UTILS_EXPORT int GetCheckpointSteps()
 
SOLVER_UTILS_EXPORT int GetSteps()
 
bool m_multipleModes
Flag to determine if use multiple homogenenous modes are used. 
 
virtual SOLVER_UTILS_EXPORT Array< OneD, bool > v_GetSystemSingularChecks()
 
SOLVER_UTILS_EXPORT void TransPhysToCoeff()
Transform from physical to coefficient space. 
 
SOLVER_UTILS_EXPORT void NumericalFlux(Array< OneD, Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, NekDouble > > &numflux)
 
SOLVER_UTILS_EXPORT void SetUpBaseFields(SpatialDomains::MeshGraphSharedPtr &mesh)
 
SOLVER_UTILS_EXPORT void CopyFromPhysField(const int i, Array< OneD, NekDouble > &output)
 
SOLVER_UTILS_EXPORT void SetCheckpointSteps(int num)
 
int m_npointsY
number of points in Y direction (if homogeneous) 
 
virtual SOLVER_UTILS_EXPORT void v_TransPhysToCoeff()
Virtual function for transformation to coefficient space. 
 
virtual SOLVER_UTILS_EXPORT void v_GetFluxVector(const int i, Array< OneD, Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, NekDouble > > &flux)
 
virtual SOLVER_UTILS_EXPORT void v_Output(void)
 
SpatialDomains::BoundaryConditionsSharedPtr m_boundaryConditions
Pointer to boundary conditions object. 
 
boost::shared_ptr< ExpList > ExpListSharedPtr
Shared pointer to an ExpList object. 
 
int m_spacedim
Spatial dimension (>= expansion dim). 
 
SOLVER_UTILS_EXPORT NekDouble L2Error(unsigned int field, bool Normalised=false)
Compute the L2 error of the fields. 
 
LibUtilities::FieldMetaDataMap m_fieldMetaDataMap
Map to identify relevant solver info to dump in output fields. 
 
boost::shared_ptr< FieldIO > FieldIOSharedPtr
 
virtual SOLVER_UTILS_EXPORT void v_SetInitialConditions(NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0)
 
SOLVER_UTILS_EXPORT void DoInitialise()
Perform any initialisation necessary before solving the problem. 
 
SOLVER_UTILS_EXPORT LibUtilities::SessionReaderSharedPtr GetSession()
Get Session name. 
 
std::set< std::string > m_loadedFields
 
SOLVER_UTILS_EXPORT NekDouble GetTimeStep()
 
SOLVER_UTILS_EXPORT void GetFluxVector(const int i, Array< OneD, Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, NekDouble > > &flux)
 
SOLVER_UTILS_EXPORT void EvaluateFunction(Array< OneD, Array< OneD, NekDouble > > &pArray, std::string pFunctionName, const NekDouble pTime=0.0, const int domain=0)
Evaluates a function as specified in the session file. 
 
SOLVER_UTILS_EXPORT void ScanForHistoryPoints()
Builds map of which element holds each history point. 
 
virtual SOLVER_UTILS_EXPORT void v_DoInitialise()
Virtual function for initialisation implementation. 
 
bool m_homogen_dealiasing
Flag to determine if dealiasing is used for homogeneous simulations. 
 
SOLVER_UTILS_EXPORT std::string GetSessionName()
Get Session name. 
 
EquationSystemFactory & GetEquationSystemFactory()
 
SOLVER_UTILS_EXPORT void ImportFldToMultiDomains(const std::string &infile, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const int ndomains)
Input field data from the given file to multiple domains. 
 
int m_npointsX
number of points in X direction (if homogeneous) 
 
SOLVER_UTILS_EXPORT void SetBoundaryConditions(NekDouble time)
Evaluates the boundary conditions at the given time. 
 
SOLVER_UTILS_EXPORT int GetTraceTotPoints()
 
SOLVER_UTILS_EXPORT int GetPhys_Offset(int n)
 
SOLVER_UTILS_EXPORT NekDouble GetFinalTime()
Return final time. 
 
SOLVER_UTILS_EXPORT void PrintSummary(std::ostream &out)
Print a summary of parameters and solver characteristics. 
 
SOLVER_UTILS_EXPORT void WriteFld(const std::string &outname)
Write field data to the given filename. 
 
SOLVER_UTILS_EXPORT int GetNpoints()
 
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
Array holding all dependent variables. 
 
SOLVER_UTILS_EXPORT int GetExpSize()
 
#define SOLVER_UTILS_EXPORT
 
LibUtilities::SessionReaderSharedPtr m_session
The session reader. 
 
Array< OneD, MultiRegions::ExpListSharedPtr > m_base
Base fields. 
 
SOLVER_UTILS_EXPORT NekDouble LinfError(unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray)
Linf error computation. 
 
boost::shared_ptr< BoundaryConditions > BoundaryConditionsSharedPtr
 
SOLVER_UTILS_EXPORT int GetTraceNpoints()
 
SOLVER_UTILS_EXPORT int GetNcoeffs()
 
LibUtilities::FieldIOSharedPtr m_fld
Field input/output. 
 
HomogeneousType
Parameter for homogeneous expansions. 
 
virtual SOLVER_UTILS_EXPORT void v_NumFluxforVector(const Array< OneD, Array< OneD, NekDouble > > &ufield, Array< OneD, Array< OneD, Array< OneD, NekDouble > > > &qfield, Array< OneD, Array< OneD, NekDouble > > &qflux)
 
int m_initialStep
Number of the step where the simulation should begin. 
 
SOLVER_UTILS_EXPORT MultiRegions::ExpListSharedPtr GetPressure()
Get pressure field if available. 
 
virtual SOLVER_UTILS_EXPORT bool v_NegatedOp()
Virtual function to identify if operator is negated in DoSolve. 
 
virtual SOLVER_UTILS_EXPORT MultiRegions::ExpListSharedPtr v_GetPressure(void)
 
SOLVER_UTILS_EXPORT void NumFluxforVector(const Array< OneD, Array< OneD, NekDouble > > &ufield, Array< OneD, Array< OneD, Array< OneD, NekDouble > > > &qfield, Array< OneD, Array< OneD, NekDouble > > &qflux)
 
SOLVER_UTILS_EXPORT void ZeroPhysFields()
 
SOLVER_UTILS_EXPORT void EvaluateExactSolution(int field, Array< OneD, NekDouble > &outfield, const NekDouble time)
Evaluates an exact solution. 
 
SOLVER_UTILS_EXPORT void SessionSummary(SummaryList &vSummary)
Write out a session summary. 
 
SOLVER_UTILS_EXPORT void SetTime(const NekDouble time)
 
SpatialDomains::MeshGraphSharedPtr m_graph
Pointer to graph defining mesh. 
 
virtual SOLVER_UTILS_EXPORT void v_NumFluxforScalar(const Array< OneD, Array< OneD, NekDouble > > &ufield, Array< OneD, Array< OneD, Array< OneD, NekDouble > > > &uflux)
 
SOLVER_UTILS_EXPORT void WriteHistoryData(std::ostream &out)
Probe each history point and write to file. 
 
SOLVER_UTILS_EXPORT void SetInitialConditions(NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0)
Initialise the data in the dependent fields. 
 
SOLVER_UTILS_EXPORT void WeakDGAdvection(const Array< OneD, Array< OneD, NekDouble > > &InField, Array< OneD, Array< OneD, NekDouble > > &OutField, bool NumericalFluxIncludesNormal=true, bool InFieldIsInPhysSpace=false, int nvariables=0)
Calculate the weak discontinuous Galerkin advection. 
 
SOLVER_UTILS_EXPORT int GetNumElmVelocity()
 
SOLVER_UTILS_EXPORT void Checkpoint_BaseFlow(const int n)
Write base flow file of m_fields. 
 
SOLVER_UTILS_EXPORT void ImportFldBase(std::string pInfile, SpatialDomains::MeshGraphSharedPtr pGraph)
 
virtual SOLVER_UTILS_EXPORT void v_DoSolve()
Virtual function for solve implementation. 
 
int m_NumQuadPointsError
Number of Quadrature points used to work out the error. 
 
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
 
boost::shared_ptr< MeshGraph > MeshGraphSharedPtr
 
SOLVER_UTILS_EXPORT void DoSolve()
Solve the problem. 
 
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
 
void PrintProgressbar(const int position, const int goal, const string message)
Prints a progressbar. 
 
SOLVER_UTILS_EXPORT void SetInitialStep(const int step)
 
virtual SOLVER_UTILS_EXPORT void v_EvaluateExactSolution(unsigned int field, Array< OneD, NekDouble > &outfield, const NekDouble time)
 
virtual SOLVER_UTILS_EXPORT void v_TransCoeffToPhys()
Virtual function for transformation to physical space. 
 
map< std::string, Array< OneD, Array< OneD, float > > > m_interpWeights
Map of the interpolation weights for a specific filename. 
 
SOLVER_UTILS_EXPORT void SetLambda(NekDouble lambda)
Set parameter m_lambda. 
 
SOLVER_UTILS_EXPORT EquationSystem(const LibUtilities::SessionReaderSharedPtr &pSession)
Initialises EquationSystem class members. 
 
virtual SOLVER_UTILS_EXPORT void v_NumericalFlux(Array< OneD, Array< OneD, NekDouble > > &physfield, Array< OneD, Array< OneD, NekDouble > > &numflux)
 
boost::shared_ptr< T > as()
 
enum HomogeneousType m_HomogeneousType
 
SOLVER_UTILS_EXPORT void SetCheckpointNumber(int num)
 
SOLVER_UTILS_EXPORT int GetCheckpointNumber()
 
Provides a generic Factory class. 
 
SOLVER_UTILS_EXPORT void ImportFld(const std::string &infile, Array< OneD, MultiRegions::ExpListSharedPtr > &pFields)
Input field data from the given file.