219 {
221
222 auto add_domain_base_ops = [&](auto &pipeline) {
223 auto det_ptr = boost::make_shared<VectorDouble>();
224 auto jac_ptr = boost::make_shared<MatrixDouble>();
225 auto inv_jac_ptr = boost::make_shared<MatrixDouble>();
230 };
231
232 auto add_domain_lhs_ops = [&](auto &pipeline) {
235 "U",
"U", [](
double,
double,
double) ->
double {
return k; }));
239 return c * fe_domain_lhs->ts_a;
240 };
243 };
244
245 auto add_domain_rhs_ops = [&](auto &pipeline) {
247 auto grad_u_at_gauss_pts = boost::make_shared<MatrixDouble>();
248 auto dot_u_at_gauss_pts = boost::make_shared<VectorDouble>();
250 "U", grad_u_at_gauss_pts));
251 pipeline.push_back(
254 "U", grad_u_at_gauss_pts,
255 [](
double,
double,
double) ->
double {
return k; }));
257 "U", dot_u_at_gauss_pts,
258 [](
const double,
const double,
const double) {
return c; }));
259 auto source_term = [&](const double x, const double y, const double z) {
262 const auto t = fe_domain_lhs->ts_t;
263 return 1e1 * pow(M_E, -M_PI * M_PI *
t) * sin(1. * M_PI * x) *
264 sin(2. * M_PI * y);
265 };
268 };
269
270 auto add_boundary_base_ops = [&](auto &pipeline) {};
271
272 auto add_lhs_base_ops = [&](auto &pipeline) {
275 "U",
"U", [](
const double,
const double,
const double) {
return c; }));
277 };
278 auto add_rhs_base_ops = [&](auto &pipeline) {
280 auto u_at_gauss_pts = boost::make_shared<VectorDouble>();
281 auto boundary_function = [&](const double x, const double y,
282 const double z) {
285 const auto t = fe_rhs->ts_t;
286 return 0;
287
288
289 };
292 "U", u_at_gauss_pts,
293 [](
const double,
const double,
const double) {
return c; }));
296 };
297
299 add_domain_base_ops(pipeline_mng->getOpDomainLhsPipeline());
300 add_domain_base_ops(pipeline_mng->getOpDomainRhsPipeline());
301 add_domain_lhs_ops(pipeline_mng->getOpDomainLhsPipeline());
302 add_domain_rhs_ops(pipeline_mng->getOpDomainRhsPipeline());
303
304 add_boundary_base_ops(pipeline_mng->getOpBoundaryLhsPipeline());
305 add_boundary_base_ops(pipeline_mng->getOpBoundaryRhsPipeline());
306 add_lhs_base_ops(pipeline_mng->getOpBoundaryLhsPipeline());
307 add_rhs_base_ops(pipeline_mng->getOpBoundaryRhsPipeline());
308
310}
#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()
FormsIntegrators< BoundaryEleOp >::Assembly< PETSC >::LinearForm< GAUSS >::OpBaseTimesScalarField< 1 > OpBoundaryTimeScalarField
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::BiLinearForm< GAUSS >::OpMass< 1, 1 > OpDomainMass
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::LinearForm< GAUSS >::OpBaseTimesScalarField< 1 > OpDomainTimesScalarField
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
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::LinearForm< GAUSS >::OpSource< 1, 1 > OpDomainSource
OpCalculateScalarFieldValuesFromPetscVecImpl< PetscData::CTX_SET_X_T > OpCalculateScalarFieldValuesDot
constexpr double t
plate stiffness
boost::shared_ptr< std::vector< unsigned char > > boundaryMarker
Get field gradients at integration pts for scalar filed rank 0, i.e. vector field.
Get value at integration points for scalar field.
Set indices on entities on finite element.
Set inverse jacobian to base functions.
PipelineManager interface.
boost::shared_ptr< FEMethod > & getDomainLhsFE()
boost::shared_ptr< FEMethod > & getBoundaryRhsFE()
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface refernce to pointer of interface.