v0.15.0
Loading...
Searching...
No Matches
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)
 
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 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 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

- Static Protected Member Functions inherited from NonlinearElasticElement::FunctionsToCalculatePiolaKirchhoffI< TYPE >
static auto resizeAndSet (MatrixBoundedArray< TYPE, 9 > &m)
 

Detailed Description

template<typename TYPE>
struct VolumeLengthQuality< TYPE >

Volume Length Quality.

Examples
mesh_smoothing.cpp.

Definition at line 32 of file VolumeLengthQuality.hpp.

Constructor & Destructor Documentation

◆ VolumeLengthQuality() [1/2]

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 }
static PetscErrorCode ierr
Implementation of elastic (non-linear) St. Kirchhoff equation.
MoFEMErrorCode getMaterialOptions()

◆ VolumeLengthQuality() [2/2]

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/2]

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 }
#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
ublas::vector< TYPE > deltaX
ublas::matrix< TYPE > dXdChiT

◆ calculateLrms() [2/2]

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 }

◆ calculateP_PiolaKirchhoffI() [1/2]

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 }
#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
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/2]

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 }

◆ calculateQ() [1/2]

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 }
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
FTensor::Index< 'j', 3 > j
FTensor::Index< 'i', 3 > i

◆ calculateQ() [2/2]

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 }

◆ getEdgesFromElemCoords() [1/2]

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 }

◆ getEdgesFromElemCoords() [2/2]

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 }

◆ getMaterialOptions() [1/2]

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 }
#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/2]

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 }

Member Data Documentation

◆ aLpha

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

Definition at line 38 of file VolumeLengthQuality.hpp.

◆ b

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

Definition at line 77 of file VolumeLengthQuality.hpp.

◆ coordsEdges

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

Definition at line 71 of file VolumeLengthQuality.hpp.

◆ currentVolume

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

Definition at line 77 of file VolumeLengthQuality.hpp.

◆ deltaChi

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

Definition at line 73 of file VolumeLengthQuality.hpp.

◆ deltaX

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

Definition at line 75 of file VolumeLengthQuality.hpp.

◆ detF

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

Definition at line 77 of file VolumeLengthQuality.hpp.

◆ dXdChiT

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

Definition at line 76 of file VolumeLengthQuality.hpp.

◆ gAmma

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

Definition at line 39 of file VolumeLengthQuality.hpp.

◆ i

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

Definition at line 41 of file VolumeLengthQuality.hpp.

◆ j

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

Definition at line 42 of file VolumeLengthQuality.hpp.

◆ k

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

Definition at line 43 of file VolumeLengthQuality.hpp.

◆ lrmsSquared

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

Definition at line 77 of file VolumeLengthQuality.hpp.

◆ lrmsSquared0

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

Definition at line 72 of file VolumeLengthQuality.hpp.

◆ Q

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

Definition at line 76 of file VolumeLengthQuality.hpp.

◆ q

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

Definition at line 77 of file VolumeLengthQuality.hpp.

◆ tMp

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

Definition at line 77 of file VolumeLengthQuality.hpp.

◆ tYpe

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

Definition at line 37 of file VolumeLengthQuality.hpp.


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