v0.15.5
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
VolumeLengthQuality< TYPE > Struct Template Reference

Volume Length Quality. More...

#include "tools/src/VolumeLengthQuality.hpp"

Inheritance diagram for VolumeLengthQuality< TYPE >:
[legend]
Collaboration diagram for VolumeLengthQuality< TYPE >:
[legend]

Public Member Functions

 VolumeLengthQuality (VolumeLengthQualityType type, double alpha, double gamma, const std::string &field_name="MESH_NODE_POSITIONS")
 
MoFEMErrorCode getMaterialOptions ()
 
MoFEMErrorCode getEdgesFromElemCoords ()
 
MoFEMErrorCode calculateLrms ()
 Calculate mean element edge length.
 
MoFEMErrorCode calculateQ ()
 Calculate Q.
 
virtual MoFEMErrorCode calculateP_PiolaKirchhoffI ()
 Volume Length Quality.
 
 VolumeLengthQuality (VolumeLengthQualityType type, double alpha, double gamma)
 
MoFEMErrorCode getMaterialOptions ()
 
MoFEMErrorCode getEdgesFromElemCoords ()
 
MoFEMErrorCode calculateLrms ()
 Calculate mean element edge length.
 
MoFEMErrorCode calculateQ ()
 Calculate Q.
 
virtual MoFEMErrorCode calculateP_PiolaKirchhoffI (const NonlinearElasticElement::BlockData block_data, boost::shared_ptr< const NumeredEntFiniteElement > fe_ptr)
 Volume Length Quality.
 
 VolumeLengthQuality (VolumeLengthQualityType type, double alpha, double gamma)
 
MoFEMErrorCode getMaterialOptions ()
 
MoFEMErrorCode getEdgesFromElemCoords ()
 
MoFEMErrorCode calculateLrms ()
 Calculate mean element edge length.
 
MoFEMErrorCode calculateQ ()
 Calculate Q.
 
virtual MoFEMErrorCode calculateP_PiolaKirchhoffI (const NonlinearElasticElement::BlockData block_data, boost::shared_ptr< const NumeredEntFiniteElement > fe_ptr)
 Volume Length Quality.
 
- Public Member Functions inherited from Smoother::CalculatePK1< TYPE >
 CalculatePK1 (const std::string field_name)
 
- Public Member Functions inherited from MoFEM::VolumeElementForcesAndSourcesCore::UserDataOperator
int getNumNodes ()
 get element number of nodes
 
const EntityHandlegetConn ()
 get element connectivity
 
double getVolume () const
 element volume (linear geometry)
 
doublegetVolume ()
 element volume (linear geometry)
 
FTensor::Tensor2< double *, 3, 3 > & getJac ()
 get element Jacobian
 
FTensor::Tensor2< double *, 3, 3 > & getInvJac ()
 get element inverse Jacobian
 
VectorDoublegetCoords ()
 nodal coordinates
 
VolumeElementForcesAndSourcesCoregetVolumeFE () const
 return pointer to Generic Volume Finite Element object
 
- Public Member Functions inherited from MoFEM::ForcesAndSourcesCore::UserDataOperator
 UserDataOperator (const FieldSpace space, const char type=OPSPACE, const bool symm=true)
 Constructor for operators working on finite element spaces.
 
 UserDataOperator (const std::string field_name, const char type, const bool symm=true)
 Constructor for operators working on a single field.
 
 UserDataOperator (const std::string row_field_name, const std::string col_field_name, const char type, const bool symm=true)
 Constructor for operators working on two fields (bilinear forms)
 
boost::shared_ptr< const NumeredEntFiniteElementgetNumeredEntFiniteElementPtr () const
 Return raw pointer to NumeredEntFiniteElement.
 
EntityHandle getFEEntityHandle () const
 Return finite element entity handle.
 
int getFEDim () const
 Get dimension of finite element.
 
EntityType getFEType () const
 Get dimension of finite element.
 
boost::weak_ptr< SideNumbergetSideNumberPtr (const int side_number, const EntityType type)
 Get the side number pointer.
 
EntityHandle getSideEntity (const int side_number, const EntityType type)
 Get the side entity.
 
int getNumberOfNodesOnElement () const
 Get the number of nodes on finite element.
 
MoFEMErrorCode getProblemRowIndices (const std::string filed_name, const EntityType type, const int side, VectorInt &indices) const
 Get row indices.
 
MoFEMErrorCode getProblemColIndices (const std::string filed_name, const EntityType type, const int side, VectorInt &indices) const
 Get col indices.
 
const FEMethodgetFEMethod () const
 Return raw pointer to Finite Element Method object.
 
int getOpType () const
 Get operator types.
 
void setOpType (const OpType type)
 Set operator type.
 
void addOpType (const OpType type)
 Add operator type.
 
int getNinTheLoop () const
 get number of finite element in the loop
 
int getLoopSize () const
 get size of elements in the loop
 
std::string getFEName () const
 Get name of the element.
 
ForcesAndSourcesCoregetPtrFE () const
 
ForcesAndSourcesCoregetSidePtrFE () const
 
ForcesAndSourcesCoregetRefinePtrFE () const
 
const PetscData::SwitchesgetDataCtx () const
 
const KspMethod::KSPContext getKSPCtx () const
 
const SnesMethod::SNESContext getSNESCtx () const
 
const TSMethod::TSContext getTSCtx () const
 
Vec getKSPf () const
 
Mat getKSPA () const
 
Mat getKSPB () const
 
Vec getSNESf () const
 
Vec getSNESx () const
 
Mat getSNESA () const
 
Mat getSNESB () const
 
Vec getTSu () const
 
Vec getTSu_t () const
 
Vec getTSu_tt () const
 
Vec getTSf () const
 
Mat getTSA () const
 
Mat getTSB () const
 
int getTSstep () const
 
double getTStime () const
 
double getTStimeStep () const
 
double getTSa () const
 
double getTSaa () const
 
MatrixDoublegetGaussPts ()
 matrix of integration (Gauss) points for Volume Element
 
auto getFTensor0IntegrationWeight ()
 Get integration weights.
 
MatrixDoublegetCoordsAtGaussPts ()
 Gauss points and weight, matrix (nb. of points x 3)
 
