v0.13.1
Public Member Functions | Public Attributes | List of all members
FractureMechanics::OpGetDensityFieldForTesting Struct Reference

Op to generate artificial density field. More...

#include <users_modules/fracture_mechanics/src/CrackFrontElement.hpp>

Inherits HookeElement::VolUserDataOperator.

Public Member Functions

 OpGetDensityFieldForTesting (const std::string row_field, boost::shared_ptr< MatrixDouble > mat_coords_ptr, boost::shared_ptr< VectorDouble > density_at_pts, boost::shared_ptr< MatrixDouble > rho_grad_at_gauss_pts_ptr, boost::shared_ptr< MatrixDouble > rho_grad_grad_at_gauss_pts_ptr, boost::shared_ptr< CrackFrontElement > fe_singular_ptr, MatrixDouble &singular_disp, boost::shared_ptr< MatrixDouble > mat_grad_pos_at_pts_ptr)
 
MoFEMErrorCode doWork (int row_side, EntityType row_type, HookeElement::EntData &row_data)
 

Public Attributes

boost::shared_ptr< MatrixDouble > matCoordsPtr
 
boost::shared_ptr< VectorDouble > rhoAtGaussPtsPtr
 
boost::shared_ptr< MatrixDouble > rhoGradAtGaussPtsPtr
 
boost::shared_ptr< MatrixDouble > rhoGradGradAtGaussPtsPtr
 
boost::shared_ptr< CrackFrontElementfeSingularPtr
 
MatrixDouble & singularDisp
 
boost::shared_ptr< MatrixDouble > matGradPosAtPtsPtr
 

Detailed Description

Op to generate artificial density field.

Definition at line 760 of file CrackFrontElement.hpp.

Constructor & Destructor Documentation

◆ OpGetDensityFieldForTesting()

FractureMechanics::OpGetDensityFieldForTesting::OpGetDensityFieldForTesting ( const std::string  row_field,
boost::shared_ptr< MatrixDouble >  mat_coords_ptr,
boost::shared_ptr< VectorDouble >  density_at_pts,
boost::shared_ptr< MatrixDouble >  rho_grad_at_gauss_pts_ptr,
boost::shared_ptr< MatrixDouble >  rho_grad_grad_at_gauss_pts_ptr,
boost::shared_ptr< CrackFrontElement fe_singular_ptr,
MatrixDouble &  singular_disp,
boost::shared_ptr< MatrixDouble >  mat_grad_pos_at_pts_ptr 
)

Definition at line 769 of file CrackFrontElement.hpp.

778 : HookeElement::VolUserDataOperator(row_field, OPROW),
779 matCoordsPtr(mat_coords_ptr), rhoAtGaussPtsPtr(density_at_pts),
780 rhoGradAtGaussPtsPtr(rho_grad_at_gauss_pts_ptr),
781 rhoGradGradAtGaussPtsPtr(rho_grad_grad_at_gauss_pts_ptr),
782 feSingularPtr(fe_singular_ptr), singularDisp(singular_disp),
783 matGradPosAtPtsPtr(mat_grad_pos_at_pts_ptr) {}
VolumeElementForcesAndSourcesCore::UserDataOperator VolUserDataOperator
Definition: elasticity.cpp:76
boost::shared_ptr< MatrixDouble > matGradPosAtPtsPtr
boost::shared_ptr< CrackFrontElement > feSingularPtr
boost::shared_ptr< VectorDouble > rhoAtGaussPtsPtr
boost::shared_ptr< MatrixDouble > rhoGradAtGaussPtsPtr
boost::shared_ptr< MatrixDouble > matCoordsPtr
boost::shared_ptr< MatrixDouble > rhoGradGradAtGaussPtsPtr

Member Function Documentation

◆ doWork()

MoFEMErrorCode FractureMechanics::OpGetDensityFieldForTesting::doWork ( int  row_side,
EntityType  row_type,
HookeElement::EntData row_data 
)

Definition at line 1485 of file CrackFrontElement.cpp.

1486 {
1488 if (row_type != MBVERTEX)
1490 // get number of integration points
1491 const int nb_integration_pts = getGaussPts().size2();
1492 rhoAtGaussPtsPtr->resize(nb_integration_pts, false);
1493 rhoAtGaussPtsPtr->clear();
1494 rhoGradAtGaussPtsPtr->resize(3, nb_integration_pts, false);
1495 rhoGradAtGaussPtsPtr->clear();
1496 rhoGradGradAtGaussPtsPtr->resize(9, nb_integration_pts, false);
1497 rhoGradGradAtGaussPtsPtr->clear();
1498
1499 auto t_rho = getFTensor0FromVec(*rhoAtGaussPtsPtr);
1500 auto t_grad_rho = getFTensor1FromMat<3>(*rhoGradAtGaussPtsPtr);
1501 auto t_grad_grad_rho = getFTensor2FromMat<3, 3>(*rhoGradGradAtGaussPtsPtr);
1502
1503 MatrixDouble &coords = *matCoordsPtr;
1504
1507
1508 singularDisp.resize(3, nb_integration_pts, false);
1509 singularDisp.clear();
1510
1511 auto t_material_positions = getFTensor1FromMat<3>(coords);
1512 auto t_mwls_material_positions = getFTensor1FromMat<3>(coords);
1513 if (feSingularPtr->singularElement) {
1514 MatrixDouble singular_current_displacement;
1515
1516 singular_current_displacement.resize(3, nb_integration_pts, false);
1517 singular_current_displacement.clear();
1518
1519 FTensor::Tensor1<FTensor::PackPtr<double *, 3>, 3> t_singular_displacement(
1520 &feSingularPtr->singularDisp(0, 0), &feSingularPtr->singularDisp(0, 1),
1521 &feSingularPtr->singularDisp(0, 2));
1522 auto t_inital_singular_displacement = getFTensor1FromMat<3>(singularDisp);
1523 auto t_current_singular_displacement =
1524 getFTensor1FromMat<3>(singular_current_displacement);
1525 if (!matGradPosAtPtsPtr)
1526 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
1527 "Matrix for gradient of positions not allocated");
1528 auto t_H = getFTensor2FromMat<3, 3>(*matGradPosAtPtsPtr);
1529 for (int gg = 0; gg != nb_integration_pts; gg++) {
1530
1531 t_inital_singular_displacement(i) = t_singular_displacement(i);
1532 t_current_singular_displacement(i) =
1533 t_H(i, j) * t_singular_displacement(j);
1534
1535 t_material_positions(i) += t_current_singular_displacement(i);
1536
1537 ++t_material_positions;
1538 ++t_H;
1539 ++t_singular_displacement;
1540 ++t_inital_singular_displacement;
1541 ++t_current_singular_displacement;
1542 }
1543 }
1544 for (int gg = 0; gg != nb_integration_pts; ++gg) {
1545 t_rho =
1546 1 + t_mwls_material_positions(i) *
1547 t_mwls_material_positions(i); // density is equal to
1548 // 1+x^2+y^2+z^2 (x,y,z coordines)
1549 t_grad_rho(i) = 2 * t_mwls_material_positions(i);
1550 t_grad_grad_rho(0, 0) = 2.;
1551 t_grad_grad_rho(1, 1) = 2.;
1552 t_grad_grad_rho(2, 2) = 2.;
1553
1554 ++t_rho;
1555 ++t_mwls_material_positions;
1556 ++t_grad_rho;
1557 ++t_grad_grad_rho;
1558 }
1559
1561}
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:447
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:346
@ MOFEM_DATA_INCONSISTENCY
Definition: definitions.h:31
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:416
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'j', 3 > j
UBlasMatrix< double > MatrixDouble
Definition: Types.hpp:77
static auto getFTensor0FromVec(ublas::vector< T, A > &data)
Get tensor rank 0 (scalar) form data vector.
Definition: Templates.hpp:135

Member Data Documentation

◆ feSingularPtr

boost::shared_ptr<CrackFrontElement> FractureMechanics::OpGetDensityFieldForTesting::feSingularPtr

Definition at line 766 of file CrackFrontElement.hpp.

◆ matCoordsPtr

boost::shared_ptr<MatrixDouble> FractureMechanics::OpGetDensityFieldForTesting::matCoordsPtr

Definition at line 762 of file CrackFrontElement.hpp.

◆ matGradPosAtPtsPtr

boost::shared_ptr<MatrixDouble> FractureMechanics::OpGetDensityFieldForTesting::matGradPosAtPtsPtr

Definition at line 768 of file CrackFrontElement.hpp.

◆ rhoAtGaussPtsPtr

boost::shared_ptr<VectorDouble> FractureMechanics::OpGetDensityFieldForTesting::rhoAtGaussPtsPtr

Definition at line 763 of file CrackFrontElement.hpp.

◆ rhoGradAtGaussPtsPtr

boost::shared_ptr<MatrixDouble> FractureMechanics::OpGetDensityFieldForTesting::rhoGradAtGaussPtsPtr

Definition at line 764 of file CrackFrontElement.hpp.

◆ rhoGradGradAtGaussPtsPtr

boost::shared_ptr<MatrixDouble> FractureMechanics::OpGetDensityFieldForTesting::rhoGradGradAtGaussPtsPtr

Definition at line 765 of file CrackFrontElement.hpp.

◆ singularDisp

MatrixDouble& FractureMechanics::OpGetDensityFieldForTesting::singularDisp

Definition at line 767 of file CrackFrontElement.hpp.


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