Nektar++
Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | Private Member Functions | Friends | List of all members
Nektar::WallViscousBC Class Reference

Wall boundary conditions for viscous compressible flow problems. More...

#include <WallViscousBC.h>

Inheritance diagram for Nektar::WallViscousBC:
[legend]

Static Public Member Functions

static CFSBndCondSharedPtr create (const LibUtilities::SessionReaderSharedPtr &pSession, const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const Array< OneD, Array< OneD, NekDouble > > &pTraceNormals, const int pSpaceDim, const int bcRegion, const int cnt)
 Creates an instance of this class. More...
 

Static Public Attributes

static std::string classNameViscous
 Name of the class. More...
 
static std::string classNameAdiabatic
 

Protected Member Functions

void v_Apply (Array< OneD, Array< OneD, NekDouble > > &Fwd, Array< OneD, Array< OneD, NekDouble > > &physarray, const NekDouble &time) override
 
- Protected Member Functions inherited from Nektar::CFSBndCond
 CFSBndCond (const LibUtilities::SessionReaderSharedPtr &pSession, const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const Array< OneD, Array< OneD, NekDouble > > &pTraceNormals, const int pSpaceDim, const int bcRegion, const int cnt)
 Constructor. More...
 
virtual void v_Apply (Array< OneD, Array< OneD, NekDouble > > &Fwd, Array< OneD, Array< OneD, NekDouble > > &physarray, const NekDouble &time)=0
 
virtual void v_ApplyBwdWeight ()
 

Protected Attributes

Array< OneD, Array< OneD, NekDouble > > m_bndPhys
 
- Protected Attributes inherited from Nektar::CFSBndCond
LibUtilities::SessionReaderSharedPtr m_session
 Session reader. More...
 
Array< OneD, MultiRegions::ExpListSharedPtrm_fields
 Array of fields. More...
 
Array< OneD, Array< OneD, NekDouble > > m_traceNormals
 Trace normals. More...
 
int m_spacedim
 Space dimension. More...
 
VariableConverterSharedPtr m_varConv
 Auxiliary object to convert variables. More...
 
NekDouble m_diffusionAveWeight
 Weight for average calculation of diffusion term. More...
 
NekDouble m_gamma
 Parameters of the flow. More...
 
NekDouble m_rhoInf
 
NekDouble m_pInf
 
NekDouble m_pOut
 
Array< OneD, NekDoublem_velInf
 
int m_bcRegion
 Id of the boundary region. More...
 
int m_offset
 Offset. More...
 

Private Member Functions

 WallViscousBC (const LibUtilities::SessionReaderSharedPtr &pSession, const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const Array< OneD, Array< OneD, NekDouble > > &pTraceNormals, const int pSpaceDim, const int bcRegion, const int cnt)
 
 ~WallViscousBC (void) override
 

Friends

class MemoryManager< WallViscousBC >
 

Additional Inherited Members

- Public Member Functions inherited from Nektar::CFSBndCond
virtual ~CFSBndCond ()
 
void Apply (Array< OneD, Array< OneD, NekDouble > > &Fwd, Array< OneD, Array< OneD, NekDouble > > &physarray, const NekDouble &time=0)
 Apply the boundary condition. More...
 
void ApplyBwdWeight ()
 Apply the Weight of boundary condition. More...
 

Detailed Description

Wall boundary conditions for viscous compressible flow problems.

Definition at line 46 of file WallViscousBC.h.

Constructor & Destructor Documentation

◆ WallViscousBC()

Nektar::WallViscousBC::WallViscousBC ( const LibUtilities::SessionReaderSharedPtr pSession,
const Array< OneD, MultiRegions::ExpListSharedPtr > &  pFields,
const Array< OneD, Array< OneD, NekDouble > > &  pTraceNormals,
const int  pSpaceDim,
const int  bcRegion,
const int  cnt 
)
private

Definition at line 52 of file WallViscousBC.cpp.

