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::FilterEnergy Class Reference

#include <FilterEnergy.h>

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

Public Member Functions

SOLVER_UTILS_EXPORT FilterEnergy (const LibUtilities::SessionReaderSharedPtr &pSession, const std::map< std::string, std::string > &pParams)
SOLVER_UTILS_EXPORT ~FilterEnergy ()
- 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.

Static Public Attributes

static std::string className
 Name of the class.

Protected Member Functions

virtual void v_Initialise (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)
virtual void v_Update (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)
virtual void v_Finalise (const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)
virtual bool v_IsTimeDependent ()

Private Attributes

unsigned int m_index
unsigned int m_outputFrequency
std::ofstream m_outFile
bool m_homogeneous
NekDouble m_homogeneousLength
NekDouble m_area
LibUtilities::CommSharedPtr m_comm
Array< OneD, unsigned int > m_planes

Friends

class MemoryManager< FilterEnergy >

Additional Inherited Members

- Protected Attributes inherited from Nektar::SolverUtils::Filter
LibUtilities::SessionReaderSharedPtr m_session

Detailed Description

Definition at line 45 of file FilterEnergy.h.

Constructor & Destructor Documentation

Nektar::SolverUtils::FilterEnergy::FilterEnergy ( const LibUtilities::SessionReaderSharedPtr pSession,
const std::map< std::string, std::string > &  pParams 
)

Definition at line 47 of file FilterEnergy.cpp.

References ASSERTL0, m_comm, m_outFile, m_outputFrequency, and Nektar::SolverUtils::Filter::m_session.

:
Filter(pSession), m_index(0), m_homogeneous(false), m_planes()
{
std::string outName;
if (pParams.find("OutputFile") == pParams.end())
{
outName = m_session->GetSessionName();
}
else
{
ASSERTL0(!(pParams.find("OutputFile")->second.empty()),
"Missing parameter 'OutputFile'.");
outName = pParams.find("OutputFile")->second;
}
m_comm = pSession->GetComm();
outName += ".eny";
if (m_comm->GetRank() == 0)
{
m_outFile.open(outName.c_str());
ASSERTL0(m_outFile.good(), "Unable to open: '" + outName + "'");
}
ASSERTL0(pParams.find("OutputFrequency") != pParams.end(),
"Missing parameter 'OutputFrequency'.");
pParams.find("OutputFrequency")->second.c_str());
}
Nektar::SolverUtils::FilterEnergy::~FilterEnergy ( )

Definition at line 78 of file FilterEnergy.cpp.

{
}

Member Function Documentation

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

Creates an instance of this class.

Definition at line 51 of file FilterEnergy.h.

{
//p->InitObject();
return p;
}
void Nektar::SolverUtils::FilterEnergy::v_Finalise ( const Array< OneD, const MultiRegions::ExpListSharedPtr > &  pFields,
const NekDouble time 
)
protectedvirtual

Implements Nektar::SolverUtils::Filter.

Definition at line 225 of file FilterEnergy.cpp.

References m_outFile.

{
m_outFile.close();
}
void Nektar::SolverUtils::FilterEnergy::v_Initialise ( const Array< OneD, const MultiRegions::ExpListSharedPtr > &  pFields,
const NekDouble time 
)
protectedvirtual

Implements Nektar::SolverUtils::Filter.

Definition at line 83 of file FilterEnergy.cpp.

References ASSERTL0, Nektar::MultiRegions::e3DH1D, Nektar::MultiRegions::e3DH2D, m_area, m_homogeneous, m_homogeneousLength, m_index, m_planes, and v_Update().

{
m_index = 0;
ASSERTL0(pFields[0]->GetExpType() != MultiRegions::e3DH2D,
"Homogeneous 2D expansion not supported"
"for energy filter");
if (pFields[0]->GetExpType() == MultiRegions::e3DH1D)
{
m_homogeneous = true;
}
// Calculate area/volume of domain.
{
m_planes = pFields[0]->GetZIDs();
areaField = pFields[0]->GetPlane(0);
}
else
{
areaField = pFields[0];
}
Array<OneD, NekDouble> inarray(areaField->GetNpoints(), 1.0);
m_area = areaField->Integral(inarray);
{
}
// Output values at initial time.
v_Update(pFields, time);
}
bool Nektar::SolverUtils::FilterEnergy::v_IsTimeDependent ( )
protectedvirtual

Implements Nektar::SolverUtils::Filter.

Definition at line 232 of file FilterEnergy.cpp.

{
return true;
}
void Nektar::SolverUtils::FilterEnergy::v_Update ( const Array< OneD, const MultiRegions::ExpListSharedPtr > &  pFields,
const NekDouble time 
)
protectedvirtual

Implements Nektar::SolverUtils::Filter.

Definition at line 122 of file FilterEnergy.cpp.

