276 {
278
282 }
283
284#ifndef NDEBUG
287 }
288#endif
289
290 auto do_work_rhs = [
this](
int, EntityType,
291 EntitiesFieldData::EntData &row_data, int sense) {
293
297
299
301
304
306
310 };
311
312 auto do_work_lhs = [this](int row_side, int col_side, EntityType row_type,
313 EntityType col_type,
314 EntitiesFieldData::EntData &row_data,
315 EntitiesFieldData::EntData &col_data, int sense) {
317
318 auto check_if_assemble_transpose = [&] {
319 if (this->sYmm) {
321 return true;
322 else
323 return false;
325 return true;
326 }
327 return false;
328 };
329
339 CHKERR this->
aSsemble(row_data, col_data, check_if_assemble_transpose());
341 };
342
343 switch (OP::opType) {
344 case OP::OPROW:
345
351
354
356
357#ifndef NDEBUG
358 if (!bd.getData().getNSharedPtr(bd.getData().getBase())) {
360 "base functions not set");
361 }
362#endif
363
365
366
367 row_side, bd.getSide(),
368
369
370 row_type, bd.getType(),
371
372
373 row_data, bd.getData(),
374
375
376 bd.getSense()
377
378 );
379 }
380
381 break;
382 case OP::OPSPACE:
384 CHKERR do_work_rhs(bd.getSide(), bd.getType(), bd.getData(),
385 bd.getSense());
386 }
387 break;
388 default:
391 (std::string("wrong op type ") +
393 OP::opType)])
394 .c_str());
395 }
396
398}
#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.
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
static const char *const OpTypeNames[]
VectorDouble locF
local entity vector
int rowSide
row side number
int colSide
column side number
int nbRows
number of dofs on rows
EntityType colType
column type
int nbIntegrationPts
number of integration points
virtual MoFEMErrorCode aSsemble(EntData &row_data, EntData &col_data, const bool trans)
Assemble local matrix into global matrix.
MatrixDouble locMat
local entity block matrix
virtual size_t getNbOfBaseFunctions(EntitiesFieldData::EntData &data)
Get number of base functions.
virtual MoFEMErrorCode iNtegrate(EntData &, EntData &)
Integrate grad-grad operator.
int nbCols
number if dof on column
int nbRowBaseFunctions
number or row base functions
EntityType rowType
row type