Refinement: at most n weight trials at a time, and a cancel flag the caller can set
- RefinementSettings::max_trials_at_once (rugnux_refine_test --trials-at-once): 0 as many as the ladders and the cards take, 1 one after another - the check that side by side changes nothing. Verified: refined model and report identical, side by side vs one after another, GPU (5reo, 9yl4, 6o2h, 9rcs) and CPU engine (6o2h, 9rcs, 5reo), and run to run. - RefinementSettings::cancel, an atomic flag for the broker's live deadline: checked at every iteration of the L-BFGS (positions, B, rigid bodies, group B: the minimiser stops where it stands), at every macro-cycle and before every weight trial. The trials that ran are chosen among as usual; cut before the first, the model is the placement's. RefinementResult::cancelled says so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015CeEGgpKdfkCTJb3YNMJcu (cherry picked from commit f708d3d227bb42215ffe3d9a15c766dbd73b783c)
This commit is contained in:
1 parent
8718065a7c
commit
9da3851844
4 files changed
+85
-22
No files matched your search
@@ -450,5 +450,16 @@ TEST_CASE("Refinement_restrained_recovers_model", "[Refinement]") {
|
||||
rms += refined[i]->pos.dist_sq(ref[i]->pos);
|
||||
rms = std::sqrt(rms / ref.size());
|
||||
CHECK(rms < 0.15);
|
||||
|
||||
// cut short before the first weight trial: the model as placed comes back, no trial chosen
|
||||
const std::atomic<bool> cancel{true};
|
||||
settings.cancel = &cancel;
|
||||
const RefinementResult c = RefineModel(start, merged, cell, sg, 1.0, logger, settings);
|
||||
REQUIRE(c.ok);
|
||||
CHECK(c.cancelled);
|
||||
CHECK_FALSE(c.restrained);
|
||||
CHECK(c.trials.empty());
|
||||
CHECK(c.model != nullptr);
|
||||
CHECK_FALSE(r.cancelled);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user