auto getFTensor1CoordsAtGaussPts ()
 Get coordinates at integration points assuming linear geometry.
 
double getMeasure () const
 get measure of element
 
doublegetMeasure ()
 get measure of element
 
MoFEM::InterfacegetMField ()
 
moab::Interface & getMoab ()
 
virtual boost::weak_ptr< ForcesAndSourcesCoregetSubPipelinePtr () const
 
MoFEMErrorCode loopSide (const string &fe_name, ForcesAndSourcesCore *side_fe, const size_t dim, const EntityHandle ent_for_side=0, boost::shared_ptr< Range > fe_range=nullptr, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy, AdjCache *adj_cache=nullptr)
 User calls this function to loop over elements on the side of face. This function calls finite element with its operator to do calculations.
 
MoFEMErrorCode loopThis (const string &fe_name, ForcesAndSourcesCore *this_fe, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy)
 User calls this function to loop over the same element using a different set of integration points. This function calls finite element with its operator to do calculations.
 
MoFEMErrorCode loopParent (const string &fe_name, ForcesAndSourcesCore *parent_fe, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy)
 User calls this function to loop over parent elements. This function calls finite element with its operator to do calculations.
 
MoFEMErrorCode loopChildren (const string &fe_name, ForcesAndSourcesCore *child_fe, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy)
 User calls this function to loop over parent elements. This function calls finite element with its operator to do calculations.
 
MoFEMErrorCode loopRange (const string &fe_name, ForcesAndSourcesCore *range_fe, boost::shared_ptr< Range > fe_range, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy)
 Iterate over range of elements.
 
- Public Member Functions inherited from MoFEM::DataOperator
 DataOperator (const bool symm=true)
 
virtual ~DataOperator ()=default
 
virtual MoFEMErrorCode doWork (int row_side, int col_side, EntityType row_type, EntityType col_type, EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
 Operator for bi-linear form, usually to calculate values on left hand side.
 
virtual MoFEMErrorCode opLhs (EntitiesFieldData &row_data, EntitiesFieldData &col_data)
 
virtual MoFEMErrorCode doWork (int side, EntityType type, EntitiesFieldData::EntData &data)
 Operator for linear form, usually to calculate values on right hand side.
 
virtual MoFEMErrorCode opRhs (EntitiesFieldData &data, const bool error_if_no_base=false)
 
bool getSymm () const
 Get if operator uses symmetry of DOFs or not.
 
void setSymm ()
 set if operator is executed taking in account symmetry
 
void unSetSymm ()
 unset if operator is executed for non symmetric problem
 
- Public Member Functions inherited from NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI< TYPE >
 FunctionsToCalculatePiolaKirchhoffI ()
 
virtual ~FunctionsToCalculatePiolaKirchhoffI ()=default
 
MoFEMErrorCode calculateC_CauchyDeformationTensor ()
 
MoFEMErrorCode calculateE_GreenStrain ()
 
MoFEMErrorCode calculateS_PiolaKirchhoffII ()
 
virtual MoFEMErrorCode calculateCauchyStress (const BlockData block_data, boost::shared_ptr< const NumeredEntFiniteElement > fe_ptr)
 Function overload to implement user material.
 
virtual MoFEMErrorCode setUserActiveVariables (int &nb_active_variables)
 add additional active variables
 
virtual MoFEMErrorCode setUserActiveVariables (VectorDouble &activeVariables)
 Add additional independent variables More complex physical models depend on gradient of defamation and some additional variables. For example can depend on temperature. This function adds additional independent variables to the model.
 
virtual MoFEMErrorCode calculateElasticEnergy (const BlockData block_data, boost::shared_ptr< const NumeredEntFiniteElement > fe_ptr)
 Calculate elastic energy density.
 
virtual MoFEMErrorCode calculatesIGma_EshelbyStress (const BlockData block_data, boost::shared_ptr< const NumeredEntFiniteElement > fe_ptr)
 Calculate Eshelby stress.
 
virtual MoFEMErrorCode getDataOnPostProcessor (std::map< std::string, std::vector< VectorDouble > > &field_map, std::map< std::string, std::vector< MatrixDouble > > &grad_map)
 Do operations when pre-process.
 

Public Attributes

int tYpe
 
double aLpha
 
double gAmma
 
FTensor::Index< 'i', 3 > i
 
FTensor::Index< 'j', 3 > j
 
FTensor::Index< 'k', 3 > k
 
VectorDouble coordsEdges
 
double lrmsSquared0
 
VectorDouble deltaChi
 
ublas::vector< TYPE > deltaX
 
ublas::matrix< TYPE > Q
 
ublas::matrix< TYPE > dXdChiT
 
TYPE lrmsSquared
 
TYPE q
 
TYPE b
 
TYPE detF
 
TYPE currentVolume
 
TYPE tMp
 
- Public Attributes inherited from Smoother::CalculatePK1< TYPE >
FTensor::Index< 'i', 3 > i
 
FTensor::Index< 'j', 3 > j
 
FTensor::Index< 'k', 3 > k
 
MatrixBoundedArray< TYPE, 9 > F
 
MatrixBoundedArray< TYPE, 9 > invF
 
MatrixBoundedArray< TYPE, 9 > P
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_F
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_invF
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_P
 
int gG = 0
 Gauss point number.
 
CommonDatacommonDataPtr = nullptr
 field values at Gauss pts.)
 
MoFEM::VolumeElementForcesAndSourcesCore::UserDataOperatoropPtr = nullptr
 pointer to finite element tetrahedral operator
 
- Public Attributes inherited from MoFEM::ForcesAndSourcesCore::UserDataOperator
char opType
 
std::string rowFieldName
 
std::string colFieldName
 
FieldSpace sPace
 
- Public Attributes inherited from MoFEM::DataOperator
DoWorkLhsHookFunType doWorkLhsHook
 
DoWorkRhsHookFunType doWorkRhsHook
 
bool sYmm
 If true assume that matrix is symmetric structure.
 
std::array< bool, MBMAXTYPE > doEntities
 If true operator is executed for entity.
 
booldoVertices
 \deprectaed If false skip vertices
 
