Pin openCARP image to v19.0 and add PETSc option file fallback to unblock steps 10 and 11 - #96
Merged
avhekkink merged 2 commits intoSep 3, 2026
Conversation
Step 10 ran two openCARP Laplace solves and reported success without doing them. Step 11 then failed, because the field step 10 must write was absent. Three defects composed. Pin the openCARP image to v19-0. Release v19.0 is the last one that declares ellip_use_pt and parab_use_pt. The latest tag is a development build from after their removal, and it rejects both parameters. Skip a PETSc option file that is not in the mount. openCARP stops with a segmentation fault when it cannot read an option file. Without the flag it uses its own solver settings, which match the settings in amg_cg_opts. Name phie.igb in OpenCarpDocker, and check the fields in UAC_Stage1 and UAC_Stage2. The check tested the output directory, which OpenCarpDocker creates itself, so every openCARP failure reported as a success. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013cT5BGXcsgwFczMGccPwsL
…on' into plugin/atrialstrainmotion-fix-step-10-and-11-UAC
avhekkink
marked this pull request as ready for review
September 2, 2026 16:29
avhekkink
merged commit Sep 3, 2026
9a0db91
into
plugin/atrialstrainmotion-update-DockerAtrialStrainMotion
avhekkink
deleted the
plugin/atrialstrainmotion-fix-step-10-and-11-UAC
branch
September 3, 2026 10:42
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Steps 10 and 11 stopped at the openCARP Laplace solves due to three separate defects composed, the fixes for which are included in this branch.
For future reference, the openCARP container registry can be found at: https://git.opencarp.org/openCARP/openCARP/container_registry.
Release tags present: v15-0, v16-0, v17-0, v18-0, v18-1, v19-0, v20-0.
Note: v20.0 was just released on 2026-09-01 and it has zero references to ellip_use_pt/parab_use_pt, hence the need to pin the image at v19.0.
Changes
The openCARP image is pinned to
v19-0.SetDockerImageOpenCarptakes a tag argument and defaults tov19-0, the waySetDockerImageUacandSetDockerImageAfmotionalready do. Releasev19.0is the last one that declaresellip_use_ptandparab_use_pt. Upstream removed both onmastertwelve days after that release, so thelatesttag is a development build that rejects them, and the solver exited in its parameter parser. The hard-codedlatestliteral in theigbextractblock ofOpenCarpDockerLaplaceSolvesnow reads_dockerimagetoo.A PETSc option file that is absent no longer stops the solve.
GetOpenCarpDockerLaplaceSolverArgumentscopiesilu_cg_optsandamg_cg_optsfrom apetsc_optsfolder beside the executable, then names them to openCARP. That folder is an external, likeMLibandM3DLib, and it is not in the repository. When it is absent the copy fails, and openCARP stops with a segmentation fault inside PETSc rather than a message. The function now adds each-*_options_fileflag only when that file is in the mount, and logs a warning that names the absent file. openCARP then uses its own solver settings, which match the settingsamg_cg_optsholds.OpenCarpDockerchecks the field the solver writes. It passedIsOutputSuccessfulthe output directory, which it creates itself two lines earlier.QFileInfo::exists()is true for a directory andsize()returns the dirent block, so the check passed on an empty directory and every openCARP failure reported as a success. It now namesoutPath + "/phie.igb", and keepsshouldTouchOutputFirstatfalse, which matchesOpenCarpDockerLaplaceSolves.UAC_Stage1andUAC_Stage2check the Laplace solutions.UAC_Stage1re-tested the same four.vtxfiles that theuaccontainer wrote before openCARP ran, so it reported success whatever the solver did. It now also checksLR_UAC_N2/phie.igbandPA_UAC_N2/phie.igb.UAC_Stage2checks its four fields and stops before step 2b, because step 2b reads them.Impacted areas
CemrgCommandLine.{h,cpp}AtrialStrainMotionView.cppCemrgCommandLineis shared. The Atrial Fibres plugin callsSetDockerImageOpenCarpandOpenCarpDockerfromUacCalculationRoughandUacCalculationRefined, so it moves tov19-0and gets the same option-file fallback. All twelveOpenCarpDockercall sites discard the return value, so the stricter output check changes no behaviour there.SetDockerImageOpenCarpalso serves six meshtool routines —DockerSurfaceFromMesh,DockerExtractGradient,DockerRemeshSurface,DockerInterpolateData,DockerConvertMeshFormatandDockerCleanMeshQuality. The pin moves all six fromlatesttov19-0.Testing
Steps 10, 11 and 12 pass on
V-0004in the panel. Step 10 writesphie.igbunderLR_UAC_N2andPA_UAC_N2; step 11 reaches stage 2a and step 2b completes.Step 8 passes on
v19-0. This is the case the pin put at risk, becauseSetDockerImageOpenCarpalso serves the six meshtool routines. It ran against a copy ofV-0004-wdpruned back to the state before step 8, so all four meshtool calls ran for real rather than over existing output. All seven outputs reappeared, and the log confirms every call usedv19-0.Against the
latestbaseline the mesh is the same mesh: 122,250 points and 243,665 elements,clean-Labelled-refined.elem,.lonand both.fconfiles byte-identical, and the coordinates keep their-scale=1000magnitude.clean-Labelled-refined.ptsdiffers slightly — 5,023 points of 122,250 move, by at most 0.014 mm.meshtool clean qualitysmooths iteratively for 200 iterations, so a small difference between builds is expected. The connectivity does not change.The openCARP solve was also driven by hand against a copy of
V-0004-wd/UAC_CTonv19-0, in three configurations. Each one wrote a 490,024-bytephie.igb:amg_cg_optsonlyWithout the fix, the same command segfaults inside PETSc.
MitkCemrgAppModuleandkcl_cemrgapp_atrialstrainmotionboth build and link clean.Not verified. The Atrial Fibres plugin's own UAC buttons are untested on this branch, and they call
SetDockerImageOpenCarpandOpenCarpDockerthroughUacCalculationRoughandUacCalculationRefined.Unrelated failure, for the record. Step 13 fails on
V-0004.CropImageloads thecemrg/cctacontainer output without theCemrgNiftiUtils::RepairNiftiQformcall thatSegmentExtractmakes, and ITK refuses a file whoseqform_codeis 0. This predates the branch and needs its own issue.