Refactoring
This commit is contained in:
parent
3a5ef38645
commit
ae645b27d2
237
src/main.cpp
237
src/main.cpp
|
@ -16,47 +16,51 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vcg/complex/algorithms/update/position.h>
|
#include <vcg/complex/algorithms/update/position.h>
|
||||||
|
|
||||||
void exportOptimizationResults(const ReducedModelOptimizer::Results& optimizationResults,const std::filesystem::path& optimizationDirectory,const ReducedModelOptimizer::Settings& settings_optimization,csvFile& statistics,const std::pair<FlatPattern *, FlatPattern *> patternPair) {
|
void exportOptimizationResults(
|
||||||
std::filesystem::path saveToPath(
|
const ReducedModelOptimizer::Results &optimizationResults,
|
||||||
std::filesystem::path(optimizationDirectory)
|
const std::filesystem::path &optimizationDirectory,
|
||||||
.append(patternPair.first->getLabel() + "@" +
|
const ReducedModelOptimizer::Settings &settings_optimization,
|
||||||
patternPair.second->getLabel()));
|
csvFile &statistics,
|
||||||
std::filesystem::create_directories(std::filesystem::path(saveToPath));
|
const std::pair<FlatPattern *, FlatPattern *> patternPair) {
|
||||||
|
std::filesystem::path saveToPath(std::filesystem::path(optimizationDirectory)
|
||||||
|
.append(patternPair.first->getLabel() +
|
||||||
|
"@" +
|
||||||
|
patternPair.second->getLabel()));
|
||||||
|
std::filesystem::create_directories(std::filesystem::path(saveToPath));
|
||||||
|
|
||||||
optimizationResults.save(saveToPath.string());
|
optimizationResults.save(saveToPath.string());
|
||||||
statistics << patternPair.first->getLabel() + "@" +
|
statistics << patternPair.first->getLabel() + "@" +
|
||||||
patternPair.second->getLabel();
|
patternPair.second->getLabel();
|
||||||
statistics << optimizationResults.objectiveValue;
|
statistics << optimizationResults.objectiveValue;
|
||||||
for (const double &optimalX :
|
for (const double &optimalX : optimizationResults.x) {
|
||||||
optimizationResults.x) {
|
statistics << optimalX;
|
||||||
statistics << optimalX;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for (int unusedXVarCounter = 0;
|
for (int unusedXVarCounter = 0;
|
||||||
unusedXVarCounter <
|
unusedXVarCounter <
|
||||||
settings_optimization.xRanges.size() -
|
settings_optimization.xRanges.size() - optimizationResults.x.size();
|
||||||
optimizationResults.x.size();
|
unusedXVarCounter++) {
|
||||||
unusedXVarCounter++) {
|
statistics << "-";
|
||||||
statistics << "-";
|
}
|
||||||
}
|
|
||||||
|
|
||||||
statistics << optimizationResults.time;
|
|
||||||
if (optimizationResults.numberOfSimulationCrashes == 0) {
|
|
||||||
statistics << "No crashes";
|
|
||||||
} else {
|
|
||||||
statistics << optimizationResults.numberOfSimulationCrashes;
|
|
||||||
}
|
|
||||||
statistics << endrow;
|
|
||||||
|
|
||||||
|
statistics << optimizationResults.time;
|
||||||
|
if (optimizationResults.numberOfSimulationCrashes == 0) {
|
||||||
|
statistics << "No crashes";
|
||||||
|
} else {
|
||||||
|
statistics << optimizationResults.numberOfSimulationCrashes;
|
||||||
|
}
|
||||||
|
statistics << endrow;
|
||||||
}
|
}
|
||||||
|
|
||||||
void optimizeTestSet(const std::vector<std::pair<FlatPattern *, FlatPattern *>> patternPairs,const ReducedModelOptimizer::Settings& settings_optimization,const std::string& saveTo) {
|
void optimizeTestSet(
|
||||||
|
const std::vector<std::pair<FlatPattern *, FlatPattern *>> patternPairs,
|
||||||
|
const ReducedModelOptimizer::Settings &settings_optimization,
|
||||||
|
const std::string &saveTo) {
|
||||||
const std::string optimizationSettingsString =
|
const std::string optimizationSettingsString =
|
||||||
settings_optimization.toString();
|
settings_optimization.toString();
|
||||||
std::filesystem::path thisOptimizationDirectory(
|
std::filesystem::path thisOptimizationDirectory(
|
||||||
std::filesystem::path(saveTo)
|
std::filesystem::path(saveTo).append(optimizationSettingsString));
|
||||||
.append(optimizationSettingsString));
|
//.append("Results"));
|
||||||
//.append("Results"));
|
|
||||||
std::filesystem::create_directories(thisOptimizationDirectory);
|
std::filesystem::create_directories(thisOptimizationDirectory);
|
||||||
std::cout << optimizationSettingsString << std::endl;
|
std::cout << optimizationSettingsString << std::endl;
|
||||||
csvFile csv_settings(std::filesystem::path(thisOptimizationDirectory)
|
csvFile csv_settings(std::filesystem::path(thisOptimizationDirectory)
|
||||||
|
@ -85,66 +89,72 @@ void optimizeTestSet(const std::vector<std::pair<FlatPattern *, FlatPattern *>>
|
||||||
std::vector<ReducedModelOptimizer::Results> optimizationResults_testSet(
|
std::vector<ReducedModelOptimizer::Results> optimizationResults_testSet(
|
||||||
patternPairs.size());
|
patternPairs.size());
|
||||||
auto start = std::chrono::high_resolution_clock::now();
|
auto start = std::chrono::high_resolution_clock::now();
|
||||||
int pairsOptimized=0;
|
int pairsOptimized = 0;
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
for (int patternPairIndex = 0; patternPairIndex < patternPairs.size();
|
for (int patternPairIndex = 0; patternPairIndex < patternPairs.size();
|
||||||
patternPairIndex++) {
|
patternPairIndex++) {
|
||||||
const std::pair<FlatPattern*, FlatPattern*>&
|
const std::pair<FlatPattern *, FlatPattern *> &patternPair =
|
||||||
patternPair = patternPairs[patternPairIndex];
|
patternPairs[patternPairIndex];
|
||||||
const std::vector<size_t> numberOfNodesPerSlot{ 1, 0, 0, 2, 1, 2, 1 };
|
std::cout << "Optimizing " << patternPair.first->getLabel() << "@"
|
||||||
ReducedModelOptimizer optimizer(numberOfNodesPerSlot);
|
<< patternPair.second->getLabel() << std::endl;
|
||||||
optimizer.initializePatterns(*patternPair.first,
|
const std::vector<size_t> numberOfNodesPerSlot{1, 0, 0, 2, 1, 2, 1};
|
||||||
*patternPair.second, {});
|
ReducedModelOptimizer optimizer(numberOfNodesPerSlot);
|
||||||
ReducedModelOptimizer::Results optimizationResults =
|
optimizer.initializePatterns(*patternPair.first, *patternPair.second, {});
|
||||||
optimizer.optimize(settings_optimization);
|
ReducedModelOptimizer::Results optimizationResults =
|
||||||
|
optimizer.optimize(settings_optimization);
|
||||||
|
|
||||||
totalError += optimizationResults.objectiveValue;
|
totalError += optimizationResults.objectiveValue;
|
||||||
optimizationResults_testSet[patternPairIndex] = optimizationResults;
|
optimizationResults_testSet[patternPairIndex] = optimizationResults;
|
||||||
totalNumberOfSimulationCrashes +=
|
totalNumberOfSimulationCrashes +=
|
||||||
optimizationResults.numberOfSimulationCrashes;
|
optimizationResults.numberOfSimulationCrashes;
|
||||||
|
|
||||||
std::cout << "Optimized " << ++pairsOptimized << "/" << patternPairs.size() << std::endl;
|
std::cout << "Optimized " << ++pairsOptimized << "/" << patternPairs.size()
|
||||||
|
<< std::endl;
|
||||||
|
#pragma omp critical
|
||||||
|
{
|
||||||
|
exportOptimizationResults(optimizationResults, thisOptimizationDirectory,
|
||||||
|
settings_optimization, statistics, patternPair);
|
||||||
|
optimizationResults.draw();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int patternPairIndex = 0; patternPairIndex < patternPairs.size();
|
// for (int patternPairIndex = 0; patternPairIndex < patternPairs.size();
|
||||||
patternPairIndex++) {
|
// patternPairIndex++) {
|
||||||
const std::pair<FlatPattern*, FlatPattern*>&
|
// const std::pair<FlatPattern *, FlatPattern *> &patternPair =
|
||||||
patternPair = patternPairs[patternPairIndex];
|
// patternPairs[patternPairIndex];
|
||||||
const ReducedModelOptimizer::Results optimizationResults=optimizationResults_testSet[patternPairIndex];
|
// const ReducedModelOptimizer::Results optimizationResults =
|
||||||
//Save results
|
// optimizationResults_testSet[patternPairIndex];
|
||||||
std::filesystem::path saveToPath(
|
// // Save results
|
||||||
std::filesystem::path(thisOptimizationDirectory)
|
// std::filesystem::path saveToPath(
|
||||||
.append(patternPair.first->getLabel() + "@" +
|
// std::filesystem::path(thisOptimizationDirectory)
|
||||||
patternPair.second->getLabel()));
|
// .append(patternPair.first->getLabel() + "@" +
|
||||||
std::filesystem::create_directories(std::filesystem::path(saveToPath));
|
// patternPair.second->getLabel()));
|
||||||
optimizationResults.save(saveToPath.string());
|
// std::filesystem::create_directories(std::filesystem::path(saveToPath));
|
||||||
|
// optimizationResults.save(saveToPath.string());
|
||||||
|
|
||||||
//Save statistics
|
// // Save statistics
|
||||||
statistics << patternPair.first->getLabel() + "@" +
|
// statistics << patternPair.first->getLabel() + "@" +
|
||||||
patternPair.second->getLabel();
|
// patternPair.second->getLabel();
|
||||||
statistics << optimizationResults.objectiveValue;
|
// statistics << optimizationResults.objectiveValue;
|
||||||
for (const double& optimalX :
|
// for (const double &optimalX : optimizationResults.x) {
|
||||||
optimizationResults.x) {
|
// statistics << optimalX;
|
||||||
statistics << optimalX;
|
// }
|
||||||
}
|
|
||||||
|
|
||||||
for (int unusedXVarCounter = 0;
|
// for (int unusedXVarCounter = 0;
|
||||||
unusedXVarCounter <
|
// unusedXVarCounter <
|
||||||
settings_optimization.xRanges.size() -
|
// settings_optimization.xRanges.size() -
|
||||||
optimizationResults.x.size();
|
// optimizationResults.x.size(); unusedXVarCounter++) {
|
||||||
unusedXVarCounter++) {
|
// statistics << "-";
|
||||||
statistics << "-";
|
// }
|
||||||
}
|
|
||||||
|
|
||||||
statistics << optimizationResults.time;
|
// statistics << optimizationResults.time;
|
||||||
if (optimizationResults.numberOfSimulationCrashes == 0) {
|
// if (optimizationResults.numberOfSimulationCrashes == 0) {
|
||||||
statistics << "No crashes";
|
// statistics << "No crashes";
|
||||||
}
|
// } else {
|
||||||
else {
|
// statistics << optimizationResults.numberOfSimulationCrashes;
|
||||||
statistics << optimizationResults.numberOfSimulationCrashes;
|
// }
|
||||||
}
|
// statistics << endrow;
|
||||||
statistics << endrow;
|
// }
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
|
@ -155,18 +165,20 @@ int main(int argc, char *argv[]) {
|
||||||
FlatPattern singleBarReducedModel(numberOfNodesPerSlot,
|
FlatPattern singleBarReducedModel(numberOfNodesPerSlot,
|
||||||
singleBarReducedModelEdges);
|
singleBarReducedModelEdges);
|
||||||
singleBarReducedModel.setLabel("SingleBar_reduced");
|
singleBarReducedModel.setLabel("SingleBar_reduced");
|
||||||
|
singleBarReducedModel.savePly(singleBarReducedModel.getLabel());
|
||||||
singleBarReducedModel.scale(0.03);
|
singleBarReducedModel.scale(0.03);
|
||||||
|
|
||||||
std::vector<vcg::Point2i> CWreducedModelEdges{vcg::Point2i(1, 5),
|
std::vector<vcg::Point2i> CWreducedModelEdges{vcg::Point2i(1, 5),
|
||||||
vcg::Point2i(3, 1)};
|
vcg::Point2i(3, 5)};
|
||||||
FlatPattern CWReducedModel(numberOfNodesPerSlot, CWreducedModelEdges);
|
FlatPattern CWReducedModel(numberOfNodesPerSlot, CWreducedModelEdges);
|
||||||
CWReducedModel.setLabel("CCW_reduced");
|
CWReducedModel.setLabel("CW_reduced");
|
||||||
CWReducedModel.scale(0.03);
|
CWReducedModel.scale(0.03);
|
||||||
|
|
||||||
std::vector<vcg::Point2i> CCWreducedModelEdges{vcg::Point2i(1, 5),
|
std::vector<vcg::Point2i> CCWreducedModelEdges{vcg::Point2i(1, 5),
|
||||||
vcg::Point2i(3, 5)};
|
vcg::Point2i(3, 1)};
|
||||||
FlatPattern CCWReducedModel(numberOfNodesPerSlot, CCWreducedModelEdges);
|
FlatPattern CCWReducedModel(numberOfNodesPerSlot, CCWreducedModelEdges);
|
||||||
CCWReducedModel.setLabel("CW_reduced");
|
CCWReducedModel.setLabel("CCW_reduced");
|
||||||
|
CCWReducedModel.savePly(CWReducedModel.getLabel());
|
||||||
CCWReducedModel.scale(0.03);
|
CCWReducedModel.scale(0.03);
|
||||||
|
|
||||||
std::vector<FlatPattern *> reducedModels{&singleBarReducedModel,
|
std::vector<FlatPattern *> reducedModels{&singleBarReducedModel,
|
||||||
|
@ -178,7 +190,7 @@ int main(int argc, char *argv[]) {
|
||||||
ReducedModelOptimizer::xRange beamE{"E", 0.1, 1.9};
|
ReducedModelOptimizer::xRange beamE{"E", 0.1, 1.9};
|
||||||
ReducedModelOptimizer::xRange innerHexagonSize{"HS", 0.1, 0.9};
|
ReducedModelOptimizer::xRange innerHexagonSize{"HS", 0.1, 0.9};
|
||||||
// Test set of full patterns
|
// Test set of full patterns
|
||||||
std::string fullPatternsTestSetDirectory = "TestSet";
|
std::string fullPatternsTestSetDirectory = "../TestSet";
|
||||||
if (!std::filesystem::exists(
|
if (!std::filesystem::exists(
|
||||||
std::filesystem::path(fullPatternsTestSetDirectory))) {
|
std::filesystem::path(fullPatternsTestSetDirectory))) {
|
||||||
std::cerr << "Full pattern directory does not exist: "
|
std::cerr << "Full pattern directory does not exist: "
|
||||||
|
@ -201,17 +213,18 @@ int main(int argc, char *argv[]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
FlatPattern fullPattern(filepathString);
|
FlatPattern fullPattern(filepathString);
|
||||||
fullPattern.setLabel(filepath.stem().string());
|
fullPattern.setLabel(filepath.stem().string());
|
||||||
fullPattern.scale(0.03);
|
fullPattern.scale(0.03);
|
||||||
for (int reducedPatternIndex = 0;
|
// for (int reducedPatternIndex = 0;
|
||||||
reducedPatternIndex < reducedModels.size(); reducedPatternIndex++) {
|
// reducedPatternIndex < reducedModels.size();
|
||||||
FlatPattern *pFullPattern = new FlatPattern();
|
// reducedPatternIndex++) {
|
||||||
pFullPattern->copy(fullPattern);
|
FlatPattern *pFullPattern = new FlatPattern();
|
||||||
FlatPattern *pReducedPattern = new FlatPattern();
|
pFullPattern->copy(fullPattern);
|
||||||
pReducedPattern->copy(*reducedModels[reducedPatternIndex]);
|
FlatPattern *pReducedPattern = new FlatPattern();
|
||||||
//pReducedPattern->copy(*reducedModels[0]);
|
// pReducedPattern->copy(*reducedModels[reducedPatternIndex]);
|
||||||
patternPairs.push_back(std::make_pair(pFullPattern, pReducedPattern));
|
pReducedPattern->copy(*reducedModels[0]);
|
||||||
}
|
patternPairs.push_back(std::make_pair(pFullPattern, pReducedPattern));
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
// for (double rangeOffset = 0.15; rangeOffset <= 0.95; rangeOffset += 0.05)
|
// for (double rangeOffset = 0.15; rangeOffset <= 0.95; rangeOffset += 0.05)
|
||||||
|
@ -225,19 +238,19 @@ int main(int argc, char *argv[]) {
|
||||||
// settings_optimization.numberOfFunctionCalls += 100) {
|
// settings_optimization.numberOfFunctionCalls += 100) {
|
||||||
std::string optimiziationResultsDirectory = "OptimizationResults";
|
std::string optimiziationResultsDirectory = "OptimizationResults";
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
settings_optimization.numberOfFunctionCalls =100;
|
settings_optimization.numberOfFunctionCalls = 100;
|
||||||
|
} else if (argc == 2) {
|
||||||
|
settings_optimization.numberOfFunctionCalls = std::atoi(argv[1]);
|
||||||
|
} else if (argc == 3) {
|
||||||
|
settings_optimization.numberOfFunctionCalls = std::atoi(argv[1]);
|
||||||
|
optimiziationResultsDirectory = argv[2];
|
||||||
}
|
}
|
||||||
else if (argc == 2) {
|
// settings_optimization.normalizeObjectiveValue = false;
|
||||||
settings_optimization.numberOfFunctionCalls =std::atoi(argv[1]);
|
// optimizeTestSet(patternPairs, settings_optimization,
|
||||||
}
|
// optimiziationResultsDirectory);
|
||||||
else if (argc == 3) {
|
|
||||||
settings_optimization.numberOfFunctionCalls =std::atoi(argv[1]);
|
|
||||||
optimiziationResultsDirectory = argv[2];
|
|
||||||
}
|
|
||||||
settings_optimization.normalizeObjectiveValue =false;
|
|
||||||
optimizeTestSet(patternPairs,settings_optimization,optimiziationResultsDirectory);
|
|
||||||
settings_optimization.normalizeObjectiveValue = true;
|
settings_optimization.normalizeObjectiveValue = true;
|
||||||
optimizeTestSet(patternPairs,settings_optimization,optimiziationResultsDirectory);
|
optimizeTestSet(patternPairs, settings_optimization,
|
||||||
|
optimiziationResultsDirectory);
|
||||||
|
|
||||||
for (auto &patternPair : patternPairs) {
|
for (auto &patternPair : patternPairs) {
|
||||||
delete patternPair.first;
|
delete patternPair.first;
|
||||||
|
|
|
@ -125,7 +125,8 @@ GlobalOptimizationVariables tls[MAX_THREAD] __attribute__((aligned(64)));
|
||||||
|
|
||||||
double ReducedModelOptimizer::computeError(
|
double ReducedModelOptimizer::computeError(
|
||||||
const std::vector<Vector6d> &reducedPatternDisplacements,
|
const std::vector<Vector6d> &reducedPatternDisplacements,
|
||||||
const std::vector<Vector6d> &fullPatternDisplacements,const double& interfaceDisplacementsNormSum,
|
const std::vector<Vector6d> &fullPatternDisplacements,
|
||||||
|
const double &interfaceDisplacementsNormSum,
|
||||||
const std::unordered_map<ReducedPatternVertexIndex, FullPatternVertexIndex>
|
const std::unordered_map<ReducedPatternVertexIndex, FullPatternVertexIndex>
|
||||||
&reducedToFullInterfaceViMap) {
|
&reducedToFullInterfaceViMap) {
|
||||||
auto &global = tls[omp_get_thread_num()];
|
auto &global = tls[omp_get_thread_num()];
|
||||||
|
@ -156,7 +157,7 @@ double ReducedModelOptimizer::computeError(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (global.optimizationSettings.normalizeObjectiveValue) {
|
if (global.optimizationSettings.normalizeObjectiveValue) {
|
||||||
return error/std::max(interfaceDisplacementsNormSum,0.00003);
|
return error / std::max(interfaceDisplacementsNormSum, 0.00003);
|
||||||
}
|
}
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
@ -293,8 +294,11 @@ double ReducedModelOptimizer::objective(long n, const double *x) {
|
||||||
// simulationSettings);
|
// simulationSettings);
|
||||||
global.numOfSimulationCrashes++;
|
global.numOfSimulationCrashes++;
|
||||||
} else {
|
} else {
|
||||||
error += computeError(
|
error += computeError(
|
||||||
reducedModelResults.displacements, global.fullPatternDisplacements[simulationScenarioIndex],global.fullPatternDisplacementNormSum[simulationScenarioIndex], global.reducedToFullInterfaceViMap);
|
reducedModelResults.displacements,
|
||||||
|
global.fullPatternDisplacements[simulationScenarioIndex],
|
||||||
|
global.fullPatternDisplacementNormSum[simulationScenarioIndex],
|
||||||
|
global.reducedToFullInterfaceViMap);
|
||||||
filename = "/home/iason/Coding/Projects/Approximating shapes with flat "
|
filename = "/home/iason/Coding/Projects/Approximating shapes with flat "
|
||||||
"patterns/RodModelOptimizationForPatterns/build/"
|
"patterns/RodModelOptimizationForPatterns/build/"
|
||||||
"ProblematicSimulationJobs/conv_dimensions.txt";
|
"ProblematicSimulationJobs/conv_dimensions.txt";
|
||||||
|
@ -327,7 +331,7 @@ double ReducedModelOptimizer::objective(long n, const double *x) {
|
||||||
global.minX.assign(x, x + n);
|
global.minX.assign(x, x + n);
|
||||||
}
|
}
|
||||||
// if (++global.numberOfFunctionCalls %100== 0) {
|
// if (++global.numberOfFunctionCalls %100== 0) {
|
||||||
//std::cout << "Number of function calls:" << global.numberOfFunctionCalls
|
// std::cout << "Number of function calls:" << global.numberOfFunctionCalls
|
||||||
// << std::endl;
|
// << std::endl;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
@ -661,8 +665,8 @@ void ReducedModelOptimizer::computeDesiredReducedModelDisplacements(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ReducedModelOptimizer::Results ReducedModelOptimizer::runOptimization(
|
ReducedModelOptimizer::Results
|
||||||
const Settings &settings) {
|
ReducedModelOptimizer::runOptimization(const Settings &settings) {
|
||||||
auto &global = tls[omp_get_thread_num()];
|
auto &global = tls[omp_get_thread_num()];
|
||||||
|
|
||||||
global.gObjectiveValueHistory.clear();
|
global.gObjectiveValueHistory.clear();
|
||||||
|
@ -1051,20 +1055,23 @@ void ReducedModelOptimizer::visualizeResults(
|
||||||
SimulationResults fullModelResults =
|
SimulationResults fullModelResults =
|
||||||
simulator.executeSimulation(pFullPatternSimulationJob);
|
simulator.executeSimulation(pFullPatternSimulationJob);
|
||||||
fullModelResults.registerForDrawing();
|
fullModelResults.registerForDrawing();
|
||||||
//fullModelResults.saveDeformedModel();
|
// fullModelResults.saveDeformedModel();
|
||||||
const std::shared_ptr<SimulationJob> &pReducedPatternSimulationJob =
|
const std::shared_ptr<SimulationJob> &pReducedPatternSimulationJob =
|
||||||
reducedPatternSimulationJobs[simulationScenarioIndex];
|
reducedPatternSimulationJobs[simulationScenarioIndex];
|
||||||
SimulationResults reducedModelResults =
|
SimulationResults reducedModelResults =
|
||||||
simulator.executeSimulation(pReducedPatternSimulationJob);
|
simulator.executeSimulation(pReducedPatternSimulationJob);
|
||||||
double interfaceDisplacementNormSum = 0;
|
double interfaceDisplacementNormSum = 0;
|
||||||
for (const auto& interfaceViPair : reducedToFullInterfaceViMap) {
|
for (const auto &interfaceViPair : reducedToFullInterfaceViMap) {
|
||||||
const int fullPatternInterfaceIndex = interfaceViPair.second;
|
const int fullPatternInterfaceIndex = interfaceViPair.second;
|
||||||
Eigen::Vector3d fullPatternDisplacementVector(fullModelResults.displacements[fullPatternInterfaceIndex][0], fullModelResults.displacements[fullPatternInterfaceIndex][1], fullModelResults.displacements[fullPatternInterfaceIndex][2]);
|
Eigen::Vector3d fullPatternDisplacementVector(
|
||||||
interfaceDisplacementNormSum += fullPatternDisplacementVector.norm();
|
fullModelResults.displacements[fullPatternInterfaceIndex][0],
|
||||||
|
fullModelResults.displacements[fullPatternInterfaceIndex][1],
|
||||||
|
fullModelResults.displacements[fullPatternInterfaceIndex][2]);
|
||||||
|
interfaceDisplacementNormSum += fullPatternDisplacementVector.norm();
|
||||||
}
|
}
|
||||||
double error = computeError(reducedModelResults.displacements,
|
double error = computeError(
|
||||||
fullModelResults.displacements,interfaceDisplacementNormSum,
|
reducedModelResults.displacements, fullModelResults.displacements,
|
||||||
reducedToFullInterfaceViMap);
|
interfaceDisplacementNormSum, reducedToFullInterfaceViMap);
|
||||||
std::cout << "Error of simulation scenario "
|
std::cout << "Error of simulation scenario "
|
||||||
<< simulationScenarioStrings[simulationScenarioIndex] << " is "
|
<< simulationScenarioStrings[simulationScenarioIndex] << " is "
|
||||||
<< error << std::endl;
|
<< error << std::endl;
|
||||||
|
@ -1121,17 +1128,22 @@ ReducedModelOptimizer::Results ReducedModelOptimizer::optimize(
|
||||||
simulationJobs[simulationScenarioIndex];
|
simulationJobs[simulationScenarioIndex];
|
||||||
SimulationResults fullModelResults =
|
SimulationResults fullModelResults =
|
||||||
simulator.executeSimulation(pFullPatternSimulationJob, settings);
|
simulator.executeSimulation(pFullPatternSimulationJob, settings);
|
||||||
global.fullPatternDisplacements[simulationScenarioIndex] = fullModelResults.displacements;
|
global.fullPatternDisplacements[simulationScenarioIndex] =
|
||||||
|
fullModelResults.displacements;
|
||||||
double interfaceDisplacementNormSum = 0;
|
double interfaceDisplacementNormSum = 0;
|
||||||
for (const auto& interfaceViPair : global.reducedToFullInterfaceViMap) {
|
for (const auto &interfaceViPair : global.reducedToFullInterfaceViMap) {
|
||||||
const int fullPatternInterfaceIndex = interfaceViPair.second;
|
const int fullPatternInterfaceIndex = interfaceViPair.second;
|
||||||
Eigen::Vector3d fullPatternDisplacementVector(fullModelResults.displacements[fullPatternInterfaceIndex][0], fullModelResults.displacements[fullPatternInterfaceIndex][1], fullModelResults.displacements[fullPatternInterfaceIndex][2]);
|
Eigen::Vector3d fullPatternDisplacementVector(
|
||||||
interfaceDisplacementNormSum += fullPatternDisplacementVector.norm();
|
fullModelResults.displacements[fullPatternInterfaceIndex][0],
|
||||||
|
fullModelResults.displacements[fullPatternInterfaceIndex][1],
|
||||||
|
fullModelResults.displacements[fullPatternInterfaceIndex][2]);
|
||||||
|
interfaceDisplacementNormSum += fullPatternDisplacementVector.norm();
|
||||||
}
|
}
|
||||||
global.fullPatternDisplacementNormSum[simulationScenarioIndex] = interfaceDisplacementNormSum;
|
global.fullPatternDisplacementNormSum[simulationScenarioIndex] =
|
||||||
//global.g_optimalReducedModelDisplacements[simulationScenarioIndex].resize(
|
interfaceDisplacementNormSum;
|
||||||
|
// global.g_optimalReducedModelDisplacements[simulationScenarioIndex].resize(
|
||||||
// m_pReducedPatternSimulationMesh->VN(), 3);
|
// m_pReducedPatternSimulationMesh->VN(), 3);
|
||||||
//computeDesiredReducedModelDisplacements(
|
// computeDesiredReducedModelDisplacements(
|
||||||
// fullModelResults, global.reducedToFullInterfaceViMap,
|
// fullModelResults, global.reducedToFullInterfaceViMap,
|
||||||
// global.g_optimalReducedModelDisplacements[simulationScenarioIndex]);
|
// global.g_optimalReducedModelDisplacements[simulationScenarioIndex]);
|
||||||
|
|
||||||
|
@ -1154,7 +1166,7 @@ ReducedModelOptimizer::Results ReducedModelOptimizer::optimize(
|
||||||
// optResults.draw();
|
// optResults.draw();
|
||||||
|
|
||||||
// visualizeResults(simulationJobs, global.simulationScenarioIndices);
|
// visualizeResults(simulationJobs, global.simulationScenarioIndices);
|
||||||
//visualizeResults(simulationJobs, global.reducedPatternSimulationJobs,
|
// visualizeResults(simulationJobs, global.reducedPatternSimulationJobs,
|
||||||
// global.simulationScenarioIndices,global.reducedToFullInterfaceViMap);
|
// global.simulationScenarioIndices,global.reducedToFullInterfaceViMap);
|
||||||
return optResults;
|
return optResults;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue