312 {
313
315
316 if (OP::entsPtr) {
317 if (OP::entsPtr->find(this->getFEEntityHandle()) == OP::entsPtr->end())
319 }
320
321#ifndef NDEBUG
322 if (!brokenBaseSideData) {
324 }
325#endif
326
327 auto do_work_rhs = [this](int row_side, EntityType row_type,
330#ifndef NDEBUG
331 auto base = row_data.
getBase();
334 "row base not set properly");
335 }
336#endif
337
338
340 if (!OP::nbRows)
342
343 OP::nbIntegrationPts = OP::getGaussPts().size2();
344
345 OP::nbRowBaseFunctions = OP::getNbOfBaseFunctions(row_data);
346
347 OP::locF.resize(OP::nbRows, false);
348 OP::locF.clear();
349 OP::locMat.resize(OP::nbRows, OP::nbRows, false);
350 OP::locMat.clear();
351 if (OP::nbRows) {
352
353 CHKERR this->iNtegrate(row_data);
354
355 CHKERR this->aSsemble(row_data);
356 }
358 };
359
360 switch (OP::opType) {
361 case OP::OPSPACE:
362 for (auto &bd : *brokenBaseSideData) {
364 boost::shared_ptr<MatrixDouble>(brokenBaseSideData, &bd.getFlux());
366 CHKERR do_work_rhs(bd.getSide(), bd.getType(), bd.getData());
369 }
370 break;
371 default:
373 (std::string("wrong op type ") +
374 OpBaseDerivativesBase::OpTypeNames[OP::opType])
375 .c_str());
376 }
377
379 }
#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.