Resolved conflicts
This commit is contained in:
commit
28f2d885f3
|
@ -163,7 +163,7 @@ public:
|
||||||
mask |= vcg::tri::io::Mask::IOM_VERTNORMAL;
|
mask |= vcg::tri::io::Mask::IOM_VERTNORMAL;
|
||||||
mask |= vcg::tri::io::Mask::IOM_FACEINDEX;
|
mask |= vcg::tri::io::Mask::IOM_FACEINDEX;
|
||||||
mask |= vcg::tri::io::Mask::IOM_FACECOLOR;
|
mask |= vcg::tri::io::Mask::IOM_FACECOLOR;
|
||||||
if (vcg::tri::io::ExporterOBJ<VCGPolyMesh>::Save(*this, filePath.c_str(), mask) != 0) {
|
if (vcg::tri::io::ExporterOBJ<VCGPolyMesh>::Save(*this, filePath.string().c_str(), mask) != 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -184,7 +184,7 @@ public:
|
||||||
mask |= vcg::tri::io::Mask::IOM_VERTNORMAL;
|
mask |= vcg::tri::io::Mask::IOM_VERTNORMAL;
|
||||||
mask |= vcg::tri::io::Mask::IOM_FACEINDEX;
|
mask |= vcg::tri::io::Mask::IOM_FACEINDEX;
|
||||||
mask |= vcg::tri::io::Mask::IOM_FACECOLOR;
|
mask |= vcg::tri::io::Mask::IOM_FACECOLOR;
|
||||||
if (vcg::tri::io::ExporterPLY<VCGPolyMesh>::Save(*this, filePath.c_str(), mask, false) != 0) {
|
if (vcg::tri::io::ExporterPLY<VCGPolyMesh>::Save(*this, filePath.string().c_str(), mask, false) != 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -161,75 +161,6 @@ struct Settings
|
||||||
inline static std::string ObjectiveWeights{"ObjectiveWeight"};
|
inline static std::string ObjectiveWeights{"ObjectiveWeight"};
|
||||||
};
|
};
|
||||||
|
|
||||||
void setDefault()
|
|
||||||
{
|
|
||||||
// ReducedPatternOptimization::xRange beamE{"E", 0.001, 1000};
|
|
||||||
// ReducedPatternOptimization::xRange beamA{"A", 0.001, 1000};
|
|
||||||
// ReducedPatternOptimization::xRange beamI2{"I2", 0.001, 1000};
|
|
||||||
// ReducedPatternOptimization::xRange beamI3{"I3", 0.001, 1000};
|
|
||||||
// ReducedPatternOptimization::xRange beamJ{"J", 0.001, 1000};
|
|
||||||
// ReducedPatternOptimization::xRange innerHexagonSize{"R", 0.05, 0.95};
|
|
||||||
// ReducedPatternOptimization::xRange innerHexagonAngle{"Theta", -30.0, 30.0};
|
|
||||||
// variablesRanges = {beamE, beamA, beamI2, beamI3, beamJ, innerHexagonSize, innerHexagonAngle};
|
|
||||||
// numberOfFunctionCalls = 100000;
|
|
||||||
|
|
||||||
enum OptimizationParameterComparisonScenarioIndex {
|
|
||||||
AllVar,
|
|
||||||
GeoYM,
|
|
||||||
MatGeo,
|
|
||||||
YMMat_Geo,
|
|
||||||
YM_MatGeo,
|
|
||||||
MatGeo_YM,
|
|
||||||
Geo_YM_Mat,
|
|
||||||
YM_Geo_Mat,
|
|
||||||
Geo_Mat,
|
|
||||||
YMGeo_Mat,
|
|
||||||
NumberOfScenarios
|
|
||||||
};
|
|
||||||
const std::vector<
|
|
||||||
std::vector<std::vector<ReducedModelOptimization::OptimizationParameterIndex>>>
|
|
||||||
optimizationParameters = [&]() {
|
|
||||||
std::vector<
|
|
||||||
std::vector<std::vector<ReducedModelOptimization::OptimizationParameterIndex>>>
|
|
||||||
optimizationParameters(NumberOfScenarios);
|
|
||||||
using namespace ReducedModelOptimization;
|
|
||||||
optimizationParameters[AllVar] = {{E, A, I2, I3, J, R, Theta}};
|
|
||||||
optimizationParameters[GeoYM] = {{R, Theta, E}};
|
|
||||||
optimizationParameters[MatGeo] = {{A, I2, I3, J, R, Theta}};
|
|
||||||
optimizationParameters[YMMat_Geo] = {{E, A, I2, I3, J}, {R, Theta}};
|
|
||||||
optimizationParameters[YM_MatGeo] = {{E}, {A, I2, I3, J, R, Theta}};
|
|
||||||
optimizationParameters[MatGeo_YM] = {{A, I2, I3, J, R, Theta}, {E}};
|
|
||||||
optimizationParameters[Geo_YM_Mat] = {{R, Theta}, {E}, {A, I2, I3, J}};
|
|
||||||
optimizationParameters[YM_Geo_Mat] = {{E}, {R, Theta}, {A, I2, I3, J}};
|
|
||||||
optimizationParameters[Geo_Mat] = {{R, Theta}, {A, I2, I3, J}};
|
|
||||||
optimizationParameters[YMGeo_Mat] = {{E, R, Theta}, {A, I2, I3, J}};
|
|
||||||
return optimizationParameters;
|
|
||||||
}();
|
|
||||||
|
|
||||||
constexpr OptimizationParameterComparisonScenarioIndex scenario = AllVar;
|
|
||||||
optimizationStrategy = optimizationParameters[scenario];
|
|
||||||
if (scenario == YMGeo_Mat) {
|
|
||||||
optimizationVariablesGroupsWeights = {0.15, 0.85};
|
|
||||||
}
|
|
||||||
|
|
||||||
// normalizationStrategy = ReducedPatternOptimization::Settings::NormalizationStrategy::Epsilon;
|
|
||||||
// translationNormalizationEpsilon = 0;
|
|
||||||
// rotationNormalizationEpsilon = vcg::math::ToRad(0.0);
|
|
||||||
// solverAccuracy = 1e-2;
|
|
||||||
|
|
||||||
// perBaseScenarioObjectiveWeights[ReducedPatternOptimization::Axial].translational = 1.174011;
|
|
||||||
// perBaseScenarioObjectiveWeights[ReducedPatternOptimization::Shear].translational = 1.690460;
|
|
||||||
// perBaseScenarioObjectiveWeights[ReducedPatternOptimization::Bending].translational = 1.812089;
|
|
||||||
// perBaseScenarioObjectiveWeights[ReducedPatternOptimization::Dome].translational = 0.127392;
|
|
||||||
// perBaseScenarioObjectiveWeights[ReducedPatternOptimization::Saddle].translational = 0.503043;
|
|
||||||
|
|
||||||
// for (int baseScenario = Axial; baseScenario != NumberOfBaseSimulationScenarios;
|
|
||||||
// baseScenario++) {
|
|
||||||
// perBaseScenarioObjectiveWeights[baseScenario].rotational
|
|
||||||
// = 2 - perBaseScenarioObjectiveWeights[baseScenario].translational;
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
void save(const std::filesystem::path &saveToPath)
|
void save(const std::filesystem::path &saveToPath)
|
||||||
{
|
{
|
||||||
assert(std::filesystem::is_directory(saveToPath));
|
assert(std::filesystem::is_directory(saveToPath));
|
||||||
|
@ -285,7 +216,11 @@ struct Settings
|
||||||
|
|
||||||
bool load(const std::filesystem::path &jsonFilepath)
|
bool load(const std::filesystem::path &jsonFilepath)
|
||||||
{
|
{
|
||||||
|
assert(std::filesystem::is_directory(loadFromPath));
|
||||||
|
//Load optimal X
|
||||||
nlohmann::json json;
|
nlohmann::json json;
|
||||||
|
std::filesystem::path jsonFilepath(
|
||||||
|
std::filesystem::path(loadFromPath).append(JsonKeys::filename));
|
||||||
if (!std::filesystem::exists(jsonFilepath)) {
|
if (!std::filesystem::exists(jsonFilepath)) {
|
||||||
std::cerr << "Optimization settings could not be loaded because input filepath does "
|
std::cerr << "Optimization settings could not be loaded because input filepath does "
|
||||||
"not exist:"
|
"not exist:"
|
||||||
|
@ -734,6 +669,17 @@ struct Settings
|
||||||
if (!std::filesystem::is_directory(simulationScenarioPath)) {
|
if (!std::filesystem::is_directory(simulationScenarioPath)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
// Load full pattern files
|
||||||
|
for (const auto &fileEntry : filesystem::directory_iterator(
|
||||||
|
std::filesystem::path(simulationScenarioPath).append("Full"))) {
|
||||||
|
const auto filepath = fileEntry.path();
|
||||||
|
if (filepath.extension() == ".json") {
|
||||||
|
SimulationJob job;
|
||||||
|
job.load(filepath.string());
|
||||||
|
job.pMesh->setBeamMaterial(0.3, fullPatternYoungsModulus);
|
||||||
|
fullPatternSimulationJobs.push_back(std::make_shared<SimulationJob>(job));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const auto fullJobFilepath = Utilities::getFilepathWithExtension(
|
const auto fullJobFilepath = Utilities::getFilepathWithExtension(
|
||||||
std::filesystem::path(simulationScenarioPath).append("Full"), ".json");
|
std::filesystem::path(simulationScenarioPath).append("Full"), ".json");
|
||||||
|
@ -830,38 +776,56 @@ struct Settings
|
||||||
reducedPattern_optimizationResults.optimalXNameValuePairs.end());
|
reducedPattern_optimizationResults.optimalXNameValuePairs.end());
|
||||||
|
|
||||||
const std::string ALabel = "A";
|
const std::string ALabel = "A";
|
||||||
assert(optimalXVariables.contains(ALabel));
|
if (optimalXVariables.contains(ALabel)) {
|
||||||
const double A = optimalXVariables.at(ALabel);
|
const double A = optimalXVariables.at(ALabel);
|
||||||
const double beamWidth = std::sqrt(A);
|
const double beamWidth = std::sqrt(A);
|
||||||
const double beamHeight = beamWidth;
|
const double beamHeight = beamWidth;
|
||||||
CrossSectionType elementDimensions(beamWidth, beamHeight);
|
CrossSectionType elementDimensions(beamWidth, beamHeight);
|
||||||
|
for (int ei = 0; ei < pTiledReducedPattern_simulationMesh->EN(); ei++) {
|
||||||
|
Element &e = pTiledReducedPattern_simulationMesh->elements[ei];
|
||||||
|
e.setDimensions(elementDimensions);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const double poissonsRatio = 0.3;
|
const double poissonsRatio = 0.3;
|
||||||
const std::string ymLabel = "E";
|
const std::string ymLabel = "E";
|
||||||
assert(optimalXVariables.contains(ymLabel));
|
if (optimalXVariables.contains(ymLabel)) {
|
||||||
const double E = optimalXVariables.at(ymLabel);
|
const double E = optimalXVariables.at(ymLabel);
|
||||||
const ElementMaterial elementMaterial(poissonsRatio, E);
|
const ElementMaterial elementMaterial(poissonsRatio, E);
|
||||||
|
for (int ei = 0; ei < pTiledReducedPattern_simulationMesh->EN(); ei++) {
|
||||||
|
Element &e = pTiledReducedPattern_simulationMesh->elements[ei];
|
||||||
|
e.setMaterial(elementMaterial);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const std::string JLabel = "J";
|
const std::string JLabel = "J";
|
||||||
assert(optimalXVariables.contains(JLabel));
|
if (optimalXVariables.contains(JLabel)) {
|
||||||
const double J = optimalXVariables.at(JLabel);
|
const double J = optimalXVariables.at(JLabel);
|
||||||
|
for (int ei = 0; ei < pTiledReducedPattern_simulationMesh->EN(); ei++) {
|
||||||
|
Element &e = pTiledReducedPattern_simulationMesh->elements[ei];
|
||||||
|
e.dimensions.inertia.J = J;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const std::string I2Label = "I2";
|
const std::string I2Label = "I2";
|
||||||
assert(optimalXVariables.contains(I2Label));
|
if (optimalXVariables.contains(I2Label)) {
|
||||||
const double I2 = optimalXVariables.at(I2Label);
|
const double I2 = optimalXVariables.at(I2Label);
|
||||||
|
for (int ei = 0; ei < pTiledReducedPattern_simulationMesh->EN(); ei++) {
|
||||||
|
Element &e = pTiledReducedPattern_simulationMesh->elements[ei];
|
||||||
|
e.dimensions.inertia.I2 = I2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const std::string I3Label = "I3";
|
const std::string I3Label = "I3";
|
||||||
assert(optimalXVariables.contains(I3Label));
|
if (optimalXVariables.contains(I3Label)) {
|
||||||
const double I3 = optimalXVariables.at(I3Label);
|
const double I3 = optimalXVariables.at(I3Label);
|
||||||
for (int ei = 0; ei < pReducedPattern_simulationMesh->EN(); ei++) {
|
for (int ei = 0; ei < pTiledReducedPattern_simulationMesh->EN(); ei++) {
|
||||||
Element &e = pReducedPattern_simulationMesh->elements[ei];
|
Element &e = pTiledReducedPattern_simulationMesh->elements[ei];
|
||||||
e.setDimensions(elementDimensions);
|
|
||||||
e.setMaterial(elementMaterial);
|
|
||||||
e.dimensions.inertia.J = J;
|
|
||||||
e.dimensions.inertia.I2 = I2;
|
|
||||||
e.dimensions.inertia.I3 = I3;
|
e.dimensions.inertia.I3 = I3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pTiledReducedPattern_simulationMesh->reset();
|
||||||
|
}
|
||||||
|
|
||||||
#if POLYSCOPE_DEFINED
|
#if POLYSCOPE_DEFINED
|
||||||
void draw() const {
|
void draw() const {
|
||||||
|
|
Loading…
Reference in New Issue