booldoEdges
 \deprectaed If false skip edges
 
booldoQuads
 \deprectaed
 
booldoTris
 \deprectaed
 
booldoTets
 \deprectaed
 
booldoPrisms
 \deprectaed
 
- Public Attributes inherited from NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI< TYPE >
FTensor::Index< 'i', 3 > i
 
FTensor::Index< 'j', 3 > j
 
FTensor::Index< 'k', 3 > k
 
double lambda
 
double mu
 
MatrixBoundedArray< TYPE, 9 > F
 
MatrixBoundedArray< TYPE, 9 > C
 
MatrixBoundedArray< TYPE, 9 > E
 
MatrixBoundedArray< TYPE, 9 > S
 
MatrixBoundedArray< TYPE, 9 > invF
 
MatrixBoundedArray< TYPE, 9 > P
 
MatrixBoundedArray< TYPE, 9 > sIGma
 
MatrixBoundedArray< TYPE, 9 > h
 
MatrixBoundedArray< TYPE, 9 > H
 
MatrixBoundedArray< TYPE, 9 > invH
 
MatrixBoundedArray< TYPE, 9 > sigmaCauchy
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_F
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_C
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_E
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_S
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_invF
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_P
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_sIGma
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_h
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_H
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_invH
 
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_sigmaCauchy
 
TYPE J
 
TYPE eNergy
 
TYPE detH
 
TYPE detF
 
int gG
 Gauss point number.
 
CommonDatacommonDataPtr
 
MoFEM::VolumeElementForcesAndSourcesCore::UserDataOperatoropPtr
 pointer to finite element tetrahedral operator
 

Additional Inherited Members

- Public Types inherited from MoFEM::ForcesAndSourcesCore::UserDataOperator
enum  OpType {
  OPROW = 1 << 0 , OPCOL = 1 << 1 , OPROWCOL = 1 << 2 , OPSPACE = 1 << 3 ,
  OPLAST = 1 << 3
}
 Controls loop over entities on element. More...
 
using AdjCache = std::map< EntityHandle, std::vector< boost::weak_ptr< NumeredEntFiniteElement > > >
 
- Public Types inherited from MoFEM::DataOperator
using DoWorkLhsHookFunType = boost::function< MoFEMErrorCode(DataOperator *op_ptr, int row_side, int col_side, EntityType row_type, EntityType col_type, EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)>
 
using DoWorkRhsHookFunType = boost::function< MoFEMErrorCode(DataOperator *op_ptr, int side, EntityType type, EntitiesFieldData::EntData &data)>
 
- Static Public Attributes inherited from MoFEM::ForcesAndSourcesCore::UserDataOperator
static const char *const OpTypeNames []
 
- Protected Member Functions inherited from MoFEM::VolumeElementForcesAndSourcesCore::UserDataOperator
MoFEMErrorCode setPtrFE (ForcesAndSourcesCore *ptr)
 
- Static Protected Member Functions inherited from Smoother::CalculatePK1< TYPE >
static auto resizeAndSet (MatrixBoundedArray< TYPE, 9 > &m)
 
- Static Protected Member Functions inherited from NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI< TYPE >
static auto resizeAndSet (MatrixBoundedArray< TYPE, 9 > &m)
 
- Protected Attributes inherited from MoFEM::ForcesAndSourcesCore::UserDataOperator
ForcesAndSourcesCoreptrFE
 

Detailed Description

template<typename TYPE>
struct VolumeLengthQuality< TYPE >

Volume Length Quality.

Definition at line 34 of file VolumeLengthQuality.hpp.

Constructor & Destructor Documentation

◆ VolumeLengthQuality() [1/3]

template<typename TYPE >
VolumeLengthQuality< TYPE >::VolumeLengthQuality ( VolumeLengthQualityType  type,
double  alpha,
double  gamma,
const std::string &  field_name = "MESH_NODE_POSITIONS" 
)
inline

Definition at line 46 of file VolumeLengthQuality.hpp.

49 gAmma(gamma) {
51 CHKERRABORT(PETSC_COMM_WORLD, ierr);
52 }
static PetscErrorCode ierr
constexpr auto field_name
MoFEMErrorCode getMaterialOptions()

◆ VolumeLengthQuality() [2/3]

template<typename TYPE >
VolumeLengthQuality< TYPE >::VolumeLengthQuality ( VolumeLengthQualityType  type,
double  alpha,
double  gamma 
)
inline

Definition at line 45 of file VolumeLengthQuality.hpp.

47 tYpe(type), aLpha(alpha), gAmma(gamma) {
49 CHKERRABORT(PETSC_COMM_WORLD, ierr);
50 }
Implementation of elastic (non-linear) St. Kirchhoff equation.

◆ VolumeLengthQuality() [3/3]

template<typename TYPE >
VolumeLengthQuality< TYPE >::VolumeLengthQuality ( VolumeLengthQualityType  type,
double  alpha,
double  gamma 
)
inline

Definition at line 45 of file VolumeLengthQuality.hpp.

47 tYpe(type), aLpha(alpha), gAmma(gamma) {
49 CHKERRABORT(PETSC_COMM_WORLD, ierr);
50 }

Member Function Documentation

◆ calculateLrms() [1/3]

template<typename TYPE >
MoFEMErrorCode VolumeLengthQuality< TYPE >::calculateLrms ( )
inline

Calculate mean element edge length.

\[ \Delta \boldsymbol\chi = \boldsymbol\chi^1 - \boldsymbol\chi^2 \]

\[ \Delta X = \mathbf{F} \Delta \boldsymbol\chi \]

\[ l_\textrm{rms} = \sqrt{\frac{1}{6} \sum_{i=0}^6 l_i^2 } = L_\textrm{rms}dl_\textrm{rms} \]

Definition at line 130 of file VolumeLengthQuality.hpp.

