MCPcopy Create free account
hub / github.com/SeisSol/SeisSol / initializeDynamicRuptureMatrices

Method initializeDynamicRuptureMatrices

src/Initializer/CellLocalMatrices.cpp:459–774  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

457};
458
459void 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;

Callers

nothing calls this directly

Calls 14

sizeFunction · 0.85
CellDRMappingClass · 0.85
getEigenDecompositionFunction · 0.85
extractMatrixFunction · 0.85
copyEigenToYatetoFunction · 0.85
surfaceAreaAndVolumeFunction · 0.85
leavesMethod · 0.80
ltsIdMethod · 0.80
varMethod · 0.45
getNumberOfCellsMethod · 0.45
getPWaveSpeedMethod · 0.45

Tested by

no test coverage detected