Updated the base scenario max displacements
This commit is contained in:
parent
ace90996bb
commit
1e384c14a7
32
src/main.cpp
32
src/main.cpp
|
|
@ -24,18 +24,10 @@ int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
#ifdef POLYSCOPE_DEFINED
|
#ifdef POLYSCOPE_DEFINED
|
||||||
// ReducedModelOptimization::Results optResults;
|
// ReducedModelOptimization::Results optResults;
|
||||||
// optResults.load("/home/iason/Desktop/dlib_ensmallen_comparison/TestSets/"
|
// optResults.load("/home/iason/Desktop/selectionOfPatterns_0.2To1.6/selectionOfPatterns/1.2/"
|
||||||
// "singlePattern_dlib_firstSubmission/12@single_reduced(100000_1.20)");
|
// "ConvergedJobs/12@single_reduced(100000_1.20)");
|
||||||
// optResults.load("/home/iason/Coding/Projects/Approximating shapes with flat "
|
|
||||||
// "patterns/ReducedModelOptimization/Results/OptimizationResults/"
|
|
||||||
// "objectiveFunction/ConvergedJobs/testSet/7#12");
|
|
||||||
// optResults.load("/home/iason/Desktop/dlib_ensmallen_comparison/TestSets/"
|
|
||||||
// "singlePattern_dlib_23_12/12@single_reduced(100000_1.20)");
|
|
||||||
// optResults.load("/home/iason/Desktop/dlib_ensmallen_comparison/TestSets/"
|
|
||||||
// "singlePattern_ensmallen_AllVars_optParameters/7#12");
|
|
||||||
// optResults.load("/home/iason/Desktop/dlib_ensmallen_comparison/TestSets/dlib_firstSubmission/"
|
|
||||||
// "ConvergedJobs/72@single_reduced(100000_1.20)");
|
|
||||||
// ReducedModelEvaluator::evaluateReducedModel(optResults);
|
// ReducedModelEvaluator::evaluateReducedModel(optResults);
|
||||||
|
// return 0;
|
||||||
#endif
|
#endif
|
||||||
if (argc < 3) {
|
if (argc < 3) {
|
||||||
std::cerr << "Wrong number of input parameters. Expects at least 4 input parameters."
|
std::cerr << "Wrong number of input parameters. Expects at least 4 input parameters."
|
||||||
|
|
@ -43,8 +35,8 @@ int main(int argc, char *argv[])
|
||||||
"1)full pattern file path\n"
|
"1)full pattern file path\n"
|
||||||
"2)reduced pattern file path\n"
|
"2)reduced pattern file path\n"
|
||||||
"3)Optimization results directory path\n"
|
"3)Optimization results directory path\n"
|
||||||
"4)[optional]Optimization settings json file path\n"
|
"4)[optional]Intermediate results directory path\n"
|
||||||
"5)[optional]Intermediate results directory path\n"
|
"5)[optional]Optimization settings json file path\n"
|
||||||
"Exiting.."
|
"Exiting.."
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
std::cerr << "Input arguments are:" << std::endl;
|
std::cerr << "Input arguments are:" << std::endl;
|
||||||
|
|
@ -66,8 +58,8 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
// Set the optization settings
|
// Set the optization settings
|
||||||
ReducedModelOptimization::Settings settings_optimization;
|
ReducedModelOptimization::Settings settings_optimization;
|
||||||
if (argc > 3) {
|
if (argc > 5) {
|
||||||
const std::filesystem::path optimizationSettingsFilePath = argv[4];
|
const std::filesystem::path optimizationSettingsFilePath = argv[5];
|
||||||
if (!std::filesystem::exists(optimizationSettingsFilePath)) {
|
if (!std::filesystem::exists(optimizationSettingsFilePath)) {
|
||||||
std::cerr << "Input optimization settings file does not exist:"
|
std::cerr << "Input optimization settings file does not exist:"
|
||||||
<< optimizationSettingsFilePath << std::endl;
|
<< optimizationSettingsFilePath << std::endl;
|
||||||
|
|
@ -120,9 +112,9 @@ int main(int argc, char *argv[])
|
||||||
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);
|
||||||
const bool input_intermediateResultsDirectoryDefined = argc == 6;
|
const bool input_intermediateResultsDirectoryDefined = argc == 5;
|
||||||
if (input_intermediateResultsDirectoryDefined) {
|
if (input_intermediateResultsDirectoryDefined) {
|
||||||
optimizer.setIntermediateResultsDirectoryPath(std::filesystem::path(argv[5]));
|
optimizer.setIntermediateResultsDirectoryPath(std::filesystem::path(argv[4]));
|
||||||
}
|
}
|
||||||
optimizer.initializePatterns(fullPattern,
|
optimizer.initializePatterns(fullPattern,
|
||||||
reducedPattern,
|
reducedPattern,
|
||||||
|
|
@ -161,7 +153,6 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
#ifdef POLYSCOPE_DEFINED
|
#ifdef POLYSCOPE_DEFINED
|
||||||
ReducedModelEvaluator::evaluateReducedModel(optimizationResults);
|
ReducedModelEvaluator::evaluateReducedModel(optimizationResults);
|
||||||
|
|
||||||
std::vector<std::string> scenarioLabels(
|
std::vector<std::string> scenarioLabels(
|
||||||
optimizationResults.objectiveValue.perSimulationScenario_total.size());
|
optimizationResults.objectiveValue.perSimulationScenario_total.size());
|
||||||
const double colorAxial = 1;
|
const double colorAxial = 1;
|
||||||
|
|
@ -211,11 +202,8 @@ int main(int argc, char *argv[])
|
||||||
.append("perScenarioObjectiveValues.png"));
|
.append("perScenarioObjectiveValues.png"));
|
||||||
// optimizationResults.saveMeshFiles();
|
// optimizationResults.saveMeshFiles();
|
||||||
std::cout << "Saved results to:" << resultsOutputDir << std::endl;
|
std::cout << "Saved results to:" << resultsOutputDir << std::endl;
|
||||||
// optimizationResults.draw();
|
optimizationResults.draw();
|
||||||
|
|
||||||
// ReducedModelOptimization::Results optResults;
|
|
||||||
// optResults.load("/home/iason/Desktop/dlib_ensmallen_comparison/TestSets/"
|
|
||||||
// "singlePattern_dlib_firstSubmission/12@single_reduced(100000_1.20)");
|
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -140,27 +140,27 @@ double ReducedModelOptimizer::computeError(
|
||||||
const double &scenarioWeight,
|
const double &scenarioWeight,
|
||||||
const Settings::ObjectiveWeights &objectiveWeights)
|
const Settings::ObjectiveWeights &objectiveWeights)
|
||||||
{
|
{
|
||||||
const double translationalError
|
|
||||||
= computeDisplacementError(simulationResults_fullPattern.displacements,
|
|
||||||
simulationResults_reducedPattern.displacements,
|
|
||||||
reducedToFullInterfaceViMap,
|
|
||||||
normalizationFactor_translationalDisplacement);
|
|
||||||
// const double translationalError
|
// const double translationalError
|
||||||
// = computeRawTranslationalError(simulationResults_fullPattern.displacements,
|
// = computeDisplacementError(simulationResults_fullPattern.displacements,
|
||||||
// simulationResults_reducedPattern.displacements,
|
// simulationResults_reducedPattern.displacements,
|
||||||
// reducedToFullInterfaceViMap);
|
// reducedToFullInterfaceViMap,
|
||||||
|
// normalizationFactor_translationalDisplacement);
|
||||||
|
const double translationalError
|
||||||
|
= computeRawTranslationalError(simulationResults_fullPattern.displacements,
|
||||||
|
simulationResults_reducedPattern.displacements,
|
||||||
|
reducedToFullInterfaceViMap);
|
||||||
|
|
||||||
// std::cout << "normalization factor:" << normalizationFactor_rotationalDisplacement << std::endl;
|
// std::cout << "normalization factor:" << normalizationFactor_rotationalDisplacement << std::endl;
|
||||||
// std::cout << "trans error:" << translationalError << std::endl;
|
// std::cout << "trans error:" << translationalError << std::endl;
|
||||||
const double rotationalError
|
|
||||||
= computeRotationalError(simulationResults_fullPattern.rotationalDisplacementQuaternion,
|
|
||||||
simulationResults_reducedPattern.rotationalDisplacementQuaternion,
|
|
||||||
reducedToFullInterfaceViMap,
|
|
||||||
normalizationFactor_rotationalDisplacement);
|
|
||||||
// const double rotationalError
|
// const double rotationalError
|
||||||
// = computeRawRotationalError(simulationResults_fullPattern.rotationalDisplacementQuaternion,
|
// = computeRotationalError(simulationResults_fullPattern.rotationalDisplacementQuaternion,
|
||||||
// simulationResults_reducedPattern.rotationalDisplacementQuaternion,
|
// simulationResults_reducedPattern.rotationalDisplacementQuaternion,
|
||||||
// reducedToFullInterfaceViMap);
|
// reducedToFullInterfaceViMap,
|
||||||
|
// normalizationFactor_rotationalDisplacement);
|
||||||
|
const double rotationalError
|
||||||
|
= computeRawRotationalError(simulationResults_fullPattern.rotationalDisplacementQuaternion,
|
||||||
|
simulationResults_reducedPattern.rotationalDisplacementQuaternion,
|
||||||
|
reducedToFullInterfaceViMap);
|
||||||
// std::cout << "rot error:" << rotationalError<< std::endl;
|
// std::cout << "rot error:" << rotationalError<< std::endl;
|
||||||
const double simulationError = objectiveWeights.translational * translationalError
|
const double simulationError = objectiveWeights.translational * translationalError
|
||||||
+ objectiveWeights.rotational * rotationalError;
|
+ objectiveWeights.rotational * rotationalError;
|
||||||
|
|
@ -186,16 +186,16 @@ struct EnsmallenOptimizationObjective
|
||||||
//#ifdef POLYSCOPE_DEFINED
|
//#ifdef POLYSCOPE_DEFINED
|
||||||
// std::cout << "Out of range" << std::endl;
|
// std::cout << "Out of range" << std::endl;
|
||||||
//#endif
|
//#endif
|
||||||
// return std::numeric_limits<double>::max();
|
return std::numeric_limits<double>::max();
|
||||||
// return 1000;
|
// return 1e10;
|
||||||
x[xi] = global.xMax[xi];
|
// x[xi] = global.xMax[xi];
|
||||||
} else if (x[xi] < global.xMin[xi]) {
|
} else if (x[xi] < global.xMin[xi]) {
|
||||||
//#ifdef POLYSCOPE_DEFINED
|
//#ifdef POLYSCOPE_DEFINED
|
||||||
// std::cout << "Out of range" << std::endl;
|
// std::cout << "Out of range" << std::endl;
|
||||||
//#endif
|
//#endif
|
||||||
// return std::numeric_limits<double>::max();
|
return std::numeric_limits<double>::max();
|
||||||
// return 1000;
|
// return 1e10;
|
||||||
x[xi] = global.xMin[xi];
|
// x[xi] = global.xMin[xi];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ReducedModelOptimizer::objective(x);
|
return ReducedModelOptimizer::objective(x);
|
||||||
|
|
@ -247,7 +247,7 @@ double ReducedModelOptimizer::objective(const std::vector<double> &x)
|
||||||
// FormFinder simulator;
|
// FormFinder simulator;
|
||||||
|
|
||||||
std::for_each(
|
std::for_each(
|
||||||
// std::execution::par_unseq,
|
std::execution::par_unseq,
|
||||||
global.simulationScenarioIndices.begin(),
|
global.simulationScenarioIndices.begin(),
|
||||||
global.simulationScenarioIndices.end(),
|
global.simulationScenarioIndices.end(),
|
||||||
[&](const int &simulationScenarioIndex) {
|
[&](const int &simulationScenarioIndex) {
|
||||||
|
|
@ -267,10 +267,10 @@ double ReducedModelOptimizer::objective(const std::vector<double> &x)
|
||||||
std::cout << "Failed simulation" << std::endl;
|
std::cout << "Failed simulation" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
const double simulationScenarioError_PE = std::abs(
|
// const double simulationScenarioError_PE = std::abs(
|
||||||
(reducedModelResults.internalPotentialEnergy
|
// (reducedModelResults.internalPotentialEnergy
|
||||||
- global.fullPatternResults[simulationScenarioIndex].internalPotentialEnergy)
|
// - global.fullPatternResults[simulationScenarioIndex].internalPotentialEnergy)
|
||||||
/ global.fullPatternResults[simulationScenarioIndex].internalPotentialEnergy);
|
// / global.fullPatternResults[simulationScenarioIndex].internalPotentialEnergy);
|
||||||
// else {
|
// else {
|
||||||
#ifdef POLYSCOPE_DEFINED
|
#ifdef POLYSCOPE_DEFINED
|
||||||
#ifdef USE_SCENARIO_WEIGHTS
|
#ifdef USE_SCENARIO_WEIGHTS
|
||||||
|
|
@ -291,7 +291,7 @@ double ReducedModelOptimizer::objective(const std::vector<double> &x)
|
||||||
global.objectiveWeights[simulationScenarioIndex]);
|
global.objectiveWeights[simulationScenarioIndex]);
|
||||||
|
|
||||||
simulationErrorsPerScenario[simulationScenarioIndex]
|
simulationErrorsPerScenario[simulationScenarioIndex]
|
||||||
= simulationScenarioError_displacements + simulationScenarioError_PE;
|
= simulationScenarioError_displacements /*+ simulationScenarioError_PE*/;
|
||||||
// }
|
// }
|
||||||
// #ifdef POLYSCOPE_DEFINED
|
// #ifdef POLYSCOPE_DEFINED
|
||||||
// reducedJob->pMesh->registerForDrawing(Colors::reducedInitial);
|
// reducedJob->pMesh->registerForDrawing(Colors::reducedInitial);
|
||||||
|
|
@ -309,9 +309,9 @@ double ReducedModelOptimizer::objective(const std::vector<double> &x)
|
||||||
// double totalError = std::accumulate(simulationErrorsPerScenario.begin(),
|
// double totalError = std::accumulate(simulationErrorsPerScenario.begin(),
|
||||||
// simulationErrorsPerScenario.end(),
|
// simulationErrorsPerScenario.end(),
|
||||||
// 0);
|
// 0);
|
||||||
double totalError = std::reduce(std::execution::par_unseq,
|
const double totalError = std::reduce(std::execution::par_unseq,
|
||||||
simulationErrorsPerScenario.begin(),
|
simulationErrorsPerScenario.begin(),
|
||||||
simulationErrorsPerScenario.end());
|
simulationErrorsPerScenario.end());
|
||||||
// std::cout << totalError << std::endl;
|
// std::cout << totalError << std::endl;
|
||||||
// global.objectiveValueHistory.push_back(totalError);
|
// global.objectiveValueHistory.push_back(totalError);
|
||||||
// global.plotColors.push_back(10);
|
// global.plotColors.push_back(10);
|
||||||
|
|
@ -975,7 +975,7 @@ ReducedModelOptimizer::getFullPatternMaxSimulationForces(
|
||||||
.append(m_pFullPatternSimulationMesh->getLabel() + ".json"));
|
.append(m_pFullPatternSimulationMesh->getLabel() + ".json"));
|
||||||
const bool fullPatternScenarioMagnitudesExist = std::filesystem::exists(
|
const bool fullPatternScenarioMagnitudesExist = std::filesystem::exists(
|
||||||
patternMaxForceMagnitudesFilePath);
|
patternMaxForceMagnitudesFilePath);
|
||||||
constexpr bool recomputeMagnitudes = false;
|
constexpr bool recomputeMagnitudes = true;
|
||||||
if (fullPatternScenarioMagnitudesExist && !recomputeMagnitudes) {
|
if (fullPatternScenarioMagnitudesExist && !recomputeMagnitudes) {
|
||||||
nlohmann::json json;
|
nlohmann::json json;
|
||||||
std::ifstream ifs(patternMaxForceMagnitudesFilePath.string());
|
std::ifstream ifs(patternMaxForceMagnitudesFilePath.string());
|
||||||
|
|
@ -996,6 +996,11 @@ ReducedModelOptimizer::getFullPatternMaxSimulationForces(
|
||||||
std::ofstream jsonFile(patternMaxForceMagnitudesFilePath.string());
|
std::ofstream jsonFile(patternMaxForceMagnitudesFilePath.string());
|
||||||
jsonFile << json;
|
jsonFile << json;
|
||||||
|
|
||||||
|
#ifdef POLYSCOPE_DEFINED
|
||||||
|
std::cout << "Saved base scenario max magnitudes to:" << patternMaxForceMagnitudesFilePath
|
||||||
|
<< std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
//#endif
|
//#endif
|
||||||
assert(fullPatternSimulationScenarioMaxMagnitudes.size()
|
assert(fullPatternSimulationScenarioMaxMagnitudes.size()
|
||||||
== desiredBaseSimulationScenarioIndices.size());
|
== desiredBaseSimulationScenarioIndices.size());
|
||||||
|
|
@ -1094,12 +1099,12 @@ void ReducedModelOptimizer::runOptimization(const Settings &settings,
|
||||||
// ens::CNE optimizer;
|
// ens::CNE optimizer;
|
||||||
// ens::DE optimizer;
|
// ens::DE optimizer;
|
||||||
// ens::SPSA optimizer;
|
// ens::SPSA optimizer;
|
||||||
// arma::mat xMin_arma(global.xMin);
|
arma::mat xMin_arma(global.xMin);
|
||||||
// arma::mat xMax_arma(global.xMax);
|
arma::mat xMax_arma(global.xMax);
|
||||||
// ens::LBestPSO optimizer(64, xMin_arma, xMax_arma, 1000);
|
// ens::LBestPSO optimizer(64, xMin_arma, xMax_arma, 1000);
|
||||||
ens::LBestPSO optimizer(64,
|
ens::LBestPSO optimizer(200,
|
||||||
1,
|
xMin_arma,
|
||||||
1,
|
xMax_arma,
|
||||||
settings.numberOfFunctionCalls,
|
settings.numberOfFunctionCalls,
|
||||||
500,
|
500,
|
||||||
settings.solverAccuracy,
|
settings.solverAccuracy,
|
||||||
|
|
@ -1322,14 +1327,14 @@ void ReducedModelOptimizer::constructDomeSimulationScenario(
|
||||||
= Eigen::Vector3d(-interfaceVector[0],
|
= Eigen::Vector3d(-interfaceVector[0],
|
||||||
-interfaceVector[1],
|
-interfaceVector[1],
|
||||||
0)
|
0)
|
||||||
* 0.005
|
* 0.001
|
||||||
* std::abs(
|
* std::abs(
|
||||||
forceMagnitude); //NOTE:Should the forced displacement change relatively to the magnitude?
|
forceMagnitude); //NOTE:Should the forced displacement change relatively to the magnitude?
|
||||||
// * std::abs(forceMagnitude / maxForceMagnitude_dome);
|
// * std::abs(forceMagnitude / maxForceMagnitude_dome);
|
||||||
job.nodalForcedDisplacements[viPair.second] = Eigen::Vector3d(interfaceVector[0],
|
job.nodalForcedDisplacements[viPair.second] = Eigen::Vector3d(interfaceVector[0],
|
||||||
interfaceVector[1],
|
interfaceVector[1],
|
||||||
0)
|
0)
|
||||||
* 0.005 * std::abs(forceMagnitude);
|
* 0.001 * std::abs(forceMagnitude);
|
||||||
// * std::abs(forceMagnitude / maxForceMagnitude_dome);
|
// * std::abs(forceMagnitude / maxForceMagnitude_dome);
|
||||||
// CoordType v = (pMesh->vert[viPair.first].cP() - pMesh->vert[viPair.second].cP())
|
// CoordType v = (pMesh->vert[viPair.first].cP() - pMesh->vert[viPair.second].cP())
|
||||||
// ^ CoordType(0, 0, -1).Normalize();
|
// ^ CoordType(0, 0, -1).Normalize();
|
||||||
|
|
@ -1560,19 +1565,22 @@ double ReducedModelOptimizer::computeFullPatternMaxSimulationForce(
|
||||||
global.desiredMaxDisplacementValue = 0.03 * baseTriangleHeight;
|
global.desiredMaxDisplacementValue = 0.03 * baseTriangleHeight;
|
||||||
break;
|
break;
|
||||||
case Shear:
|
case Shear:
|
||||||
global.desiredMaxDisplacementValue = 0.03 * baseTriangleHeight;
|
global.desiredMaxDisplacementValue = 0.04 * baseTriangleHeight;
|
||||||
break;
|
break;
|
||||||
case Bending:
|
case Bending:
|
||||||
|
global.interfaceViForComputingScenarioError = global.fullPatternInterfaceViPairs[0].first;
|
||||||
|
global.desiredMaxDisplacementValue = 0.05 * baseTriangleHeight;
|
||||||
break;
|
break;
|
||||||
case Dome:
|
case Dome:
|
||||||
global.desiredMaxRotationAngle = vcg::math::ToRad(35.0);
|
global.desiredMaxRotationAngle = vcg::math::ToRad(20.0);
|
||||||
objectiveFunction = &fullPatternMaxSimulationForceRotationalObjective;
|
objectiveFunction = &fullPatternMaxSimulationForceRotationalObjective;
|
||||||
forceMagnitudeEpsilon *= 1e-2;
|
forceMagnitudeEpsilon *= 1e-2;
|
||||||
objectiveEpsilon = vcg::math::ToRad(3.0);
|
objectiveEpsilon = vcg::math::ToRad(1.0);
|
||||||
forceMagnitude = 0.6;
|
forceMagnitude = 0.6;
|
||||||
break;
|
break;
|
||||||
case Saddle:
|
case Saddle:
|
||||||
global.interfaceViForComputingScenarioError = global.fullPatternInterfaceViPairs[0].first;
|
global.interfaceViForComputingScenarioError = global.fullPatternInterfaceViPairs[0].first;
|
||||||
|
global.desiredMaxDisplacementValue = 0.05 * baseTriangleHeight;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1907,6 +1915,7 @@ void ReducedModelOptimizer::optimize(
|
||||||
for (int simulationScenarioIndex : global.simulationScenarioIndices) {
|
for (int simulationScenarioIndex : global.simulationScenarioIndices) {
|
||||||
const std::shared_ptr<SimulationJob> &pFullPatternSimulationJob
|
const std::shared_ptr<SimulationJob> &pFullPatternSimulationJob
|
||||||
= global.fullPatternSimulationJobs[simulationScenarioIndex];
|
= global.fullPatternSimulationJobs[simulationScenarioIndex];
|
||||||
|
// std::cout << pFullPatternSimulationJob->getLabel() << std::endl;
|
||||||
|
|
||||||
std::filesystem::path jobResultsDirectoryPath(
|
std::filesystem::path jobResultsDirectoryPath(
|
||||||
std::filesystem::path(intermediateResultsDirectoryPath)
|
std::filesystem::path(intermediateResultsDirectoryPath)
|
||||||
|
|
@ -1914,7 +1923,7 @@ void ReducedModelOptimizer::optimize(
|
||||||
.append(m_pFullPatternSimulationMesh->getLabel())
|
.append(m_pFullPatternSimulationMesh->getLabel())
|
||||||
.append(pFullPatternSimulationJob->getLabel()));
|
.append(pFullPatternSimulationJob->getLabel()));
|
||||||
// .append(pFullPatternSimulationJob->getLabel() + ".json")
|
// .append(pFullPatternSimulationJob->getLabel() + ".json")
|
||||||
constexpr bool recomputeFullPatternResults = true;
|
constexpr bool recomputeFullPatternResults = false;
|
||||||
SimulationResults fullPatternResults;
|
SimulationResults fullPatternResults;
|
||||||
if (!recomputeFullPatternResults && std::filesystem::exists(jobResultsDirectoryPath)) {
|
if (!recomputeFullPatternResults && std::filesystem::exists(jobResultsDirectoryPath)) {
|
||||||
fullPatternResults.load(std::filesystem::path(jobResultsDirectoryPath).append("Results"),
|
fullPatternResults.load(std::filesystem::path(jobResultsDirectoryPath).append("Results"),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue