forked from 1b-agent/fieldcraft-upstream
model: progress of long commands, reported by the solvers and the tet mesher
fieldcraft_model::progress: a host installs a Progress on the worker thread and reads its snapshot from another; the engine names the step being solved, the nonlinear solver its load factor, the explicit solver its time, the fluid solver its steps, transient heat its increments and the tet mesher its stage and pass. Without one installed every report is a no-op (#322, #357). 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
a7bb67c452
commit
0e0d8bd114
12 files changed
+218
-11
No files matched your search
@@ -381,7 +381,9 @@ fn run(model: &Model, resolved: &Resolved, step: &Step, limits: &Limits) -> Resu
|
||||
let mut previous = t.clone();
|
||||
let (mut frames, mut times) = (vec![t.clone()], vec![0.0]);
|
||||
let mut rhs = vec![0.0; n];
|
||||
fieldcraft_model::progress::stage("Time increment", Some(steps as f64), "");
|
||||
for i in 1..=steps {
|
||||
fieldcraft_model::progress::count((i - 1) as f64);
|
||||
b.mul(&t, &mut rhs);
|
||||
for (r, fj) in rhs.iter_mut().zip(&f) {
|
||||
*r += dt * fj;
|
||||
|
||||
@@ -1231,7 +1231,9 @@ fn solve_on(model: &Model, step: &str, limits: &Limits, notes: Vec<String>) -> R
|
||||
// The last converged increment's free motion and the change of the load factor over it.
|
||||
let mut previous: Option<(Vec<f64>, f64)> = None;
|
||||
let max_increments = usize::try_from(settings.max_increments).unwrap_or(usize::MAX);
|
||||
fieldcraft_model::progress::stage("Load factor", Some(1.0), "");
|
||||
while t < 1.0 {
|
||||
fieldcraft_model::progress::count(lambda);
|
||||
if history.increments.len() >= max_increments {
|
||||
return Err(Error::Limit(format!(
|
||||
"step `{}`: {} increments reached the step's cap at load factor {lambda:.6} (raise max_increments)",
|
||||
|
||||
Reference in new issue
Block a user