130 {
132 if (deltaChi.size() != 3) {
133 deltaChi.resize(3);
134 deltaX.resize(3);
135 dXdChiT.resize(3, 3);
136 }
137 lrmsSquared = 0;
138 lrmsSquared0 = 0;
139 std::fill(dXdChiT.data().begin(), dXdChiT.data().end(), 0);
140 for (int ee = 0; ee < 6; ee++) {
141 for (int dd = 0; dd < 3; dd++) {
142 deltaChi[dd] = coordsEdges[6 * ee + dd] - coordsEdges[6 * ee + 3 + dd];
143 }
144 std::fill(deltaX.begin(), deltaX.end(), 0);
145 for (int ii = 0; ii != 3; ++ii)
146 for (int jj = 0; jj != 3; ++jj)
147 deltaX(ii) += this->F(ii, jj) * deltaChi(jj);
148
149 for (int dd = 0; dd < 3; dd++) {
150 lrmsSquared += (1. / 6.) * deltaX[dd] * deltaX[dd];
151 lrmsSquared0 += (1. / 6.) * deltaChi[dd] * deltaChi[dd];
152 }
153 for (int ii = 0; ii != 3; ++ii)
154 for (int jj = 0; jj != 3; ++jj)
155 dXdChiT(ii, jj) += deltaX(ii) * deltaChi(jj);
156 }
158 }
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
const Tensor2_symmetric_Expr< const ddTensor0< T, Dim, i, j >, typename promote< T, double >::V, Dim, i, j > dd(const Tensor0< T * > &a, const Index< i, Dim > index1, const Index< j, Dim > index2, const Tensor1< int, Dim > &d_ijk, const Tensor1< double, Dim > &d_xyz)
Definition ddTensor0.hpp:33
MatrixBoundedArray< TYPE, 9 > F
Definition Smoother.hpp:245
ublas::vector< TYPE > deltaX
ublas::matrix< TYPE > dXdChiT

◆ calculateLrms() [2/3]

template<typename TYPE >
MoFEMErrorCode VolumeLengthQuality< TYPE >::calculateLrms ( )
inline

Calculate mean element edge length.

\[ \Delta \boldsymbol\chi = \boldsymbol\chi^1 - \boldsymbol\chi^2 \]

\[ \Delta X = \mathbf{F} \Delta \boldsymbol\chi \]

\[ l_\textrm{rms} = \sqrt{\frac{1}{6} \sum_{i=0}^6 l_i^2 } = L_\textrm{rms}dl_\textrm{rms} \]

Definition at line 127 of file VolumeLengthQuality.hpp.

127 {
129 if (deltaChi.size() != 3) {
130 deltaChi.resize(3);
131 deltaX.resize(3);
132 dXdChiT.resize(3, 3);
133 }
134 lrmsSquared = 0;
135 lrmsSquared0 = 0;
136 std::fill(dXdChiT.data().begin(), dXdChiT.data().end(), 0);
137 for (int ee = 0; ee < 6; ee++) {
138 for (int dd = 0; dd < 3; dd++) {
139 deltaChi[dd] = coordsEdges[6 * ee + dd] - coordsEdges[6 * ee + 3 + dd];
140 }
141 std::fill(deltaX.begin(), deltaX.end(), 0);
142 for (int ii = 0; ii != 3; ++ii)
143 for (int jj = 0; jj != 3; ++jj)
144 deltaX(ii) += this->F(ii, jj) * deltaChi(jj);
145
146 for (int dd = 0; dd < 3; dd++) {
147 lrmsSquared += (1. / 6.) * deltaX[dd] * deltaX[dd];
148 lrmsSquared0 += (1. / 6.) * deltaChi[dd] * deltaChi[dd];
149 }
150 for (int ii = 0; ii != 3; ++ii)
151 for (int jj = 0; jj != 3; ++jj)
152 dXdChiT(ii, jj) += deltaX(ii) * deltaChi(jj);
153 }
155 }

◆ calculateLrms() [3/3]

template<typename TYPE >
MoFEMErrorCode VolumeLengthQuality< TYPE >::calculateLrms ( )
inline

Calculate mean element edge length.

\[ \Delta \boldsymbol\chi = \boldsymbol\chi^1 - \boldsymbol\chi^2 \]

\[ \Delta X = \mathbf{F} \Delta \boldsymbol\chi \]

\[ l_\textrm{rms} = \sqrt{\frac{1}{6} \sum_{i=0}^6 l_i^2 } = L_\textrm{rms}dl_\textrm{rms} \]

Definition at line 128 of file VolumeLengthQuality.hpp.

128 {
130 if (deltaChi.size() != 3) {
131 deltaChi.resize(3);
132 deltaX.resize(3);
133 dXdChiT.resize(3, 3);
134 }
135 lrmsSquared = 0;
136 lrmsSquared0 = 0;
137 std::fill(dXdChiT.data().begin(), dXdChiT.data().end(), 0);
138 for (int ee = 0; ee < 6; ee++) {
139 for (int dd = 0; dd < 3; dd++) {
140 deltaChi[dd] = coordsEdges[6 * ee + dd] - coordsEdges[6 * ee + 3 + dd];
141 }
142 std::fill(deltaX.begin(), deltaX.end(), 0);
143 for (int ii = 0; ii != 3; ++ii)
144 for (int jj = 0; jj != 3; ++jj)
145 deltaX(ii) += this->F(ii, jj) * deltaChi(jj);
146
147 for (int dd = 0; dd < 3; dd++) {
148 lrmsSquared += (1. / 6.) * deltaX[dd] * deltaX[dd];
149 lrmsSquared0 += (1. / 6.) * deltaChi[dd] * deltaChi[dd];
150 }
151 for (int ii = 0; ii != 3; ++ii)
152 for (int jj = 0; jj != 3; ++jj)
153 dXdChiT(ii, jj) += deltaX(ii) * deltaChi(jj);
154 }
156 }

◆ calculateP_PiolaKirchhoffI() [1/3]

template<typename TYPE >
virtual MoFEMErrorCode VolumeLengthQuality< TYPE >::calculateP_PiolaKirchhoffI ( )
inlinevirtual

Volume Length Quality.

Based on: Three‐dimensional brittle fracture: configurational‐force‐driven crack propagation International Journal for Numerical Methods in Engineering 97 (7), 531-550

\[ \mathcal{B}(a)=\frac{a}{2(1-\gamma)}-\ln{(a-\gamma)} \]

