forked from 1b-agent/fieldcraft-upstream
WIP (parked): folding robustness, stabilization, mesh.revolve, boot-seal profile
Parked work for #182/#185 (not for merge as is): - contact: held active set with primal-dual updates replaces the inconsistent ENGAGED_BAND tangent after chattering (moves the nl-friction-sliding-blocks fixture by 4.5e-8; not re-blessed) - nonlinear: opt-in viscous stabilization (step 'stabilization', calibrated on the first increment), Abaqus STABILIZE, LS-DYNA refusal - ordering: graph (level-structure) nested dissection, chosen when it fills less: half the fill on the revolved boot, factor time 62 s -> 25 s - engine: mesh.revolve command (2D profile -> hex8/wedge6, tags kept) - engine: sample/boot.rs boot-seal profile, axisymmetric and 3D scripts Scratch still in the code: FC_TRACE/TIMES timing prints, NO_BAND/STAB/ SQUEEZE env hooks in tests, boot_axisymmetric_scratch test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
This commit is contained in:
1 parent
227c4544ed
commit
98eaede2dd
18 files changed
+1111
-57
No files matched your search
@@ -686,14 +686,19 @@ fn a_rubber_bellows_folds_onto_itself() {
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
let settings = NonlinearStatic { initial_increment: 0.05, max_increment: 0.1, max_increments: 400, ..NonlinearStatic::default() };
|
||||
let stabilization = std::env::var("STAB").ok().and_then(|v| v.parse().ok());
|
||||
let settings = NonlinearStatic { initial_increment: 0.05, max_increment: 0.1, max_increments: 1000, line_search: stabilization.is_some(), stabilization, ..NonlinearStatic::default() };
|
||||
b.model.add_step(Step::new("Step", Procedure::NonlinearStatic(settings)), None).unwrap();
|
||||
b.model.add_contact("folds", Contact::new(ContactSurfaces::General { surface: None })).unwrap();
|
||||
b.bc("x0", [Some(0.0), None, None], |x| near(x[0], 0.0));
|
||||
b.bc("y0", [None, Some(0.0), None], |x| near(x[1], 0.0));
|
||||
b.bc("base", [None, None, Some(0.0)], |x| near(x[2], 0.0));
|
||||
b.bc("squeeze", [None, None, Some(-0.8)], move |x| near(x[2], height));
|
||||
let r = solve_nonlinear(&b.model, Some("Step"), &Limits::default()).unwrap();
|
||||
let squeeze: f64 = std::env::var("SQUEEZE").ok().and_then(|v| v.parse().ok()).unwrap_or(0.8);
|
||||
b.bc("squeeze", [None, None, Some(-squeeze)], move |x| near(x[2], height));
|
||||
let t0 = std::time::Instant::now();
|
||||
let r = solve_nonlinear(&b.model, Some("Step"), &Limits::default());
|
||||
eprintln!("bellows squeeze {squeeze}: {:?} {}", t0.elapsed(), r.as_ref().err().map(ToString::to_string).unwrap_or_default());
|
||||
let r = r.unwrap();
|
||||
report(&r);
|
||||
let c = &r.contacts[0];
|
||||
eprintln!("closed {} penetration {:.2e} augmentations {}", c.closed(), c.penetration, c.augmentations);
|
||||
@@ -806,3 +811,11 @@ fn what_2d_contact_refuses() {
|
||||
let e = solve_nonlinear(&b.model, Some("Step"), &Limits::default()).unwrap_err().to_string();
|
||||
assert!(e.contains("arc-length"), "{e}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore = "scratch"]
|
||||
fn scratch_quadratic_2d() {
|
||||
let (_, r2) = planar_c_ring(0.15, 1);
|
||||
report(&r2);
|
||||
quadratic(&r2);
|
||||
}
|
||||
Reference in new issue
Block a user