From 4a03c435c2dd1f367e05cd86270e93d1d5f9a89e Mon Sep 17 00:00:00 2001 From: Iason Date: Tue, 2 Mar 2021 14:16:49 +0200 Subject: [PATCH] Changed simulation scenarios for axial and shear --- src/reducedmodeloptimizer.cpp | 77 +++++++++++++++-------------------- src/reducedmodeloptimizer.hpp | 20 ++++----- 2 files changed, 42 insertions(+), 55 deletions(-) diff --git a/src/reducedmodeloptimizer.cpp b/src/reducedmodeloptimizer.cpp index 6aeaeec..4163932 100644 --- a/src/reducedmodeloptimizer.cpp +++ b/src/reducedmodeloptimizer.cpp @@ -783,6 +783,22 @@ ReducedModelOptimizer::createScenarios( //// Axial SimulationScenario scenarioName = SimulationScenario::Axial; + // NewMethod + // for (auto viPairIt = m_fullPatternOppositeInterfaceViMap.begin(); + // viPairIt != m_fullPatternOppositeInterfaceViMap.end(); viPairIt++) { + // if (viPairIt != m_fullPatternOppositeInterfaceViMap.begin()) { + // CoordType forceDirection(1, 0, 0); + // const auto viPair = *viPairIt; + // nodalForces[viPair.first] = + // Vector6d({forceDirection[0], forceDirection[1], forceDirection[2], + // 0, + // 0, 0}) * + // forceMagnitude * 10; + // fixedVertices[viPair.second] = + // std::unordered_set{0, 1, 2, 3, 4, 5}; + // } + // } + // OldMethod for (const auto &viPair : m_fullPatternOppositeInterfaceViMap) { CoordType forceDirection = (pMesh->vert[viPair.first].cP() - pMesh->vert[viPair.second].cP()) @@ -801,6 +817,22 @@ ReducedModelOptimizer::createScenarios( scenarioName = SimulationScenario::Shear; fixedVertices.clear(); nodalForces.clear(); + // NewMethod + // for (auto viPairIt = m_fullPatternOppositeInterfaceViMap.begin(); + // viPairIt != m_fullPatternOppositeInterfaceViMap.end(); viPairIt++) { + // if (viPairIt != m_fullPatternOppositeInterfaceViMap.begin()) { + // CoordType forceDirection(0, 1, 0); + // const auto viPair = *viPairIt; + // nodalForces[viPair.first] = + // Vector6d({forceDirection[0], forceDirection[1], forceDirection[2], + // 0, + // 0, 0}) * + // forceMagnitude * 10; + // fixedVertices[viPair.second] = + // std::unordered_set{0, 1, 2, 3, 4, 5}; + // } + // } + // OldMethod for (const auto &viPair : m_fullPatternOppositeInterfaceViMap) { CoordType v = (pMesh->vert[viPair.first].cP() - pMesh->vert[viPair.second].cP()) @@ -913,9 +945,7 @@ ReducedModelOptimizer::createScenarios( void ReducedModelOptimizer::computeObjectiveValueNormalizationFactors() { assert(global.optimizationSettings.shouldNormalizeObjectiveValue); if (global.optimizationSettings.normalizationStrategy == - Settings::NormalizationStrategy::Epsilon || - global.optimizationSettings.normalizationStrategy == - Settings::NormalizationStrategy::EqualDisplacements) { + Settings::NormalizationStrategy::Epsilon) { // Compute the sum of the displacement norms std::vector fullPatternDisplacementNormSum( @@ -946,49 +976,8 @@ void ReducedModelOptimizer::computeObjectiveValueNormalizationFactors() { global.objectiveNormalizationValues[simulationScenarioIndex] = std::max( fullPatternDisplacementNormSum[simulationScenarioIndex], epsilon); // displacementNormSum; - } else { // NormalizationStrategy::EqualDisplacements - global.objectiveNormalizationValues[simulationScenarioIndex] = - fullPatternDisplacementNormSum[simulationScenarioIndex] / - fullPatternDisplacementNormSum[SimulationScenario::Shear]; } } - } else if (global.optimizationSettings.normalizationStrategy == - Settings::NormalizationStrategy::MaxDisplacement) { - for (int simulationScenarioIndex : global.simulationScenarioIndices) { - // Compute the quantities for normalizing the obj value - const double minB = global.optimizationSettings.xRanges[0].min; - const double maxRatio = global.optimizationSettings.xRanges[1].max; - const double minE = global.optimizationSettings.xRanges[2].min; - const double minHS = 0.3; - std::vector mostFlexibleOptimizationParameters{minB, maxRatio, - minE, minHS}; - if (global.optimizeInnerHexagonSize) { - updateMesh(4, mostFlexibleOptimizationParameters.data()); - } else { - updateMesh(3, mostFlexibleOptimizationParameters.data()); - } - reducedPatternMaximumDisplacementSimulationJobs[simulationScenarioIndex] = - global.reducedPatternSimulationJobs[simulationScenarioIndex] - ->getCopy(); - reducedPatternMaximumDisplacementSimulationJobs[simulationScenarioIndex] - .pMesh->setLabel("reduced_maxDisplacement"); - SimulationResults reducedModelResults = simulator.executeSimulation( - global.reducedPatternSimulationJobs[simulationScenarioIndex]); - const double errorOfMaxDisplacedReduced = computeRawError( - reducedModelResults.displacements, - global.fullPatternDisplacements[simulationScenarioIndex], - global.reducedToFullInterfaceViMap); - const double errorOfNonDisplacedReduced = computeRawError( - std::vector(reducedModelResults.displacements.size(), - Vector6d(0)), - global.fullPatternDisplacements[simulationScenarioIndex], - global.reducedToFullInterfaceViMap); - const double displacementMultiplier = - global.optimizationSettings.normalizationParameter; - global.objectiveNormalizationValues[simulationScenarioIndex] = - displacementMultiplier * - std::max(errorOfMaxDisplacedReduced, errorOfNonDisplacedReduced); - } } } diff --git a/src/reducedmodeloptimizer.hpp b/src/reducedmodeloptimizer.hpp index 7317ce3..b9f759f 100644 --- a/src/reducedmodeloptimizer.hpp +++ b/src/reducedmodeloptimizer.hpp @@ -62,14 +62,9 @@ public: struct Results; struct Settings { - enum NormalizationStrategy { - NonNormalized, - Epsilon, - MaxDisplacement, - EqualDisplacements - }; + enum NormalizationStrategy { NonNormalized, Epsilon }; inline static vector normalizationStrategyStrings{ - "NonNormalized", "Epsilon", "MaxDsiplacement", "EqualDisplacements"}; + "NonNormalized", "Epsilon"}; std::vector xRanges; int numberOfFunctionCalls{100}; double solutionAccuracy{1e-2}; @@ -115,8 +110,11 @@ public: } os << numberOfFunctionCalls; os << solutionAccuracy; - os << normalizationStrategyStrings[normalizationStrategy] + "_" + - std::to_string(normalizationParameter); + if (normalizationStrategy == Epsilon) { + os << "Epsilon_" + std::to_string(normalizationParameter); + } else { + os << "NonNormalized"; + } } }; struct Results { @@ -227,8 +225,8 @@ public: const std::string screenshotFilename = "/home/iason/Coding/Projects/Approximating shapes with flat " "patterns/RodModelOptimizationForPatterns/Results/Images/" + - pFullPatternSimulationJob->pMesh->getLabel() + "_" + - simulationScenarioStrings[simulationJobIndex]; + fullPatternSimulationJobs[0]->pMesh->getLabel() + "_" + + pFullPatternSimulationJob->getLabel(); polyscope::screenshot(screenshotFilename, false); fullModelResults.unregister(); reducedModelResults.unregister();