344 {
345
347
348 if (OP::entsPtr) {
349 if (OP::entsPtr->find(this->getFEEntityHandle()) == OP::entsPtr->end())
351 }
352
353#ifndef NDEBUG
354 if (!brokenBaseSideData) {
356 }
357#endif
358
359 auto do_work_rhs = [this](int row_side, EntityType row_type,
362#ifndef NDEBUG
363 auto base = row_data.
getBase();
366 "row base not set properly");
367 }
368#endif
369
370
372 if (!OP::nbRows)
374
375 OP::nbIntegrationPts = OP::getGaussPts().size2();
376
377 OP::nbRowBaseFunctions = OP::getNbOfBaseFunctions(row_data);
378
379 OP::locF.resize(OP::nbRows, false);
380 OP::locF.clear();
381 OP::locMat.resize(OP::nbRows, OP::nbRows, false);
382 OP::locMat.clear();
383 if (OP::nbRows) {
384
385 CHKERR this->iNtegrate(row_data);
386
387 CHKERR this->aSsemble(row_data);
388 }
390 };
391
392 switch (OP::opType) {
393 case OP::OPSPACE:
394 for (auto &bd : *brokenBaseSideData) {
396 boost::shared_ptr<MatrixDouble>(brokenBaseSideData, &bd.getFlux());
398 CHKERR do_work_rhs(bd.getSide(), bd.getType(), bd.getData());
401 }
402 break;
403 default:
405 (std::string("wrong op type ") +
406 OpBaseDerivativesBase::OpTypeNames[OP::opType])
407 .c_str());
408 }
409
411 }
#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.
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
boost::shared_ptr< MatrixDouble > fluxMatPtr
Data on single entity (This is passed as argument to DataOperator::doWork)
FieldApproximationBase & getBase()
Get approximation base.
const VectorInt & getIndices() const
Get global indices of degrees of freedom on entity.