| 255 | } |
| 256 | |
| 257 | void BaseScalarFiniteElement :: AddDualTrans (const IntegrationRule & ir, BareSliceVector<double> values, BareSliceVector<> coefs) const |
| 258 | { |
| 259 | LocalHeapMem<10000> lh("adddualtranheap"); // for 16 mips |
| 260 | |
| 261 | STACK_ARRAY(double, mem, GetNDof()); |
| 262 | FlatVector<> shape(GetNDof(), &mem[0]); |
| 263 | |
| 264 | auto & trafo = GetFEElementTransformation(ElementType()); |
| 265 | |
| 266 | constexpr size_t BS = 16; |
| 267 | for (size_t i = 0; i < ir.Size(); i+= BS) |
| 268 | { |
| 269 | HeapReset hr(lh); |
| 270 | IntRange r(i, std::min(ir.Size(), i+BS)); |
| 271 | auto & mir = trafo(ir.Range(r.First(), r.Next()), lh); |
| 272 | for (size_t j : r) |
| 273 | { |
| 274 | CalcDualShape(mir[j-i], shape); |
| 275 | coefs += values(j) * shape; |
| 276 | } |
| 277 | } |
| 278 | } |
| 279 | |
| 280 | void BaseScalarFiniteElement :: AddDualTrans (const SIMD_IntegrationRule & ir, BareVector<SIMD<double>> values, BareSliceVector<> coefs) const |
| 281 | { |
nothing calls this directly
no test coverage detected