295 {
296
298
299 if (OP::entsPtr) {
300 if (OP::entsPtr->find(this->getFEEntityHandle()) == OP::entsPtr->end())
302 }
303
304#ifndef NDEBUG
305 if (!brokenBaseSideData) {
307 }
308#endif
309
310 auto do_work_rhs = [this](int row_side, EntityType row_type,
313#ifndef NDEBUG
314 auto base = row_data.
getBase();
317 "row base not set properly");
318 }
319#endif
320
321
323 if (!OP::nbRows)
325
326 OP::nbIntegrationPts = OP::getGaussPts().size2();
327
328 OP::nbRowBaseFunctions = OP::getNbOfBaseFunctions(row_data);
329
330 OP::locF.resize(OP::nbRows, false);
331 OP::locF.clear();
332 OP::locMat.resize(OP::nbRows, OP::nbRows, false);
333 OP::locMat.clear();
334 if (OP::nbRows) {
335
337
338 CHKERR this->aSsemble(row_data);
339 }
341 };
342
343 switch (OP::opType) {
344 case OP::OPSPACE:
345 for (auto &bd : *brokenBaseSideData) {
347 boost::shared_ptr<MatrixDouble>(brokenBaseSideData, &bd.getFlux());
349 CHKERR do_work_rhs(bd.getSide(), bd.getType(), bd.getData());
352 }
353 break;
354 default:
356 (std::string("wrong op type ") +
357 OpBaseDerivativesBase::OpTypeNames[OP::opType])
358 .c_str());
359 }
360
362 }
#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.
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data)
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.