44 namespace MultiRegions
49 m_bndCondExpansions(),
59 const bool dealiasing)
61 m_bndCondExpansions(),
68 const bool DeclarePlanesSetCoeffPhys)
70 m_bndCondExpansions (In.m_bndCondExpansions),
71 m_bndConditions (In.m_bndConditions)
73 if (DeclarePlanesSetCoeffPhys)
78 for(
int n = 0; n <
m_planes.num_elements(); ++n)
94 const bool dealiasing,
96 const std::string &variable)
99 m_bndCondExpansions(),
115 for (i = 0; i < nel; ++i)
120 for (n = 1; n <
m_planes.num_elements(); ++n)
124 variable,
true,
false);
125 for(i = 0; i < nel; ++i)
127 (*m_exp).push_back((*
m_exp)[i]);
133 for (n = 0; n <
m_planes.num_elements(); ++n)
139 pSession, HomoBasis, lhom, useFFT, dealiasing, trace);
150 if(variable.compare(
"DefaultVar") != 0)
169 const std::string variable)
179 SpatialDomains::BoundaryRegionCollection::const_iterator it;
183 for (it = bregions.begin(); it != bregions.end(); ++it)
187 if (boundaryCondition->GetBoundaryConditionType()
198 int nplanes =
m_planes.num_elements();
200 PlanesBndCondExp(nplanes);
203 for (it = bregions.begin(); it != bregions.end(); ++it)
207 if(boundaryCondition->GetBoundaryConditionType() !=
210 for (n = 0; n < nplanes; ++n)
228 const std::string varName)
234 for (n = 0; n <
m_planes.num_elements(); n++)
239 for (n = 0; n <
m_planes.num_elements(); ++n)
241 m_planes[n]->EvaluateBoundaryConditions(
242 time, varName, 0.5*
m_lhom*(1.0+local_z[n]));
290 for (n = 0; n <
m_planes.num_elements(); ++n)
295 new_factors = factors;
301 e_out = outarray + cnt1,
302 flags, new_factors, varcoeff, dirForcing);
312 const std::string varName,
341 m_planes[0]->GetBoundaryToElmtMap(ElmtID_tmp, EdgeID_tmp);
342 int nel_per_plane =
m_planes[0]->GetExpSize();
343 int nplanes =
m_planes.num_elements();
345 int MapSize = ElmtID_tmp.num_elements();
358 ->GetBndCondExpansions()[n]
360 for (i = 0; i < planeExpSize ; ++i, ++cntPlane)
362 for(j = 0; j < nplanes; j++)
364 ElmtID[cnt+i+j*planeExpSize] =
365 ElmtID_tmp[cntPlane]+j*nel_per_plane;
366 EdgeID[cnt+i+j*planeExpSize] =
367 EdgeID_tmp[cntPlane];
393 boost::shared_ptr<ExpList> &result)
396 int offsetOld, offsetNew;
398 std::vector<unsigned int> eIDs;
404 for (cnt = n = 0; n < i; ++n)
412 eIDs.push_back(ElmtID[cnt+n]);
420 for (n = 0; n < result->GetExpSize(); ++n)
422 nq =
GetExp(ElmtID[cnt+n])->GetTotPoints();
424 offsetNew = result->GetPhys_Offset(n);
426 tmp2 = result->UpdatePhys()+ offsetNew, 1);
428 nq =
GetExp(ElmtID[cnt+n])->GetNcoeffs();
430 offsetNew = result->GetCoeff_Offset(n);
432 tmp2 = result->UpdateCoeffs()+ offsetNew, 1);
452 int exp_size, exp_size_per_plane, elmtID, boundaryID;
455 for (
int k = 0; k <
m_planes.num_elements(); k++)
460 exp_size_per_plane = exp_size/
m_planes.num_elements();
462 for (
int i = 0; i < exp_size_per_plane; i++)
469 GetExp(i+k*exp_size_per_plane)->GetTotPoints();
472 temp_BC_exp = boost::dynamic_pointer_cast<
475 i+k*exp_size_per_plane));
478 tmp_Tot = TotField + offset,
479 tmp_BC = BndVals + pos);
502 int exp_size, exp_size_per_plane, elmtID, Phys_offset, Coef_offset;
504 for(
int k = 0; k <
m_planes.num_elements(); k++)
509 exp_size_per_plane = exp_size/
m_planes.num_elements();
511 for(
int i = 0; i < exp_size_per_plane; i++)
523 temp_BC_exp = boost::dynamic_pointer_cast<
526 i+k*exp_size_per_plane));
529 tmp_V1 = V1 + Phys_offset,
530 tmp_V2 = V2 + Phys_offset,
531 tmp_outarray = outarray + Coef_offset);
543 "Field must be in physical state to extract trace space.");
563 int nPoints_plane =
m_planes[0]->GetTotPoints();
564 int nTracePts =
m_planes[0]->GetTrace()->GetTotPoints();
566 for (
int i = 0; i <
m_planes.num_elements(); ++i)
572 &inarray[i*nPoints_plane], 1,
573 &inarray_plane[0], 1);
575 m_planes[i]->ExtractTracePhys(inarray_plane, outarray_plane);
578 &outarray_plane[0], 1,
579 &outarray[i*nTracePts], 1);
599 for (j = 0; j < coordim; ++j)
606 for (cnt = n = 0; n < i; ++n)
617 elmt =
GetExp(ElmtID[cnt+n]);
619 = elmt->GetSurfaceNormal(EdgeID[cnt+n]);
621 for (j = 0; j < expdim; ++j)
624 tmp = normals[j] + offset, 1);
634 const int nPlanes =
m_planes.num_elements();
635 const int nTracePlane =
m_planes[0]->GetTrace()->GetExpSize();
640 = traceMap->GetBndCondTraceToGlobalTraceMap();
641 int mapSize = traceBndMap.num_elements();
646 int i, n, e, cnt = 0, cnt1 = 0;
651 int nPlaneExp = nExp / nPlanes;
653 for (n = 0; n < nPlanes; ++n)
655 const int offset = n * nTracePlane;
656 for (e = 0; e < nPlaneExp; ++e)
boost::shared_ptr< AssemblyMapDG > AssemblyMapDGSharedPtr
const Array< OneD, const NekDouble > & GetCoeffs() const
This function returns (a reference to) the array (implemented as m_coeffs) containing all local expa...
int GetCoeff_Offset(int n) const
Get the start offset position for a global list of m_coeffs correspoinding to element n...
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
NekOptimize::GlobalOptParamSharedPtr m_globalOptParam
virtual ~DisContField3DHomogeneous1D()
Destructor.
LibUtilities::TranspositionSharedPtr m_transposition
int GetPhys_Offset(int n) const
Get the start offset position for a global list of m_phys correspoinding to element n...
Array< OneD, int > m_BCtoEdgMap
const BoundaryConditionCollection & GetBoundaryConditions(void) const
Array< OneD, NekDouble > & UpdateCoeffs()
This function returns (a reference to) the array (implemented as m_coeffs) containing all local expa...
void SetUpDG()
Set up all DG member variables and maps.
boost::shared_ptr< ExpList > & UpdateBndCondExpansion(int i)
const boost::shared_ptr< LocalRegions::ExpansionVector > GetExp() const
This function returns the vector of elements in the expansion.
void NormVectorIProductWRTBase(const Array< OneD, const NekDouble > &Fx, Array< OneD, NekDouble > &outarray)
virtual void v_HelmSolve(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const FlagList &flags, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff, const Array< OneD, const NekDouble > &dirForcing)
Array< OneD, int > m_BCtoElmMap
Storage space for the boundary to element and boundary to trace map. This member variable is really a...
std::map< ConstFactorType, NekDouble > ConstFactorMap
NekDouble m_lhom
Width of homogeneous direction.
Array< OneD, NekDouble > m_phys
The global expansion evaluated at the quadrature points.
NekDouble GetSpecVanVisc(const int k)
int GetExpSize(void)
This function returns the number of elements in the expansion.
boost::shared_ptr< SessionReader > SessionReaderSharedPtr
virtual void v_ExtractTracePhys(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This method extracts the trace (edges in 2D) for each plane from the field inarray and puts the value...
Array< OneD, MultiRegions::ExpListSharedPtr > m_bndCondExpansions
An object which contains the discretised boundary conditions.
void SetCoeffPhys(void)
Definition of the total number of degrees of freedom and quadrature points. Sets up the storage for m...
LibUtilities::BasisSharedPtr m_homogeneousBasis
Definition of the total number of degrees of freedom and quadrature points. Sets up the storage for m...
DisContField3DHomogeneous1D()
virtual Array< OneD, SpatialDomains::BoundaryConditionShPtr > & v_UpdateBndConditions()
virtual boost::shared_ptr< ExpList > & v_UpdateBndCondExpansion(int i)
boost::shared_ptr< LocalRegions::ExpansionVector > m_exp
The list of local expansions.
std::map< StdRegions::VarCoeffType, Array< OneD, NekDouble > > VarCoeffMap
bool m_physState
The state of the array m_phys.
std::map< int, BoundaryRegionShPtr > BoundaryRegionCollection
virtual void v_GetBoundaryNormals(int i, Array< OneD, Array< OneD, NekDouble > > &normals)
boost::shared_ptr< ExpList > ExpListSharedPtr
Shared pointer to an ExpList object.
boost::shared_ptr< DisContField2D > DisContField2DSharedPtr
boost::shared_ptr< StdExpansion1D > StdExpansion1DSharedPtr
LibUtilities::SessionReaderSharedPtr m_session
Session.
Array< OneD, ExpListSharedPtr > m_planes
void HomogeneousFwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
std::map< int, BoundaryConditionMapShPtr > BoundaryConditionCollection
Array< OneD, int > m_traceBndMap
void SetupBoundaryConditions(const LibUtilities::BasisKey &HomoBasis, const NekDouble lhom, SpatialDomains::BoundaryConditions &bcs, const std::string variable)
const Array< OneD, const NekDouble > & GetPhys() const
This function returns (a reference to) the array (implemented as m_phys) containing the function ev...
Array< OneD, SpatialDomains::BoundaryConditionShPtr > & UpdateBndConditions()
const Array< OneD, const MultiRegions::ExpListSharedPtr > & GetBndCondExpansions()
void GetEdgePhysVals(const int edge, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Extract the physical values along edge edge from inarray into outarray following the local edge orien...
virtual void v_EvaluateBoundaryConditions(const NekDouble time=0.0, const std::string varName="", const NekDouble x2_in=NekConstants::kNekUnsetDouble, const NekDouble x3_in=NekConstants::kNekUnsetDouble)
void GetBCValues(Array< OneD, NekDouble > &BndVals, const Array< OneD, NekDouble > &TotField, int BndID)
This funtion extract form a vector containing a full 3D-homogenous-1D field the value associated with...
void NormVectorIProductWRTBase(Array< OneD, const NekDouble > &V1, Array< OneD, const NekDouble > &V2, Array< OneD, NekDouble > &outarray, int BndID)
This function calculate the inner product of two vectors (V1 and V2) respect to the basis along a bou...
void GetBoundaryToElmtMap(Array< OneD, int > &ElmtID, Array< OneD, int > &EdgeID)
Set up a list of element ids and edge ids the link to the boundary conditions.
bool m_useFFT
FFT variables.
static SpatialDomains::BoundaryConditionShPtr GetBoundaryCondition(const SpatialDomains::BoundaryConditionCollection &collection, unsigned int index, const std::string &variable)
const BoundaryRegionCollection & GetBoundaryRegions(void) const
bool GetWaveSpace(void) const
This function returns the third direction expansion condition, which can be in wave space (coefficien...
int GetCoordim(int eid)
This function returns the dimension of the coordinates of the element eid.
boost::shared_ptr< BoundaryConditionBase > BoundaryConditionShPtr
virtual void v_GetBndElmtExpansion(int i, boost::shared_ptr< ExpList > &result)
boost::shared_ptr< StdExpansion > StdExpansionSharedPtr
void EvaluateBoundaryConditions(const NekDouble time=0.0, const std::string varName="")
This function evaluates the boundary conditions at a certaintime-level.
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
boost::shared_ptr< MeshGraph > MeshGraphSharedPtr
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Abstraction of a two-dimensional multi-elemental expansion which is merely a collection of local expa...
Describes the specification for a Basis.
Array< OneD, SpatialDomains::BoundaryConditionShPtr > m_bndConditions
An array which contains the information about the boundary condition on the different boundary region...