| 457 | }; |
| 458 | |
| 459 | void seissol::initializer::initializeDynamicRuptureMatrices( seissol::geometry::MeshReader const& i_meshReader, |
| 460 | LTSTree* io_ltsTree, |
| 461 | LTS* i_lts, |
| 462 | Lut* i_ltsLut, |
| 463 | LTSTree* dynRupTree, |
| 464 | DynamicRupture* dynRup, |
| 465 | unsigned* ltsFaceToMeshFace, |
| 466 | GlobalData const& global, |
| 467 | double etaHack ) |
| 468 | { |
| 469 | real TData[tensor::T::size()]; |
| 470 | real TinvData[tensor::Tinv::size()]; |
| 471 | real APlusData[tensor::star::size(0)]; |
| 472 | real AMinusData[tensor::star::size(0)]; |
| 473 | |
| 474 | std::vector<Fault> const& fault = i_meshReader.getFault(); |
| 475 | std::vector<Element> const& elements = i_meshReader.getElements(); |
| 476 | CellDRMapping (*drMapping)[4] = io_ltsTree->var(i_lts->drMapping); |
| 477 | CellDRMapping (*drMappingDevice)[4] = io_ltsTree->var(i_lts->drMappingDevice); |
| 478 | CellMaterialData* material = io_ltsTree->var(i_lts->material); |
| 479 | real** derivatives = io_ltsTree->var(i_lts->derivatives); |
| 480 | real* (*faceNeighbors)[4] = io_ltsTree->var(i_lts->faceNeighbors); |
| 481 | real** derivativesDevice = io_ltsTree->var(i_lts->derivativesDevice); |
| 482 | real* (*faceNeighborsDevice)[4] = io_ltsTree->var(i_lts->faceNeighborsDevice); |
| 483 | CellLocalInformation* cellInformation = io_ltsTree->var(i_lts->cellInformation); |
| 484 | |
| 485 | unsigned* layerLtsFaceToMeshFace = ltsFaceToMeshFace; |
| 486 | |
| 487 | for (auto& layer : dynRupTree->leaves(Ghost)) { |
| 488 | real** timeDerivativePlus = layer.var(dynRup->timeDerivativePlus); |
| 489 | real** timeDerivativeMinus = layer.var(dynRup->timeDerivativeMinus); |
| 490 | real** timeDerivativePlusDevice = layer.var(dynRup->timeDerivativePlusDevice); |
| 491 | real** timeDerivativeMinusDevice = layer.var(dynRup->timeDerivativeMinusDevice); |
| 492 | DRGodunovData* godunovData = layer.var(dynRup->godunovData); |
| 493 | real (*imposedStatePlus)[tensor::QInterpolated::size()] = layer.var(dynRup->imposedStatePlus, AllocationPlace::Host); |
| 494 | real (*imposedStateMinus)[tensor::QInterpolated::size()] = layer.var(dynRup->imposedStateMinus, AllocationPlace::Host); |
| 495 | real (*fluxSolverPlus)[tensor::fluxSolver::size()] = layer.var(dynRup->fluxSolverPlus, AllocationPlace::Host); |
| 496 | real (*fluxSolverMinus)[tensor::fluxSolver::size()] = layer.var(dynRup->fluxSolverMinus, AllocationPlace::Host); |
| 497 | real (*imposedStatePlusDevice)[tensor::QInterpolated::size()] = layer.var(dynRup->imposedStatePlus, AllocationPlace::Device); |
| 498 | real (*imposedStateMinusDevice)[tensor::QInterpolated::size()] = layer.var(dynRup->imposedStateMinus, AllocationPlace::Device); |
| 499 | real (*fluxSolverPlusDevice)[tensor::fluxSolver::size()] = layer.var(dynRup->fluxSolverPlus, AllocationPlace::Device); |
| 500 | real (*fluxSolverMinusDevice)[tensor::fluxSolver::size()] = layer.var(dynRup->fluxSolverMinus, AllocationPlace::Device); |
| 501 | DRFaceInformation* faceInformation = layer.var(dynRup->faceInformation); |
| 502 | seissol::model::IsotropicWaveSpeeds* waveSpeedsPlus = layer.var(dynRup->waveSpeedsPlus); |
| 503 | seissol::model::IsotropicWaveSpeeds* waveSpeedsMinus = layer.var(dynRup->waveSpeedsMinus); |
| 504 | seissol::dr::ImpedancesAndEta* impAndEta = layer.var(dynRup->impAndEta); |
| 505 | seissol::dr::ImpedanceMatrices* impedanceMatrices = layer.var(dynRup->impedanceMatrices); |
| 506 | |
| 507 | |
| 508 | #ifdef _OPENMP |
| 509 | #pragma omp parallel for private(TData, TinvData, APlusData, AMinusData) schedule(static) |
| 510 | #endif |
| 511 | for (unsigned ltsFace = 0; ltsFace < layer.getNumberOfCells(); ++ltsFace) { |
| 512 | unsigned meshFace = layerLtsFaceToMeshFace[ltsFace]; |
| 513 | assert(fault[meshFace].element >= 0 || fault[meshFace].neighborElement >= 0); |
| 514 | |
| 515 | /// Face information |
| 516 | faceInformation[ltsFace].meshFace = meshFace; |
nothing calls this directly
no test coverage detected