Skip to content

Extend kernel-split forcewlchs to Stokes velocity SLP/DLP/Strac#175

Open
danfortunato wants to merge 1 commit into
feature/kernsplit-helmholtzfrom
feature/kernsplit-stokes
Open

Extend kernel-split forcewlchs to Stokes velocity SLP/DLP/Strac#175
danfortunato wants to merge 1 commit into
feature/kernsplit-helmholtzfrom
feature/kernsplit-stokes

Conversation

@danfortunato
Copy link
Copy Markdown
Collaborator

@danfortunato danfortunato commented May 17, 2026

Summary

Builds on #172 (Laplace) and #174 (Helmholtz) and adds Stokes velocity layer-potential support to the chunkermat forcewlchs framework. Stokes velocity kernels are 2x2 in opdims; each (xx, xy, yx, yy) sub-block gets an independent kernsplit self/adjacent correction.

What's included

  • New chnk.kernsplit Stokes routines: sto2d_self_correction, sto2d_adj_correction, sto2d_panel_eval. Each dispatches on the sub-block type (svel_xx, ..., dvel_xx, ..., strac_xx, ...).
  • chunkermat (forcewlchs):
    • wlchs_kernel_family, wlchs_has_self_correction, wlchs_*_dispatch, wlchs_kernel_eval, wlchs_extract_scalar extended with Stokes cases (mu passed through spec.mu).
    • Boolean form: a 2x2 stok2d kernel (type s/svel, d/dvel, strac) auto-populates the 4 sub-block layout cells.
    • Struct form: fw.mu may be specified at top level, or per layout entry.

Test plan

  • devtools/test/chunkermat_stok_forcewlchsTest.m (new) — verifies forcewlchs Stokes svel and dvel agree with default GGQ at ~1e-9 (operator action) on a unit-circle problem, plus the D*1 = -1/2 interior-trace identity to 1e-12.
  • Laplace and Helmholtz regressions (chunkermat_lap_forcewlchsTest, chunkermat_helm_forcewlchsTest) still pass.

Notes

Builds on PRs #172 and #174 (Laplace, Helmholtz). Adds Stokes support
to the chunkermat forcewlchs framework. Stokes velocity kernels are
2x2 opdims; each (xx, xy, yx, yy) sub-block gets an independent
kernsplit self/adjacent correction.

New chnk.kernsplit Stokes routines:
  * sto2d_self_correction, sto2d_adj_correction, sto2d_panel_eval.
    Each dispatches on the sub-block type (svel_xx, svel_xy, ...,
    dvel_xx, ..., strac_xx, ...).

chunkermat changes:
  * wlchs_kernel_family recognizes 'stokes'.
  * wlchs_has_self_correction adds Stokes sub-block types.
  * wlchs_self_correction_dispatch / wlchs_adj_correction_dispatch
    route to sto2d_*_correction (mu passed through spec.mu).
  * wlchs_kernel_eval computes the full Stokes 2x2 kernel and extracts
    the requested sub-block.
  * wlchs_extract_scalar accepts 'stokes' family (mu in `param`).
  * Boolean form: kern is a 2x2 stok2d kernel (type s/svel, d/dvel,
    strac); layout is populated automatically across the 4 sub-blocks.
  * Struct form: per-entry mu may be specified at top level (`fw.mu`)
    or per layout entry.

Test: devtools/test/chunkermat_stok_forcewlchsTest.m exercises
chunkermat forcewlchs for svel and dvel on a unit-circle Stokes
problem; checks operator action (vs default GGQ) and Frobenius norms
agree to ~1e-9, plus the D*1 = -1/2 interior-trace identity to 1e-12.

Original implementation contributed by sj90101 <sj90101@gmail.com>.

Co-authored-by: sj90101 <sj90101@gmail.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