| 303 | } |
| 304 | |
| 305 | virtual std::variant<Matrix<double>, Matrix<Complex>> CalcSubMatrix (FlatArray<DofId> rowids, FlatArray<DofId> colids, LocalHeap &lh) const override |
| 306 | { |
| 307 | optional<std::variant<Matrix<double>, Matrix<Complex>>> sum; |
| 308 | for (auto const & op : summands) |
| 309 | { |
| 310 | auto mat = op->CalcSubMatrix(rowids, colids, lh); |
| 311 | if (sum) |
| 312 | sum = AddDenseMatrixVariants(std::move(*sum), std::move(mat)); |
| 313 | else |
| 314 | sum = std::move(mat); |
| 315 | } |
| 316 | if (!sum) |
| 317 | throw Exception("SumIntegralOperator needs at least one summand"); |
| 318 | return std::move(*sum); |
| 319 | } |
| 320 | |
| 321 | FMMOperatorInfo GetFMMInfo() const override |
| 322 | { |