57 : CFSBndCond(pSession, pFields, pTraceNormals, pSpaceDim, bcRegion, cnt)
58{
60
61 m_bndPhys = Array<OneD, Array<OneD, NekDouble>>(m_fields.size());
62}
CFSBndCond(const LibUtilities::SessionReaderSharedPtr &pSession, const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const Array< OneD, Array< OneD, NekDouble > > &pTraceNormals, const int pSpaceDim, const int bcRegion, const int cnt)
Constructor.
Definition: CFSBndCond.cpp:47
NekDouble m_diffusionAveWeight
Weight for average calculation of diffusion term.
Definition: CFSBndCond.h:99
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
Array of fields.
Definition: CFSBndCond.h:91
Array< OneD, Array< OneD, NekDouble > > m_bndPhys
Definition: WallViscousBC.h:70

References m_bndPhys, Nektar::CFSBndCond::m_diffusionAveWeight, and Nektar::CFSBndCond::m_fields.

◆ ~WallViscousBC()

Nektar::WallViscousBC::~WallViscousBC ( void  )
inlineoverrideprivate

Definition at line 82 of file WallViscousBC.h.

82{};

Member Function Documentation

◆ create()

static CFSBndCondSharedPtr Nektar::WallViscousBC::create ( const LibUtilities::SessionReaderSharedPtr pSession,
const Array< OneD, MultiRegions::ExpListSharedPtr > &  pFields,
const Array< OneD, Array< OneD, NekDouble > > &  pTraceNormals,
const int  pSpaceDim,
const int  bcRegion,
const int  cnt 
)
inlinestatic

Creates an instance of this class.

Definition at line 52 of file WallViscousBC.h.

57 {
59 pSession, pFields, pTraceNormals, pSpaceDim, bcRegion, cnt);
60 return p;
61 }
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
std::shared_ptr< CFSBndCond > CFSBndCondSharedPtr
A shared pointer to a boundary condition object.
Definition: CFSBndCond.h:51

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), and CellMLToNektar.cellml_metadata::p.

◆ v_Apply()

void Nektar::WallViscousBC::v_Apply ( Array< OneD, Array< OneD, NekDouble > > &  Fwd,
Array< OneD, Array< OneD, NekDouble > > &  physarray,
const NekDouble time 
)
overrideprotectedvirtual

Implements Nektar::CFSBndCond.

Definition at line 64 of file WallViscousBC.cpp.

67{
68 int i;
69 int nVariables = physarray.size();
70
71 // Find the fields whose WallViscous/Adiabatic-BC is time-dependent
72 // Update variables on the boundaries of these fields
73 // Get the updated variables on the WallViscous/Adiabatic boundary
74 //
75 // Maybe the EvaluateBoundaryConditions() should be put upstream to
76 // CompressibleFlowSystem::NumCalRiemFluxJac(), So that the BCs will not
77 // be repeatedly updated when there are more than one time-dependent BC.
78 std::string varName;
79 for (i = 0; i < nVariables; ++i)
80 {
81 if (m_fields[i]->GetBndConditions()[m_bcRegion]->IsTimeDependent())
82 {
83 varName = m_session->GetVariable(i);
84 m_fields[i]->EvaluateBoundaryConditions(time, varName);
85
86 m_bndPhys[i] =
87 m_fields[i]->GetBndCondExpansions()[m_bcRegion]->UpdatePhys();
88 }
89 }
90
91 const Array<OneD, const int> &traceBndMap = m_fields[0]->GetTraceBndMap();
92
93 // Take into account that for PDE based shock capturing, eps = 0 at the
94 // wall. Adjust the physical values of the trace to take user defined
95 // boundaries into account
96 int e, id1, id2, nBCEdgePts, eMax;
97
98 eMax = m_fields[0]->GetBndCondExpansions()[m_bcRegion]->GetExpSize();
99
100 for (e = 0; e < eMax; ++e)
101 {
102 nBCEdgePts = m_fields[0]
103 ->GetBndCondExpansions()[m_bcRegion]
104 ->GetExp(e)
105 ->GetTotPoints();
106 id1 =
107 m_fields[0]->GetBndCondExpansions()[m_bcRegion]->GetPhys_Offset(e);
108 id2 =
109 m_fields[0]->GetTrace()->GetPhys_Offset(traceBndMap[m_offset + e]);
110
111 // Boundary condition for epsilon term.
112 if (nVariables == m_spacedim + 3)
113 {
114 Vmath::Zero(nBCEdgePts, &Fwd[nVariables - 1][id2], 1);
115 }
116
117 // V = - Vin
118 for (i = 0; i < m_spacedim; i++)
119 {
120 Vmath::Neg(nBCEdgePts, &Fwd[i + 1][id2], 1);
121 }
122
123 // Superimpose the perturbation
124 for (i = 0; i < nVariables; ++i)
125 {
126 if (m_fields[i]->GetBndConditions()[m_bcRegion]->IsTimeDependent())
127 {
128 Vmath::Vadd(nBCEdgePts, &m_bndPhys[i][id1], 1, &Fwd[i][id2], 1,
129 &Fwd[i][id2], 1);
130 }
131 }
132
133 // Copy boundary adjusted values into the boundary expansion
134 for (i = 0; i < nVariables; ++i)
135 {
136 Vmath::Vcopy(nBCEdgePts, &Fwd[i][id2], 1,
137 &(m_fields[i]
138 ->GetBndCondExpansions()[m_bcRegion]
139 ->UpdatePhys())[id1],
140 1);
141 }
142 }
143}
LibUtilities::SessionReaderSharedPtr m_session
Session reader.
Definition: CFSBndCond.h:89
int m_spacedim
Space dimension.
Definition: CFSBndCond.h:95
int m_bcRegion
Id of the boundary region.
Definition: CFSBndCond.h:109
int m_offset
Offset.
Definition: CFSBndCond.h:111
void Neg(int n, T *x, const int incx)
Negate x = -x.
Definition: Vmath.hpp:292
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.
Definition: Vmath.hpp:180
void Zero(int n, T *x, const int incx)
Zero vector.
Definition: Vmath.hpp:273
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Definition: Vmath.hpp:825

References Nektar::CFSBndCond::m_bcRegion, m_bndPhys, Nektar::CFSBndCond::m_fields, Nektar::CFSBndCond::m_offset, Nektar::CFSBndCond::m_session, Nektar::CFSBndCond::m_spacedim, Vmath::Neg(), Vmath::Vadd(), Vmath::Vcopy(), and Vmath::Zero().

Friends And Related Function Documentation

◆ MemoryManager< WallViscousBC >

friend class MemoryManager< WallViscousBC >
friend

Definition at line 1 of file WallViscousBC.h.

Member Data Documentation

◆ classNameAdiabatic

std::string Nektar::WallViscousBC::classNameAdiabatic
static
Initial value:
=
"WallAdiabatic", WallViscousBC::create,
"Adiabatic wall boundary condition.")
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
Definition: NekFactory.hpp:197
static CFSBndCondSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const Array< OneD, Array< OneD, NekDouble > > &pTraceNormals, const int pSpaceDim, const int bcRegion, const int cnt)
Creates an instance of this class.
Definition: WallViscousBC.h:52
CFSBndCondFactory & GetCFSBndCondFactory()
Declaration of the boundary condition factory singleton.
Definition: CFSBndCond.cpp:41

Definition at line 65 of file WallViscousBC.h.

◆ classNameViscous

std::string Nektar::WallViscousBC::classNameViscous
static
Initial value:
=
"WallViscous", WallViscousBC::create,
"No-slip (viscous) wall boundary condition.")

Name of the class.

Definition at line 64 of file WallViscousBC.h.

◆ m_bndPhys

Array<OneD, Array<OneD, NekDouble> > Nektar::WallViscousBC::m_bndPhys
protected

Definition at line 70 of file WallViscousBC.h.

Referenced by v_Apply(), and WallViscousBC().