Skip to content

Commit

Permalink
Refactoring the code (#142)
Browse files Browse the repository at this point in the history
* Add exception class, make variables pythonized
* Small code quality improvements
* Minor improvements
* Format changes
* Correct if statement

Co-authored-by: David Schneider <[email protected]>
  • Loading branch information
kursatyurt and davidscn authored Sep 18, 2022
1 parent 1b0973e commit 74c5244
Show file tree
Hide file tree
Showing 7 changed files with 182 additions and 155 deletions.
23 changes: 14 additions & 9 deletions src/mesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,9 @@ void readData(Mesh &mesh, const std::string &filename)

const int gradDim = data.gradDimension; // Number of components of gradient
// Get Data and Add to Mesh
vtkDataArray *gradX, *gradY, *gradZ;
vtkDataArray *gradX;
vtkDataArray *gradY;
vtkDataArray *gradZ;
if (dataDim == 1) // Scalar data
{
const std::string gradName = dataname + "_gradient";
Expand Down Expand Up @@ -235,7 +237,8 @@ void readData(Mesh &mesh, const std::string &filename)
} break;
case 2: // Vector Data with 2 component
{
double *x, *y;
double *x;
double *y;
for (vtkIdType tupleIdx = 0; tupleIdx < NumPoints; tupleIdx++) {
x = gradX->GetTuple3(tupleIdx);
std::copy_n(x, 2, std::back_inserter(data.dataVector));
Expand All @@ -246,7 +249,9 @@ void readData(Mesh &mesh, const std::string &filename)
} break;
case 3: // Vector Data with 3 component
{
double *x, *y, *z;
double *x;
double *y;
double *z;
for (vtkIdType tupleIdx = 0; tupleIdx < NumPoints; tupleIdx++) {
x = gradX->GetTuple3(tupleIdx);
std::copy_n(x, 3, std::back_inserter(data.dataVector));
Expand Down Expand Up @@ -308,7 +313,7 @@ void MeshName::save(const Mesh &mesh, const std::string &outputFileName) const
MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE);
}

for (const auto meshdata : mesh.meshdata) {
for (const auto &meshdata : mesh.meshdata) {
vtkSmartPointer<vtkDoubleArray>
vtkdata = vtkDoubleArray::New();
vtkdata->SetName(meshdata.name.c_str());
Expand Down Expand Up @@ -371,7 +376,7 @@ std::vector<MeshName> BaseName::findAll(const ExecutionContext &context) const
// Check single timestep/meshfiles first
std::vector<std::string> extensions{".vtk", ".vtu"};
// Case: a single mesh
for (const auto ext : extensions) {
for (const auto &ext : extensions) {
if (fs::is_regular_file(_bname + ext)) {
return {MeshName{_bname, ext, context}};
}
Expand All @@ -381,13 +386,13 @@ std::vector<MeshName> BaseName::findAll(const ExecutionContext &context) const
{
auto initMeshName = std::string{_bname + ".init"};
if (fs::is_regular_file(initMeshName + ext))
meshNames.emplace_back(MeshName{initMeshName, ext, context});
meshNames.emplace_back(initMeshName, ext, context);
}
for (int t = 1; true; ++t) {
std::string stepMeshName = _bname + ".dt" + std::to_string(t);
if (!fs::is_regular_file(stepMeshName + ext))
break;
meshNames.emplace_back(MeshName{stepMeshName, ext, context});
meshNames.emplace_back(stepMeshName, ext, context);
}
if (!meshNames.empty()) {
ASTE_ERROR << "Total number of detected meshes: " << meshNames.size() << '\n';
Expand All @@ -407,7 +412,7 @@ std::vector<MeshName> BaseName::findAll(const ExecutionContext &context) const
{
auto initMeshName = std::string{_bname + ".init" + "_" + std::to_string(context.rank)};
if (fs::is_regular_file(initMeshName + ext))
meshNames.emplace_back(MeshName{initMeshName, ext, context});
meshNames.emplace_back(initMeshName, ext, context);
}
for (int t = 1; true; ++t) {
std::string rankMeshName{_bname + ".dt" + std::to_string(t) + "_" + std::to_string(context.rank)};
Expand All @@ -430,7 +435,7 @@ std::string Mesh::previewData(std::size_t max) const
return "<nothing>";

std::stringstream oss;
for (const auto data : meshdata) {
for (const auto &data : meshdata) {
oss << data.name;
oss << data.dataVector.front();
for (size_t i = 1; i < std::min(max, data.dataVector.size()); ++i)
Expand Down
2 changes: 1 addition & 1 deletion src/mesh.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ struct MeshData;

class MeshException : public std::runtime_error {
public:
MeshException(const std::string &what_arg)
explicit MeshException(const std::string &what_arg)
: std::runtime_error(what_arg){};
};
/**
Expand Down
57 changes: 29 additions & 28 deletions src/modes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,37 +24,38 @@ void aste::runReplayMode(const aste::ExecutionContext &context, const std::strin
MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE);
}
asteInterface.meshID = preciceInterface.getMeshID(asteInterface.meshName);
const int dim = preciceInterface.getDimensions();

for (const auto dataname : asteInterface.writeVectorNames) {
for (const auto &dataname : asteInterface.writeVectorNames) {
const int dataID = preciceInterface.getDataID(dataname, asteInterface.meshID);
asteInterface.mesh.meshdata.push_back(aste::MeshData(aste::datatype::WRITE, dim, dataname, dataID));
asteInterface.mesh.meshdata.emplace_back(aste::datatype::WRITE, dim, dataname, dataID);

#if PRECICE_VERSION_GREATER_EQUAL(2, 5, 0)
if (preciceInterface.isGradientDataRequired(dataID)) {
asteInterface.writeVectorNames.push_back(dataname + "_gradient");
asteInterface.mesh.meshdata.push_back(aste::MeshData(aste::datatype::GRADIENT, dim, dataname, dataID, dim));
asteInterface.mesh.meshdata.emplace_back(aste::datatype::GRADIENT, dim, dataname, dataID, dim);
}
#endif
}

for (const auto dataname : asteInterface.readVectorNames) {
for (const auto &dataname : asteInterface.readVectorNames) {
const int dataID = preciceInterface.getDataID(dataname, asteInterface.meshID);
asteInterface.mesh.meshdata.push_back(aste::MeshData(aste::datatype::READ, dim, dataname, dataID));
asteInterface.mesh.meshdata.emplace_back(aste::datatype::READ, dim, dataname, dataID);
}

for (const auto dataname : asteInterface.writeScalarNames) {
for (const auto &dataname : asteInterface.writeScalarNames) {
const int dataID = preciceInterface.getDataID(dataname, asteInterface.meshID);
asteInterface.mesh.meshdata.push_back(aste::MeshData(aste::datatype::WRITE, 1, dataname, dataID));
asteInterface.mesh.meshdata.emplace_back(aste::datatype::WRITE, 1, dataname, dataID);

#if PRECICE_VERSION_GREATER_EQUAL(2, 5, 0)
if (preciceInterface.isGradientDataRequired(dataID)) {
asteInterface.writeVectorNames.push_back(dataname + "_gradient");
asteInterface.mesh.meshdata.push_back(aste::MeshData(aste::datatype::GRADIENT, 1, dataname, dataID, dim));
asteInterface.mesh.meshdata.emplace_back(aste::datatype::GRADIENT, 1, dataname, dataID, dim);
}
#endif
}
for (const auto dataname : asteInterface.readScalarNames) {
for (const auto &dataname : asteInterface.readScalarNames) {
const int dataID = preciceInterface.getDataID(dataname, asteInterface.meshID);
asteInterface.mesh.meshdata.push_back(aste::MeshData(aste::datatype::READ, 1, dataname, dataID));
asteInterface.mesh.meshdata.emplace_back(aste::datatype::READ, 1, dataname, dataID);
}

ASTE_INFO << "Loading mesh from " << asteInterface.meshes.front().filename();
Expand Down Expand Up @@ -112,7 +113,7 @@ void aste::runReplayMode(const aste::ExecutionContext &context, const std::strin
const std::string &coric = precice::constants::actionReadIterationCheckpoint();
const std::string &cowic = precice::constants::actionWriteIterationCheckpoint();

while (preciceInterface.isCouplingOngoing() and round < minMeshSize) {
while (preciceInterface.isCouplingOngoing() && round < minMeshSize) {
if (preciceInterface.isActionRequired(cowic)) {
ASTE_ERROR << "Implicit coupling schemes cannot be used with ASTE";
MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE);
Expand All @@ -123,7 +124,7 @@ void aste::runReplayMode(const aste::ExecutionContext &context, const std::strin
asteInterface.meshes[round].loadData(asteInterface.mesh);
ASTE_DEBUG << "This roundmesh contains: " << asteInterface.mesh.summary();

for (const auto meshdata : asteInterface.mesh.meshdata) {
for (const auto &meshdata : asteInterface.mesh.meshdata) {
if (meshdata.type == aste::datatype::WRITE) {
switch (meshdata.numcomp) {
case 1:
Expand Down Expand Up @@ -207,20 +208,22 @@ void aste::runMapperMode(const aste::ExecutionContext &context, const OptionMap
const int dataID = preciceInterface.getDataID("Data", asteInterface.meshID);
if (isVector) {
asteInterface.writeVectorNames.push_back(dataname);
asteInterface.mesh.meshdata.push_back(aste::MeshData(aste::datatype::WRITE, dim, dataname, dataID));
asteInterface.mesh.meshdata.emplace_back(aste::datatype::WRITE, dim, dataname, dataID);

#if PRECICE_VERSION_GREATER_EQUAL(2, 5, 0)
if (preciceInterface.isGradientDataRequired(dataID)) {
asteInterface.writeVectorNames.push_back(dataname + "_gradient");
asteInterface.mesh.meshdata.push_back(aste::MeshData(aste::datatype::GRADIENT, dim, dataname, dataID, dim));
asteInterface.mesh.meshdata.emplace_back(aste::datatype::GRADIENT, dim, dataname, dataID, dim);
}
#endif
} else {
asteInterface.writeScalarNames.push_back(dataname);
asteInterface.mesh.meshdata.push_back(aste::MeshData(aste::datatype::WRITE, 1, dataname, dataID));
asteInterface.mesh.meshdata.emplace_back(aste::datatype::WRITE, 1, dataname, dataID);

#if PRECICE_VERSION_GREATER_EQUAL(2, 5, 0)
if (preciceInterface.isGradientDataRequired(dataID)) {
asteInterface.writeVectorNames.push_back(dataname + "_gradient");
asteInterface.mesh.meshdata.push_back(aste::MeshData(aste::datatype::GRADIENT, 1, dataname, dataID, dim));
asteInterface.mesh.meshdata.emplace_back(aste::datatype::GRADIENT, 1, dataname, dataID, dim);
}
#endif
}
Expand All @@ -237,10 +240,10 @@ void aste::runMapperMode(const aste::ExecutionContext &context, const OptionMap
const int dataID = preciceInterface.getDataID("Data", asteInterface.meshID);
if (isVector) {
asteInterface.writeVectorNames.push_back(dataname);
asteInterface.mesh.meshdata.push_back(aste::MeshData(aste::datatype::READ, dim, dataname, dataID));
asteInterface.mesh.meshdata.emplace_back(aste::datatype::READ, dim, dataname, dataID);
} else {
asteInterface.writeScalarNames.push_back(dataname);
asteInterface.mesh.meshdata.push_back(aste::MeshData(aste::datatype::READ, 1, dataname, dataID));
asteInterface.mesh.meshdata.emplace_back(aste::datatype::READ, 1, dataname, dataID);
}
asteConfiguration.asteInterfaces.push_back(asteInterface);
}
Expand All @@ -257,7 +260,7 @@ void aste::runMapperMode(const aste::ExecutionContext &context, const OptionMap

if (preciceInterface.isActionRequired(precice::constants::actionWriteInitialData())) {
ASTE_DEBUG << "Write initial data for participant " << participantName;
for (auto &asteInterface : asteConfiguration.asteInterfaces) {
for (auto const &asteInterface : asteConfiguration.asteInterfaces) {
for (const auto &meshdata : asteInterface.mesh.meshdata) {
if (meshdata.type == aste::datatype::WRITE) {
switch (meshdata.numcomp) {
Expand Down Expand Up @@ -298,7 +301,7 @@ void aste::runMapperMode(const aste::ExecutionContext &context, const OptionMap
const std::string &cowic = precice::constants::actionWriteIterationCheckpoint();
size_t round = 0;

while (preciceInterface.isCouplingOngoing() and round < asteInterface.meshes.size()) {
while (preciceInterface.isCouplingOngoing() && round < asteInterface.meshes.size()) {
if (preciceInterface.isActionRequired(cowic)) {
ASTE_ERROR << "Implicit coupling schemes cannot be used with ASTE";
MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE);
Expand All @@ -309,7 +312,7 @@ void aste::runMapperMode(const aste::ExecutionContext &context, const OptionMap
asteInterface.meshes[round].loadData(asteInterface.mesh);
ASTE_DEBUG << "This roundmesh contains: " << asteInterface.mesh.summary();

for (const auto meshdata : asteInterface.mesh.meshdata) {
for (const auto &meshdata : asteInterface.mesh.meshdata) {
if (meshdata.type == aste::datatype::WRITE) {
switch (meshdata.numcomp) {
case 1:
Expand Down Expand Up @@ -370,13 +373,11 @@ void aste::runMapperMode(const aste::ExecutionContext &context, const OptionMap
auto meshname = asteConfiguration.asteInterfaces.front().meshes.front();
auto filename = fs::path(options["output"].as<std::string>());
if (context.rank == 0 && fs::exists(filename)) {
if (context.isParallel()) {
if (context.isParallel() && !filename.parent_path().empty()) {
auto dir = filename.parent_path();
if (!dir.empty()) {
fs::remove_all(dir);
fs::create_directory(dir);
}
} else {
fs::remove_all(dir);
fs::create_directory(dir);
} else if (!context.isParallel()) {
fs::remove(filename);
}
}
Expand Down
Loading

0 comments on commit 74c5244

Please sign in to comment.