v0.15.5
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
MoFEM::OpTopoDerivativeBrokenSpaceConstrainDFluxImpl< 3, GAUSS, OpBase > Struct Template Reference

#include "src/finite_elements/FormsBrokenSpaceConstraintImpl.hpp"

Inheritance diagram for MoFEM::OpTopoDerivativeBrokenSpaceConstrainDFluxImpl< 3, GAUSS, OpBase >:
[legend]
Collaboration diagram for MoFEM::OpTopoDerivativeBrokenSpaceConstrainDFluxImpl< 3, GAUSS, OpBase >:
[legend]

Public Types

using OP = OpBrokenTopoBase< OpBase >
 
- Public Types inherited from MoFEM::OpBrokenTopoBase< OpBase >
using OP = OpBase
 

Public Member Functions

 OpTopoDerivativeBrokenSpaceConstrainDFluxImpl (const std::string row_field, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_side_data_ptr, boost::shared_ptr< MatrixDouble > lamgrange_ptr, boost::shared_ptr< MatrixDouble > tangent1_ptr, boost::shared_ptr< MatrixDouble > tangent2_ptr, boost::shared_ptr< double > beta_ptr, SmartPetscObj< Vec > assemble_vec, Tag th, boost::shared_ptr< Range > ents_ptr=nullptr)
 

Private Member Functions

MoFEMErrorCode iNtegrate (EntitiesFieldData::EntData &row_data)
 

Private Attributes

boost::shared_ptr< std::vector< BrokenBaseSideData > > brokenSideDataPtr
 
boost::shared_ptr< MatrixDoublelagrangePtr
 
boost::shared_ptr< doublescalarBetaPtr
 

Additional Inherited Members

- Protected Member Functions inherited from MoFEM::OpBrokenTopoBase< OpBase >
 OpBrokenTopoBase (const std::string row_field, boost::shared_ptr< MatrixDouble > tangent1_diff_ptr, boost::shared_ptr< MatrixDouble > tangent2_diff_ptr, SmartPetscObj< Vec > assemble_vec, Tag th, boost::shared_ptr< Range > ents_ptr=nullptr)
 
MoFEMErrorCode aSsemble (EntitiesFieldData::EntData &row_data)
 
- Protected Attributes inherited from MoFEM::OpBrokenTopoBase< OpBase >
boost::shared_ptr< MatrixDoubletangent1DiffPtr
 
boost::shared_ptr< MatrixDoubletangent2DiffPtr
 
SmartPetscObj< Vec > assembleVec
 
Tag thGradTag
 

Detailed Description

template<typename OpBase>
struct MoFEM::OpTopoDerivativeBrokenSpaceConstrainDFluxImpl< 3, GAUSS, OpBase >

Definition at line 687 of file FormsBrokenSpaceConstraintImpl.hpp.

Member Typedef Documentation

◆ OP

Definition at line 690 of file FormsBrokenSpaceConstraintImpl.hpp.

Constructor & Destructor Documentation

◆ OpTopoDerivativeBrokenSpaceConstrainDFluxImpl()

template<typename OpBase >
MoFEM::OpTopoDerivativeBrokenSpaceConstrainDFluxImpl< 3, GAUSS, OpBase >::OpTopoDerivativeBrokenSpaceConstrainDFluxImpl ( const std::string  row_field,
boost::shared_ptr< std::vector< BrokenBaseSideData > >  broken_side_data_ptr,
boost::shared_ptr< MatrixDouble lamgrange_ptr,
boost::shared_ptr< MatrixDouble tangent1_ptr,
boost::shared_ptr< MatrixDouble tangent2_ptr,
boost::shared_ptr< double beta_ptr,
SmartPetscObj< Vec >  assemble_vec,
Tag  th,
boost::shared_ptr< Range ents_ptr = nullptr 
)
inline

Definition at line 692 of file FormsBrokenSpaceConstraintImpl.hpp.

700 : OP(row_field, tangent1_ptr, tangent2_ptr, assemble_vec, th, ents_ptr),
701 brokenSideDataPtr(broken_side_data_ptr), lagrangePtr(lamgrange_ptr),
702 scalarBetaPtr(beta_ptr) {}

Member Function Documentation

