Uh oh!
There was an error while loading. Please reload this page.
Add Zhong 2008 propagator-matrix analytic response - #594
Open
gthyagi wants to merge 5 commits into
Open
Conversation
Add pure Appendix A no-self-gravity and self-gravity response operators with explicit internal-load scaling, density-contrast naming, dimensional constant documentation, and harmonic-degree validation. Provide a rotated-Stokes adapter that delegates normal-traction recovery to the existing Stokes.boundary_normal_traction API, projects only the requested P_l^0 response, and avoids duplicate CBF, constrained, or dynamic-topography implementations. Keep the feature in uw.postprocessing rather than adding a Zhong-specific facade to the generic Stokes solver. Add focused formula, serial end-to-end, and two/four-rank MPI validation.
Move the public API under uw.postprocessing.geoid and remove Zhong-specific names from the reusable response data types and coefficient functions. Support two-boundary shells with an optional internal load, require model-specific density and gravity inputs explicitly, and retain a focused rotated-free-slip adapter for recovering axisymmetric topography coefficients. Rename the MPI regression, add no-load and parameter-validation coverage, and update developer documentation to distinguish generic postprocessing from a future semi-analytical propagator solver in uw.analytic.
Allow the generic spherical-shell coefficient functions to evaluate the degree-zero radial potential while keeping the rotated-Stokes adapter at degree one or greater because boundary normal traction recovery removes its mean. Add focused degree-zero formula and adapter validation tests and document the distinction.
Implement a mesh-independent uw.analytic.Zhong2008 oracle for the spherical-shell delta-load Stokes benchmark. The solver propagates the Hager-O'Connell four-state poloidal system through arbitrary piecewise-constant radial viscosity layers, enforces impermeable free slip at the CMB and surface, and applies the internal load as a radial-traction jump. Recover no-self-gravity topography, characteristic velocity, and boundary velocity divergence directly from the solved states. Delegate geoid and self-gravity feedback to the generic spherical-shell postprocessing API, using the physical constants published by Zhong et al. as configurable defaults. Add Level 2 regression coverage for all 96 parenthesized analytic quantities in Zhong et al. Tables 2 and 3, plus boundary-condition, load-linearity, validation, and public-API tests. Focused analytic tests pass: 66 passed and 15 optional-assess tests skipped.
Describe the four-state Hager-O'Connell radial system, matrix exponential transfer, viscosity-interface continuity, delta-load stress jump, and free-slip boundary solve used by uw.analytic.Zhong2008. Document the distinction between no-self-gravity outputs and the nested Zhong Table 2/3 self-gravity response, show isoviscous and layered usage, and record the complete 192-value published-table regression coverage. Add the oracle to the public analytic API documentation and developer changelog.
gthyagi
marked this pull request as ready for review
August 16, 2026 17:44
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 freeto 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.
Dependency
This is a stacked PR on top of #591, which adds the generic
uw.postprocessing.geoidcoefficient API. The Zhong oracle calls those purefunctions rather than carrying a second geoid/self-gravity implementation.
Until #591 merges, this comparison also shows its three commits. After #591
merges into
development, the remaining diff is the two commits95b34701andfb9ce95b.What this adds
uw.analytic.Zhong2008is a mesh-independent semi-analytical reference for thespherical-shell delta-load Stokes benchmarks in Zhong et al. (2008).
For one harmonic degree
l, it:v = log(r)with an exact matrix exponential in each constant-viscositylayer;
(0, 0, -rint * load, 0);(
radial velocity = tangential traction = 0) at both shell boundaries;velocity, and horizontal velocity divergence at the surface and CMB;
Add generic spherical-shell geoid and self-gravity postprocessing #591.
This is intentionally a numeric response oracle rather than an
AnalyticSolution(mesh): the paper publishes boundary response coefficients,not pointwise symbolic velocity/pressure fields. It is exported from
uw.analyticbut is not registered byavailable(), whose contract requires amesh-constructible symbolic solution.
Radial system
With
L = l(l + 1)and statethe constant-layer system is
and
u(rb) = exp(A log(rb / ra)) u(ra).API example
The layered Table 3 case is selected with:
Published-reference validation
The focused test checks every parenthesized propagator entry in Zhong et al.
(2008) Tables 2 and 3:
0.25d,0.5d,0.75d2,5,8,1510^4viscosity lid0.25d,0.5d,0.75d2,5,8,15All 192 values agree within the precision printed in the paper. Additional
tests cover both free-slip boundary states, response linearity in load
amplitude, no-self-gravity recovery, input validation, and public API behavior.
Representative degree-2, mid-mantle responses:
sbh_th_bU_tU_b0.4998490.9312600.04486290.0546149-0.01006410.01186060.49980.93130.044860.05461-0.010060.011860.6103740.4353760.05789260.00675446-1.25811e-050.005556050.61040.43540.057890.006754-1.258e-050.005556Checks
python -m pytest tests/test_1029_analytic_zhong2008.py -v:34 passed
./uw testLevel 1: 1476 passed, 49 skipped, 2 xfailedundocumented API items; it reports no new missing Zhong API item.
Review focus
Please check:
Hager--O'Connell convention;
rintfactor in the delta-load jump;but outside the symbolic
available()registry;References
doi:10.1029/JB086iB06p04843.