\[ q = q_0 b, \quad q_0 = 6\sqrt{2}\frac{V_0}{L^3_\textrm{rms}}, \quad b = \frac{\textrm{det}(\mathbf{F})}{\textrm{d}l^3_\textrm{rms}} \]

\[ \mathbf{P} = \mathcal{B}(a)\mathbf{Q}, \]

where \(a\) depending on problem could be \(q\) or \(b\).

Reimplemented from Smoother::CalculatePK1< TYPE >.

Definition at line 207 of file VolumeLengthQuality.hpp.

207 {
209
212 if (this->invF.size1() != 3)
213 this->invF.resize(3, 3);
214
215 CHKERR invertTensor3by3(this->F, detF, this->invF);
218
219 double lrms03 = lrmsSquared0 * sqrt(lrmsSquared0);
220 b = detF / (lrmsSquared * sqrt(lrmsSquared) / lrms03);
221
222 currentVolume = detF * this->opPtr->getVolume();
223 q = 6. * sqrt(2.) * currentVolume / (lrmsSquared * sqrt(lrmsSquared));
224
225 if (this->P.size1() != 3)
226 this->P.resize(3, 3);
227
228 switch (tYpe) {
229 case QUALITY:
230 // Only use for testing, simple quality gradient
231 noalias(this->P) = q * Q;
232 break;
234 // This is used form mesh smoothing
235 tMp = q / (1.0 - gAmma) - 1.0 / (q - gAmma);
236 noalias(this->P) = tMp * Q;
237 break;
239 // Works well with Arbitrary Lagrangian Formulation
240 tMp = b / (1.0 - gAmma) - 1.0 / (b - gAmma);
241 noalias(this->P) = tMp * Q;
242 break;
244 // When scaled by volume works well with ALE and face flipping.
245 // Works well with smooth crack propagation
247 tMp *= b / (1.0 - gAmma) - 1.0 / (b - gAmma);
248 noalias(this->P) = tMp * Q;
249 break;
250 }
251
252 // Divide by volume, to make units as they should be
253 this->P *= aLpha / this->opPtr->getVolume();
254
256 }
#define CHKERR
Inline error check.
MoFEMErrorCode invertTensor3by3(ublas::matrix< T, L, A > &jac_data, ublas::vector< T, A > &det_data, ublas::matrix< T, L, A > &inv_jac_data)
Calculate inverse of tensor rank 2 at integration points.
MoFEMErrorCode determinantTensor3by3(T1 &t, T2 &det)
Calculate determinant 3 by 3.
MoFEM::VolumeElementForcesAndSourcesCore::UserDataOperator * opPtr
pointer to finite element tetrahedral operator
Definition Smoother.hpp:252
MatrixBoundedArray< TYPE, 9 > invF
Definition Smoother.hpp:245
MatrixBoundedArray< TYPE, 9 > P
Definition Smoother.hpp:245
MoFEMErrorCode calculateQ()
Calculate Q.
ublas::matrix< TYPE > Q
MoFEMErrorCode getEdgesFromElemCoords()
MoFEMErrorCode calculateLrms()
Calculate mean element edge length.
@ BARRIER_AND_CHANGE_QUALITY_SCALED_BY_VOLUME
@ BARRIER_AND_QUALITY
@ BARRIER_AND_CHANGE_QUALITY

◆ calculateP_PiolaKirchhoffI() [2/3]

template<typename TYPE >
virtual MoFEMErrorCode VolumeLengthQuality< TYPE >::calculateP_PiolaKirchhoffI ( const NonlinearElasticElement::BlockData  block_data,
boost::shared_ptr< const NumeredEntFiniteElement >  fe_ptr 
)
inlinevirtual

Volume Length Quality.

Based on: Three‐dimensional brittle fracture: configurational‐force‐driven crack propagation International Journal for Numerical Methods in Engineering 97 (7), 531-550

\[ \mathcal{B}(a)=\frac{a}{2(1-\gamma)}-\ln{(a-\gamma)} \]

\[ q = q_0 b, \quad q_0 = 6\sqrt{2}\frac{V_0}{L^3_\textrm{rms}}, \quad b = \frac{\textrm{det}(\mathbf{F})}{\textrm{d}l^3_\textrm{rms}} \]

\[ \mathbf{P} = \mathcal{B}(a)\mathbf{Q}, \]

where \(a\) depending on problem could be \(q\) or \(b\).

Reimplemented from NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI< TYPE >.

Definition at line 204 of file VolumeLengthQuality.hpp.

206 {
208
211 if (this->invF.size1() != 3)
212 this->invF.resize(3, 3);
213
214 CHKERR invertTensor3by3(this->F, detF, this->invF);
217
218 double lrms03 = lrmsSquared0 * sqrt(lrmsSquared0);
219 b = detF / (lrmsSquared * sqrt(lrmsSquared) / lrms03);
220
221 currentVolume = detF * this->opPtr->getVolume();
222 q = 6. * sqrt(2.) * currentVolume / (lrmsSquared * sqrt(lrmsSquared));
223
224 if (this->P.size1() != 3)
225 this->P.resize(3, 3);
226
227 switch (tYpe) {
228 case QUALITY:
229 // Only use for testing, simple quality gradient
230 noalias(this->P) = q * Q;
231 break;
233 // This is used form mesh smoothing
234 tMp = q / (1.0 - gAmma) - 1.0 / (q - gAmma);
235 noalias(this->P) = tMp * Q;
236 break;
238 // Works well with Arbitrary Lagrangian Formulation
239 tMp = b / (1.0 - gAmma) - 1.0 / (b - gAmma);
240 noalias(this->P) = tMp * Q;
241 break;
243 // When scaled by volume works well with ALE and face flipping.
244 // Works well with smooth crack propagation
246 tMp *= b / (1.0 - gAmma) - 1.0 / (b - gAmma);
247 noalias(this->P) = tMp * Q;
248 break;
249 }
250
251 // Divide by volume, to make units as they should be
252 this->P *= aLpha / this->opPtr->getVolume();
253
255 }

◆ calculateP_PiolaKirchhoffI() [3/3]

template<typename TYPE >
virtual MoFEMErrorCode VolumeLengthQuality< TYPE >::calculateP_PiolaKirchhoffI ( const NonlinearElasticElement::BlockData  block_data,
boost::shared_ptr< const NumeredEntFiniteElement >  fe_ptr 
)
inlinevirtual

Volume Length Quality.

Based on: Three‐dimensional brittle fracture: configurational‐force‐driven crack propagation International Journal for Numerical Methods in Engineering 97 (7), 531-550

\[ \mathcal{B}(a)=\frac{a}{2(1-\gamma)}-\ln{(a-\gamma)} \]

\[ q = q_0 b, \quad q_0 = 6\sqrt{2}\frac{V_0}{L^3_\textrm{rms}}, \quad b = \frac{\textrm{det}(\mathbf{F})}{\textrm{d}l^3_\textrm{rms}} \]

\[ \mathbf{P} = \mathcal{B}(a)\mathbf{Q}, \]

where \(a\) depending on problem could be \(q\) or \(b\).

Reimplemented from NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI< TYPE >.

Definition at line 205 of file VolumeLengthQuality.hpp.

207 {
209
212 if (this->invF.size1() != 3)
213 this->invF.resize(3, 3);
214
215 CHKERR invertTensor3by3(this->F, detF, this->invF);
218
219 double lrms03 = lrmsSquared0 * sqrt(lrmsSquared0);
220 b = detF / (lrmsSquared * sqrt(lrmsSquared) / lrms03);
221
222 currentVolume = detF * this->opPtr->getVolume();
223 q = 6. * sqrt(2.) * currentVolume / (lrmsSquared * sqrt(lrmsSquared));
224
225 if (this->P.size1() != 3)
226 this->P.resize(3, 3);
227
228 switch (tYpe) {
229 case QUALITY:
230 // Only use for testing, simple quality gradient
231 noalias(this->P) = q * Q;
232 break;
234 // This is used form mesh smoothing
235 tMp = q / (1.0 - gAmma) - 1.0 / (q - gAmma);
236 noalias(this->P) = tMp * Q;
237 break;
239 // Works well with Arbitrary Lagrangian Formulation
240 tMp = b / (1.0 - gAmma) - 1.0 / (b - gAmma);
241 noalias(this->P) = tMp * Q;
242 break;
244 // When scaled by volume works well with ALE and face flipping.
245 // Works well with smooth crack propagation
247 tMp *= b / (1.0 - gAmma) - 1.0 / (b - gAmma);
248 noalias(this->P) = tMp * Q;
249 break;
250 }
251
252 // Divide by volume, to make units as they should be
253 this->P *= aLpha / this->opPtr->getVolume();
254
256 }

◆ calculateQ() [1/3]

template<typename TYPE >
MoFEMErrorCode VolumeLengthQuality< TYPE >::calculateQ ( )
inline

Calculate Q.

\[ \mathbf{Q} = \mathbf{F}^{-\mathsf{T}} - \frac{1}{2} \frac{1}{l^2_\textrm{rms}} \sum_i^6 \Delta\mathbf{X}_i \Delta\boldsymbol\chi_i^\mathsf{T} \]

Definition at line 174 of file VolumeLengthQuality.hpp.

174 {
176 Q.resize(3, 3, false);
180 t_Q(i, j) = t_invF(j, i) - 0.5 * t_dXdChiT(i, j) / lrmsSquared;
182 }
auto getFTensor2FromArray3by3(ublas::matrix< T, L, A > &data, const FTensor::Number< S > &, const size_t rr, const size_t cc=0)
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_invF
Definition Smoother.hpp:246
FTensor::Index< 'j', 3 > j
FTensor::Index< 'i', 3 > i

◆ calculateQ() [2/3]

template<typename TYPE >
MoFEMErrorCode VolumeLengthQuality< TYPE >::calculateQ ( )
inline

Calculate Q.

\[ \mathbf{Q} = \mathbf{F}^{-\mathsf{T}} - \frac{1}{2} \frac{1}{l^2_\textrm{rms}} \sum_i^6 \Delta\mathbf{X}_i \Delta\boldsymbol\chi_i^\mathsf{T} \]

Definition at line 171 of file VolumeLengthQuality.hpp.

171 {
173 Q.resize(3, 3, false);
177 t_Q(i, j) = t_invF(j, i) - 0.5 * t_dXdChiT(i, j) / lrmsSquared;
179 }

◆ calculateQ() [3/3]

template<typename TYPE >
MoFEMErrorCode VolumeLengthQuality< TYPE >::calculateQ ( )
inline

Calculate Q.

\[ \mathbf{Q} = \mathbf{F}^{-\mathsf{T}} - \frac{1}{2} \frac{1}{l^2_\textrm{rms}} \sum_i^6 \Delta\mathbf{X}_i \Delta\boldsymbol\chi_i^\mathsf{T} \]

Definition at line 172 of file VolumeLengthQuality.hpp.

172 {
174 Q.resize(3, 3, false);
178 t_Q(i, j) = t_invF(j, i) - 0.5 * t_dXdChiT(i, j) / lrmsSquared;
180 }

◆ getEdgesFromElemCoords() [1/3]

template<typename TYPE >
MoFEMErrorCode VolumeLengthQuality< TYPE >::getEdgesFromElemCoords ( )
inline

Get coordinates of edges using cannonical element numeration

Definition at line 83 of file VolumeLengthQuality.hpp.

83 {
85 if (coordsEdges.empty()) {
86 coordsEdges.resize(6 * 2 * 3, false);
87 }
88 cblas_dcopy(3, &this->opPtr->getCoords()[0 * 3], 1,
89 &coordsEdges[0 * 3 * 2 + 0], 1);
90 cblas_dcopy(3, &this->opPtr->getCoords()[1 * 3], 1,
91 &coordsEdges[0 * 3 * 2 + 3], 1);
92 cblas_dcopy(3, &this->opPtr->getCoords()[0 * 3], 1,
93 &coordsEdges[1 * 3 * 2 + 0], 1);
94 cblas_dcopy(3, &this->opPtr->getCoords()[2 * 3], 1,
95 &coordsEdges[1 * 3 * 2 + 3], 1);
96 cblas_dcopy(3, &this->opPtr->getCoords()[0 * 3], 1,
97 &coordsEdges[2 * 3 * 2 + 0], 1);
98 cblas_dcopy(3, &this->opPtr->getCoords()[3 * 3], 1,
99 &coordsEdges[2 * 3 * 2 + 3], 1);
100 cblas_dcopy(3, &this->opPtr->getCoords()[1 * 3], 1,
101 &coordsEdges[3 * 3 * 2 + 0], 1);
102 cblas_dcopy(3, &this->opPtr->getCoords()[2 * 3], 1,
103 &coordsEdges[3 * 3 * 2 + 3], 1);
104 cblas_dcopy(3, &this->opPtr->getCoords()[1 * 3], 1,
105 &coordsEdges[4 * 3 * 2 + 0], 1);
106 cblas_dcopy(3, &this->opPtr->getCoords()[3 * 3], 1,
107 &coordsEdges[4 * 3 * 2 + 3], 1);
108 cblas_dcopy(3, &this->opPtr->getCoords()[2 * 3], 1,
109 &coordsEdges[5 * 3 * 2 + 0], 1);
110 cblas_dcopy(3, &this->opPtr->getCoords()[3 * 3], 1,
111 &coordsEdges[5 * 3 * 2 + 3], 1);
113 }

◆ getEdgesFromElemCoords() [2/3]

template<typename TYPE >
MoFEMErrorCode VolumeLengthQuality< TYPE >::getEdgesFromElemCoords ( )
inline

Get coordinates of edges using cannonical element numeration

Definition at line 80 of file VolumeLengthQuality.hpp.

80 {
82 if (coordsEdges.empty()) {
83 coordsEdges.resize(6 * 2 * 3, false);
84 }
85 cblas_dcopy(3, &this->opPtr->getCoords()[0 * 3], 1,
86 &coordsEdges[0 * 3 * 2 + 0], 1);
87 cblas_dcopy(3, &this->opPtr->getCoords()[1 * 3], 1,
88 &coordsEdges[0 * 3 * 2 + 3], 1);
89 cblas_dcopy(3, &this->opPtr->getCoords()[0 * 3], 1,
90 &coordsEdges[1 * 3 * 2 + 0], 1);
91 cblas_dcopy(3, &this->opPtr->getCoords()[2 * 3], 1,
92 &coordsEdges[1 * 3 * 2 + 3], 1);
93 cblas_dcopy(3, &this->opPtr->getCoords()[0 * 3], 1,
94 &coordsEdges[2 * 3 * 2 + 0], 1);
95 cblas_dcopy(3, &this->opPtr->getCoords()[3 * 3], 1,
96 &coordsEdges[2 * 3 * 2 + 3], 1);
97 cblas_dcopy(3, &this->opPtr->getCoords()[1 * 3], 1,
98 &coordsEdges[3 * 3 * 2 + 0], 1);
99 cblas_dcopy(3, &this->opPtr->getCoords()[2 * 3], 1,
100 &coordsEdges[3 * 3 * 2 + 3], 1);
101 cblas_dcopy(3, &this->opPtr->getCoords()[1 * 3], 1,
102 &coordsEdges[4 * 3 * 2 + 0], 1);
103 cblas_dcopy(3, &this->opPtr->getCoords()[3 * 3], 1,
104 &coordsEdges[4 * 3 * 2 + 3], 1);
105 cblas_dcopy(3, &this->opPtr->getCoords()[2 * 3], 1,
106 &coordsEdges[5 * 3 * 2 + 0], 1);
107 cblas_dcopy(3, &this->opPtr->getCoords()[3 * 3], 1,
108 &coordsEdges[5 * 3 * 2 + 3], 1);
110 }

◆ getEdgesFromElemCoords() [3/3]

template<typename TYPE >
MoFEMErrorCode VolumeLengthQuality< TYPE >::getEdgesFromElemCoords ( )
inline

Get coordinates of edges using cannonical element numeration

Definition at line 81 of file VolumeLengthQuality.hpp.

81 {
83 if (coordsEdges.empty()) {
84 coordsEdges.resize(6 * 2 * 3, false);
85 }
86 cblas_dcopy(3, &this->opPtr->getCoords()[0 * 3], 1,
87 &coordsEdges[0 * 3 * 2 + 0], 1);
88 cblas_dcopy(3, &this->opPtr->getCoords()[1 * 3], 1,
89 &coordsEdges[0 * 3 * 2 + 3], 1);
90 cblas_dcopy(3, &this->opPtr->getCoords()[0 * 3], 1,
91 &coordsEdges[1 * 3 * 2 + 0], 1);
92 cblas_dcopy(3, &this->opPtr->getCoords()[2 * 3], 1,
93 &coordsEdges[1 * 3 * 2 + 3], 1);
94 cblas_dcopy(3, &this->opPtr->getCoords()[0 * 3], 1,
95 &coordsEdges[2 * 3 * 2 + 0], 1);
96 cblas_dcopy(3, &this->opPtr->getCoords()[3 * 3], 1,
97 &coordsEdges[2 * 3 * 2 + 3], 1);
98 cblas_dcopy(3, &this->opPtr->getCoords()[1 * 3], 1,
99 &coordsEdges[3 * 3 * 2 + 0], 1);
100 cblas_dcopy(3, &this->opPtr->getCoords()[2 * 3], 1,
101 &coordsEdges[3 * 3 * 2 + 3], 1);
102 cblas_dcopy(3, &this->opPtr->getCoords()[1 * 3], 1,
103 &coordsEdges[4 * 3 * 2 + 0], 1);
104 cblas_dcopy(3, &this->opPtr->getCoords()[3 * 3], 1,
105 &coordsEdges[4 * 3 * 2 + 3], 1);
106 cblas_dcopy(3, &this->opPtr->getCoords()[2 * 3], 1,
107 &coordsEdges[5 * 3 * 2 + 0], 1);
108 cblas_dcopy(3, &this->opPtr->getCoords()[3 * 3], 1,
109 &coordsEdges[5 * 3 * 2 + 3], 1);
111 }

◆ getMaterialOptions() [1/3]

template<typename TYPE >
MoFEMErrorCode VolumeLengthQuality< TYPE >::getMaterialOptions ( )
inline

Definition at line 54 of file VolumeLengthQuality.hpp.

