| 478 | void CheckElement (const FiniteElement& fel) const override { } |
| 479 | |
| 480 | void |
| 481 | CalcMatrix (const FiniteElement & inner_fel, |
| 482 | const BaseMappedIntegrationRule & mir, |
| 483 | BareSliceMatrix<double,ColMajor> mat, |
| 484 | LocalHeap & lh) const override |
| 485 | { |
| 486 | static Timer t1("interpolateDiffOp, CalcMat"); |
| 487 | static Timer tm2("interpolateDiffOp, CalcMat m2"); |
| 488 | static Timer t23("interpolateDiffOp, mult 23"); |
| 489 | static Timer t23t("interpolateDiffOp, mult 23t"); |
| 490 | RegionTracer reg(TaskManager::GetThreadId(), t1); |
| 491 | |
| 492 | HeapReset hr(lh); |
| 493 | |
| 494 | const ElementTransformation & trafo = mir.GetTransformation(); |
| 495 | ElementId ei = trafo.GetElementId(); |
| 496 | auto & interpol_fel = fes->GetFE(ei, lh); |
| 497 | // int dim = func->Dimension(); |
| 498 | |
| 499 | /** Calc Element Matrix - shape * dual_shape **/ |
| 500 | FlatMatrix<double> elmat(interpol_fel.GetNDof(), lh); |
| 501 | elmat = 0.0; |
| 502 | bool symmetric_so_far = false; |
| 503 | |
| 504 | size_t nshape = inner_fel.GetNDof(); |
| 505 | FlatMatrix<> m2m3 (elmat.Height(), nshape, lh); |
| 506 | |
| 507 | // auto saveud = nonconst_trafo.userdata; |
| 508 | try |
| 509 | { |
| 510 | RegionTracer reg(TaskManager::GetThreadId(), tm2); |
| 511 | for (auto & sbfi : single_bli) |
| 512 | sbfi->CalcElementMatrixAdd (interpol_fel, trafo, elmat, symmetric_so_far, lh); |
| 513 | |
| 514 | CalcInverse(elmat); |
| 515 | |
| 516 | MixedFiniteElement mfe = (testfunction) |
| 517 | ? MixedFiniteElement (interpol_fel, inner_fel) |
| 518 | : MixedFiniteElement (inner_fel, interpol_fel); |
| 519 | |
| 520 | if (testfunction) |
| 521 | { |
| 522 | FlatMatrix<> m3T(nshape, interpol_fel.GetNDof(), lh); |
| 523 | m3T = 0.0; |
| 524 | for (auto & sbfi : m3_bli) |
| 525 | sbfi->CalcElementMatrixAdd (mfe, trafo, m3T, symmetric_so_far, lh); |
| 526 | RegionTracer reg(TaskManager::GetThreadId(), t23t); |
| 527 | m2m3 = elmat * Trans(m3T); |
| 528 | } |
| 529 | else |
| 530 | { |
| 531 | FlatMatrix<> m3(interpol_fel.GetNDof(), nshape, lh); |
| 532 | m3 = 0.0; |
| 533 | for (auto & sbfi : m3_bli) |
| 534 | sbfi->CalcElementMatrixAdd (mfe, trafo, m3, symmetric_so_far, lh); |
| 535 | RegionTracer reg(TaskManager::GetThreadId(), t23); |
| 536 | m2m3 = elmat * m3; |
| 537 | } |
no test coverage detected