Refactoring

This commit is contained in:
Iason 2021-02-09 21:43:49 +02:00
parent 67c2c0c0ac
commit 6ba16b0343
2 changed files with 35 additions and 34 deletions

View File

@ -47,11 +47,13 @@ int main(int argc, char *argv[]) {
ReducedModelOptimizer::xRange beamDimensionsRatio{"bOverh", 0.7, 1.3}; ReducedModelOptimizer::xRange beamDimensionsRatio{"bOverh", 0.7, 1.3};
ReducedModelOptimizer::xRange beamE{"E", 0.1, 1.9}; ReducedModelOptimizer::xRange beamE{"E", 0.1, 1.9};
// Test set of full patterns // Test set of full patterns
std::string fullPatternsTestSetDirectory = "TestSet"; std::string fullPatternsTestSetDirectory = "../TestSet";
if (!std::filesystem::exists(std::filesystem::path(fullPatternsTestSetDirectory))) { if (!std::filesystem::exists(
std::cerr << "Full pattern directory does not exist:" << fullPatternsTestSetDirectory << std::endl; std::filesystem::path(fullPatternsTestSetDirectory))) {
return 1; std::cerr << "Full pattern directory does not exist: "
} << fullPatternsTestSetDirectory << std::endl;
return 1;
}
// "/home/iason/Documents/PhD/Research/Approximating shapes with flat " // "/home/iason/Documents/PhD/Research/Approximating shapes with flat "
// "patterns/Pattern_enumerator/Results/1v_0v_2e_1e_1c_6fan/3/Valid"; // "patterns/Pattern_enumerator/Results/1v_0v_2e_1e_1c_6fan/3/Valid";
std::vector<std::pair<FlatPattern *, FlatPattern *>> patternPairs; std::vector<std::pair<FlatPattern *, FlatPattern *>> patternPairs;
@ -100,7 +102,7 @@ int main(int argc, char *argv[]) {
resultsPerPattern(patternPairs.size()); resultsPerPattern(patternPairs.size());
auto start = std::chrono::high_resolution_clock::now(); auto start = std::chrono::high_resolution_clock::now();
#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 auto filepathString = filepath.string(); // const auto filepathString = filepath.string();
@ -125,14 +127,15 @@ int main(int argc, char *argv[]) {
ReducedModelOptimizer optimizer(numberOfNodesPerSlot); ReducedModelOptimizer optimizer(numberOfNodesPerSlot);
optimizer.initializePatterns(*patternPairs[patternPairIndex].first, optimizer.initializePatterns(*patternPairs[patternPairIndex].first,
*patternPairs[patternPairIndex].second, *patternPairs[patternPairIndex].second,
optimizationExcludedEi); optimizationExcludedEi);
// optimizer.optimize({ReducedModelOptimizer::Axial}); // optimizer.optimize({ReducedModelOptimizer::Axial});
ReducedModelOptimizer::Results optimizationResults = ReducedModelOptimizer::Results optimizationResults =
optimizer.optimize(settings); optimizer.optimize(settings);
totalError += optimizationResults.objectiveValue; totalError += optimizationResults.objectiveValue;
resultsPerPattern[patternPairIndex] = resultsPerPattern[patternPairIndex] =
std::make_pair(patternPairs[patternPairIndex].first->getLabel(), optimizationResults); std::make_pair(patternPairs[patternPairIndex].first->getLabel(),
optimizationResults);
totalNumberOfSimulationCrashes += totalNumberOfSimulationCrashes +=
optimizationResults.numberOfSimulationCrashes; optimizationResults.numberOfSimulationCrashes;
// std::cout << "Have optimized " << ++patternsOptimized << "/" // std::cout << "Have optimized " << ++patternsOptimized << "/"
@ -157,8 +160,10 @@ int main(int argc, char *argv[]) {
// resultsPerPattern[patternPairIndex].second.save(saveToPath); // resultsPerPattern[patternPairIndex].second.save(saveToPath);
// } // }
if (!std::filesystem::exists(std::filesystem::path("OptimizationResults/"))) { if (!std::filesystem::exists(
std::filesystem::create_directory(std::filesystem::path("OptimizationResults")); std::filesystem::path("OptimizationResults/"))) {
std::filesystem::create_directory(
std::filesystem::path("OptimizationResults"));
} }
csvfile statistics(std::filesystem::path("OptimizationResults") csvfile statistics(std::filesystem::path("OptimizationResults")

View File

@ -23,7 +23,7 @@ struct GlobalOptimizationVariables {
std::vector<ReducedModelOptimizer::SimulationScenario> std::vector<ReducedModelOptimizer::SimulationScenario>
g_simulationScenarioIndices; g_simulationScenarioIndices;
std::vector<VectorType> g_innerHexagonVectors{6, VectorType(0, 0, 0)}; std::vector<VectorType> g_innerHexagonVectors{6, VectorType(0, 0, 0)};
double g_innerHexagonInitialPos{0}; double g_innerHexagonInitialPos{0};
bool g_optimizeInnerHexagonSize{false}; bool g_optimizeInnerHexagonSize{false};
std::vector<SimulationResults> firstOptimizationRoundResults; std::vector<SimulationResults> firstOptimizationRoundResults;
int g_firstRoundIterationIndex{0}; int g_firstRoundIterationIndex{0};
@ -32,20 +32,16 @@ struct GlobalOptimizationVariables {
std::vector<std::vector<double>> failedSimulationsXRatio; std::vector<std::vector<double>> failedSimulationsXRatio;
int numOfSimulationCrashes{false}; int numOfSimulationCrashes{false};
int numberOfFunctionCalls{0}; int numberOfFunctionCalls{0};
} ;
//static GlobalOptimizationVariables global;
const static int MAX_THREAD = 64;
struct MY_TLS_ITEM
{
std::map<int, int> theMap;
char padding[64 - sizeof(theMap)];
}; };
__declspec(align(64)) GlobalOptimizationVariables tls[MAX_THREAD]; // static GlobalOptimizationVariables global;
const static int MAX_THREAD = 64;
#if defined(_MSC_VER)
__declspec(align(64)) GlobalOptimizationVariables tls[MAX_THREAD];
#elif defined(__GNUC__)
GlobalOptimizationVariables tls[MAX_THREAD] __attribute__((aligned(64)));
#endif
//#pragma omp threadprivate(global) //#pragma omp threadprivate(global)
// struct OptimizationCallback { // struct OptimizationCallback {
@ -129,7 +125,7 @@ double ReducedModelOptimizer::computeError(
const SimulationResults &reducedPatternResults, const SimulationResults &reducedPatternResults,
const Eigen::MatrixX3d &optimalReducedPatternDisplacements) { const Eigen::MatrixX3d &optimalReducedPatternDisplacements) {
double error = 0; double error = 0;
auto& global = tls[omp_get_thread_num()]; auto &global = tls[omp_get_thread_num()];
for (const auto reducedFullViPair : global.g_reducedToFullViMap) { for (const auto reducedFullViPair : global.g_reducedToFullViMap) {
VertexIndex reducedModelVi = reducedFullViPair.first; VertexIndex reducedModelVi = reducedFullViPair.first;
// const auto pos = // const auto pos =
@ -156,7 +152,7 @@ double ReducedModelOptimizer::computeError(
} }
void updateMesh(long n, const double *x) { void updateMesh(long n, const double *x) {
auto& global = tls[omp_get_thread_num()]; auto &global = tls[omp_get_thread_num()];
std::shared_ptr<SimulationMesh> &pReducedPatternSimulationMesh = std::shared_ptr<SimulationMesh> &pReducedPatternSimulationMesh =
global global
.g_reducedPatternSimulationJob[global.g_simulationScenarioIndices[0]] .g_reducedPatternSimulationJob[global.g_simulationScenarioIndices[0]]
@ -230,7 +226,7 @@ double ReducedModelOptimizer::objective(double x0, double x1, double x2,
} }
double ReducedModelOptimizer::objective(long n, const double *x) { double ReducedModelOptimizer::objective(long n, const double *x) {
auto& global = tls[omp_get_thread_num()]; auto &global = tls[omp_get_thread_num()];
// std::cout.precision(17); // std::cout.precision(17);
// for (size_t parameterIndex = 0; parameterIndex < n; parameterIndex++) { // for (size_t parameterIndex = 0; parameterIndex < n; parameterIndex++) {
@ -373,7 +369,7 @@ void ReducedModelOptimizer::computeMaps(
// std::endl; // std::endl;
// Save excluded edges // Save excluded edges
auto& global = tls[omp_get_thread_num()]; auto &global = tls[omp_get_thread_num()];
global.g_reducedPatternExludedEdges.clear(); global.g_reducedPatternExludedEdges.clear();
const size_t fanSize = 6; const size_t fanSize = 6;
const size_t reducedBaseTriangleNumberOfEdges = reducedPattern.EN(); const size_t reducedBaseTriangleNumberOfEdges = reducedPattern.EN();
@ -509,7 +505,7 @@ void ReducedModelOptimizer::initializePatterns(
FlatPattern copyReducedPattern; FlatPattern copyReducedPattern;
copyFullPattern.copy(fullPattern); copyFullPattern.copy(fullPattern);
copyReducedPattern.copy(reducedPattern); copyReducedPattern.copy(reducedPattern);
auto& global = tls[omp_get_thread_num()]; auto &global = tls[omp_get_thread_num()];
global.g_optimizeInnerHexagonSize = copyReducedPattern.EN() == 2; global.g_optimizeInnerHexagonSize = copyReducedPattern.EN() == 2;
if (global.g_optimizeInnerHexagonSize) { if (global.g_optimizeInnerHexagonSize) {
const double h = copyReducedPattern.getBaseTriangleHeight(); const double h = copyReducedPattern.getBaseTriangleHeight();
@ -540,7 +536,7 @@ void ReducedModelOptimizer::initializePatterns(
void ReducedModelOptimizer::initializeOptimizationParameters( void ReducedModelOptimizer::initializeOptimizationParameters(
const std::shared_ptr<SimulationMesh> &mesh) { const std::shared_ptr<SimulationMesh> &mesh) {
auto& global = tls[omp_get_thread_num()]; auto &global = tls[omp_get_thread_num()];
const int numberOfOptimizationParameters = 3; const int numberOfOptimizationParameters = 3;
global.g_initialParameters.resize(global.g_optimizeInnerHexagonSize global.g_initialParameters.resize(global.g_optimizeInnerHexagonSize
? numberOfOptimizationParameters + 1 ? numberOfOptimizationParameters + 1
@ -633,7 +629,7 @@ void ReducedModelOptimizer::computeDesiredReducedModelDisplacements(
ReducedModelOptimizer::Results ReducedModelOptimizer::runOptimization( ReducedModelOptimizer::Results ReducedModelOptimizer::runOptimization(
const Settings &settings, const Settings &settings,
double (*pObjectiveFunction)(long, const double *)) { double (*pObjectiveFunction)(long, const double *)) {
auto& global = tls[omp_get_thread_num()]; auto &global = tls[omp_get_thread_num()];
global.gObjectiveValueHistory.clear(); global.gObjectiveValueHistory.clear();
@ -1002,7 +998,7 @@ void ReducedModelOptimizer::visualizeResults(
simulator.executeSimulation(pFullPatternSimulationJob); simulator.executeSimulation(pFullPatternSimulationJob);
fullModelResults.registerForDrawing(); fullModelResults.registerForDrawing();
fullModelResults.saveDeformedModel(); fullModelResults.saveDeformedModel();
auto& global = tls[omp_get_thread_num()]; auto &global = tls[omp_get_thread_num()];
const std::shared_ptr<SimulationJob> &pReducedPatternSimulationJob = const std::shared_ptr<SimulationJob> &pReducedPatternSimulationJob =
global.g_reducedPatternSimulationJob[simulationScenarioIndex]; global.g_reducedPatternSimulationJob[simulationScenarioIndex];
SimulationResults reducedModelResults = SimulationResults reducedModelResults =
@ -1033,7 +1029,7 @@ void ReducedModelOptimizer::visualizeResults(
ReducedModelOptimizer::Results ReducedModelOptimizer::optimize( ReducedModelOptimizer::Results ReducedModelOptimizer::optimize(
const Settings &xRanges, const Settings &xRanges,
const std::vector<SimulationScenario> &simulationScenarios) { const std::vector<SimulationScenario> &simulationScenarios) {
auto& global = tls[omp_get_thread_num()]; auto &global = tls[omp_get_thread_num()];
global.g_simulationScenarioIndices = simulationScenarios; global.g_simulationScenarioIndices = simulationScenarios;
if (global.g_simulationScenarioIndices.empty()) { if (global.g_simulationScenarioIndices.empty()) {
@ -1046,7 +1042,7 @@ ReducedModelOptimizer::Results ReducedModelOptimizer::optimize(
std::vector<std::shared_ptr<SimulationJob>> simulationJobs = std::vector<std::shared_ptr<SimulationJob>> simulationJobs =
createScenarios(m_pFullPatternSimulationMesh); createScenarios(m_pFullPatternSimulationMesh);
global.g_optimalReducedModelDisplacements.resize(6); global.g_optimalReducedModelDisplacements.resize(6);
global.g_reducedPatternSimulationJob.resize(6); global.g_reducedPatternSimulationJob.resize(6);
global.g_firstRoundIterationIndex = 0; global.g_firstRoundIterationIndex = 0;
global.minY = std::numeric_limits<double>::max(); global.minY = std::numeric_limits<double>::max();
global.numOfSimulationCrashes = 0; global.numOfSimulationCrashes = 0;
@ -1069,8 +1065,8 @@ ReducedModelOptimizer::Results ReducedModelOptimizer::optimize(
computeReducedModelSimulationJob(*pFullPatternSimulationJob, computeReducedModelSimulationJob(*pFullPatternSimulationJob,
m_fullToReducedInterfaceViMap, m_fullToReducedInterfaceViMap,
reducedPatternSimulationJob); reducedPatternSimulationJob);
global.g_reducedPatternSimulationJob[simulationScenarioIndex] = global.g_reducedPatternSimulationJob[simulationScenarioIndex] =
std::make_shared<SimulationJob>(reducedPatternSimulationJob); std::make_shared<SimulationJob>(reducedPatternSimulationJob);
} }
Results optResults = runOptimization(xRanges, &objective); Results optResults = runOptimization(xRanges, &objective);
updateMesh(optResults.x.size(), optResults.x.data()); updateMesh(optResults.x.size(), optResults.x.data());