222 {
224
228 }
229
230#ifndef NDEBUG
233 }
234#endif
235
236 auto do_work_rhs = [this](int row_side, EntityType row_type,
237 EntitiesFieldData::EntData &row_data, int sense) {
239
243
245
247
250
252
256 };
257
258 auto do_work_lhs = [this](int row_side, int col_side, EntityType row_type,
259 EntityType col_type,
260 EntitiesFieldData::EntData &row_data,
261 EntitiesFieldData::EntData &col_data, int sense) {
263
264 auto check_if_assemble_transpose = [&] {
265 if (this->sYmm) {
267 return true;
268 else
269 return false;
271 return true;
272 }
273 return false;
274 };
275
285 CHKERR this->
aSsemble(row_data, col_data, check_if_assemble_transpose());
287 };
288
289 switch (OP::opType) {
290 case OP::OPROW:
291
297
300
302
303#ifndef NDEBUG
304 if (!bd.getData().getNSharedPtr(bd.getData().getBase())) {
306 "base functions not set");
307 }
308#endif
309
311
312
313 row_side, bd.getSide(),
314
315
316 row_type, bd.getType(),
317
318
319 row_data, bd.getData(),
320
321
322 bd.getSense()
323
324 );
325 }
326
327 break;
328 case OP::OPSPACE:
330 CHKERR do_work_rhs(bd.getSide(), bd.getType(), bd.getData(),
331 bd.getSense());
332 }
333 break;
334 default:
336 (std::string("wrong op type ") +
338 .c_str());
339 }
340
342}
#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.
virtual MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
Integrate grad-grad operator.
MatrixDouble locMat
local entity block matrix
virtual size_t getNbOfBaseFunctions(EntitiesFieldData::EntData &data)
Get number of base functions.
int nbCols
number if dof on column
int nbRowBaseFunctions
number or row base functions
EntityType rowType
row type