| 5358 | } |
| 5359 | |
| 5360 | void SymbolicEnergy :: |
| 5361 | AddLinearizedElementMatrix (const FiniteElement & fel, |
| 5362 | ProxyUserData & ud, |
| 5363 | const BaseMappedIntegrationRule & mir, |
| 5364 | FlatVector<double> elveclin, |
| 5365 | FlatMatrix<double> elmat, |
| 5366 | LocalHeap & lh) const |
| 5367 | { |
| 5368 | static Timer t("SymbolicEnergy::AddLinearizedElementMatrix (nosimd)", NoTracing); |
| 5369 | static Timer tdmat("SymbolicEnergy::CalcDMat (nosimd)", NoTracing); |
| 5370 | // Timer & tdmat = const_cast<Timer&> (timer); |
| 5371 | static Timer tbmat("SymbolicEnergy::CalcBMat (nosimd)", NoTracing); |
| 5372 | static Timer tmult("SymbolicEnergy::mult", NoTracing); |
| 5373 | RegionTimer reg(t); |
| 5374 | |
| 5375 | HeapReset hr(lh); |
| 5376 | |
| 5377 | FlatMatrix<> dderiv(mir.Size(), 1,lh); |
| 5378 | FlatMatrix<AutoDiffDiff<1,double>> ddval(mir.Size(), 1, lh); |
| 5379 | |
| 5380 | FlatArray<FlatMatrix<>> diags(trial_proxies.Size(), lh); |
| 5381 | FlatArray<FlatMatrix<>> dWdB(trial_proxies.Size(), lh); |
| 5382 | for (int k1 : Range(trial_proxies)) |
| 5383 | { |
| 5384 | auto proxy = trial_proxies[k1]; |
| 5385 | diags[k1].AssignMemory(mir.Size(), proxy->Dimension(), lh); |
| 5386 | dWdB[k1].AssignMemory(mir.Size(), proxy->Dimension(), lh); |
| 5387 | for (int k = 0; k < proxy->Dimension(); k++) |
| 5388 | { |
| 5389 | ud.trialfunction = proxy; |
| 5390 | ud.trial_comp = k; |
| 5391 | ud.testfunction = proxy; |
| 5392 | ud.test_comp = k; |
| 5393 | cf -> Evaluate (mir, ddval); |
| 5394 | for (size_t i = 0; i < mir.Size(); i++) |
| 5395 | diags[k1](i,k) = ddval(i,0).DDValue(0); |
| 5396 | for (size_t i = 0; i < mir.Size(); i++) |
| 5397 | dWdB[k1](i,k) = ddval(i,0).DValue(0); |
| 5398 | } |
| 5399 | } |
| 5400 | |
| 5401 | for (int k1 : Range(trial_proxies)) |
| 5402 | for (int l1 : Range(trial_proxies)) |
| 5403 | { |
| 5404 | HeapReset hr(lh); |
| 5405 | if (!nonzeros_proxies(k1,l1)) continue; |
| 5406 | |
| 5407 | auto proxy1 = trial_proxies[k1]; |
| 5408 | auto proxy2 = trial_proxies[l1]; |
| 5409 | |
| 5410 | FlatTensor<3> proxyvalues(lh, mir.Size(), proxy2->Dimension(), proxy1->Dimension()); |
| 5411 | for (int k = 0; k < proxy1->Dimension(); k++) |
| 5412 | for (int l = 0; l < proxy2->Dimension(); l++) |
| 5413 | { |
| 5414 | ud.trialfunction = proxy1; |
| 5415 | ud.trial_comp = k; |
| 5416 | ud.testfunction = proxy2; |
| 5417 | ud.test_comp = l; |
nothing calls this directly
no test coverage detected