| 562 | |
| 563 | |
| 564 | void H1HighOrderFESpace :: Update() |
| 565 | { |
| 566 | static Timer timer ("H1HighOrderFESpace::Update"); |
| 567 | // static Timer timer1 ("H1HighOrderFESpace::Update 1"); |
| 568 | // static Timer timer2 ("H1HighOrderFESpace::Update 2"); |
| 569 | // static Timer timer3 ("H1HighOrderFESpace::Update 3"); |
| 570 | RegionTimer reg(timer); |
| 571 | |
| 572 | // timer1.Start(); |
| 573 | FESpace::Update(); |
| 574 | |
| 575 | if (order_policy == CONSTANT_ORDER) |
| 576 | fixed_order = true; |
| 577 | |
| 578 | TORDER maxorder = 0; |
| 579 | TORDER minorder = 99; |
| 580 | |
| 581 | if (low_order_space) low_order_space -> Update(); |
| 582 | |
| 583 | bool first_update = GetTimeStamp() < ma->GetTimeStamp(); |
| 584 | if (first_update) timestamp = NGS_Object::GetNextTimeStamp(); |
| 585 | |
| 586 | int dim = ma->GetDimension(); |
| 587 | size_t nv = ma->GetNV(); |
| 588 | size_t ned = (dim <= 1) ? 0 : ma->GetNEdges(); |
| 589 | size_t nfa = (dim <= 2) ? 0 : ma->GetNFaces(); |
| 590 | size_t ne = ma->GetNE(); |
| 591 | |
| 592 | if (first_update) |
| 593 | { |
| 594 | used_edge.SetSize(ned); |
| 595 | used_face.SetSize(nfa); |
| 596 | used_vertex.SetSize(nv); |
| 597 | |
| 598 | used_edge = false; |
| 599 | used_face = false; |
| 600 | used_vertex = false; |
| 601 | |
| 602 | // for (FESpace::Element el : Elements (VOL)) |
| 603 | |
| 604 | // for (auto vb : { VOL, BND, BBND }) |
| 605 | for (auto vb : Range(VOL, VorB(dim+1))) |
| 606 | ParallelFor |
| 607 | (ma->GetNE(vb), [&] (size_t nr) |
| 608 | { |
| 609 | ElementId ei(vb, nr); |
| 610 | Ngs_Element el = (*ma)[ei]; |
| 611 | |
| 612 | // if (!DefinedOn (el)) return; |
| 613 | if (DefinedOnX (el).IsTrue()) |
| 614 | { |
| 615 | used_vertex[el.Vertices()] = true; |
| 616 | if (dim >= 2) used_edge[el.Edges()] = true; |
| 617 | if (dim == 3) used_face[el.Faces()] = true; |
| 618 | } |
| 619 | }); |
| 620 | |
| 621 | /* |
nothing calls this directly
no test coverage detected