Connect MITC4 drilling evidence across analysis procedures
This commit is contained in:
@@ -64,6 +64,16 @@ bool Within(const double value, const double scale, const double tolerance) {
|
||||
Status Validate(const Domain& domain, const DofManager& dofs,
|
||||
const DynamicAssembly& assembly, const double length) {
|
||||
const std::size_t count = dofs.FullDofCount();
|
||||
if (assembly.frame.mitc4_drilling &&
|
||||
assembly.frame.mitc4_drilling->mode == Mitc4DrillingMode::kDirectSpring) {
|
||||
if (assembly.hidden_constraint.Size() != assembly.rotations.size())
|
||||
return Failure(domain, "dynamic-invalid-algebra-state",
|
||||
"Canonical hidden values must cover every node.");
|
||||
for (std::size_t i = 0U; i < assembly.hidden_constraint.Size(); ++i)
|
||||
if (!std::isfinite(assembly.hidden_constraint[i]))
|
||||
return Failure(domain, "dynamic-invalid-algebra-state",
|
||||
"Canonical hidden values must remain finite.");
|
||||
}
|
||||
if (!std::isfinite(length) || !(length > 0.0) || count % 6U != 0U ||
|
||||
assembly.rotations.size() != count / 6U) {
|
||||
return Failure(domain, "dynamic-invalid-algebra-state",
|
||||
@@ -547,6 +557,8 @@ Status HiddenEvidence(const Domain& domain, const DynamicAssembly& assembly,
|
||||
const SparseMatrix& gradient,
|
||||
DynamicAcceptedFrameState* frame,
|
||||
const bool require_acceleration) {
|
||||
const bool direct = frame->mitc4_drilling &&
|
||||
frame->mitc4_drilling->mode == Mitc4DrillingMode::kDirectSpring;
|
||||
Vector psi{nodes.size()};
|
||||
Vector psi_scale{nodes.size()};
|
||||
Vector velocity_defect{nodes.size()};
|
||||
@@ -575,9 +587,10 @@ Status HiddenEvidence(const Domain& domain, const DynamicAssembly& assembly,
|
||||
const double g =
|
||||
frame->internal_force[full] - frame->external_force[full];
|
||||
const double n = rotation.drill_null[c];
|
||||
psi[row] += n * g;
|
||||
if (!direct) psi[row] += n * g;
|
||||
psi_scale[row] += std::abs(n) * frame->residual_scale[full];
|
||||
}
|
||||
if (direct) psi[row] = assembly.hidden_constraint[node];
|
||||
velocity_defect[row] += velocity_correction;
|
||||
AddCompensated(assembly.hidden_second[node], &acceleration_defect[row],
|
||||
&acceleration_correction);
|
||||
|
||||
Reference in New Issue
Block a user