Reusing initial version. reset residual force convergence to percentage

This commit is contained in:
iasonmanolas 2021-07-01 02:45:03 +03:00
parent d0edd5a6a9
commit a8b361f859
2 changed files with 15 additions and 14 deletions

View File

@ -977,8 +977,8 @@ void DRMSimulationModel::updateResidualForcesOnTheFly(
Node::Forces &force = pMesh->nodes[vi].force;
const Vector6d &nodeResidualForce = force.residual;
sumOfResidualForces = sumOfResidualForces + nodeResidualForce;
// const double residualForceNorm = nodeResidualForce.norm();
const double residualForceNorm = nodeResidualForce.getTranslation().norm();
const double residualForceNorm = nodeResidualForce.norm();
// const double residualForceNorm = nodeResidualForce.getTranslation().norm();
const bool shouldTrigger = std::isnan(residualForceNorm);
totalResidualForcesNorm += residualForceNorm;
}
@ -1461,7 +1461,7 @@ void DRMSimulationModel::updateKineticEnergy()
+ node.mass.rotationalI3 * pow(node.velocity[4], 2)
+ node.mass.rotationalI2 * pow(node.velocity[5], 2));
node.kineticEnergy += nodeTranslationalKineticEnergy /*+ nodeRotationalKineticEnergy*/;
node.kineticEnergy += nodeTranslationalKineticEnergy + nodeRotationalKineticEnergy;
assert(node.kineticEnergy < 1e15);
pMesh->currentTotalKineticEnergy += node.kineticEnergy;
@ -1962,18 +1962,18 @@ SimulationResults DRMSimulationModel::executeSimulation(const std::shared_ptr<Si
auto t1 = std::chrono::high_resolution_clock::now();
mSettings = settings;
reset();
// double totalExternalForcesNorm = 0;
// for (const std::pair<VertexIndex, Vector6d> &externalForce : pJob->nodalExternalForces) {
// totalExternalForcesNorm += externalForce.second.norm();
// }
double totalExternalForcesNorm = 0;
for (const std::pair<VertexIndex, Vector6d> &externalForce : pJob->nodalExternalForces) {
totalExternalForcesNorm += externalForce.second.norm();
}
// if (!pJob->nodalExternalForces.empty()) {
// // totalResidualForcesNormThreshold = settings.totalExternalForcesNormPercentageTermination
// // * totalExternalForcesNorm;
// } else {
// totalResidualForcesNormThreshold = 1;
// std::cout << "No forces setted default residual forces norm threshold" << std::endl;
// }
if (!pJob->nodalExternalForces.empty()) {
mSettings.totalResidualForcesNormThreshold
= settings.totalExternalForcesNormPercentageTermination * totalExternalForcesNorm;
} else {
mSettings.totalResidualForcesNormThreshold = 1e-3;
std::cout << "No forces setted default residual forces norm threshold" << std::endl;
}
if (mSettings.beVerbose) {
std::cout << "totalResidualForcesNormThreshold:"

View File

@ -42,6 +42,7 @@ public:
double gamma{0.8};
std::optional<double> displacementCap;
double totalResidualForcesNormThreshold{1e-3};
double totalExternalForcesNormPercentageTermination{1e-3};
Settings() {}
};