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_FACEINDEX;
|
||||
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 true;
|
||||
|
@ -184,7 +184,7 @@ public:
|
|||
mask |= vcg::tri::io::Mask::IOM_VERTNORMAL;
|
||||
mask |= vcg::tri::io::Mask::IOM_FACEINDEX;
|
||||
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 true;
|
||||
|
|
|
@ -161,75 +161,6 @@ struct Settings
|
|||
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)
|
||||
{
|
||||
assert(std::filesystem::is_directory(saveToPath));
|
||||
|
@ -285,7 +216,11 @@ struct Settings
|
|||
|
||||
bool load(const std::filesystem::path &jsonFilepath)
|
||||
{
|
||||
assert(std::filesystem::is_directory(loadFromPath));
|
||||
//Load optimal X
|
||||
nlohmann::json json;
|
||||
std::filesystem::path jsonFilepath(
|
||||
std::filesystem::path(loadFromPath).append(JsonKeys::filename));
|
||||
if (!std::filesystem::exists(jsonFilepath)) {
|
||||
std::cerr << "Optimization settings could not be loaded because input filepath does "
|
||||
"not exist:"
|
||||
|
@ -734,6 +669,17 @@ struct Settings
|
|||
if (!std::filesystem::is_directory(simulationScenarioPath)) {
|
||||
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(
|
||||
std::filesystem::path(simulationScenarioPath).append("Full"), ".json");
|
||||
|
@ -830,37 +776,55 @@ struct Settings
|
|||
reducedPattern_optimizationResults.optimalXNameValuePairs.end());
|
||||
|
||||
const std::string ALabel = "A";
|
||||
assert(optimalXVariables.contains(ALabel));
|
||||
const double A = optimalXVariables.at(ALabel);
|
||||
const double beamWidth = std::sqrt(A);
|
||||
const double beamHeight = beamWidth;
|
||||
CrossSectionType elementDimensions(beamWidth, beamHeight);
|
||||
if (optimalXVariables.contains(ALabel)) {
|
||||
const double A = optimalXVariables.at(ALabel);
|
||||
const double beamWidth = std::sqrt(A);
|
||||
const double beamHeight = beamWidth;
|
||||
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 std::string ymLabel = "E";
|
||||
assert(optimalXVariables.contains(ymLabel));
|
||||
const double E = optimalXVariables.at(ymLabel);
|
||||
const ElementMaterial elementMaterial(poissonsRatio, E);
|
||||
if (optimalXVariables.contains(ymLabel)) {
|
||||
const double E = optimalXVariables.at(ymLabel);
|
||||
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";
|
||||
assert(optimalXVariables.contains(JLabel));
|
||||
const double J = optimalXVariables.at(JLabel);
|
||||
if (optimalXVariables.contains(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";
|
||||
assert(optimalXVariables.contains(I2Label));
|
||||
const double I2 = optimalXVariables.at(I2Label);
|
||||
if (optimalXVariables.contains(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";
|
||||
assert(optimalXVariables.contains(I3Label));
|
||||
const double I3 = optimalXVariables.at(I3Label);
|
||||
for (int ei = 0; ei < pReducedPattern_simulationMesh->EN(); ei++) {
|
||||
Element &e = pReducedPattern_simulationMesh->elements[ei];
|
||||
e.setDimensions(elementDimensions);
|
||||
e.setMaterial(elementMaterial);
|
||||
e.dimensions.inertia.J = J;
|
||||
e.dimensions.inertia.I2 = I2;
|
||||
e.dimensions.inertia.I3 = I3;
|
||||
if (optimalXVariables.contains(I3Label)) {
|
||||
const double I3 = optimalXVariables.at(I3Label);
|
||||
for (int ei = 0; ei < pTiledReducedPattern_simulationMesh->EN(); ei++) {
|
||||
Element &e = pTiledReducedPattern_simulationMesh->elements[ei];
|
||||
e.dimensions.inertia.I3 = I3;
|
||||
}
|
||||
}
|
||||
pTiledReducedPattern_simulationMesh->reset();
|
||||
}
|
||||
|
||||
#if POLYSCOPE_DEFINED
|
||||
|
|
Loading…
Reference in New Issue