Reusing initial version. reset residual force convergence to percentage
This commit is contained in:
parent
d0edd5a6a9
commit
a8b361f859
|
|
@ -977,8 +977,8 @@ void DRMSimulationModel::updateResidualForcesOnTheFly(
|
||||||
Node::Forces &force = pMesh->nodes[vi].force;
|
Node::Forces &force = pMesh->nodes[vi].force;
|
||||||
const Vector6d &nodeResidualForce = force.residual;
|
const Vector6d &nodeResidualForce = force.residual;
|
||||||
sumOfResidualForces = sumOfResidualForces + nodeResidualForce;
|
sumOfResidualForces = sumOfResidualForces + nodeResidualForce;
|
||||||
// const double residualForceNorm = nodeResidualForce.norm();
|
const double residualForceNorm = nodeResidualForce.norm();
|
||||||
const double residualForceNorm = nodeResidualForce.getTranslation().norm();
|
// const double residualForceNorm = nodeResidualForce.getTranslation().norm();
|
||||||
const bool shouldTrigger = std::isnan(residualForceNorm);
|
const bool shouldTrigger = std::isnan(residualForceNorm);
|
||||||
totalResidualForcesNorm += residualForceNorm;
|
totalResidualForcesNorm += residualForceNorm;
|
||||||
}
|
}
|
||||||
|
|
@ -1461,7 +1461,7 @@ void DRMSimulationModel::updateKineticEnergy()
|
||||||
+ node.mass.rotationalI3 * pow(node.velocity[4], 2)
|
+ node.mass.rotationalI3 * pow(node.velocity[4], 2)
|
||||||
+ node.mass.rotationalI2 * pow(node.velocity[5], 2));
|
+ node.mass.rotationalI2 * pow(node.velocity[5], 2));
|
||||||
|
|
||||||
node.kineticEnergy += nodeTranslationalKineticEnergy /*+ nodeRotationalKineticEnergy*/;
|
node.kineticEnergy += nodeTranslationalKineticEnergy + nodeRotationalKineticEnergy;
|
||||||
assert(node.kineticEnergy < 1e15);
|
assert(node.kineticEnergy < 1e15);
|
||||||
|
|
||||||
pMesh->currentTotalKineticEnergy += node.kineticEnergy;
|
pMesh->currentTotalKineticEnergy += node.kineticEnergy;
|
||||||
|
|
@ -1962,18 +1962,18 @@ SimulationResults DRMSimulationModel::executeSimulation(const std::shared_ptr<Si
|
||||||
auto t1 = std::chrono::high_resolution_clock::now();
|
auto t1 = std::chrono::high_resolution_clock::now();
|
||||||
mSettings = settings;
|
mSettings = settings;
|
||||||
reset();
|
reset();
|
||||||
// double totalExternalForcesNorm = 0;
|
double totalExternalForcesNorm = 0;
|
||||||
// for (const std::pair<VertexIndex, Vector6d> &externalForce : pJob->nodalExternalForces) {
|
for (const std::pair<VertexIndex, Vector6d> &externalForce : pJob->nodalExternalForces) {
|
||||||
// totalExternalForcesNorm += externalForce.second.norm();
|
totalExternalForcesNorm += externalForce.second.norm();
|
||||||
// }
|
}
|
||||||
|
|
||||||
// if (!pJob->nodalExternalForces.empty()) {
|
if (!pJob->nodalExternalForces.empty()) {
|
||||||
// // totalResidualForcesNormThreshold = settings.totalExternalForcesNormPercentageTermination
|
mSettings.totalResidualForcesNormThreshold
|
||||||
// // * totalExternalForcesNorm;
|
= settings.totalExternalForcesNormPercentageTermination * totalExternalForcesNorm;
|
||||||
// } else {
|
} else {
|
||||||
// totalResidualForcesNormThreshold = 1;
|
mSettings.totalResidualForcesNormThreshold = 1e-3;
|
||||||
// std::cout << "No forces setted default residual forces norm threshold" << std::endl;
|
std::cout << "No forces setted default residual forces norm threshold" << std::endl;
|
||||||
// }
|
}
|
||||||
|
|
||||||
if (mSettings.beVerbose) {
|
if (mSettings.beVerbose) {
|
||||||
std::cout << "totalResidualForcesNormThreshold:"
|
std::cout << "totalResidualForcesNormThreshold:"
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ public:
|
||||||
double gamma{0.8};
|
double gamma{0.8};
|
||||||
std::optional<double> displacementCap;
|
std::optional<double> displacementCap;
|
||||||
double totalResidualForcesNormThreshold{1e-3};
|
double totalResidualForcesNormThreshold{1e-3};
|
||||||
|
double totalExternalForcesNormPercentageTermination{1e-3};
|
||||||
Settings() {}
|
Settings() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue