v0.14.0
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
SimpleContactProblem::OpGetNormalSlaveALE Struct Reference

#include <users_modules/mortar_contact/src/SimpleContact.hpp>

Inheritance diagram for SimpleContactProblem::OpGetNormalSlaveALE:
[legend]
Collaboration diagram for SimpleContactProblem::OpGetNormalSlaveALE:
[legend]

Public Member Functions

 OpGetNormalSlaveALE (const string field_name, boost::shared_ptr< CommonDataSimpleContact > common_data_contact)
 
MoFEMErrorCode doWork (int side, EntityType type, EntData &data)
 Evaluates unit normal vector to the slave surface vector based on material base coordinates. More...
 

Public Attributes

boost::shared_ptr< CommonDataSimpleContactcommonDataSimpleContact
 

Detailed Description

Definition at line 2645 of file SimpleContact.hpp.

Constructor & Destructor Documentation

◆ OpGetNormalSlaveALE()

SimpleContactProblem::OpGetNormalSlaveALE::OpGetNormalSlaveALE ( const string  field_name,
boost::shared_ptr< CommonDataSimpleContact common_data_contact 
)
inline

Definition at line 2648 of file SimpleContact.hpp.

2651 : ContactOp(field_name, UserDataOperator::OPCOL, ContactOp::FACESLAVE),
2652 commonDataSimpleContact(common_data_contact) {}
constexpr auto field_name
boost::shared_ptr< CommonDataSimpleContact > commonDataSimpleContact
ContactPrismElementForcesAndSourcesCore::UserDataOperator ContactOp

Member Function Documentation

◆ doWork()

MoFEMErrorCode SimpleContactProblem::OpGetNormalSlaveALE::doWork ( int  side,
EntityType  type,
EntData data 
)

Evaluates unit normal vector to the slave surface vector based on material base coordinates.

Computes normal vector based on material base coordinates based on mesh (moab vertices) coordinates:

\[ {\mathbf N}^{(1)}({\mathbf X}^{(1)}(\xi, \eta)) = \frac{\partial\mathbf{X}^{(1)}(\xi, \eta)}{\partial\xi}\times\frac{\partial \mathbf{X}^{(1)}(\xi, \eta)} {\partial\eta} \]

where \({\mathbf X}^{(1)}(\xi, \eta)\) is the vector of material coordinates at the gauss point on slave surface with parent coordinates \(\xi\) and \(\eta\) evaluated according to

\[ {\mathbf X}^{(1)}(\xi, \eta) = \sum\limits^{3}_{i = 1} N_i(\xi, \eta){\overline{\mathbf X}}^{(1)}_i \]

where \( N_i \) is the shape function corresponding to the \( i-{\rm{th}}\) degree of freedom in the material configuration \({\overline{\mathbf X}}^{(1)}_i\) corresponding to the 3 nodes of the triangular slave face.

Definition at line 3337 of file SimpleContact.cpp.

3338 {
3340
3341 if (data.getFieldData().size() == 0)
3343
3344 if (type != MBVERTEX)
3346
3350
3351 commonDataSimpleContact->normalVectorSlavePtr->resize(3, false);
3352
3353 auto get_tensor_vec = [](VectorDouble &n) {
3354 return FTensor::Tensor1<double *, 3>(&n(0), &n(1), &n(2));
3355 };
3356
3357 auto normal_original_slave =
3358 get_tensor_vec(*commonDataSimpleContact->normalVectorSlavePtr);
3359
3360 commonDataSimpleContact->tangentOneVectorSlavePtr->resize(3, false);
3361 commonDataSimpleContact->tangentOneVectorSlavePtr->clear();
3362
3363 commonDataSimpleContact->tangentTwoVectorSlavePtr->resize(3, false);
3364 commonDataSimpleContact->tangentTwoVectorSlavePtr->clear();
3365
3366 auto tangent_0_slave =
3367 get_tensor_vec(*commonDataSimpleContact->tangentOneVectorSlavePtr);
3368 auto tangent_1_slave =
3369 get_tensor_vec(*commonDataSimpleContact->tangentTwoVectorSlavePtr);
3370
3371 auto t_N = data.getFTensor1DiffN<2>(0, 0);
3372 auto t_dof = data.getFTensor1FieldData<3>();
3373
3374 for (unsigned int dd = 0; dd != 3; ++dd) {
3375 tangent_0_slave(i) += t_dof(i) * t_N(0);
3376 tangent_1_slave(i) += t_dof(i) * t_N(1);
3377 ++t_dof;
3378 ++t_N;
3379 }
3380
3381 normal_original_slave(i) =
3382 FTensor::levi_civita(i, j, k) * tangent_0_slave(j) * tangent_1_slave(k);
3383
3384 const double normal_length =
3385 sqrt(normal_original_slave(i) * normal_original_slave(i));
3386 normal_original_slave(i) = normal_original_slave(i) / normal_length;
3387
3388 commonDataSimpleContact->areaSlave = 0.5 * normal_length;
3389
3391}
#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
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:416
FTensor::Index< 'n', SPACE_DIM > n
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
constexpr std::enable_if<(Dim0<=2 &&Dim1<=2), Tensor2_Expr< Levi_Civita< T >, T, Dim0, Dim1, i, j > >::type levi_civita(const Index< i, Dim0 > &, const Index< j, Dim1 > &)
levi_civita functions to make for easy adhoc use
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
FTensor::Tensor1< FTensor::PackPtr< double *, Tensor_Dim >, Tensor_Dim > getFTensor1DiffN(const FieldApproximationBase base)
Get derivatives of base functions.
const VectorDouble & getFieldData() const
get dofs values
FTensor::Tensor1< FTensor::PackPtr< double *, Tensor_Dim >, Tensor_Dim > getFTensor1FieldData()
Return FTensor of rank 1, i.e. vector from filed data coeffinects.

Member Data Documentation

◆ commonDataSimpleContact

boost::shared_ptr<CommonDataSimpleContact> SimpleContactProblem::OpGetNormalSlaveALE::commonDataSimpleContact

Definition at line 2647 of file SimpleContact.hpp.


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