| 399 | } |
| 400 | |
| 401 | virtual void Update (const FESpace & bfes) override |
| 402 | { |
| 403 | auto & fes = dynamic_cast<const FacetFESpace&> (bfes); |
| 404 | |
| 405 | size_t oldnfacet = prol_class.Size(); |
| 406 | size_t nfacet = ma->GetNFacets(); |
| 407 | cout << IM(3) << "update prol, level = " << ma->GetNLevels() << ", nfacet = " << nfacet << endl; |
| 408 | |
| 409 | while (facets_on_level.Size() < ma->GetNLevels()) |
| 410 | facets_on_level.Append(oldnfacet); |
| 411 | facets_on_level[ma->GetNLevels()-1] = nfacet; |
| 412 | |
| 413 | // *testout << "update first_dofs, first_dofs.Size() == " << first_dofs.Size() << ", levels = " << ma->GetNLevels() << endl; |
| 414 | if (first_dofs.Size() < ma->GetNLevels()) |
| 415 | first_dofs += fes.GetFirstFacetDof(); |
| 416 | |
| 417 | // *testout << /* IM(3) << */ "facets_on_level = " << endl << facets_on_level << endl; |
| 418 | |
| 419 | if (ma->GetNLevels() == 1) |
| 420 | { |
| 421 | prol_class.SetSize(nfacet); |
| 422 | prol_class = 0; |
| 423 | return; |
| 424 | } |
| 425 | |
| 426 | CalcMatrices(); |
| 427 | |
| 428 | prol_class.SetSize(nfacet); |
| 429 | |
| 430 | // Array<size_t> verts(4); |
| 431 | for (size_t i = oldnfacet; i < nfacet; i++) |
| 432 | if (auto parents = get<1>(ma->GetParentEdges(i)); parents[1] == -1) |
| 433 | { |
| 434 | auto myverts = ma->GetEdgePNums(i); |
| 435 | auto paverts = ma->GetEdgePNums(parents[0]); |
| 436 | auto minpa = Min(paverts); |
| 437 | prol_class[i] = myverts.Contains(minpa) ? 0 : 1; |
| 438 | } |
| 439 | } |
| 440 | }; |
| 441 | |
| 442 |
no test coverage detected