54 {
56 PetscOptionsBegin(PETSC_COMM_WORLD, "",
57 "Get VolumeLengthQuality material options",
58 "none");
59 CHKERR PetscOptionsEList(
60 "-volume_length_type", "Volume length quality type", "",
62 VolumeLengthQualityTypeNames[tYpe], &tYpe, PETSC_NULLPTR);
63 CHKERR PetscOptionsScalar("-volume_length_alpha",
64 "volume length alpha parameter", "", aLpha,
65 &aLpha, PETSC_NULLPTR);
66 CHKERR PetscOptionsScalar("-volume_length_gamma",
67 "volume length parameter (barrier)", "", gAmma,
68 &gAmma, PETSC_NULLPTR);
69 PetscOptionsEnd();
71 }
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ LASTOP_VOLUMELENGTHQUALITYTYPE
static const char * VolumeLengthQualityTypeNames[]

◆ getMaterialOptions() [2/3]

template<typename TYPE >
MoFEMErrorCode VolumeLengthQuality< TYPE >::getMaterialOptions ( )
inline

Definition at line 52 of file VolumeLengthQuality.hpp.

52 {
54 PetscOptionsBegin(PETSC_COMM_WORLD, "",
55 "Get VolumeLengthQuality material options", "none");
56 CHKERR PetscOptionsEList(
57 "-volume_length_type", "Volume length quality type", "",
59 VolumeLengthQualityTypeNames[tYpe], &tYpe, PETSC_NULLPTR);
60 CHKERR PetscOptionsScalar("-volume_length_alpha",
61 "volume length alpha parameter", "", aLpha,
62 &aLpha, PETSC_NULLPTR);
63 CHKERR PetscOptionsScalar("-volume_length_gamma",
64 "volume length parameter (barrier)", "", gAmma,
65 &gAmma, PETSC_NULLPTR);
66 PetscOptionsEnd();
68 }

◆ getMaterialOptions() [3/3]

template<typename TYPE >
MoFEMErrorCode VolumeLengthQuality< TYPE >::getMaterialOptions ( )
inline

Definition at line 52 of file VolumeLengthQuality.hpp.

52 {
54 PetscOptionsBegin(PETSC_COMM_WORLD, "",
55 "Get VolumeLengthQuality material options",
56 "none");
57 CHKERR PetscOptionsEList(
58 "-volume_length_type", "Volume length quality type", "",
60 VolumeLengthQualityTypeNames[tYpe], &tYpe, PETSC_NULLPTR);
61 CHKERR PetscOptionsScalar("-volume_length_alpha",
62 "volume length alpha parameter", "", aLpha,
63 &aLpha, PETSC_NULLPTR);
64 CHKERR PetscOptionsScalar("-volume_length_gamma",
65 "volume length parameter (barrier)", "", gAmma,
66 &gAmma, PETSC_NULLPTR);
67 PetscOptionsEnd();
69 }

Member Data Documentation

◆ aLpha

template<typename TYPE >
double VolumeLengthQuality< TYPE >::aLpha

Definition at line 39 of file VolumeLengthQuality.hpp.

◆ b

template<typename TYPE >
TYPE VolumeLengthQuality< TYPE >::b

Definition at line 79 of file VolumeLengthQuality.hpp.

◆ coordsEdges

template<typename TYPE >
VectorDouble VolumeLengthQuality< TYPE >::coordsEdges

Definition at line 73 of file VolumeLengthQuality.hpp.

◆ currentVolume

template<typename TYPE >
TYPE VolumeLengthQuality< TYPE >::currentVolume

Definition at line 79 of file VolumeLengthQuality.hpp.

◆ deltaChi

template<typename TYPE >
VectorDouble VolumeLengthQuality< TYPE >::deltaChi

Definition at line 75 of file VolumeLengthQuality.hpp.

◆ deltaX

template<typename TYPE >
ublas::vector< TYPE > VolumeLengthQuality< TYPE >::deltaX

Definition at line 77 of file VolumeLengthQuality.hpp.

◆ detF

template<typename TYPE >
TYPE VolumeLengthQuality< TYPE >::detF

Definition at line 79 of file VolumeLengthQuality.hpp.

◆ dXdChiT

template<typename TYPE >
ublas::matrix< TYPE > VolumeLengthQuality< TYPE >::dXdChiT

Definition at line 78 of file VolumeLengthQuality.hpp.

◆ gAmma

template<typename TYPE >
double VolumeLengthQuality< TYPE >::gAmma

Definition at line 40 of file VolumeLengthQuality.hpp.

◆ i

template<typename TYPE >
FTensor::Index< 'i', 3 > VolumeLengthQuality< TYPE >::i

Definition at line 42 of file VolumeLengthQuality.hpp.

◆ j

template<typename TYPE >
FTensor::Index< 'j', 3 > VolumeLengthQuality< TYPE >::j

Definition at line 43 of file VolumeLengthQuality.hpp.

◆ k

template<typename TYPE >
FTensor::Index< 'k', 3 > VolumeLengthQuality< TYPE >::k

Definition at line 44 of file VolumeLengthQuality.hpp.

◆ lrmsSquared

template<typename TYPE >
TYPE VolumeLengthQuality< TYPE >::lrmsSquared

Definition at line 79 of file VolumeLengthQuality.hpp.

◆ lrmsSquared0

template<typename TYPE >
double VolumeLengthQuality< TYPE >::lrmsSquared0

Definition at line 74 of file VolumeLengthQuality.hpp.

◆ Q

template<typename TYPE >
ublas::matrix< TYPE > VolumeLengthQuality< TYPE >::Q

Definition at line 78 of file VolumeLengthQuality.hpp.

◆ q

template<typename TYPE >
TYPE VolumeLengthQuality< TYPE >::q

Definition at line 79 of file VolumeLengthQuality.hpp.

◆ tMp

template<typename TYPE >
TYPE VolumeLengthQuality< TYPE >::tMp

Definition at line 79 of file VolumeLengthQuality.hpp.

◆ tYpe

template<typename TYPE >
int VolumeLengthQuality< TYPE >::tYpe

Definition at line 38 of file VolumeLengthQuality.hpp.


The documentation for this struct was generated from the following files: