185                                            {
  187 
  188  auto add_domain_base_ops = [&](auto &pipeline) {
  189    auto det_ptr = boost::make_shared<VectorDouble>();
  190    auto jac_ptr = boost::make_shared<MatrixDouble>();
  191    auto inv_jac_ptr = boost::make_shared<MatrixDouble>();
  196  };
  197 
  198  auto add_domain_lhs_ops = [&](auto &pipeline) {
  201        "U", "U", [](double, double, double) -> double { return 1; }));
  206    };
  209  };
  210 
  211  auto add_domain_rhs_ops = [&](auto &pipeline) {
  213    auto grad_u_at_gauss_pts = boost::make_shared<MatrixDouble>();
  214    auto dot2_u_at_gauss_pts = boost::make_shared<VectorDouble>();
  216        "U", grad_u_at_gauss_pts));
  217    pipeline.push_back(
  220        "U", grad_u_at_gauss_pts,
  221        [](double, double, double) -> double { return 1; }));
  223        "U", dot2_u_at_gauss_pts,
  224        [](
const double, 
const double, 
const double) { 
return wave_speed2; }));
 
  226  };
  227 
  228  auto add_boundary_base_ops = [&](auto &pipeline) {};
  229 
  230  auto add_lhs_base_ops = [&](auto &pipeline) {
  233        "U", "U", [](const double, const double, const double) { return 1; }));
  235  };
  236 
  237  auto add_rhs_base_ops = [&](auto &pipeline) {
  239    auto u_at_gauss_pts = boost::make_shared<VectorDouble>();
  240    auto boundary_function = [&](const double x, const double y,
  241                                 const double z) {
  244      const double t = fe_rhs->ts_t;
 
  245      if ((
t <= 0.5) && (x < 0.) && (y > -1. / 3) && (y < 1. / 3))
 
  246        return sin(4 * M_PI * 
t);
 
  247      else
  248        return 0.;
  249    };
  252        "U", u_at_gauss_pts,
  253        [](const double, const double, const double) { return 1; }));
  256  };
  257 
  259  add_domain_base_ops(pipeline_mng->getOpDomainLhsPipeline());
  260  add_domain_base_ops(pipeline_mng->getOpDomainRhsPipeline());
  261  add_domain_lhs_ops(pipeline_mng->getOpDomainLhsPipeline());
  262  add_domain_rhs_ops(pipeline_mng->getOpDomainRhsPipeline());
  263 
  264  add_boundary_base_ops(pipeline_mng->getOpBoundaryLhsPipeline());
  265  add_boundary_base_ops(pipeline_mng->getOpBoundaryRhsPipeline());
  266  add_lhs_base_ops(pipeline_mng->getOpBoundaryLhsPipeline());
  267  add_rhs_base_ops(pipeline_mng->getOpBoundaryRhsPipeline());
  268 
  270}
#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()
OpCalculateScalarFieldValuesFromPetscVecImpl< PetscData::CTX_SET_X_TT > OpCalculateScalarFieldValuesDotDot
constexpr double t
plate stiffness
Get field gradients at integration pts for scalar field rank 0, i.e. vector field.
Specialization for double precision scalar field values calculation.
Operator for inverting matrices at integration points.
Set indices on entities on finite element.
Set inverse jacobian to base functions.
Modify integration weights on face to take into account higher-order geometry.
Unset indices on entities on finite element.
PipelineManager interface.
boost::shared_ptr< FEMethod > & getDomainLhsFE()
Get domain left-hand side finite element.
boost::shared_ptr< FEMethod > & getBoundaryRhsFE()
Get boundary right-hand side finite element.
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.
boost::shared_ptr< std::vector< unsigned char > > boundaryMarker
FormsIntegrators< BoundaryEleOp >::Assembly< PETSC >::LinearForm< GAUSS >::OpBaseTimesScalar< 1 > OpBoundaryTimeScalarField
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::BiLinearForm< GAUSS >::OpMass< 1, 1 > OpDomainMass
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::LinearForm< GAUSS >::OpBaseTimesScalar< 1 > OpDomainTimesScalarField
constexpr double wave_speed2
FormsIntegrators< BoundaryEleOp >::Assembly< PETSC >::LinearForm< GAUSS >::OpSource< 1, 1 > OpBoundarySource
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::LinearForm< GAUSS >::OpGradTimesTensor< 1, 1, SPACE_DIM > OpDomainGradTimesVec
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::BiLinearForm< GAUSS >::OpGradGrad< 1, 1, SPACE_DIM > OpDomainGradGrad
FormsIntegrators< BoundaryEleOp >::Assembly< PETSC >::BiLinearForm< GAUSS >::OpMass< 1, 1 > OpBoundaryMass