| 79 | } |
| 80 | |
| 81 | void seissol::initializer::initializeCellLocalMatrices( seissol::geometry::MeshReader const& i_meshReader, |
| 82 | LTSTree* io_ltsTree, |
| 83 | LTS* i_lts, |
| 84 | Lut* i_ltsLut, |
| 85 | TimeStepping const& timeStepping, |
| 86 | const parameters::ModelParameters& modelParameters ) |
| 87 | { |
| 88 | std::vector<Element> const& elements = i_meshReader.getElements(); |
| 89 | std::vector<Vertex> const& vertices = i_meshReader.getVertices(); |
| 90 | |
| 91 | static_assert(seissol::tensor::AplusT::Shape[0] == seissol::tensor::AminusT::Shape[0], "Shape mismatch for flux matrices"); |
| 92 | static_assert(seissol::tensor::AplusT::Shape[1] == seissol::tensor::AminusT::Shape[1], "Shape mismatch for flux matrices"); |
| 93 | |
| 94 | const unsigned* ltsToMesh = i_ltsLut->getLtsToMeshLut(i_lts->material.mask); |
| 95 | |
| 96 | assert(LayerMask(Ghost) == i_lts->material.mask); |
| 97 | assert(LayerMask(Ghost) == i_lts->localIntegration.mask); |
| 98 | assert(LayerMask(Ghost) == i_lts->neighboringIntegration.mask); |
| 99 | |
| 100 | assert(ltsToMesh == i_ltsLut->getLtsToMeshLut(i_lts->localIntegration.mask)); |
| 101 | assert(ltsToMesh == i_ltsLut->getLtsToMeshLut(i_lts->neighboringIntegration.mask)); |
| 102 | |
| 103 | const auto* cellInformationAll = io_ltsTree->var(i_lts->cellInformation); |
| 104 | for (auto& layer : io_ltsTree->leaves(Ghost)) { |
| 105 | CellMaterialData* material = layer.var(i_lts->material); |
| 106 | LocalIntegrationData* localIntegration = layer.var(i_lts->localIntegration); |
| 107 | NeighboringIntegrationData* neighboringIntegration = layer.var(i_lts->neighboringIntegration); |
| 108 | CellLocalInformation* cellInformation = layer.var(i_lts->cellInformation); |
| 109 | |
| 110 | #ifdef _OPENMP |
| 111 | #pragma omp parallel |
| 112 | { |
| 113 | #endif |
| 114 | real ATData[tensor::star::size(0)]; |
| 115 | real ATtildeData[tensor::star::size(0)]; |
| 116 | real BTData[tensor::star::size(1)]; |
| 117 | real CTData[tensor::star::size(2)]; |
| 118 | auto AT = init::star::view<0>::create(ATData); |
| 119 | // AT with elastic parameters in local coordinate system, used for flux kernel |
| 120 | auto ATtilde = init::star::view<0>::create(ATtildeData); |
| 121 | auto BT = init::star::view<0>::create(BTData); |
| 122 | auto CT = init::star::view<0>::create(CTData); |
| 123 | |
| 124 | real TData[seissol::tensor::T::size()]; |
| 125 | real TinvData[seissol::tensor::Tinv::size()]; |
| 126 | auto T = init::T::view::create(TData); |
| 127 | auto Tinv = init::Tinv::view::create(TinvData); |
| 128 | |
| 129 | real QgodLocalData[tensor::QgodLocal::size()]; |
| 130 | real QgodNeighborData[tensor::QgodNeighbor::size()]; |
| 131 | auto QgodLocal = init::QgodLocal::view::create(QgodLocalData); |
| 132 | auto QgodNeighbor = init::QgodNeighbor::view::create(QgodNeighborData); |
| 133 | |
| 134 | real rusanovPlusNull[tensor::QcorrLocal::size()]{}; |
| 135 | real rusanovMinusNull[tensor::QcorrNeighbor::size()]{}; |
| 136 | |
| 137 | #ifdef _OPENMP |
| 138 | #pragma omp for schedule(static) |
nothing calls this directly
no test coverage detected