v0.15.5
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
MoFEM::OpTopoDerivativeBrokenSpaceConstrainDHybridImpl< 3, GAUSS, OpBase > Struct Template Reference
Inheritance diagram for MoFEM::OpTopoDerivativeBrokenSpaceConstrainDHybridImpl< 3, GAUSS, OpBase >:
[legend]
Collaboration diagram for MoFEM::OpTopoDerivativeBrokenSpaceConstrainDHybridImpl< 3, GAUSS, OpBase >:
[legend]

Public Types

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

Public Member Functions

 OpTopoDerivativeBrokenSpaceConstrainDHybridImpl (const std::string row_field, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_side_data_ptr, boost::shared_ptr< MatrixDouble > adjoint_lambda_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)
 
- Public Member Functions inherited from MoFEM::OpBrokenTopoBase< OpBase >
 OpBrokenTopoBase (boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< MatrixDouble > adjoint_lambda_ptr, boost::shared_ptr< MatrixDouble > tangent1_diff_ptr, boost::shared_ptr< MatrixDouble > tangent2_diff_ptr, boost::shared_ptr< double > beta_ptr, SmartPetscObj< Vec > assemble_vec, Tag th, boost::shared_ptr< Range > ents_ptr=nullptr)
 
 OpBrokenTopoBase (const std::string row_field, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_side_data_ptr, boost::shared_ptr< MatrixDouble > adjoint_lambda_ptr, boost::shared_ptr< MatrixDouble > tangent1_ptr, boost::shared_ptr< MatrixDouble > tangent2_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< doublescalarBetaPtr
 
boost::shared_ptr< std::vector< BrokenBaseSideData > > brokenSideDataPtr
 

Additional Inherited Members

- Protected Member Functions inherited from MoFEM::OpBrokenTopoBase< OpBase >
MoFEMErrorCode aSsemble (EntitiesFieldData::EntData &row_data)
 
- Protected Attributes inherited from MoFEM::OpBrokenTopoBase< OpBase >
boost::shared_ptr< MatrixDoubleadjointLambdaPtr
 
boost::shared_ptr< MatrixDoubletangent1DiffPtr
 
boost::shared_ptr< MatrixDoubletangent2DiffPtr
 
SmartPetscObj< Vec > assembleVec
 
Tag thGradTag
 

Detailed Description

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

Definition at line 744 of file FormsBrokenSpaceConstraintImpl.hpp.

Member Typedef Documentation

◆ OP

Definition at line 747 of file FormsBrokenSpaceConstraintImpl.hpp.

Constructor & Destructor Documentation

◆ OpTopoDerivativeBrokenSpaceConstrainDHybridImpl()

template<typename OpBase >
MoFEM::OpTopoDerivativeBrokenSpaceConstrainDHybridImpl< 3, GAUSS, OpBase >::OpTopoDerivativeBrokenSpaceConstrainDHybridImpl ( const std::string  row_field,
boost::shared_ptr< std::vector< BrokenBaseSideData > >  broken_side_data_ptr,
boost::shared_ptr< MatrixDouble adjoint_lambda_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 749 of file FormsBrokenSpaceConstraintImpl.hpp.

757 : OpBrokenTopoBase<OpBase>(row_field, row_field, OpBase::OPROW, ents_ptr),
758 brokenSideDataPtr(broken_side_data_ptr), scalarBetaPtr(beta_ptr) {}

Member Function Documentation

◆ iNtegrate()

Definition at line 768 of file FormsBrokenSpaceConstraintImpl.hpp.

768 {
770
771 FTENSOR_INDEX(3, i);
772 FTENSOR_INDEX(3, j);
773 FTENSOR_INDEX(3, k);
774 FTENSOR_INDEX(3, m);
775 FTENSOR_INDEX(3, J);
776 FTENSOR_INDEX(3, K);
777 FTENSOR_INDEX(3, L);
778 FTENSOR_INDEX(3, M);
779
782
783 OP::locF.resize(row_data.getIndices().size(), false);
784 OP::locF.clear();
785
786 for (auto &bd : *brokenSideDataPtr) {
787 auto t_w = this->getFTensor0IntegrationWeight();
788 auto t_t1 = getFTensor1FromMat<3>(*tangent1Ptr);
789 auto t_t2 = getFTensor1FromMat<3>(*tangent2Ptr);
790 auto t_flux = getFTensor2FromMat<3, 3>(bd.getFlux());
791 auto t_adjoint_lambda = getFTensor1FromMat<3>(*adjointLambdaPtr);
792
793 auto nb_base_functions = row_data.getN().size2();
794 auto sense = bd.getSense();
795 constexpr auto t_kd = FTensor::Kronecker_Delta<double>();
796
797 auto t_diff_base = row_data.getFTensor1DiffN<2>();
798 for (size_t gg = 0; gg != OpBase::nbIntegrationPts; ++gg) {
799 auto t_vec = getFTensor1FromPtr<3>(&*OP::locF.data().begin());
800 size_t rr = 0;
801 for (; rr != row_data.getIndices().size() / 3; ++rr) {
802 FTensor::Tensor2<double, 3, 3> t_normal_diff;
803 t_normal_diff(j, m) =
804 FTensor::levi_civita(i, j, k) * t_t1(k) *
805 (t_kd(i, m) * t_diff_base(N1));
806 t_normal_diff(j, m) +=
807 FTensor::levi_civita(i, j, k) * (t_kd(k, m) * t_diff_base(N0)) *
808 t_t2(i);
809
810 t_vec(m) += (sense * 0.5 * t_w) * (t_adjoint_lambda(i) * t_flux(i, J)) *
811 t_normal_diff(J, m);
812
813 ++t_diff_base;
814 ++t_vec;
815 }
816 for (; rr < nb_base_functions; ++rr)
817 ++t_diff_base;
818 ++t_w;
819 ++t_t1;
820 ++t_t2;
821 ++t_flux;
822 ++t_adjoint_lambda;
823 }
824 }
825
826 if (scalarBetaPtr)
827 OP::locF *= *scalarBetaPtr;
828
830}
#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
FTensor::Index< 'm', 3 > m
int nbIntegrationPts
number of integration points
boost::shared_ptr< MatrixDouble > adjointLambdaPtr

Member Data Documentation

◆ brokenSideDataPtr

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

Definition at line 762 of file FormsBrokenSpaceConstraintImpl.hpp.

◆ scalarBetaPtr

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

Definition at line 761 of file FormsBrokenSpaceConstraintImpl.hpp.


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