| 4655 | |
| 4656 | template<class SCAL> |
| 4657 | void S_BilinearForm<SCAL> :: AddMatrixTP(SCAL val, |
| 4658 | const BaseVector & x, |
| 4659 | BaseVector & y, LocalHeap & clh) const |
| 4660 | { |
| 4661 | static Timer timerall ("Apply Matrix1 (TP) - all"); |
| 4662 | static Timer timervol ("Apply Matrix1 (TP) - volume"); |
| 4663 | static Timer timerfac1 ("Apply Matrix1 (TP) - facets 1"); |
| 4664 | static Timer timerfac2 ("Apply Matrix1 (TP) - facets 2"); |
| 4665 | RegionTimer rall(timerall); |
| 4666 | // bool hasbound = false; |
| 4667 | bool hasinner = false; |
| 4668 | bool hasskeletonbound = false; |
| 4669 | bool hasskeletoninner = false; |
| 4670 | int volumeintegrals = -1; |
| 4671 | for(int j=0;j<parts.Size();j++) |
| 4672 | { |
| 4673 | const BilinearFormIntegrator & bfi = *GetIntegrator(j); |
| 4674 | if (bfi.BoundaryForm()) |
| 4675 | { |
| 4676 | if (bfi.SkeletonForm()) |
| 4677 | hasskeletonbound = true; |
| 4678 | // else |
| 4679 | // hasbound = true; |
| 4680 | } |
| 4681 | else |
| 4682 | if (bfi.SkeletonForm()) |
| 4683 | hasskeletoninner = true; |
| 4684 | else |
| 4685 | { |
| 4686 | hasinner = true; |
| 4687 | volumeintegrals = j; |
| 4688 | } |
| 4689 | } |
| 4690 | LocalHeap chelperheap(1000000000,"my x heap"); |
| 4691 | const shared_ptr<TPHighOrderFESpace> & tpfes = dynamic_pointer_cast<TPHighOrderFESpace > (fespace); |
| 4692 | const Array<shared_ptr<FESpace> > & spaces = tpfes->Spaces(0); |
| 4693 | int dimspace = tpfes->GetDimension(); |
| 4694 | const Table<int> & element_coloring0 = spaces[0]->ElementColoring(VOL); |
| 4695 | auto meshx = spaces[0]->GetMeshAccess(); |
| 4696 | auto meshy = spaces[1]->GetMeshAccess(); |
| 4697 | int nelx = meshx->GetNE(); |
| 4698 | int nely = meshy->GetNE(); |
| 4699 | int ndofxspace = spaces[0]->GetNDof(); |
| 4700 | int ndofyspace = spaces[1]->GetNDof(); |
| 4701 | if(hasinner) |
| 4702 | { |
| 4703 | timervol.Start(); |
| 4704 | // if (task_manager) |
| 4705 | // { |
| 4706 | //HeapReset hr(chelperheap); |
| 4707 | for (FlatArray<int> els_of_col : element_coloring0) |
| 4708 | { |
| 4709 | SharedLoop2 sl(els_of_col.Range()); |
| 4710 | // task_manager -> CreateJob |
| 4711 | ParallelJob |
| 4712 | ( [&] (const TaskInfo & ti) |
| 4713 | { |
| 4714 | LocalHeap lh = clh.Split(ti.thread_nr, ti.nthreads); |
nothing calls this directly
no test coverage detected