224 {
226
230 }
231
232#ifndef NDEBUG
235 }
236#endif
237
238 auto do_work_rhs = [this](int row_side, EntityType row_type,
239 EntitiesFieldData::EntData &row_data, int sense) {
241
245
247
249
252
254
258 };
259
260 auto do_work_lhs = [this](int row_side, int col_side, EntityType row_type,
261 EntityType col_type,
262 EntitiesFieldData::EntData &row_data,
263 EntitiesFieldData::EntData &col_data, int sense) {
265
266 auto check_if_assemble_transpose = [&] {
267 if (this->sYmm) {
269 return true;
270 else
271 return false;
273 return true;
274 }
275 return false;
276 };
277
287 CHKERR this->
aSsemble(row_data, col_data, check_if_assemble_transpose());
289 };
290
291 switch (OP::opType) {
292 case OP::OPROW:
293
299
302
304
305#ifndef NDEBUG
306 if (bd.getData().getSpace() !=
HDIV && bd.getData().getSpace() !=
HCURL) {
308 (std::string("Expect Hdiv or Hcurl space but received ") +
310 .c_str());
311 }
312 if (!bd.getData().getNSharedPtr(bd.getData().getBase())) {
314 "base functions not set");
315 }
316#endif
317
319
320
321 row_side, bd.getSide(),
322
323
324 row_type, bd.getType(),
325
326
327 row_data, bd.getData(),
328
329
330 bd.getSense()
331
332 );
333 }
334
335 break;
336 case OP::OPSPACE:
338 CHKERR do_work_rhs(bd.getSide(), bd.getType(), bd.getData(),
339 bd.getSense());
340 }
341 break;
342 default:
344 (std::string("wrong op type ") +
346 .c_str());
347 }
348
350}
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
@ HCURL
field with continuous tangents
@ HDIV
field with continuous normal traction
static const char *const FieldSpaceNames[]
#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)
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