References m_area, m_comm, m_homogeneous, m_index, m_outFile, m_outputFrequency, Vmath::Vcopy(), Vmath::Vmul(), Vmath::Vsub(), Vmath::Vvtvp(), and Vmath::Zero().

Referenced by v_Initialise().

{
int i, nPoints = pFields[0]->GetNpoints(), nPlanePts = 0;
{
nPlanePts = pFields[0]->GetPlane(0)->GetNpoints();
}
{
return;
}
// Calculate kinetic energy.
NekDouble Ek = 0.0;
Array<OneD, NekDouble> tmp(nPoints);
Array<OneD, Array<OneD, NekDouble> > u(3);
for (i = 0; i < 3; ++i)
{
{
pFields[i]->HomogeneousBwdTrans(pFields[i]->GetPhys(), tmp);
}
else
{
tmp = pFields[i]->GetPhys();
}
u[i] = Array<OneD, NekDouble>(nPoints);
Vmath::Vcopy(nPoints, tmp, 1, u[i], 1);
Vmath::Vmul (nPoints, tmp, 1, tmp, 1, tmp, 1);
{
pFields[i]->HomogeneousFwdTrans(tmp, tmp);
Ek += pFields[i]->GetPlane(0)->Integral(tmp) * 2.0 * M_PI;
}
else
{
Ek += pFields[i]->Integral(tmp);
}
}
Ek /= 2.0*m_area;
if (m_comm->GetRank() == 0)
{
m_outFile << setw(10) << time << setw(20) << Ek;
}
bool waveSpace[3] = {
pFields[0]->GetWaveSpace(),
pFields[1]->GetWaveSpace(),
pFields[2]->GetWaveSpace()
};
{
for (i = 0; i < 3; ++i)
{
pFields[i]->SetWaveSpace(false);
}
}
// First calculate vorticity field.
Array<OneD, NekDouble> tmp2(nPoints), tmp3(nPoints);
Vmath::Zero(nPoints, tmp, 1);
for (i = 0; i < 3; ++i)
{
int f1 = (i+2) % 3, c2 = f1;
int c1 = (i+1) % 3, f2 = c1;
pFields[f1]->PhysDeriv(c1, u[f1], tmp2);
pFields[f2]->PhysDeriv(c2, u[f2], tmp3);
Vmath::Vsub (nPoints, tmp2, 1, tmp3, 1, tmp2, 1);
Vmath::Vvtvp(nPoints, tmp2, 1, tmp2, 1, tmp, 1, tmp, 1);
}
{
for (i = 0; i < 3; ++i)
{
pFields[i]->SetWaveSpace(waveSpace[i]);
}
pFields[0]->HomogeneousFwdTrans(tmp, tmp);
Ek = pFields[0]->GetPlane(0)->Integral(tmp) * 2 * M_PI;
}
else
{
Ek = pFields[0]->Integral(tmp);
}
Ek /= 2.0*m_area;
if (m_comm->GetRank() == 0)
{
m_outFile << setw(20) << Ek << endl;
}
}

Friends And Related Function Documentation

friend class MemoryManager< FilterEnergy >
friend

Definition at line 48 of file FilterEnergy.h.

Member Data Documentation

std::string Nektar::SolverUtils::FilterEnergy::className
static
Initial value:
RegisterCreatorFunction("Energy", FilterEnergy::create)

Name of the class.

Definition at line 60 of file FilterEnergy.h.

NekDouble Nektar::SolverUtils::FilterEnergy::m_area
private

Definition at line 79 of file FilterEnergy.h.

Referenced by v_Initialise(), and v_Update().

LibUtilities::CommSharedPtr Nektar::SolverUtils::FilterEnergy::m_comm
private

Definition at line 80 of file FilterEnergy.h.

Referenced by FilterEnergy(), and v_Update().

bool Nektar::SolverUtils::FilterEnergy::m_homogeneous
private

Definition at line 77 of file FilterEnergy.h.

Referenced by v_Initialise(), and v_Update().

NekDouble Nektar::SolverUtils::FilterEnergy::m_homogeneousLength
private

Definition at line 78 of file FilterEnergy.h.

Referenced by v_Initialise().

unsigned int Nektar::SolverUtils::FilterEnergy::m_index
private

Definition at line 74 of file FilterEnergy.h.

Referenced by v_Initialise(), and v_Update().

std::ofstream Nektar::SolverUtils::FilterEnergy::m_outFile
private

Definition at line 76 of file FilterEnergy.h.

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

unsigned int Nektar::SolverUtils::FilterEnergy::m_outputFrequency
private

Definition at line 75 of file FilterEnergy.h.

Referenced by FilterEnergy(), and v_Update().

Array<OneD, unsigned int> Nektar::SolverUtils::FilterEnergy::m_planes
private

Definition at line 81 of file FilterEnergy.h.

Referenced by v_Initialise().