Skip to content

Commit 03a8d44

Browse files
committed
Make surface output work correctly
1 parent b6a718d commit 03a8d44

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

src/IO/Instance/Checkpoint/CheckpointManager.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <IO/Writer/Writer.hpp>
1010
#include <Initializer/tree/LTSTree.hpp>
1111
#include <Initializer/tree/Layer.hpp>
12+
#include <Parallel/MPI.h>
1213
#include <cassert>
1314
#include <cstddef>
1415
#include <cstdlib>

src/Initializer/InitProcedure/InitIO.cpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,11 @@ static void setupOutput(seissol::SeisSol& seissolInstance) {
122122
backupTimeStamp);
123123
}
124124

125+
// TODO(David): change Yateto/TensorForge interface to make padded sizes more accessible
126+
constexpr auto QDofSizePadded = tensor::Q::Size / tensor::Q::Shape[1];
127+
constexpr auto FaceDisplacementPadded =
128+
tensor::faceDisplacement::Size / tensor::faceDisplacement::Shape[1];
129+
125130
if (seissolParams.output.waveFieldParameters.enabled &&
126131
seissolParams.output.waveFieldParameters.vtkorder >= 0) {
127132
auto order = seissolParams.output.waveFieldParameters.vtkorder;
@@ -181,7 +186,7 @@ static void setupOutput(seissol::SeisSol& seissolInstance) {
181186
writer.addPointData<real>(
182187
quantityLabels[quantity], {}, [=](real* target, std::size_t index) {
183188
const auto* dofsAllQuantities = ltsLut->lookup(lts->dofs, index);
184-
const auto* dofsSingleQuantity = dofsAllQuantities + tensor::Q::Shape[0] * quantity;
189+
const auto* dofsSingleQuantity = dofsAllQuantities + QDofSizePadded * quantity;
185190
kernel::projectBasisToVtkVolume vtkproj;
186191
vtkproj.qb = dofsSingleQuantity;
187192
vtkproj.xv(order) = target;
@@ -197,8 +202,7 @@ static void setupOutput(seissol::SeisSol& seissolInstance) {
197202
writer.addPointData<real>(
198203
plasticityLabels[quantity], {}, [=](real* target, std::size_t index) {
199204
const auto* dofsAllQuantities = ltsLut->lookup(lts->pstrain, index);
200-
const auto* dofsSingleQuantity =
201-
dofsAllQuantities + tensor::QStress::Shape[0] * quantity;
205+
const auto* dofsSingleQuantity = dofsAllQuantities + QDofSizePadded * quantity;
202206
kernel::projectBasisToVtkVolume vtkproj;
203207
vtkproj.qb = dofsSingleQuantity;
204208
vtkproj.xv(order) = target;
@@ -275,13 +279,12 @@ static void setupOutput(seissol::SeisSol& seissolInstance) {
275279
auto side = surfaceMeshSides[index];
276280
const auto* dofsAllQuantities = ltsLut->lookup(lts->dofs, meshId);
277281
const auto* dofsSingleQuantity =
278-
dofsAllQuantities + tensor::Q::Shape[0] * (6 + quantity); // velocities
282+
dofsAllQuantities + QDofSizePadded * (6 + quantity); // velocities
279283
kernel::projectBasisToVtkFaceFromVolume vtkproj;
280284
vtkproj.qb = dofsSingleQuantity;
281285
vtkproj.xf(order) = target;
282286
vtkproj.collvf(CONVERGENCE_ORDER, order, side) =
283-
init::collvf::Values[CONVERGENCE_ORDER + (CONVERGENCE_ORDER + 1) *
284-
(order + 8 * side)];
287+
init::collvf::Values[CONVERGENCE_ORDER + (CONVERGENCE_ORDER + 1) * (order + 8 * side)];
285288
vtkproj.execute(order, side);
286289
});
287290
}
@@ -294,7 +297,7 @@ static void setupOutput(seissol::SeisSol& seissolInstance) {
294297
auto side = surfaceMeshSides[index];
295298
const auto* faceDisplacements = ltsLut->lookup(lts->faceDisplacements, meshId);
296299
const auto* faceDisplacementVariable =
297-
faceDisplacements[side] + tensor::faceDisplacement::Shape[0] * quantity;
300+
faceDisplacements[side] + FaceDisplacementPadded * quantity;
298301
kernel::projectNodalToVtkFace vtkproj;
299302
vtkproj.pn = faceDisplacementVariable;
300303
vtkproj.MV2nTo2m = nodal::init::MV2nTo2m::Values;

0 commit comments

Comments
 (0)