Skip to content

V3.0 updates - #43

Open
chiefenne wants to merge 61 commits into
masterfrom
v3.0
Open

V3.0 updates#43
chiefenne wants to merge 61 commits into
masterfrom
v3.0

Conversation

@chiefenne

Copy link
Copy Markdown
Owner

progress new meshing architecture

chiefenne and others added 30 commits April 2, 2026 02:17
Replaces the fragile per-station inscribed-circle solver (independent
bounded fixed-point + unvalidated optimizer fallback) with predictor-
corrector continuation, fixing both the tangency-violation bug and the
LE-circle kink.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…continuation tracer

CamberBuilder's CAMBER_METHOD_INSCRIBED_CIRCLES previously solved each
displayed circle independently from a narrow bounded search window seeded
by a naive midpoint guess, falling back to an unvalidated soft-penalty
optimizer whenever that failed -- which happened for nearly every station
near the leading edge on real airfoils, producing circles that visibly
crossed the surface by up to ~3% of chord instead of being tangent to it.

CamberMedialAxis.trace() replaces this with predictor-corrector arc-length
continuation: a continuously-refined nose start (independent of the
existing discrete getLeRadius marker, which is left untouched) is traced
outward using true arc-length (sphere) continuation with 2D Newton
correction at each step, falling back to a blended handoff to the naive
midpoint construction only for whatever stretch near the trailing edge
continuation can't reach. Measured worst-case tangency error dropped from
up to 2.9e-2 chord to under 5e-4 chord across NACA0012/2315 and a heavily
cambered real section (MW-166-39-44-43), and the camberline is now a
continuous curve through the nose rather than kinking at the LE circle.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
CST's "modified CST" fit is a standard Kulfan-style upper/lower-surface
parametrization, not a camber/thickness one -- so CAMBER_METHOD_CST's
clearance-circle refinement and CAMBER_METHOD_LEGACY's naive midpoint were
both just less accurate stand-ins for what the medial-axis tracer now does
properly for every contour, regardless of how it's parametrized.

CamberBuilder.build() drops the method parameter (and le_id, which was
already unused) and always returns the inscribed-circle/medial-axis
result; CAMBER_METHOD_LEGACY, CAMBER_METHOD_CST, and the CST-specific
clearance-circle machinery (_build_cst, _prepare_clearance_samples,
_side_clearance_radius, _clearance_radius) are deleted. The naive
upper/lower midpoint construction itself stays as a private
_build_naive_midline helper -- it's still needed to seed the tracer's
trailing-edge blend fallback, just no longer exposed as something a
caller can choose.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
New selectable engine family where topology (O/C, H later), tunnel shape
(legacy/circular), and volume algorithm (TFI/elliptic/hyperbolic) are
orthogonal first-class choices; exact spline-point wall distribution and
an analytically perpendicular near-wall block are hard requirements.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…hinning

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Meshing.py wiring (settings field, getter, dispatch) is left unstaged because
the file carries unrelated WIP; it accompanies this commit logically.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Wiring in ToolboxPagesMeshing.py, ToolBox.py, and ToolboxPages.py is left
unstaged because those files carry unrelated WIP; it accompanies this commit
logically.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…red TEs

A straight seam inverts near-wall cells on cambered/reflexed airfoils
(MW-166). The seam is now a quadratic Bezier leaving the TE along the wedge
exterior bisector and bending onto the centroid-ray seam point.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Checkpoint of the in-progress v3.0 refactor: new quad-pipeline and metric
modules (QuadLayout/Monitor/Pipeline/Quality/Redistribute,
MetricTriangulation, ToolboxPagesMetricTests) with their tests, plus the
accompanying updates across the meshing/graphics modules. Also ignores all
__pycache__ directories and boundary_layer_code/.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The meshing toolbox page is trimmed to the metric-based engine and gains
the new Structured engine group (topology, tunnel shape, TFI variant,
ortho block, outer-boundary controls). Windtunnel dispatches
engine='structured' to StructuredEngine. This commit mixes the ongoing
panel refactor with the structured-engine wiring because both live in the
same regions of these files.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
naca0012, naca2315, and MW-166-39-44-43 are copied from the gitignored
lib_AE/ and boundary_layer_code/ trees so the camber and structured tests
run on a fresh clone.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rthogonality forcing

Thomas-Middlecoff control functions frozen from the initial grid preserve
boundary clustering; periodic xi lets the O-grid seam relax with its
near-wall nodes anchored to the TE-bisector positions; simplified
Sorenson-style forcing drives mesh lines orthogonal onto the farfield.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds StructuredMeshSettings.algorithm with elliptic iteration/relaxation
controls, engine dispatch through a shared _volume_fill, and the
'Elliptic (Winslow + TM)' entry in the algorithm selector. The elliptic
wall anchor is generalized from the seam to all columns after the blunt
base corner inverted the same way the TE wedge did.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Marches along smoothed front normals with implicit variable-coefficient
layer smoothing (strength ~ (step/local spacing)^2, cyclic for O-grids),
continues while each cell band stays valid up to a height-fraction cap,
and fills the remainder with a TFI boundary-value solve onto the exact
outer distribution; backs the hand-off point off on inversion, with pure
TFI as the logged last resort. Constant-coefficient smoothing, straight
guidance blends, and TFI-target guidance were all tried and fold on
cambered airfoils - recorded in the plan's execution notes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds StructuredMeshSettings.hyperbolic_fraction_cap/hyperbolic_smoothing,
engine dispatch through _volume_fill (computing wall normals via
OrthoLayers for the march), and the 'Hyperbolic (marching)' entry in the
algorithm selector. With the ortho block active, the march runs from the
rim using finite-difference normals only (the rim is no longer the exact
contour, so spline_data/contour_slice are withheld from that call).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…moothing

Laplacian is under-relaxed 4-neighbor averaging; elliptic delegates to
GridElliptic.solve on the sub-grid from the last frozen row, reusing the
phase-2 solver in its smoothing role; angle-based uses the Thales-circle
projection (locus of points subtending a right angle over two neighbors)
to relax each node toward its four right-angle target positions. All
three are wrapped in a quality guard that reverts to the original grid
whenever a pass would lower min(abs(cell jacobian)) - confirmed to
actually fire on real TFI grids where near-wall quality is already
tight.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds StructuredMeshSettings.smoother/smoother_iterations and applies
GridSmoothers.smooth after the volume fill (before the inverted-cell
guard) with frozen_rows = 1 + ortho_layers for the main block and 1 for
the wake strip, logging quality before/after. GUI gains a Smoother combo
(default None) and iterations spinbox.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant