| 440 | } |
| 441 | #ifdef ACL_DEVICE |
| 442 | void seissol::time_stepping::TimeCluster::computeLocalIntegrationDevice( |
| 443 | seissol::initializer::Layer& i_layerData, |
| 444 | bool resetBuffers) { |
| 445 | |
| 446 | SCOREP_USER_REGION( "computeLocalIntegration", SCOREP_USER_REGION_TYPE_FUNCTION ) |
| 447 | device.api->putProfilingMark("computeLocalIntegration", device::ProfilingColors::Yellow); |
| 448 | |
| 449 | m_loopStatistics->begin(m_regionComputeLocalIntegration); |
| 450 | |
| 451 | auto& dataTable = i_layerData.getConditionalTable<inner_keys::Wp>(); |
| 452 | auto& materialTable = i_layerData.getConditionalTable<inner_keys::Material>(); |
| 453 | auto& indicesTable = i_layerData.getConditionalTable<inner_keys::Indices>(); |
| 454 | |
| 455 | kernels::LocalData::Loader loader; |
| 456 | loader.load(*m_lts, i_layerData); |
| 457 | kernels::LocalTmp tmp(seissolInstance.getGravitationSetup().acceleration); |
| 458 | |
| 459 | const double timeStepWidth = timeStepSize(); |
| 460 | |
| 461 | ComputeGraphType graphType{ComputeGraphType::LocalIntegral}; |
| 462 | auto computeGraphKey = initializer::GraphKey(graphType, timeStepWidth, true); |
| 463 | streamRuntime.runGraph(computeGraphKey, i_layerData, [&](seissol::parallel::runtime::StreamRuntime& streamRuntime) { |
| 464 | m_timeKernel.computeBatchedAder(timeStepWidth, |
| 465 | tmp, |
| 466 | dataTable, |
| 467 | materialTable, |
| 468 | true, |
| 469 | streamRuntime); |
| 470 | |
| 471 | m_localKernel.computeBatchedIntegral(dataTable, |
| 472 | materialTable, |
| 473 | indicesTable, |
| 474 | loader, |
| 475 | tmp, |
| 476 | timeStepWidth, |
| 477 | streamRuntime); |
| 478 | }); |
| 479 | |
| 480 | m_localKernel.evaluateBatchedTimeDependentBc(dataTable, |
| 481 | indicesTable, |
| 482 | loader, |
| 483 | i_layerData, |
| 484 | *m_lts, |
| 485 | ct.correctionTime, |
| 486 | timeStepWidth, |
| 487 | streamRuntime); |
| 488 | |
| 489 | graphType = resetBuffers ? ComputeGraphType::AccumulatedVelocities : ComputeGraphType::StreamedVelocities; |
| 490 | computeGraphKey = initializer::GraphKey(graphType); |
| 491 | |
| 492 | streamRuntime.runGraph(computeGraphKey, i_layerData, [&](seissol::parallel::runtime::StreamRuntime& streamRuntime) { |
| 493 | for (unsigned face = 0; face < 4; ++face) { |
| 494 | ConditionalKey key(*KernelNames::FaceDisplacements, *ComputationKind::None, face); |
| 495 | if (dataTable.find(key) != dataTable.end()) { |
| 496 | auto& entry = dataTable[key]; |
| 497 | // NOTE: integrated velocities have been computed implicitly, i.e |
| 498 | // it is 6th, 7the and 8th columns of integrated dofs |
| 499 |
nothing calls this directly
no test coverage detected