Repository navigation
fix(openfast): restart from a checkpoint at any glue step - #101
Conversation
A checkpoint written between two commits stopped the restart: the rebuild overlaid the glue's input at the restart time, which the state of the last commit was never reached with, so ChkptTime had to be a multiple of dtM. Between commits nothing of the solver moves, and the coming solve takes its input from the glue, so the state of the last commit is all a restart needs. The OtherState now keeps what that commit was reached with (commit_input): the coupled kinematics and the line-control command, from Init on. The rebuild stands on these at the commit's clock, wherever t lies in the mooring step after it, and refuses only a time outside that step. A restart on the last glue step of an interval reaches the solve with no CalcOutput since the commit, so the committed loads the load predictor shifts are evaluated there first. A restarted run matches the uninterrupted one bit for bit from every glue step of the interval, in .CD.out and the range graphs. A checkpoint written before this change cannot be restarted: OtherState has a new field. Signed-off-by: Jae Hoon Seo <jaehoon.seo@inha.ac.kr>
…parsed The range graphs of an earlier run went late in CD_Init, so an initialisation that stopped before that, on the statics, on a refusal or on a warning at AbortLevel WARNING, left them to be taken for this run's. They now go as soon as the parsed deck names them, before anything else of the initialisation can fail. A rebuild of a run under way passes no root and leaves them. A deck that does not parse names no line, and a module that stops before CableDyn starts never reaches it: both leave every output of the earlier run as it was. Signed-off-by: Jae Hoon Seo <jaehoon.seo@inha.ac.kr>
A restart inside the first mooring step, which an interval restart now allows, diverged on a deck with Rigid6 bodies or rods. The restored state mirror marks their accelerations committed, while at dtM > DT the uninterrupted run reaches its first step with the start still open and the fluid fields of that step re-solve them. A rebuild before the first commit now reopens the start. At dtM = DT there is no such state: the CalcOutput at t = 0 restores the mirror, which closes it. Signed-off-by: Jae Hoon Seo <jaehoon.seo@inha.ac.kr>
The driver rounded the rotation matrix of a prescribed motion to ReKi before it stored it in the mesh, whose orientation field is double precision on every build. In a single-precision build the matrix is then no longer orthogonal to CableDyn's tolerance, and a rotating motion stopped at the first step. Signed-off-by: Jae Hoon Seo <jaehoon.seo@inha.ac.kr>
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
@codex review |
Signed-off-by: Jae Hoon Seo <jaehoon.seo@inha.ac.kr>
|
Codex Review: Didn't find any major issues. More of your lovely PRs please. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
The discard at the parse was tested against a refusal after the parse. A body far too heavy for its lines now fails the static solve itself, by name, and the test requires the files gone. Signed-off-by: Jae Hoon Seo <jaehoon.seo@inha.ac.kr>
|
@codex review |
|
Codex Review: Didn't find any major issues. What shall we delve into next? Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Summary
A coupled run can now restart from a checkpoint at any glue step.
ChkptTimeno longer has to be a multiple ofdtM, and the restarted run matches the uninterrupted one bit for bit.commit_input, holds the kinematics and the line-control command that commit was reached with. A rebuild stands on it at the commit's clock, wherevertfalls in the interval. A restart on the last glue step reaches the solve with noCalcOutputsince the commit, so it evaluates the committed loads first. Only a time outside the mooring step is still refused.CalcSteadyand-VTKLinatdtM > DT: both hit the same refusal and now complete.doc/outputs.rststates.ReKi. OpenFAST itself is not affected.Checkpoint format: OtherState gains
commit_input, so checkpoints from earlier builds cannot be restarted.Checks
Real OpenFAST, restarting from the continuous run's own checkpoints at every step of the first interval and of one interval inside the range window. All rows and range files must be byte-identical.
dtM= 2 and 4DTIn-process restores into
CalcOutputor straight intoUpdateStates:commit_inputfails 20 of 48.dtM= 1, 2 and 4DT, leaves no range files and a.CD.outequal to the uninterrupted run's.dtM= 1, 2 and 4DTis byte-identical to the previous build in.CD.out, range and static files.OPENBLAS_CORETYPE=Prescottand in Debug; pytest passes; no compiler warnings.The CHANGELOG entry lands with the release batch.
Further checks
Fresh OpenFAST and FAST.Farm builds of this head, in double and single precision, with restarts from the continuous run's own checkpoints.
dtM= 2 and 4DT, predictor on and held, retried and notCCmode 5commit_inputfails all 24 double-precision restarts, and without the reopened start rods and bodies each fail 8 of 24.OPENBLAS_CORETYPE=Prescottand in Debug.Line control on rope segments, through the same gate, on a composite line of a 100 m rope section at the fairlead and 750 m of chain:
Es|EdDropping the slow state at a restart fails 8 of 12 on each rope, and dropping the running maximum alone fails 6 of 12, every step of its window.