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

Filter for one-dimensional energy spectrum. More...

#include <FilterEnergy1D.h>

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

Public Member Functions

SOLVER_UTILS_EXPORT FilterEnergy1D (const LibUtilities::SessionReaderSharedPtr &pSession, const ParamMap &pParams)
 Set up filter with output file and frequency parameters. More...
 
SOLVER_UTILS_EXPORT ~FilterEnergy1D ()
 Destructor. More...
 
- Public Member Functions inherited from Nektar::SolverUtils::Filter
SOLVER_UTILS_EXPORT Filter (const LibUtilities::SessionReaderSharedPtr &pSession)
 
virtual SOLVER_UTILS_EXPORT ~Filter ()
 
SOLVER_UTILS_EXPORT void Initialise (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)
 
SOLVER_UTILS_EXPORT void Update (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)
 
SOLVER_UTILS_EXPORT void Finalise (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)
 
SOLVER_UTILS_EXPORT bool IsTimeDependent ()
 

Static Public Member Functions

static FilterSharedPtr create (const LibUtilities::SessionReaderSharedPtr &pSession, const std::map< std::string, std::string > &pParams)
 Creates an instance of this class. More...
 

Static Public Attributes

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

Protected Member Functions

virtual void v_Initialise (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pField, const NekDouble &time)
 Initialize filter. More...
 
virtual void v_Update (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pField, const NekDouble &time)
 Update filter output with the current timestep's orthogonal coefficients. More...
 
virtual void v_Finalise (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pField, const NekDouble &time)
 
virtual bool v_IsTimeDependent ()
 

Private Attributes

ofstream m_out
 Output file. More...
 
unsigned int m_outputFrequency
 Output frequency. More...
 
unsigned int m_index
 Current index counter. More...
 

Friends

class MemoryManager< FilterEnergy1D >
 

Additional Inherited Members

- Public Types inherited from Nektar::SolverUtils::Filter
typedef std::map< std::string,
std::string > 
ParamMap
 
- Protected Attributes inherited from Nektar::SolverUtils::Filter
LibUtilities::SessionReaderSharedPtr m_session
 

Detailed Description

Filter for one-dimensional energy spectrum.

This filter transforms the coefficients of each element into an orthogonal basis and outputs these coefficients at each timestep. It can be used to, for example, detect high-order oscillations in the solution field.

Definition at line 53 of file FilterEnergy1D.h.

Constructor & Destructor Documentation

Nektar::SolverUtils::FilterEnergy1D::FilterEnergy1D ( const LibUtilities::SessionReaderSharedPtr pSession,
const ParamMap pParams 
)

Set up filter with output file and frequency parameters.

Parameters
pSessionCurrent session.
pParamsMap of parameters defined in XML file.

Definition at line 52 of file FilterEnergy1D.cpp.

References ASSERTL0, Nektar::LibUtilities::Equation::Evaluate(), m_out, m_outputFrequency, and Nektar::SolverUtils::Filter::m_session.

54  :
55  Filter(pSession),
56  m_index(0)
57 {
58  ASSERTL0(pSession->GetComm()->GetSize() == 1,
59  "The 1D energy filter currently only works in serial.");
60 
61  ParamMap::const_iterator it;
62  std::string outName;
63 
64  // OutputFile
65  it = pParams.find("OutputFile");
66  if (it == pParams.end())
67  {
68  outName = m_session->GetSessionName();
69  }
70  else
71  {
72  ASSERTL0(it->second.length() > 0, "Missing parameter 'OutputFile'.");
73  outName = it->second;
74  }
75  outName += ".eny";
76  m_out.open(outName.c_str());
77 
78  // OutputFrequency
79  it = pParams.find("OutputFrequency");
80  if (it == pParams.end())
81  {
83  }
84  else
85  {
86  LibUtilities::Equation equ(m_session, it->second);
87  m_outputFrequency = floor(equ.Evaluate());
88  }
89 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:161
unsigned int m_index
Current index counter.
SOLVER_UTILS_EXPORT Filter(const LibUtilities::SessionReaderSharedPtr &pSession)
Definition: Filter.cpp:52
LibUtilities::SessionReaderSharedPtr m_session
Definition: Filter.h:84
unsigned int m_outputFrequency
Output frequency.
Nektar::SolverUtils::FilterEnergy1D::~FilterEnergy1D ( )

Destructor.

Definition at line 94 of file FilterEnergy1D.cpp.

95 {
96 
97 }

Member Function Documentation

static FilterSharedPtr Nektar::SolverUtils::FilterEnergy1D::create ( const LibUtilities::SessionReaderSharedPtr pSession,
const std::map< std::string, std::string > &  pParams 
)
inlinestatic

Creates an instance of this class.

Definition at line 59 of file FilterEnergy1D.h.

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

61  {
63  ::AllocateSharedPtr(pSession, pParams);
64  return p;
65  }
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
boost::shared_ptr< Filter > FilterSharedPtr
A shared pointer to a Driver object.
Definition: Filter.h:50
void Nektar::SolverUtils::FilterEnergy1D::v_Finalise ( const Array< OneD, const MultiRegions::ExpListSharedPtr > &  pField,
const NekDouble time 
)
protectedvirtual

Implements Nektar::SolverUtils::Filter.

Definition at line 169 of file FilterEnergy1D.cpp.

References m_out.

172 {
173  m_out.close();
174 }
void Nektar::SolverUtils::FilterEnergy1D::v_Initialise ( const Array< OneD, const MultiRegions::ExpListSharedPtr > &  pField,
const NekDouble time 
)
protectedvirtual

Initialize filter.

Implements Nektar::SolverUtils::Filter.

Definition at line 102 of file FilterEnergy1D.cpp.

References ASSERTL0.

105 {
106  ASSERTL0(pFields[0]->GetExp(0)->GetNumBases() == 1,
107  "The Energy 1D filter is only valid in 1D.");
108 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:161
bool Nektar::SolverUtils::FilterEnergy1D::v_IsTimeDependent ( )
protectedvirtual

Implements Nektar::SolverUtils::Filter.

Definition at line 176 of file FilterEnergy1D.cpp.

177 {
178  return true;
179 }
void Nektar::SolverUtils::FilterEnergy1D::v_Update ( const Array< OneD, const MultiRegions::ExpListSharedPtr > &  pField,
const NekDouble time 
)
protectedvirtual

Update filter output with the current timestep's orthogonal coefficients.

Implements Nektar::SolverUtils::Filter.

Definition at line 114 of file FilterEnergy1D.cpp.

References Nektar::LibUtilities::eOrtho_A, Nektar::LibUtilities::InterpCoeff1D(), m_index, m_out, and m_outputFrequency.

117 {
118  // Only output every m_outputFrequency
119  if ((m_index++) % m_outputFrequency)
120  {
121  return;
122  }
123 
124  int nElmt = pFields[0]->GetExpSize();
125 
126  // Loop over all elements
127  m_out << "##" << endl;
128  m_out << "## Time = " << time << endl;
129  m_out << "##" << endl;
130 
131  for (int i = 0; i < nElmt; ++i)
132  {
133  // Figure out number of modes in this expansion.
134  LocalRegions::ExpansionSharedPtr exp = pFields[0]->GetExp(i);
135  int nModes = exp->GetBasis(0)->GetNumModes();
136 
137  // Set uo basis key for orthogonal basis
139  LibUtilities::BasisKey bkeyOrth(
140  btype, nModes, exp->GetBasis(0)->GetPointsKey());
141 
142  // Get basis key for existing expansion
144  exp->GetBasis(0)->GetBasisType(),
145  exp->GetBasis(0)->GetNumModes(),
146  exp->GetBasis(0)->GetPointsKey());
147 
148  // Find coeffs for this element in the list of all coefficients
149  Array<OneD, NekDouble> coeffs =
150  pFields[0]->GetCoeffs() + pFields[0]->GetCoeff_Offset(i);
151 
152  // Storage for orthogonal coefficients
153  Array<OneD, NekDouble> coeffsOrth(nModes);
154 
155  // Project from coeffs -> orthogonal coeffs
156  LibUtilities::InterpCoeff1D(bkey, coeffs, bkeyOrth, coeffsOrth);
157 
158  // Write coeffs to file
159  m_out << "# Element " << i << " (ID "
160  << exp->GetGeom()->GetGlobalID() << ")" << endl;
161  for (int j = 0; j < nModes; ++j)
162  {
163  m_out << coeffsOrth[j] << endl;
164  }
165  }
166  m_out << endl;
167 }
void InterpCoeff1D(const BasisKey &fbasis0, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, Array< OneD, NekDouble > &to)
Definition: InterpCoeff.cpp:47
unsigned int m_index
Current index counter.
Principle Orthogonal Functions .
Definition: BasisType.h:46
boost::shared_ptr< Expansion > ExpansionSharedPtr
Definition: Expansion.h:68
Describes the specification for a Basis.
Definition: Basis.h:50
unsigned int m_outputFrequency
Output frequency.

Friends And Related Function Documentation

friend class MemoryManager< FilterEnergy1D >
friend

Definition at line 56 of file FilterEnergy1D.h.

Member Data Documentation

std::string Nektar::SolverUtils::FilterEnergy1D::className
static
Initial value:
RegisterCreatorFunction("Energy1D", FilterEnergy1D::create)

Name of the class.

Definition at line 68 of file FilterEnergy1D.h.

unsigned int Nektar::SolverUtils::FilterEnergy1D::m_index
private

Current index counter.

Definition at line 93 of file FilterEnergy1D.h.

Referenced by v_Update().

ofstream Nektar::SolverUtils::FilterEnergy1D::m_out
private

Output file.

Definition at line 89 of file FilterEnergy1D.h.

Referenced by FilterEnergy1D(), v_Finalise(), and v_Update().

unsigned int Nektar::SolverUtils::FilterEnergy1D::m_outputFrequency
private

Output frequency.

Definition at line 91 of file FilterEnergy1D.h.

Referenced by FilterEnergy1D(), and v_Update().