10#ifndef __FORMSBROKENSPACECONSTRAINTIMPL_HPP__
11#define __FORMSBROKENSPACECONSTRAINTIMPL_HPP__
45 prev_side_fe_ptr->numeredEntFiniteElementPtr->getFEUId();
58 prev_side_fe_ptr->numeredEntFiniteElementPtr;
63 "sideFEName is different");
95 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data);
99 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data);
108template <
typename OpBase>
112 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data)
114 brokenBaseSideData(broken_base_side_data) {}
116template <
typename OpBase>
119 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data)
122 broken_base_side_data) {}
124template <
typename OpBase>
129 brokenBaseSideData->resize(OP::getLoopSize());
131 const auto n_in_the_loop = OP::getNinTheLoop();
132 const auto face_sense = OP::getSkeletonSense();
135 if (face_sense != -1 && face_sense != 1)
139 auto set_data = [&](
auto &side_data) {
140 side_data.getSide() = row_side;
141 side_data.getType() = row_type;
142 side_data.getSense() = face_sense;
143 side_data.getData().sEnse = row_data.
sEnse;
144 side_data.getData().sPace = row_data.
sPace;
145 side_data.getData().bAse = row_data.
bAse;
146 side_data.getData().iNdices = row_data.
iNdices;
147 side_data.getData().localIndices = row_data.
localIndices;
148 side_data.getData().dOfs = row_data.
dOfs;
150 side_data.getData().fieldData = row_data.
fieldData;
153 auto set_base = [&](
auto &side_data) {
154 auto base = side_data.getData().getBase();
155 for (
auto dd = 0; dd != BaseDerivatives::LastDerivative; ++dd) {
156 for (
auto bb = 0; bb !=
LASTBASE; ++bb) {
157 side_data.getData().baseFunctionsAndBaseDerivatives[dd][bb].reset();
161 side_data.getData().baseFunctionsAndBaseDerivatives[dd][base] =
162 boost::make_shared<MatrixDouble>(*base_ptr);
167 set_data((*brokenBaseSideData)[n_in_the_loop]);
168 set_base((*brokenBaseSideData)[n_in_the_loop]);
178 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
179 boost::shared_ptr<MatrixDouble> flux_ptr);
189template <
typename OpBase>
191 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
192 boost::shared_ptr<MatrixDouble> flux_ptr)
193 :
OP(
NOSPACE,
OP::OPSPACE), brokenBaseSideData(broken_base_side_data),
196template <
typename OpBase>
200 auto swap_flux = [&](
auto &side_data) { side_data.getFlux().swap(*fluxPtr); };
201 swap_flux((*brokenBaseSideData)[OP::getNinTheLoop()]);
209 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
210 boost::shared_ptr<MatrixDouble> flux_var_ptr);
220template <
typename OpBase>
222 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
223 boost::shared_ptr<MatrixDouble> flux_var_ptr)
224 :
OP(
NOSPACE,
OP::OPSPACE), brokenBaseSideData(broken_base_side_data),
225 fluxVarPtr(flux_var_ptr) {}
227template <
typename OpBase>
231 auto swap_flux = [&](
auto &side_data) {
232 side_data.getVarFlux().swap(*fluxVarPtr);
234 swap_flux((*brokenBaseSideData)[OP::getNinTheLoop()]);
244 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
245 boost::shared_ptr<Range> ents_ptr =
nullptr)
254 const std::string row_field,
255 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
256 const bool assmb_transpose,
const bool only_transpose,
257 boost::shared_ptr<Range> ents_ptr =
nullptr)
258 :
OP(row_field, row_field,
OP::OPROW, ents_ptr),
273template <
typename OpBase>
280 if (OP::entsPtr->find(this->getFEEntityHandle()) == OP::entsPtr->end())
285 if (!brokenBaseSideData) {
290 auto do_work_rhs = [
this](int, EntityType,
298 OP::nbIntegrationPts = OP::getGaussPts().size2();
300 OP::nbRowBaseFunctions = OP::getNbOfBaseFunctions(row_data);
302 OP::locF.resize(OP::nbRows,
false);
305 CHKERR this->iNtegrate(row_data);
308 CHKERR this->aSsemble(row_data);
312 auto do_work_lhs = [
this](
int row_side,
int col_side, EntityType row_type,
318 auto check_if_assemble_transpose = [&] {
320 if (OP::rowSide != OP::colSide || OP::rowType != OP::colType)
324 }
else if (OP::assembleTranspose) {
330 OP::rowSide = row_side;
331 OP::rowType = row_type;
332 OP::colSide = col_side;
333 OP::colType = col_type;
334 OP::nbCols = col_data.getIndices().size();
335 OP::locMat.resize(OP::nbRows, OP::nbCols,
false);
337 CHKERR this->iNtegrate(row_data, col_data);
339 CHKERR this->aSsemble(row_data, col_data, check_if_assemble_transpose());
343 switch (OP::opType) {
349 OP::nbIntegrationPts = OP::getGaussPts().size2();
350 OP::nbRowBaseFunctions = OP::getNbOfBaseFunctions(row_data);
355 for (
auto &bd : *brokenBaseSideData) {
358 if (!bd.getData().getNSharedPtr(bd.getData().getBase())) {
360 "base functions not set");
367 row_side, bd.getSide(),
370 row_type, bd.getType(),
373 row_data, bd.getData(),
383 for (
auto &bd : *brokenBaseSideData) {
384 CHKERR do_work_rhs(bd.getSide(), bd.getType(), bd.getData(),
391 (std::string(
"wrong op type ") +
400template <
int FIELD_DIM, IntegrationType I,
typename OpBrokenBase>
403template <
int FIELD_DIM,
typename OpBrokenBase>
410 const std::string row_field,
411 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
412 boost::shared_ptr<double> beta_ptr,
const bool assmb_transpose,
413 const bool only_transpose, boost::shared_ptr<Range> ents_ptr =
nullptr)
414 :
OP(row_field, broken_base_side_data, assmb_transpose, only_transpose,
416 scalarBetaPtr(beta_ptr) {}
419 const std::string row_field,
420 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
421 double beta,
const bool assmb_transpose,
const bool only_transpose,
422 boost::shared_ptr<Range> ents_ptr =
nullptr)
424 boost::make_shared<
double>(beta),
425 assmb_transpose, only_transpose, ents_ptr) {}
433template <
int FIELD_DIM,
typename OpBase>
439 auto nb_row_dofs = row_data.
getIndices().size();
440 auto nb_col_dofs = col_data.
getIndices().size();
441 if (!nb_row_dofs || !nb_col_dofs)
447 auto t_w = this->getFTensor0IntegrationWeight();
448 auto t_normal = OpBase::getFTensor1NormalsAtGaussPts();
449 size_t nb_base_functions = col_data.
getN().size2() / 3;
454 "number of dofs not divisible by field dimension");
459 "number of dofs exceeds number of base functions");
465 double triangle_scale = 1.0;
466 if (OP::getFEType() == MBTRI)
467 triangle_scale = 0.5;
470 triangle_scale *= *scalarBetaPtr;
474 for (; cc != nb_col_dofs /
FIELD_DIM; cc++) {
476 for (
auto rr = 0; rr != nb_row_dofs /
FIELD_DIM; ++rr) {
478 (triangle_scale * (t_w * t_row_base)) *
479 (t_normal(
J) * t_col_base(
J));
486 for (; cc < nb_base_functions; ++cc)
493 for (
auto rr = 0; rr != nb_row_dofs /
FIELD_DIM; ++rr) {
494 for (
auto cc = 0; cc != nb_col_dofs /
FIELD_DIM; ++cc) {
506template <
int FIELD_DIM, IntegrationType I,
typename OpBase>
509template <
int FIELD_DIM, IntegrationType I,
typename OpBase>
512template <
int FIELD_DIM,
typename OpBrokenBase>
519 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
520 boost::shared_ptr<MatrixDouble> lagrange_ptr,
521 boost::shared_ptr<double> beta_ptr,
522 boost::shared_ptr<Range> ents_ptr =
nullptr)
523 :
OP(broken_base_side_data, ents_ptr), scalarBetaPtr(beta_ptr),
524 lagrangePtr(lagrange_ptr) {}
527 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
528 boost::shared_ptr<MatrixDouble> lagrange_ptr,
double beta,
529 boost::shared_ptr<Range> ents_ptr =
nullptr)
531 boost::make_shared<
double>(beta),
541template <
int FIELD_DIM,
typename OpBase>
548 auto get_lagrange_at_pts =
555 auto t_w = this->getFTensor0IntegrationWeight();
556 auto t_normal = OpBase::getFTensor1NormalsAtGaussPts();
557 auto t_lagrange_at_pts = get_lagrange_at_pts();
560 auto nb_base_functions = row_data.
getN().size2() / 3;
562 double triangle_scale = 1.0;
563 if (OP::getFEType() == MBTRI)
564 triangle_scale = 0.5;
567 triangle_scale *= *scalarBetaPtr;
570 auto t_vec = getFTensor1FromPtr<FIELD_DIM>(&*OP::locF.data().begin());
573 t_vec(
i) += (triangle_scale * t_w * (t_row_base(
J) * t_normal(
J))) *
574 t_lagrange_at_pts(
i);
578 for (; rr < nb_base_functions; ++rr)
588template <
int FIELD_DIM,
typename OpBase>
595 const std::string row_field,
596 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_side_data_ptr,
597 boost::shared_ptr<double> beta_ptr,
598 boost::shared_ptr<Range> ents_ptr =
nullptr)
599 :
OpBase(row_field, row_field,
OpBase::OPROW, ents_ptr),
600 brokenSideDataPtr(broken_side_data_ptr), scalarBetaPtr(beta_ptr) {}
603 const std::string row_field,
604 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_side_data_ptr,
605 double beta, boost::shared_ptr<Range> ents_ptr =
nullptr)
607 boost::make_shared<
double>(beta),
616template <
int FIELD_DIM,
typename OpBase>
625 OP::locF.resize(row_data.
getIndices().size(),
false);
628 double triangle_scale = 1.0;
629 if (OP::getFEType() == MBTRI)
630 triangle_scale = 0.5;
633 triangle_scale *= *scalarBetaPtr;
635 for (
auto &bd : *brokenSideDataPtr) {
636 auto t_w = this->getFTensor0IntegrationWeight();
637 auto t_normal = OpBase::getFTensor1NormalsAtGaussPts();
639 auto t_flux = getFTensor2FromMat<FIELD_DIM, 3>(bd.getFlux());
640 auto nb_base_functions = row_data.
getN().size2() / 3;
641 auto sense = bd.getSense();
643 auto t_vec = getFTensor1FromPtr<FIELD_DIM>(&*OP::locF.data().begin());
646 t_vec(
i) += (triangle_scale * sense * t_w) * t_row_base * t_normal(
J) *
651 for (; rr < nb_base_functions; ++rr)
662template <
int FIELD_DIM, IntegrationType I,
typename OpBase>
665template <
int FIELD_DIM, IntegrationType I,
typename OpBase>
674 const std::string row_field,
675 boost::shared_ptr<MatrixDouble> tangent1_diff_ptr,
676 boost::shared_ptr<MatrixDouble> tangent2_diff_ptr,
678 boost::shared_ptr<Range> ents_ptr =
nullptr)
679 :
OP(row_field, row_field,
OP::OPROW, ents_ptr),
686 if (!this->timeScalingFun.empty())
687 this->locF *= this->timeScalingFun(this->getFEMethod()->ts_t);
688 if (!this->feScalingFun.empty())
689 this->locF *= this->feScalingFun(this->getFEMethod());
691 auto *vec_ptr = this->locF.data().data();
692 const auto nb_dofs = row_data.
getIndices().size();
693 auto *ind_ptr = row_data.
getIndices().data().data();
698 std::vector<EntityHandle> ents(field_ents.size());
699 std::transform(field_ents.begin(), field_ents.end(), ents.begin(),
700 [](
const auto *fe) { return fe->getEnt(); });
701 if (field_ents.empty())
705 auto &moab = this->getMoab();
708 topo_values.data().data());
709 topo_values += this->locF;
711 topo_values.data().data());
722template <
typename OpBase>
729 const std::string row_field,
730 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_side_data_ptr,
731 boost::shared_ptr<MatrixDouble> lamgrange_ptr,
732 boost::shared_ptr<MatrixDouble> tangent1_ptr,
733 boost::shared_ptr<MatrixDouble> tangent2_ptr,
735 Tag th, boost::shared_ptr<double> dJ_ptr =
nullptr,
736 boost::shared_ptr<Range> ents_ptr =
nullptr)
737 :
OP(row_field, tangent1_ptr, tangent2_ptr, assemble_vec,
th, ents_ptr),
738 brokenSideDataPtr(broken_side_data_ptr), lagrangePtr(lamgrange_ptr),
739 scalarBetaPtr(beta_ptr), dJPtr(dJ_ptr) {}
749template <
typename OpBase>
760 auto get_lagrange_at_pts =
771 &
m(0, 0), &
m(0, 1), &
m(0, 2));
774 double triangle_scale = 1.0;
775 if (OP::getFEType() == MBTRI)
776 triangle_scale = 0.5;
778 double d_loc_J = 0.0;
780 for (
auto &bd : *brokenSideDataPtr) {
781 auto sense = bd.getSense();
784 auto t_w = this->getFTensor0IntegrationWeight();
785 auto t_t1 = get_ftensor1(*this->tangent1DiffPtr);
786 auto t_t2 = get_ftensor1(*this->tangent2DiffPtr);
787 auto t_lagrange_at_pts = get_lagrange_at_pts();
788 auto t_adjoint_lambda = getFTensor2FromMat<3, 3>(bd.getVarFlux());
793 d_loc_J += (sense * triangle_scale * t_w) *
794 (t_lagrange_at_pts(
i) *
795 (t_adjoint_lambda(
i,
J) * t_tmp_normal(
J)));
809 d_loc_J *= *scalarBetaPtr;
816template <
typename OpBase>
823 const std::string row_field,
824 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_side_data_ptr,
825 boost::shared_ptr<MatrixDouble> adjoint_hybrid_ptr,
826 boost::shared_ptr<MatrixDouble> tangent1_ptr,
827 boost::shared_ptr<MatrixDouble> tangent2_ptr,
829 Tag th, boost::shared_ptr<double> dJ_ptr =
nullptr,
830 boost::shared_ptr<Range> ents_ptr =
nullptr)
831 :
OP(row_field, tangent1_ptr, tangent2_ptr, assemble_vec,
th, ents_ptr),
832 brokenSideDataPtr(broken_side_data_ptr),
833 adjointHybridPtr(adjoint_hybrid_ptr), scalarBetaPtr(beta_ptr),
844template <
typename OpBase>
850 auto get_adjoint_lambda_at_pts =
859 OP::locF.resize(row_data.
getIndices().size(),
false);
864 &
m(0, 0), &
m(0, 1), &
m(0, 2));
869 double triangle_scale = 1.0;
870 if (OP::getFEType() == MBTRI)
871 triangle_scale = 0.5;
873 for (
auto &bd : *brokenSideDataPtr) {
874 auto sense = bd.getSense();
881 auto t_w = this->getFTensor0IntegrationWeight();
882 auto t_t1 = get_ftensor1(*this->tangent1DiffPtr);
883 auto t_t2 = get_ftensor1(*this->tangent2DiffPtr);
884 auto t_flux = getFTensor2FromMat<3, 3>(bd.getFlux());
885 auto t_adjoint_lambda_at_pts = get_adjoint_lambda_at_pts();
890 (sense * triangle_scale * t_w) *
891 (t_adjoint_lambda_at_pts(
i) * (t_flux(
i,
J) * t_tmp_normal(
J)));
896 ++t_adjoint_lambda_at_pts;
905 d_loc_J *= *scalarBetaPtr;
#define FTENSOR_INDEX(DIM, I)
#define MoFEMFunctionReturnHot(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 ...
#define CHK_MOAB_THROW(err, msg)
Check error code of MoAB function and throw MoFEM exception.
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'J', DIM1 > J
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)
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
implementation of Data Operators for Forces and Sources
auto type_from_handle(const EntityHandle h)
get type from entity handle
decltype(GetFTensor1FromMatImpl< Tensor_Dim, S, DL, M >::get(std::declval< M & >(), 0, 0)) GetFTensor1FromMatType
MoFEMErrorCode VecSetValues(Vec V, const EntitiesFieldData::EntData &data, const double *ptr, InsertMode iora)
Assemble PETSc vector.
constexpr auto field_name
OpBaseImpl< PETSC, EdgeEleOp > OpBase
FTensor::Index< 'm', 3 > m
EntitiesFieldData::EntData entData
Data on single entity (This is passed as argument to DataOperator::doWork)
FieldSpace sPace
Entity space.
int sEnse
Entity sense (orientation)
VectorDouble fieldData
Field data on entity.
FTensor::Tensor0< FTensor::PackPtr< double *, 1 > > getFTensor0N(const FieldApproximationBase base)
Get base function as Tensor0.
VectorInt localIndices
Local indices on entity.
const VectorFieldEntities & getFieldEntities() const
Get field entities (const version)
VectorInt iNdices
Global indices on entity.
virtual boost::shared_ptr< MatrixDouble > & getNSharedPtr(const FieldApproximationBase base, const BaseDerivatives derivative)
Get shared pointer to base functions with derivatives.
MatrixDouble & getN(const FieldApproximationBase base)
get base functions this return matrix (nb. of rows is equal to nb. of Gauss pts, nb....
virtual int getSense() const
Get entity sense for conforming approximation fields.
auto getFTensor1N(FieldApproximationBase base)
Get base functions for Hdiv/Hcurl spaces.
VectorFieldEntities fieldEntities
Field entities.
VectorDofs dOfs
DoFs on entity.
const VectorInt & getIndices() const
Get global indices of degrees of freedom on entity.
FieldApproximationBase bAse
Field approximation base.
static const char *const OpTypeNames[]
ForcesAndSourcesCore * getPtrFE() const
OpType
Controls loop over entities on element.
const FEMethod * getFEMethod() const
Return raw pointer to Finite Element Method object.
ForcesAndSourcesCore * getSidePtrFE() const
structure to get information from mofem into EntitiesFieldData
typename EleOp::OpType OpType
boost::shared_ptr< Range > entsPtr
Entities on which element is run.
int nbIntegrationPts
number of integration points
boost::shared_ptr< std::vector< BrokenBaseSideData > > brokenBaseSideData
OpBrokenBaseImpl(const std::string row_field, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, const bool assmb_transpose, const bool only_transpose, boost::shared_ptr< Range > ents_ptr=nullptr)
MoFEMErrorCode doWork(int row_side, EntityType row_type, EntitiesFieldData::EntData &row_data)
OpBrokenBaseImpl(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< Range > ents_ptr=nullptr)
Operator for broken loop side.
MoFEMErrorCode doWork(int side, EntityType type, EntitiesFieldData::EntData &data)
Operator for linear form, usually to calculate values on right hand side.
boost::shared_ptr< double > scalarBetaPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data)
OpBrokenSpaceConstrainDFluxImpl(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< MatrixDouble > lagrange_ptr, boost::shared_ptr< double > beta_ptr, boost::shared_ptr< Range > ents_ptr=nullptr)
OpBrokenSpaceConstrainDFluxImpl(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< MatrixDouble > lagrange_ptr, double beta, boost::shared_ptr< Range > ents_ptr=nullptr)
boost::shared_ptr< MatrixDouble > lagrangePtr
OpBrokenSpaceConstrainDHybridImpl(const std::string row_field, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_side_data_ptr, boost::shared_ptr< double > beta_ptr, boost::shared_ptr< Range > ents_ptr=nullptr)
OpBrokenSpaceConstrainDHybridImpl(const std::string row_field, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_side_data_ptr, double beta, boost::shared_ptr< Range > ents_ptr=nullptr)
boost::shared_ptr< double > scalarBetaPtr
boost::shared_ptr< std::vector< BrokenBaseSideData > > brokenSideDataPtr
boost::shared_ptr< double > scalarBetaPtr
OpBrokenSpaceConstrainImpl(const std::string row_field, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< double > beta_ptr, const bool assmb_transpose, const bool only_transpose, boost::shared_ptr< Range > ents_ptr=nullptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
OpBrokenSpaceConstrainImpl(const std::string row_field, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, double beta, const bool assmb_transpose, const bool only_transpose, boost::shared_ptr< Range > ents_ptr=nullptr)
boost::shared_ptr< MatrixDouble > tangent2DiffPtr
boost::shared_ptr< MatrixDouble > tangent1DiffPtr
MoFEMErrorCode aSsemble(EntitiesFieldData::EntData &row_data)
SmartPetscObj< Vec > assembleVec
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 doWork(int row_side, EntityType row_type, EntitiesFieldData::EntData &row_data)
boost::shared_ptr< std::vector< BrokenBaseSideData > > brokenBaseSideData
OpGetBrokenBaseSideData(const ForcesAndSourcesCore::UserDataOperator::OpType op_type, const std::string field_name, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data)
Element used to execute operators on side of the element.
const std::string sideFEName
boost::shared_ptr< E > sideFEPtr
MoFEMErrorCode doWork(int row_side, EntityType row_type, EntitiesFieldData::EntData &row_data)
OpSetFlux(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< MatrixDouble > flux_ptr)
boost::shared_ptr< std::vector< BrokenBaseSideData > > brokenBaseSideData
boost::shared_ptr< MatrixDouble > fluxPtr
MoFEMErrorCode doWork(int row_side, EntityType row_type, EntitiesFieldData::EntData &row_data)
boost::shared_ptr< MatrixDouble > fluxVarPtr
OpSetVarFlux(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< MatrixDouble > flux_var_ptr)
boost::shared_ptr< std::vector< BrokenBaseSideData > > brokenBaseSideData
boost::shared_ptr< std::vector< BrokenBaseSideData > > brokenSideDataPtr
boost::shared_ptr< double > scalarBetaPtr
boost::shared_ptr< MatrixDouble > lagrangePtr
boost::shared_ptr< double > dJPtr
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< double > dJ_ptr=nullptr, boost::shared_ptr< Range > ents_ptr=nullptr)
boost::shared_ptr< double > dJPtr
boost::shared_ptr< double > scalarBetaPtr
boost::shared_ptr< std::vector< BrokenBaseSideData > > brokenSideDataPtr
boost::shared_ptr< MatrixDouble > adjointHybridPtr
OpTopoDerivativeBrokenSpaceConstrainDHybridImpl(const std::string row_field, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_side_data_ptr, boost::shared_ptr< MatrixDouble > adjoint_hybrid_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< double > dJ_ptr=nullptr, boost::shared_ptr< Range > ents_ptr=nullptr)
intrusive_ptr for managing petsc objects