From d8a6fadab7e1d4d786d33a97b8dfc41ab7bdc19c Mon Sep 17 00:00:00 2001 From: iasonmanolas Date: Wed, 20 Jul 2022 10:49:09 +0300 Subject: [PATCH] Added simulation model used in the optimization results struct --- reducedmodelevaluator.cpp | 27 +++++++++------------------ reducedmodeloptimizer_structs.hpp | 7 +++++++ 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/reducedmodelevaluator.cpp b/reducedmodelevaluator.cpp index 51a83ef..c6512d1 100644 --- a/reducedmodelevaluator.cpp +++ b/reducedmodelevaluator.cpp @@ -420,20 +420,11 @@ ReducedModelEvaluator::Results ReducedModelEvaluator::evaluateReducedModel( drmSimulationSettings.shouldCreatePlots = true; #endif constexpr bool shouldRerunFullPatternSimulation = false; - enum PatternSimulationModelTag { DRM, Chronos }; - const PatternSimulationModelTag simulationModelTag{Chronos}; - const std::string simulationModelLabel = [&]() { - switch (simulationModelTag) { - case DRM: - return DRMSimulationModel::label; - case Chronos: - return ChronosEulerSimulationModel::label; - } - }(); + const std::string &simulationModelLabel = optimizationResult.settings.simulationModelLabel; // for (int jobIndex = 0; jobIndex < scenariosTestSetLabels.size(); jobIndex++) { std::for_each( //#ifndef POLYSCOPE_DEFINED - // std::execution::par_unseq, + std::execution::par_unseq, //#endif scenariosTestSetLabels.begin(), scenariosTestSetLabels.end(), @@ -540,20 +531,20 @@ ReducedModelEvaluator::Results ReducedModelEvaluator::evaluateReducedModel( << tilledPatternResultsFolderPath << std::endl; //Full std::cout << "Executing:" << jobLabel << std::endl; - switch (simulationModelTag) { - case DRM: { + if (simulationModelLabel == DRMSimulationModel::label) { DRMSimulationModel drmSimulationModel; simulationResults_tilledPattern = drmSimulationModel .executeSimulation(pJob_tiledFullPattern, drmSimulationSettings); - break; - } - case Chronos: { + } else if (simulationModelLabel == ChronosEulerSimulationModel::label) { ChronosEulerSimulationModel chronosSimulationModel; simulationResults_tilledPattern = chronosSimulationModel.executeSimulation( pJob_tiledFullPattern); - break; - } + } else { + std::cerr << "Simulation model used for computing the optimization results was " + "not recognized" + << std::endl; + std::terminate(); } } if (!simulationResults_tilledPattern.converged) { diff --git a/reducedmodeloptimizer_structs.hpp b/reducedmodeloptimizer_structs.hpp index 373d9e4..24b61ad 100644 --- a/reducedmodeloptimizer_structs.hpp +++ b/reducedmodeloptimizer_structs.hpp @@ -208,6 +208,7 @@ struct Settings xRange{"J", 1e-3, 1e3}, xRange{"R", 0.05, 0.95}, xRange{"Theta", -30, 30}}; + std::string simulationModelLabel{DRMSimulationModel::label}; struct SettingsPSO { int numberOfParticles{200}; @@ -307,6 +308,7 @@ struct Settings json[GET_VARIABLE_NAME(angularDistanceEpsilon)] = vcg::math::ToDeg(angularDistanceEpsilon); json[GET_VARIABLE_NAME(targetBaseTriangleSize)] = targetBaseTriangleSize; json[GET_VARIABLE_NAME(baseScenarioMaxMagnitudes)] = baseScenarioMaxMagnitudes; + json[GET_VARIABLE_NAME(simulationModelLabel)] = simulationModelLabel; nlohmann::json json_dimensions; patternBeamDimensions.to_json(json_dimensions, patternBeamDimensions); json.update(json_dimensions); @@ -412,6 +414,11 @@ struct Settings pso.numberOfParticles = static_cast(json[GET_VARIABLE_NAME(pso.numberOfParticles)]); } + if (json.contains(GET_VARIABLE_NAME(simulationModelLabel))) { + simulationModelLabel = static_cast( + json[GET_VARIABLE_NAME(simulationModelLabel)]); + } + patternBeamDimensions.from_json(json, patternBeamDimensions); // perBaseScenarioObjectiveWeights = json.at(JsonKeys::ObjectiveWeights);