|
| v0.14.0
|
Go to the documentation of this file.
8 #ifndef __VOLUME_LENGTH_QUALITY_HPP__
9 #define __VOLUME_LENGTH_QUALITY_HPP__
12 #error "MoFEM need to be compiled with ADOL-C"
24 "QUALITY",
"BARRIER_AND_QUALITY",
"BARRIER_AND_CHANGE_QUALITY",
25 "BARRIER_AND_CHANGE_QUALITY_SCALED_BY_VOLUME"};
31 template <
typename TYPE>
49 CHKERRABORT(PETSC_COMM_WORLD,
ierr);
54 CHKERR PetscOptionsBegin(PETSC_COMM_WORLD,
"",
55 "Get VolumeLengthQuality material options",
58 "-volume_length_type",
"Volume length quality type",
"",
61 CHKERR PetscOptionsScalar(
"-volume_length_alpha",
62 "volume length alpha parameter",
"",
aLpha,
64 CHKERR PetscOptionsScalar(
"-volume_length_gamma",
65 "volume length parameter (barrier)",
"",
gAmma,
67 ierr = PetscOptionsEnd();
75 ublas::vector<TYPE>
deltaX;
87 &coordsEdges[0 * 3 * 2 + 0], 1);
89 &coordsEdges[0 * 3 * 2 + 3], 1);
91 &coordsEdges[1 * 3 * 2 + 0], 1);
93 &coordsEdges[1 * 3 * 2 + 3], 1);
95 &coordsEdges[2 * 3 * 2 + 0], 1);
97 &coordsEdges[2 * 3 * 2 + 3], 1);
99 &coordsEdges[3 * 3 * 2 + 0], 1);
101 &coordsEdges[3 * 3 * 2 + 3], 1);
103 &coordsEdges[4 * 3 * 2 + 0], 1);
105 &coordsEdges[4 * 3 * 2 + 3], 1);
107 &coordsEdges[5 * 3 * 2 + 0], 1);
109 &coordsEdges[5 * 3 * 2 + 3], 1);
138 for (
int ee = 0; ee < 6; ee++) {
139 for (
int dd = 0;
dd < 3;
dd++) {
143 for (
int ii = 0; ii != 3; ++ii)
144 for (
int jj = 0; jj != 3; ++jj)
147 for (
int dd = 0;
dd < 3;
dd++) {
151 for (
int ii = 0; ii != 3; ++ii)
152 for (
int jj = 0; jj != 3; ++jj)
174 Q.resize(3, 3,
false);
207 boost::shared_ptr<const NumeredEntFiniteElement> fe_ptr) {
212 if (this->
invF.size1() != 3)
213 this->
invF.resize(3, 3);
225 if (this->
P.size1() != 3)
226 this->
P.resize(3, 3);
231 noalias(this->
P) = q *
Q;
236 noalias(this->
P) = tMp *
Q;
241 noalias(this->
P) = tMp *
Q;
248 noalias(this->
P) = tMp *
Q;
259 #endif //__VOLUME_LENGTH_QUALITY_HPP__
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
ublas::vector< TYPE > deltaX
FTensor::Index< 'i', 3 > i
FunctionsToCalculatePiolaKirchhoffI()
MoFEM::VolumeElementForcesAndSourcesCore::UserDataOperator * opPtr
pointer to finite element tetrahedral operator
Implementation of elastic (non-linear) St. Kirchhoff equation.
structure grouping operators and data used for calculation of nonlinear elastic element
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
VectorDouble & getCoords()
nodal coordinates
double getVolume() const
element volume (linear geometry)
VolumeLengthQuality(VolumeLengthQualityType type, double alpha, double gamma)
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.
#define CHKERR
Inline error check.
MatrixBoundedArray< TYPE, 9 > F
MoFEMErrorCode getEdgesFromElemCoords()
static const char * VolumeLengthQualityTypeNames[]
data for calculation heat conductivity and heat capacity elements
FTensor::Index< 'k', 3 > k
virtual MoFEMErrorCode calculateP_PiolaKirchhoffI(const NonlinearElasticElement::BlockData block_data, boost::shared_ptr< const NumeredEntFiniteElement > fe_ptr)
Volume Length Quality.
auto getFTensor2FromArray3by3(ublas::matrix< T, L, A > &data, const FTensor::Number< S > &, const size_t rr, const size_t cc=0)
static auto determinantTensor3by3(T &t)
Calculate the determinant of a 3x3 matrix or a tensor of rank 2.
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)
MoFEMErrorCode calculateQ()
Calculate Q.
MoFEMErrorCode getMaterialOptions()
ublas::matrix< TYPE > dXdChiT
static MoFEMErrorCodeGeneric< PetscErrorCode > ierr
FTensor::Index< 'j', 3 > j
UBlasVector< double > VectorDouble
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
MoFEMErrorCode calculateLrms()
Calculate mean element edge length.
MatrixBoundedArray< TYPE, 9 > invF
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
MatrixBoundedArray< TYPE, 9 > P
FTensor::Tensor2< FTensor::PackPtr< TYPE *, 0 >, 3, 3 > t_invF