◆ iNtegrate()

Definition at line 713 of file FormsBrokenSpaceConstraintImpl.hpp.

714 {
716
717 FTENSOR_INDEX(3, I);
718 FTENSOR_INDEX(3, J);
719 FTENSOR_INDEX(3, i);
720 FTENSOR_INDEX(3, j);
721 FTENSOR_INDEX(3, k);
722 FTENSOR_INDEX(3, m);
725
726 auto get_ftensor1 = [](MatrixDouble &m) {
728 &m(0, 0), &m(0, 1), &m(0, 2));
729 };
730
731 for (auto &bd : *brokenSideDataPtr) {
732
733 auto t_w = this->getFTensor0IntegrationWeight();
734 auto t_lagrange = getFTensor1FromMat<3>(*lagrangePtr);
735 auto t_adjoint_lambda = getFTensor2FromMat<3, 3>(bd.getVarFlux());
736 auto t_t1 = get_ftensor1(*this->tangent1DiffPtr);
737 auto t_t2 = get_ftensor1(*this->tangent2DiffPtr);
738
739 auto t_diff_base = row_data.getFTensor1DiffN<2>();
740 auto nb_base_functions = row_data.getN().size2();
741
742 constexpr auto t_kd = FTensor::Kronecker_Delta<double>();
743
744 for (size_t gg = 0; gg != OpBase::nbIntegrationPts; ++gg) {
745
746 FTensor::Tensor2<double, 3, 3> t_normal_diff;
747 t_normal_diff(j, m) = FTensor::levi_civita(i, j, k) * t_t1(k) *
748 (t_kd(i, m) * t_diff_base(N1));
749 t_normal_diff(j, m) += FTensor::levi_civita(i, j, k) *
750 (t_kd(k, m) * t_diff_base(N0)) * t_t2(i);
751 auto t_vec = getFTensor1FromPtr<3>(&*OP::locF.data().begin());
752 size_t rr = 0;
753 for (; rr != row_data.getIndices().size() / 3; ++rr) {
754 t_vec(m) += (0.5 * t_w) * (t_adjoint_lambda(i, J) * t_lagrange(i)) *
755 t_normal_diff(J, m);
756 ++t_diff_base;
757 ++t_vec;
758 }
759 for (; rr < nb_base_functions; ++rr)
760 ++t_diff_base;
761 ++t_w;
762 ++t_lagrange;
763 ++t_adjoint_lambda;
764 ++t_t1;
765 ++t_t2;
766 }
767 }
768
769 if (scalarBetaPtr)
770 OP::locF *= *scalarBetaPtr;
771
773}
#define FTENSOR_INDEX(DIM, I)
Kronecker Delta class.
#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()
constexpr auto t_kd
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'J', DIM1 > J
Definition level_set.cpp:30
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
UBlasMatrix< double > MatrixDouble
Definition Types.hpp:77
constexpr IntegrationType I
FTensor::Index< 'm', 3 > m
int nbIntegrationPts
number of integration points
boost::shared_ptr< MatrixDouble > tangent2DiffPtr
boost::shared_ptr< MatrixDouble > tangent1DiffPtr

Member Data Documentation

◆ brokenSideDataPtr

template<typename OpBase >
boost::shared_ptr<std::vector<BrokenBaseSideData> > MoFEM::OpTopoDerivativeBrokenSpaceConstrainDFluxImpl< 3, GAUSS, OpBase >::brokenSideDataPtr
private

Definition at line 706 of file FormsBrokenSpaceConstraintImpl.hpp.

◆ lagrangePtr

template<typename OpBase >
boost::shared_ptr<MatrixDouble> MoFEM::OpTopoDerivativeBrokenSpaceConstrainDFluxImpl< 3, GAUSS, OpBase >::lagrangePtr
private

Definition at line 707 of file FormsBrokenSpaceConstraintImpl.hpp.

◆ scalarBetaPtr

template<typename OpBase >
boost::shared_ptr<double> MoFEM::OpTopoDerivativeBrokenSpaceConstrainDFluxImpl< 3, GAUSS, OpBase >::scalarBetaPtr
private

Definition at line 708 of file FormsBrokenSpaceConstraintImpl.hpp.


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