Add a solids4foam solid participant to turek-hron-fsi3 - #915
Draft
philipcardiff wants to merge 5 commits into
Draft
Add a solids4foam solid participant to turek-hron-fsi3#915philipcardiff wants to merge 5 commits into
philipcardiff wants to merge 5 commits into
Conversation
The case is adapted from the HronTurekFsi3 benchmark shipped with solids4foam: a neo-Hookean, nonlinear-geometry total-Lagrangian solid model solved with PETSc SNES, with the same material properties as the deal.II case (E = 5.6 MPa, nu = 0.4, rho = 1000). The interface patch uses the solids4foam solidTraction boundary condition, whose tractionField option consumes the solidTraction volVectorField that the adapter fills. Requires an OpenFOAM-preCICE adapter with support for reading Stress in solid participants, and solids4foam built with PETSc. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SBFTMffUN7qDigrDQrPVb2
…ds4foam Matches the settings used in breaking-dam-2d (PR precice#912): nonlinear-geometry total-Lagrangian model with polynomial-reconstruction high-order discretisation, alpha stabilisation and the PETSc SNES solution algorithm. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SBFTMffUN7qDigrDQrPVb2
Measured over the settled limit cycle of the full 15 s simulation against the Turek-Hron FSI3 benchmark value, comparing no high-order reconstruction, polynomialOrder 2 and polynomialOrder 3. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SBFTMffUN7qDigrDQrPVb2
philipcardiff
force-pushed
the
turek-hron-solids4foam
branch
from
August 28, 2026 20:20
0ed1d7f to
6c0fff1
Compare
The table previously showed the default (no highOrderCoeffs) scheme as having no polynomial order. It is linear, i.e. p = 1, reached through its own reconstruction rather than the generalised high-order machinery, so the two first-order paths are now named explicitly. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T8a3NJt7iPU6XJtqgFyZmR
This case uses a neo-Hookean law, matching the deal.II participant, while the benchmark itself specifies St. Venant-Kirchhoff, as used by the Nutils participant. Also notes that the first-order row of the polynomial-order table uses the default scheme rather than highOrderCoeffs with polynomialOrder 1. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T8a3NJt7iPU6XJtqgFyZmR
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.
Important
Draft: blocked on precice/openfoam-adapter#417 ("Support reading Stress in solid participants"). This case cannot run until that adapter change is released, and the reference-results tarball cannot be generated until it reaches the system-test images. Marking ready for review once #417 is merged.
Summary
Adds a solids4foam solid participant to
turek-hron-fsi3, adapted from theHronTurekFsi3benchmark that solids4foam ships. This is a natural fit: solids4foam maintains its own version of this benchmark, so the tutorial gains a cross-check against the deal.II and Nutils participants.alphastabilisation.interface/fixed/frontAndBackto match the repo's conventions.interfacepatch uses the solids4foamsolidTractionboundary condition, whosetractionFieldoption consumes thesolidTractionvolVectorField that the adapter fills.Results
Full 15 s run (15000 time windows), fluid on 20 MPI ranks, solid serial. Flap-tip y-displacement over the settled limit cycle (t = 8 to 15 s), against the Turek-Hron FSI3 benchmark value of uy = 1.48 +/- 34.38 mm:
polynomialOrder 3)Choice of polynomial order
Since the high-order (polynomial reconstruction) discretisation is a cost/accuracy knob, I ran the full 15 s simulation three times, changing only the solid discretisation order and holding everything else fixed:
highOrderCoeffs)polynomialOrder 2polynomialOrder 3(used here)The first row is the default scheme rather than
highOrderCoeffswithpolynomialOrder 1. Both are first order and give essentially the same answer, differing only through the stencil size, so only the default one is listed.Accuracy improves monotonically with order. The solid solver is genuinely 3.2x more expensive at p=3 (solid CPU time 5023 s -> 15913 s), but the end-to-end runtime is essentially unchanged, because in this tutorial the fluid participant dominates and the extra solid work hides behind the coupling. Wall-clock times were 28594 s, 27315 s and 29345 s respectively — within the noise of other jobs sharing the node.
I therefore propose
polynomialOrder 3, but the trade-off is documented in the README and switching is a one-line edit, so please say if you would rather ship a cheaper solid. Note thatpolynomialOrder 2is both cheaper and more accurate than no high-order reconstruction at all, so the plain low-order option is dominated.One observation independent of the solid settings: all three variants give an oscillation frequency of 5.50-5.64 Hz against the benchmark's 5.3 Hz. Since polynomial order does not move it, that offset comes from the fluid side or the coupling rather than the solid discretisation.
Constitutive law
Flagging a discrepancy that predates this PR and is worth a decision. This case uses a compressible neo-Hookean law (
neoHookeanElastic), which matches the deal.II participant (set Model = neo-Hookean) and theHronTurekFsi3case that solids4foam ships. However, the original Turek-Hron benchmark specifies a St. Venant-Kirchhoff solid, and that is what the Nutils participant implements (S_ij = lambda E_kk delta_ij + 2 mu E_ij). So the three solid participants in this tutorial are not currently consistent with each other on the material model.At the strain levels reached in FSI3 the two laws are very close, and the p = 3 result above lands within 0.35% of the benchmark amplitude, so this does not look like a source of error here. But if you would prefer the solids4foam case to follow the benchmark definition,
StVenantKirchhoffElasticis a drop-in replacement inconstant/mechanicalPropertieswith the sameE/nuentries, and I am happy to re-run the 15 s case with it and post the comparison. Say the word and I will do that rather than leave it as a note in the README.Tested with OpenFOAM v2606, preCICE 3.4.1, solids4foam (development) and the OpenFOAM adapter from precice/openfoam-adapter#417.
Notes
Stressin solid participants.tests/tests.yamlentry already points at the expected path.multiple-perpendicular-flapsPR each add an entry to thesolids4foamtest suite intests/tests.yaml, so whichever merges last will need a trivial rebase there.🤖 Generated with Claude Code
https://claude.ai/code/session_01SBFTMffUN7qDigrDQrPVb2