| 258 | bool IsComplex() const override { return pwbmat -> IsComplex(); } |
| 259 | |
| 260 | void AddMatrix (FlatMatrix<SCAL> elmat, FlatArray<int> dnums, |
| 261 | ElementId id, LocalHeap & lh) |
| 262 | |
| 263 | { |
| 264 | static Timer timer ("BDDC - Addmatrix", NoTracing); |
| 265 | RegionTimer reg (timer); |
| 266 | static Timer timer2("BDDC - Add to sparse", NoTracing, NoTiming); |
| 267 | static Timer timer3("BDDC - compute", NoTracing, NoTiming); |
| 268 | |
| 269 | HeapReset hr(lh); |
| 270 | |
| 271 | // auto fes = bfa->GetFESpace(); |
| 272 | |
| 273 | ArrayMem<int, 100> localwbdofs, localintdofs; |
| 274 | |
| 275 | for (int k : Range(dnums)) |
| 276 | { |
| 277 | COUPLING_TYPE ct = fes->GetDofCouplingType(dnums[k]); |
| 278 | if (ct == WIREBASKET_DOF) |
| 279 | localwbdofs.Append (k); |
| 280 | else |
| 281 | localintdofs.Append (k); |
| 282 | } |
| 283 | |
| 284 | int sizew = localwbdofs.Size(); |
| 285 | int sizei = localintdofs.Size(); |
| 286 | |
| 287 | FlatArray<double> el2ifweight(sizei, lh); |
| 288 | for (int k = 0; k < sizei; k++) |
| 289 | el2ifweight[k] = fabs (elmat(localintdofs[k], |
| 290 | localintdofs[k])); |
| 291 | |
| 292 | /* |
| 293 | if (typeid(SCAL) == typeid(double)) |
| 294 | el2ifweight[k] = fabs (elmat(localintdofs[k], |
| 295 | localintdofs[k])); |
| 296 | else |
| 297 | el2ifweight[k] = 1; |
| 298 | */ |
| 299 | |
| 300 | |
| 301 | FlatMatrix<SCAL> a = elmat.Rows(localwbdofs).Cols(localwbdofs) | lh; |
| 302 | FlatMatrix<SCAL> b = elmat.Rows(localwbdofs).Cols(localintdofs) | lh; |
| 303 | FlatMatrix<SCAL> c = elmat.Rows(localintdofs).Cols(localwbdofs) | lh; |
| 304 | FlatMatrix<SCAL> d = elmat.Rows(localintdofs).Cols(localintdofs) | lh; |
| 305 | FlatMatrix<SCAL> het (sizew, sizei, lh); |
| 306 | FlatMatrix<SCAL> he (sizei, sizew, lh); |
| 307 | |
| 308 | |
| 309 | if (sizei) |
| 310 | { |
| 311 | RegionTimer regcompute (timer3); |
| 312 | regcompute.AddFlops (sizei*sizei*sizei + 2*sizei*sizei*sizew); |
| 313 | |
| 314 | CalcInverse (d); // , INVERSE_LIB::INV_NGBLA); |
| 315 | |
| 316 | if (sizew) |
| 317 | { |
no test coverage detected