The simulation in the optimization of the full pattern scenario magnitudes uses the kinetic energy as a convergence criterion

This commit is contained in:
iasonmanolas 2021-06-24 09:55:04 +03:00
parent e7e6971296
commit 56844f1f99
2 changed files with 32 additions and 8 deletions

View File

@ -98,6 +98,7 @@ int main(int argc, char *argv[]) {
} }
if (!optimizationAlreadyComputed) { if (!optimizationAlreadyComputed) {
auto start = std::chrono::system_clock::now();
const std::vector<size_t> numberOfNodesPerSlot{1, 0, 0, 2, 1, 2, 1}; const std::vector<size_t> numberOfNodesPerSlot{1, 0, 0, 2, 1, 2, 1};
assert(interfaceNodeIndex == numberOfNodesPerSlot[0] + numberOfNodesPerSlot[3]); assert(interfaceNodeIndex == numberOfNodesPerSlot[0] + numberOfNodesPerSlot[3]);
ReducedModelOptimizer optimizer(numberOfNodesPerSlot); ReducedModelOptimizer optimizer(numberOfNodesPerSlot);
@ -108,6 +109,9 @@ int main(int argc, char *argv[]) {
optimizationResults.label = optimizationName; optimizationResults.label = optimizationName;
optimizationResults.baseTriangleFullPattern.copy(fullPattern); optimizationResults.baseTriangleFullPattern.copy(fullPattern);
optimizationResults.settings = settings_optimization; optimizationResults.settings = settings_optimization;
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
optimizationResults.time = elapsed.count() / 1000.0;
// Export results // Export results
if (optimizationResults.numberOfSimulationCrashes != 0) { if (optimizationResults.numberOfSimulationCrashes != 0) {

View File

@ -848,7 +848,6 @@ void ReducedModelOptimizer::runOptimization(const Settings &settings,
xMax(i) = settings.xRanges[i].max; xMax(i) = settings.xRanges[i].max;
} }
auto start = std::chrono::system_clock::now();
dlib::function_evaluation result_dlib; dlib::function_evaluation result_dlib;
double (*objF)(double, double, double, double, double,double,double) = &objective; double (*objF)(double, double, double, double, double,double,double) = &objective;
result_dlib = dlib::find_min_global(objF, result_dlib = dlib::find_min_global(objF,
@ -857,11 +856,7 @@ void ReducedModelOptimizer::runOptimization(const Settings &settings,
dlib::max_function_calls(settings.numberOfFunctionCalls), dlib::max_function_calls(settings.numberOfFunctionCalls),
std::chrono::hours(24 * 365 * 290), std::chrono::hours(24 * 365 * 290),
settings.solverAccuracy); settings.solverAccuracy);
auto end = std::chrono::system_clock::now();
auto elapsed =
std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
getResults(result_dlib, settings, results); getResults(result_dlib, settings, results);
results.time = elapsed.count() / 1000.0;
} }
void ReducedModelOptimizer::constructAxialSimulationScenario( void ReducedModelOptimizer::constructAxialSimulationScenario(
@ -1035,8 +1030,15 @@ double fullPatternMaxSimulationForceTranslationalObjective(const double &forceMa
DRMSimulationModel simulator; DRMSimulationModel simulator;
DRMSimulationModel::Settings settings; DRMSimulationModel::Settings settings;
settings.totalExternalForcesNormPercentageTermination = 1e-2; settings.totalExternalForcesNormPercentageTermination = 1e-2;
// settings.shouldUseTranslationalKineticEnergyThreshold = true; settings.shouldUseTranslationalKineticEnergyThreshold = true;
// settings.totalTranslationalKineticEnergyThreshold = 1e-7; settings.totalTranslationalKineticEnergyThreshold = 1e-14;
settings.shouldUseTranslationalKineticEnergyThreshold = true;
#ifdef POLYSCOPE_DEFINED
// settings.shouldDraw = true;
// settings.isDebugMode = true;
// settings.drawingStep = 100000;
// settings.shouldCreatePlots = true;
#endif
SimulationResults results = simulator.executeSimulation(std::make_shared<SimulationJob>(job), SimulationResults results = simulator.executeSimulation(std::make_shared<SimulationJob>(job),
settings); settings);
const double &desiredDisplacementValue = global.desiredMaxDisplacementValue; const double &desiredDisplacementValue = global.desiredMaxDisplacementValue;
@ -1146,6 +1148,9 @@ ReducedModelOptimizer::createFullPatternSimulationScenarios(
job.pMesh = pMesh; job.pMesh = pMesh;
//// Axial //// Axial
#ifdef POLYSCOPE_DEFINED
std::cout << "Computing Axial scenarios.." << std::endl;
#endif
const double maxForceMagnitude_axial = getFullPatternMaxSimulationForce( const double maxForceMagnitude_axial = getFullPatternMaxSimulationForce(
BaseSimulationScenario::Axial); BaseSimulationScenario::Axial);
const double minForceMagnitude_axial = -maxForceMagnitude_axial; const double minForceMagnitude_axial = -maxForceMagnitude_axial;
@ -1162,6 +1167,9 @@ ReducedModelOptimizer::createFullPatternSimulationScenarios(
for (int axialSimulationScenarioIndex = 0; for (int axialSimulationScenarioIndex = 0;
axialSimulationScenarioIndex < numberOfSimulationScenarios_axial; axialSimulationScenarioIndex < numberOfSimulationScenarios_axial;
axialSimulationScenarioIndex++) { axialSimulationScenarioIndex++) {
#ifdef POLYSCOPE_DEFINED
std::cout << "Computing Axial scenario:" << axialSimulationScenarioIndex << std::endl;
#endif
job.nodalExternalForces.clear(); job.nodalExternalForces.clear();
job.constrainedVertices.clear(); job.constrainedVertices.clear();
job.nodalForcedDisplacements.clear(); job.nodalForcedDisplacements.clear();
@ -1193,6 +1201,9 @@ ReducedModelOptimizer::createFullPatternSimulationScenarios(
for (int shearSimulationScenarioIndex = 0; for (int shearSimulationScenarioIndex = 0;
shearSimulationScenarioIndex < numberOfSimulationScenarios_shear; shearSimulationScenarioIndex < numberOfSimulationScenarios_shear;
shearSimulationScenarioIndex++) { shearSimulationScenarioIndex++) {
#ifdef POLYSCOPE_DEFINED
std::cout << "Computing shear scenario:" << shearSimulationScenarioIndex << std::endl;
#endif
job.constrainedVertices.clear(); job.constrainedVertices.clear();
job.nodalExternalForces.clear(); job.nodalExternalForces.clear();
job.label = baseSimulationScenarioNames[BaseSimulationScenario::Shear] + "_" job.label = baseSimulationScenarioNames[BaseSimulationScenario::Shear] + "_"
@ -1219,6 +1230,9 @@ ReducedModelOptimizer::createFullPatternSimulationScenarios(
for (int bendingSimulationScenarioIndex = 0; for (int bendingSimulationScenarioIndex = 0;
bendingSimulationScenarioIndex < numberOfSimulationScenarios_bending; bendingSimulationScenarioIndex < numberOfSimulationScenarios_bending;
bendingSimulationScenarioIndex++) { bendingSimulationScenarioIndex++) {
#ifdef POLYSCOPE_DEFINED
std::cout << "Computing bending scenario:" << bendingSimulationScenarioIndex << std::endl;
#endif
job.nodalExternalForces.clear(); job.nodalExternalForces.clear();
job.constrainedVertices.clear(); job.constrainedVertices.clear();
job.label = baseSimulationScenarioNames[BaseSimulationScenario::Bending] + "_" job.label = baseSimulationScenarioNames[BaseSimulationScenario::Bending] + "_"
@ -1248,6 +1262,9 @@ ReducedModelOptimizer::createFullPatternSimulationScenarios(
for (int domeSimulationScenarioIndex = 0; for (int domeSimulationScenarioIndex = 0;
domeSimulationScenarioIndex < numberOfSimulationScenarios_dome; domeSimulationScenarioIndex < numberOfSimulationScenarios_dome;
domeSimulationScenarioIndex++) { domeSimulationScenarioIndex++) {
#ifdef POLYSCOPE_DEFINED
std::cout << "Computing dome scenario:" << domeSimulationScenarioIndex << std::endl;
#endif
job.constrainedVertices.clear(); job.constrainedVertices.clear();
job.nodalExternalForces.clear(); job.nodalExternalForces.clear();
job.nodalForcedDisplacements.clear(); job.nodalForcedDisplacements.clear();
@ -1275,6 +1292,9 @@ ReducedModelOptimizer::createFullPatternSimulationScenarios(
for (int saddleSimulationScenarioIndex = 0; for (int saddleSimulationScenarioIndex = 0;
saddleSimulationScenarioIndex < numberOfSimulationScenarios_saddle; saddleSimulationScenarioIndex < numberOfSimulationScenarios_saddle;
saddleSimulationScenarioIndex++) { saddleSimulationScenarioIndex++) {
#ifdef POLYSCOPE_DEFINED
std::cout << "Computing saddle scenario:" << saddleSimulationScenarioIndex << std::endl;
#endif
job.constrainedVertices.clear(); job.constrainedVertices.clear();
job.nodalExternalForces.clear(); job.nodalExternalForces.clear();
job.nodalForcedDisplacements.clear(); job.nodalForcedDisplacements.clear();
@ -1409,7 +1429,7 @@ void ReducedModelOptimizer::optimize(
DRMSimulationModel::Settings simulationSettings; DRMSimulationModel::Settings simulationSettings;
simulationSettings.shouldDraw = false; simulationSettings.shouldDraw = false;
#ifdef POLYSCOPE_DEFINED #ifdef POLYSCOPE_DEFINED
const bool drawFullPatternSimulationResults = false; const bool drawFullPatternSimulationResults = true;
if (drawFullPatternSimulationResults) { if (drawFullPatternSimulationResults) {
global.fullPatternSimulationJobs[0]->pMesh->registerForDrawing( global.fullPatternSimulationJobs[0]->pMesh->registerForDrawing(
ReducedPatternOptimization::Colors::fullInitial); ReducedPatternOptimization::Colors::fullInitial);