Nektar++
|
Base class for linear elastic system. More...
#include <LinearElasticSystem.h>
Static Public Member Functions | |
static EquationSystemSharedPtr | create (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph) |
Creates an instance of this class. More... | |
Static Public Attributes | |
static std::string | className |
Name of class. More... | |
Protected Member Functions | |
LinearElasticSystem (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph) | |
Default constructor. More... | |
void | v_InitObject (bool DeclareFields=true) override |
Set up the linear elasticity system. More... | |
void | v_GenerateSummary (SolverUtils::SummaryList &s) override |
Generate summary at runtime. More... | |
void | v_DoSolve () override |
Solve elliptic linear elastic system. More... | |
void | v_ExtraFldOutput (std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables) override |
Protected Member Functions inherited from Nektar::SolverUtils::EquationSystem | |
SOLVER_UTILS_EXPORT | EquationSystem (const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph) |
Initialises EquationSystem class members. More... | |
virtual SOLVER_UTILS_EXPORT void | v_InitObject (bool DeclareFeld=true) |
Initialisation object for EquationSystem. More... | |
virtual SOLVER_UTILS_EXPORT void | v_DoInitialise (bool dumpInitialConditions=true) |
Virtual function for initialisation implementation. More... | |
virtual SOLVER_UTILS_EXPORT void | v_DoSolve () |
Virtual function for solve implementation. More... | |
virtual SOLVER_UTILS_EXPORT NekDouble | v_LinfError (unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray) |
Virtual function for the L_inf error computation between fields and a given exact solution. More... | |
virtual SOLVER_UTILS_EXPORT NekDouble | v_L2Error (unsigned int field, const Array< OneD, NekDouble > &exactsoln=NullNekDouble1DArray, bool Normalised=false) |
Virtual function for the L_2 error computation between fields and a given exact solution. More... | |
virtual SOLVER_UTILS_EXPORT void | v_TransCoeffToPhys () |
Virtual function for transformation to physical space. More... | |
virtual SOLVER_UTILS_EXPORT void | v_TransPhysToCoeff () |
Virtual function for transformation to coefficient space. More... | |
virtual SOLVER_UTILS_EXPORT void | v_GenerateSummary (SummaryList &l) |
Virtual function for generating summary information. More... | |
virtual SOLVER_UTILS_EXPORT void | v_SetInitialConditions (NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0) |
virtual SOLVER_UTILS_EXPORT void | v_EvaluateExactSolution (unsigned int field, Array< OneD, NekDouble > &outfield, const NekDouble time) |
virtual SOLVER_UTILS_EXPORT void | v_Output (void) |
virtual SOLVER_UTILS_EXPORT MultiRegions::ExpListSharedPtr | v_GetPressure (void) |
virtual SOLVER_UTILS_EXPORT bool | v_NegatedOp (void) |
Virtual function to identify if operator is negated in DoSolve. More... | |
virtual SOLVER_UTILS_EXPORT void | v_ExtraFldOutput (std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables) |
Protected Attributes | |
NekDouble | m_nu |
Poisson ratio. More... | |
NekDouble | m_E |
Young's modulus. More... | |
NekDouble | m_beta |
Parameter dictating amount of thermal stress to add. More... | |
CoupledAssemblyMapSharedPtr | m_assemblyMap |
Assembly map for the coupled (u,v,w) system. More... | |
DNekScalBlkMatSharedPtr | m_schurCompl |
Schur complement boundary-boundary matrix. More... | |
DNekScalBlkMatSharedPtr | m_BinvD |
Matrix of elemental \( B^{-1}D \) components. More... | |
DNekScalBlkMatSharedPtr | m_C |
Matrix of elemental \( C \) components. More... | |
DNekScalBlkMatSharedPtr | m_Dinv |
Matrix of elemental \( D^{-1} \) components. More... | |
Array< OneD, Array< OneD, unsigned int > > | m_bmap |
Boundary maps for each of the fields. More... | |
Array< OneD, Array< OneD, unsigned int > > | m_imap |
Interior maps for each of the fields. More... | |
Array< OneD, Array< OneD, NekDouble > > | m_temperature |
Storage for the temperature terms. More... | |
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > | m_stress |
Storage for the thermal stress terms. More... | |
Protected Attributes inherited from Nektar::SolverUtils::EquationSystem | |
LibUtilities::CommSharedPtr | m_comm |
Communicator. More... | |
bool | m_verbose |
LibUtilities::SessionReaderSharedPtr | m_session |
The session reader. More... | |
std::map< std::string, SolverUtils::SessionFunctionSharedPtr > | m_sessionFunctions |
Map of known SessionFunctions. More... | |
LibUtilities::FieldIOSharedPtr | m_fld |
Field input/output. More... | |
Array< OneD, MultiRegions::ExpListSharedPtr > | m_fields |
Array holding all dependent variables. More... | |
SpatialDomains::BoundaryConditionsSharedPtr | m_boundaryConditions |
Pointer to boundary conditions object. More... | |
SpatialDomains::MeshGraphSharedPtr | m_graph |
Pointer to graph defining mesh. More... | |
std::string | m_sessionName |
Name of the session. More... | |
NekDouble | m_time |
Current time of simulation. More... | |
int | m_initialStep |
Number of the step where the simulation should begin. More... | |
NekDouble | m_fintime |
Finish time of the simulation. More... | |
NekDouble | m_timestep |
Time step size. More... | |
NekDouble | m_lambda |
Lambda constant in real system if one required. More... | |
NekDouble | m_checktime |
Time between checkpoints. More... | |
NekDouble | m_lastCheckTime |
NekDouble | m_TimeIncrementFactor |
int | m_nchk |
Number of checkpoints written so far. More... | |
int | m_steps |
Number of steps to take. More... | |
int | m_checksteps |
Number of steps between checkpoints. More... | |
int | m_infosteps |
Number of time steps between outputting status information. More... | |
int | m_iterPIT = 0 |
Number of parallel-in-time time iteration. More... | |
int | m_windowPIT = 0 |
Index of windows for parallel-in-time time iteration. More... | |
int | m_spacedim |
Spatial dimension (>= expansion dim). More... | |
int | m_expdim |
Expansion dimension. More... | |
bool | m_singleMode |
Flag to determine if single homogeneous mode is used. More... | |
bool | m_halfMode |
Flag to determine if half homogeneous mode is used. More... | |
bool | m_multipleModes |
Flag to determine if use multiple homogenenous modes are used. More... | |
bool | m_useFFT |
Flag to determine if FFT is used for homogeneous transform. More... | |
bool | m_homogen_dealiasing |
Flag to determine if dealiasing is used for homogeneous simulations. More... | |
bool | m_specHP_dealiasing |
Flag to determine if dealisising is usde for the Spectral/hp element discretisation. More... | |
enum MultiRegions::ProjectionType | m_projectionType |
Type of projection; e.g continuous or discontinuous. More... | |
Array< OneD, Array< OneD, NekDouble > > | m_traceNormals |
Array holding trace normals for DG simulations in the forwards direction. More... | |
Array< OneD, bool > | m_checkIfSystemSingular |
Flag to indicate if the fields should be checked for singularity. More... | |
LibUtilities::FieldMetaDataMap | m_fieldMetaDataMap |
Map to identify relevant solver info to dump in output fields. More... | |
Array< OneD, NekDouble > | m_movingFrameData |
Moving reference frame status in the inertial frame X, Y, Z, Theta_x, Theta_y, Theta_z, U, V, W, Omega_x, Omega_y, Omega_z, A_x, A_y, A_z, DOmega_x, DOmega_y, DOmega_z, pivot_x, pivot_y, pivot_z. More... | |
std::vector< std::string > | m_strFrameData |
variable name in m_movingFrameData More... | |
int | m_NumQuadPointsError |
Number of Quadrature points used to work out the error. More... | |
enum HomogeneousType | m_HomogeneousType |
NekDouble | m_LhomX |
physical length in X direction (if homogeneous) More... | |
NekDouble | m_LhomY |
physical length in Y direction (if homogeneous) More... | |
NekDouble | m_LhomZ |
physical length in Z direction (if homogeneous) More... | |
int | m_npointsX |
number of points in X direction (if homogeneous) More... | |
int | m_npointsY |
number of points in Y direction (if homogeneous) More... | |
int | m_npointsZ |
number of points in Z direction (if homogeneous) More... | |
int | m_HomoDirec |
number of homogenous directions More... | |
Friends | |
class | MemoryManager< LinearElasticSystem > |
Class may only be instantiated through the MemoryManager. More... | |
Additional Inherited Members | |
Protected Types inherited from Nektar::SolverUtils::EquationSystem | |
enum | HomogeneousType { eHomogeneous1D , eHomogeneous2D , eHomogeneous3D , eNotHomogeneous } |
Parameter for homogeneous expansions. More... | |
Static Protected Attributes inherited from Nektar::SolverUtils::EquationSystem | |
static std::string | equationSystemTypeLookupIds [] |
static std::string | projectionTypeLookupIds [] |
Base class for linear elastic system.
Definition at line 49 of file LinearElasticSystem.h.
|
protected |
Default constructor.
Definition at line 136 of file LinearElasticSystem.cpp.
DNekMatSharedPtr Nektar::LinearElasticSystem::BuildLaplacianIJMatrix | ( | const int | k1, |
const int | k2, | ||
const NekDouble | scale, | ||
LocalRegions::ExpansionSharedPtr | exp | ||
) |
Construct a LaplacianIJ matrix for a given expansion.
This routine constructs matrices whose entries contain the evaluation of
\[ \partial_{\tt k1} \phi_i \partial_{\tt k2} \phi_j \,dx \]
Definition at line 786 of file LinearElasticSystem.cpp.
References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::eFULL, and Vmath::Smul().
Referenced by BuildMatrixSystem().
void Nektar::LinearElasticSystem::BuildMatrixSystem | ( | ) |
Build matrix system for linear elasticity equations.
This routine constructs the matrix discretisation arising from the weak formulation of the linear elasticity equations. The resulting matrix system is then passed to LinearElasticSystem::SetStaticCondBlock in order to construct the statically condensed system.
All of the matrices involved in the construction of the divergence of the stress tensor are Laplacian-like. We use the variable coefficient functionality within the library to multiply the Laplacian by the appropriate constants for all diagonal terms, and off-diagonal terms use LinearElasticSystem::BuildLaplacianIJMatrix to construct matrices containing
\[ \int \partial_{x_i} \phi_k \partial_{x_j} \phi_l \]
where mixed derivative terms are present. Symmetry (in terms of k,l) is exploited to avoid constructing this matrix repeatedly.
Definition at line 230 of file LinearElasticSystem.cpp.
References BuildLaplacianIJMatrix(), Nektar::StdRegions::eLaplacian, Nektar::StdRegions::eVarCoeffD00, Nektar::StdRegions::eVarCoeffD11, Nektar::StdRegions::eVarCoeffD22, Nektar::VarcoeffHashingTest::factors, m_E, Nektar::SolverUtils::EquationSystem::m_fields, m_nu, Nektar::SolverUtils::EquationSystem::m_session, and SetStaticCondBlock().
Referenced by v_DoSolve().
|
inlinestatic |
Creates an instance of this class.
Definition at line 56 of file LinearElasticSystem.h.
References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), and CellMLToNektar.cellml_metadata::p.
void Nektar::LinearElasticSystem::SetStaticCondBlock | ( | const int | n, |
const LocalRegions::ExpansionSharedPtr | exp, | ||
Array< TwoD, DNekMatSharedPtr > & | mat | ||
) |
Given a block matrix for an element, construct its static condensation matrices.
This routine essentially duplicates the logic present in many of the LocalRegions matrix generation routines to construct the statically condensed equivalent of mat to pass to the GlobalLinSys solver.
n | Element/block number. |
exp | Pointer to expansion. |
mat | Block matrix containing matrix operator. |
Definition at line 703 of file LinearElasticSystem.cpp.
References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), Nektar::eFULL, m_BinvD, m_bmap, m_C, m_Dinv, m_imap, and m_schurCompl.
Referenced by BuildMatrixSystem().
Solve elliptic linear elastic system.
The solve proceeds as follows:
Reimplemented from Nektar::SolverUtils::EquationSystem.
Definition at line 381 of file LinearElasticSystem.cpp.
References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, Nektar::LibUtilities::beta, BuildMatrixSystem(), Lapack::Dgeev(), Nektar::SpatialDomains::eDeformed, Nektar::eDIAGONAL, Nektar::MultiRegions::eDirectStaticCond, Nektar::eFULL, Nektar::MultiRegions::eIterativeStaticCond, Nektar::StdRegions::eLinearAdvectionReaction, Nektar::MultiRegions::ePETScStaticCond, Nektar::MultiRegions::eXxtStaticCond, Vmath::Fill(), Nektar::SolverUtils::EquationSystem::GetFunction(), Nektar::SolverUtils::EquationSystem::GetNpoints(), m_assemblyMap, m_beta, m_BinvD, m_bmap, m_C, m_Dinv, Nektar::SolverUtils::EquationSystem::m_fields, Nektar::SolverUtils::EquationSystem::m_graph, m_imap, m_schurCompl, Nektar::SolverUtils::EquationSystem::m_session, m_stress, m_temperature, Nektar::MappingIdealToRef(), Nektar::MultiRegions::NullPreconditionerSharedPtr, Vmath::Smul(), tinysimd::sqrt(), Nektar::Transpose(), Vmath::Vadd(), and Vmath::Vcopy().
Referenced by Nektar::IterativeElasticSystem::v_DoSolve().
|
overrideprotectedvirtual |
Reimplemented from Nektar::SolverUtils::EquationSystem.
Definition at line 816 of file LinearElasticSystem.cpp.
References Nektar::SolverUtils::EquationSystem::m_fields, m_stress, and m_temperature.
|
overrideprotectedvirtual |
Generate summary at runtime.
Reimplemented from Nektar::SolverUtils::EquationSystem.
Definition at line 359 of file LinearElasticSystem.cpp.
References Nektar::SolverUtils::AddSummaryItem(), m_E, m_nu, and Nektar::SolverUtils::EquationSystem::SessionSummary().
Referenced by Nektar::IterativeElasticSystem::v_GenerateSummary().
|
overrideprotectedvirtual |
Set up the linear elasticity system.
This routine loads the E and nu variables from the session file, creates a coupled assembly map and creates containers for the statically condensed block matrix system.
Reimplemented from Nektar::SolverUtils::EquationSystem.
Definition at line 150 of file LinearElasticSystem.cpp.
References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, Nektar::eDIAGONAL, m_assemblyMap, m_beta, m_BinvD, m_bmap, m_C, m_Dinv, m_E, Nektar::SolverUtils::EquationSystem::m_fields, Nektar::SolverUtils::EquationSystem::m_graph, m_imap, m_nu, m_schurCompl, Nektar::SolverUtils::EquationSystem::m_session, and Nektar::SolverUtils::EquationSystem::v_InitObject().
Referenced by Nektar::IterativeElasticSystem::v_InitObject().
|
friend |
Class may only be instantiated through the MemoryManager.
Definition at line 1 of file LinearElasticSystem.h.
|
static |
Name of class.
Definition at line 68 of file LinearElasticSystem.h.
|
protected |
Assembly map for the coupled (u,v,w) system.
Definition at line 91 of file LinearElasticSystem.h.
Referenced by v_DoSolve(), and v_InitObject().
|
protected |
Parameter dictating amount of thermal stress to add.
Definition at line 89 of file LinearElasticSystem.h.
Referenced by v_DoSolve(), and v_InitObject().
|
protected |
Matrix of elemental \( B^{-1}D \) components.
Definition at line 95 of file LinearElasticSystem.h.
Referenced by SetStaticCondBlock(), v_DoSolve(), and v_InitObject().
Boundary maps for each of the fields.
Definition at line 101 of file LinearElasticSystem.h.
Referenced by SetStaticCondBlock(), v_DoSolve(), and v_InitObject().
|
protected |
Matrix of elemental \( C \) components.
Definition at line 97 of file LinearElasticSystem.h.
Referenced by SetStaticCondBlock(), v_DoSolve(), and v_InitObject().
|
protected |
Matrix of elemental \( D^{-1} \) components.
Definition at line 99 of file LinearElasticSystem.h.
Referenced by SetStaticCondBlock(), v_DoSolve(), and v_InitObject().
|
protected |
Young's modulus.
Definition at line 87 of file LinearElasticSystem.h.
Referenced by BuildMatrixSystem(), v_GenerateSummary(), and v_InitObject().
Interior maps for each of the fields.
Definition at line 103 of file LinearElasticSystem.h.
Referenced by SetStaticCondBlock(), v_DoSolve(), and v_InitObject().
|
protected |
Poisson ratio.
Definition at line 85 of file LinearElasticSystem.h.
Referenced by BuildMatrixSystem(), v_GenerateSummary(), and v_InitObject().
|
protected |
Schur complement boundary-boundary matrix.
Definition at line 93 of file LinearElasticSystem.h.
Referenced by SetStaticCondBlock(), v_DoSolve(), and v_InitObject().
Storage for the thermal stress terms.
Definition at line 107 of file LinearElasticSystem.h.
Referenced by v_DoSolve(), and v_ExtraFldOutput().
Storage for the temperature terms.
Definition at line 105 of file LinearElasticSystem.h.
Referenced by v_DoSolve(), and v_ExtraFldOutput().