Nektar++
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 std::map< std::string, std::string > &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

- 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 std::map< std::string, std::string > &  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, m_out, m_outputFrequency, and Nektar::SolverUtils::Filter::m_session.

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

Destructor.

Definition at line 91 of file FilterEnergy1D.cpp.

92  {
93 
94  }

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 166 of file FilterEnergy1D.cpp.

References m_out.

169  {
170  m_out.close();
171  }
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 99 of file FilterEnergy1D.cpp.

References ASSERTL0.

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

Implements Nektar::SolverUtils::Filter.

Definition at line 173 of file FilterEnergy1D.cpp.

174  {
175  return true;
176  }
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 111 of file FilterEnergy1D.cpp.

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

114  {
115  // Only output every m_outputFrequency
116  if ((m_index++) % m_outputFrequency)
117  {
118  return;
119  }
120 
121  int nElmt = pFields[0]->GetExpSize();
122 
123  // Loop over all elements
124  m_out << "##" << endl;
125  m_out << "## Time = " << time << endl;
126  m_out << "##" << endl;
127 
128  for (int i = 0; i < nElmt; ++i)
129  {
130  // Figure out number of modes in this expansion.
131  LocalRegions::ExpansionSharedPtr exp = pFields[0]->GetExp(i);
132  int nModes = exp->GetBasis(0)->GetNumModes();
133 
134  // Set uo basis key for orthogonal basis
136  LibUtilities::BasisKey bkeyOrth(
137  btype, nModes, exp->GetBasis(0)->GetPointsKey());
138 
139  // Get basis key for existing expansion
141  exp->GetBasis(0)->GetBasisType(),
142  exp->GetBasis(0)->GetNumModes(),
143  exp->GetBasis(0)->GetPointsKey());
144 
145  // Find coeffs for this element in the list of all coefficients
146  Array<OneD, NekDouble> coeffs =
147  pFields[0]->GetCoeffs() + pFields[0]->GetCoeff_Offset(i);
148 
149  // Storage for orthogonal coefficients
150  Array<OneD, NekDouble> coeffsOrth(nModes);
151 
152  // Project from coeffs -> orthogonal coeffs
153  LibUtilities::InterpCoeff1D(bkey, coeffs, bkeyOrth, coeffsOrth);
154 
155  // Write coeffs to file
156  m_out << "# Element " << i << " (ID "
157  << exp->GetGeom()->GetGlobalID() << ")" << endl;
158  for (int j = 0; j < nModes; ++j)
159  {
160  m_out << coeffsOrth[j] << endl;
161  }
162  }
163  m_out << endl;
164  }
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().