Summary
While reproducing the Zhong et al. (2008) isoviscous Stokes response benchmark in UW3, constrained and Nitsche free-slip boundary conditions match different diagnostics:
- Constrained free slip provides useful built-in multiplier/topography diagnostics, but the official 8-rank
1/8 run overpredicts characteristic velocities.
- Nitsche free slip matches the Zhong Table 2 characteristic velocities well at 8 ranks, but raw boundary
sigma_rr is not sufficient for dynamic-topography recovery.
This is related to the broader free-slip discussion in #104, but this issue is specifically about the Zhong 2008 spherical-shell response benchmark.
Benchmark script:
https://github.com/gthyagi/uw3-mantle-convection-benchmarks/blob/main/benchmarks/010_stokes_response_isoviscous.py
Benchmark setup
Default comparison case:
- Zhong et al. (2008) Table 2, first Stokes-flow set
l = 2, m = 0, depth 0.5d
r_b = 0.55, r_t = 1.0, r0 = 0.775
- uniform viscosity,
eta = 1
- internal spherical-boundary load equivalent to
delta(r-r0) P_l^0(theta) e_r
- response coefficients normalized by the measured angular norm of
P_l^0
- serial validation:
-uw_cellsize 1/4
- parallel validation:
mpirun -np 8 ... -uw_cellsize 1/8
Zhong analytical references for this case:
| Quantity |
Reference |
surface topography s |
4.998e-01 |
CMB topography b |
9.313e-01 |
| surface characteristic velocity ` |
Ut |
| CMB characteristic velocity ` |
Ub |
Results
Error summary
| BC / run |
Surface topo error |
CMB topo error |
Surface velocity error |
CMB velocity error |
constrained, serial 1/4 |
15.8% |
16.4% |
1.68% |
3.88% |
constrained, 8-rank 1/8 |
13.0% |
7.66% |
25.1% |
63.1% |
Nitsche gamma 10, serial 1/4 |
10.6% |
15.5% |
0.257% |
5.87% |
Nitsche gamma 10, 8-rank 1/8 |
48.0% |
52.4% |
0.654% |
0.243% |
Nitsche gamma 100, 8-rank 1/8 |
47.9% |
51.5% |
0.146% |
0.038% |
Serial actual response values
BC / serial 1/4 |
Surface topo |
CMB topo |
Surface velocity |
CMB velocity |
| constrained |
4.2090356241027566e-01 |
7.786127017538488e-01 |
1.0228577582537592e-02 |
1.2320478342852333e-02 |
Nitsche gamma 10 |
4.4705955177993373e-01 |
7.87091287177956e-01 |
1.0034120263339545e-02 |
1.2556363891469484e-02 |
8-rank actual response values
BC / 8-rank 1/8 |
Surface topo |
CMB topo |
Surface velocity |
CMB velocity |
| constrained |
5.648430331865263e-01 |
1.0026232680557212e+00 |
1.2584202252522738e-02 |
1.9340833150169143e-02 |
Nitsche gamma 10 |
2.5978694927744095e-01 |
4.43175114203523e-01 |
1.0125825484077849e-02 |
1.1888840166227975e-02 |
Nitsche gamma 100 |
2.6026572894429606e-01 |
4.517496256438572e-01 |
1.0074644204660118e-02 |
1.1855484341433173e-02 |
Interpretation
This appears to split into two issues:
- Velocity response: Nitsche free slip is currently the better match to Zhong Table 2. The 8-rank
1/8 Nitsche run is below 1% error for both surface and CMB characteristic velocity. Constrained free slip overpredicts these velocities at 8 ranks.
- Dynamic topography: constrained multiplier topography is useful, but constrained velocity response does not match the benchmark. Nitsche velocity is correct, but raw direct boundary
sigma_rr is not enough for topography. This likely needs a CBF-style or projected boundary traction recovery path for Nitsche runs.
Current benchmark script behavior
010_stokes_response_isoviscous.py now defaults to:
- Zhong-style
P_l^0 forcing
- measured angular-norm response normalization
- Nitsche free slip for the Zhong velocity comparison
- direct-stress topography diagnostics for non-constrained runs
- constrained free slip remains available with
-uw_freeslip_type constrained for multiplier/topography diagnostics
Suggested next steps
- Investigate why constrained free slip overpredicts the 8-rank velocity response.
- Keep Nitsche as the default for Zhong Table 2 velocity-response comparison unless/until constrained velocity behavior is explained.
- Implement/test a Nitsche-compatible dynamic-topography recovery method, preferably CBF-style or projected boundary traction.
- After topography recovery is fixed, run the full Table 2 matrix for
l = 2, 5, 8, 15 and depths 0.25d, 0.5d, 0.75d.
Summary
While reproducing the Zhong et al. (2008) isoviscous Stokes response benchmark in UW3, constrained and Nitsche free-slip boundary conditions match different diagnostics:
1/8run overpredicts characteristic velocities.sigma_rris not sufficient for dynamic-topography recovery.This is related to the broader free-slip discussion in #104, but this issue is specifically about the Zhong 2008 spherical-shell response benchmark.
Benchmark script:
https://github.com/gthyagi/uw3-mantle-convection-benchmarks/blob/main/benchmarks/010_stokes_response_isoviscous.py
Benchmark setup
Default comparison case:
l = 2,m = 0, depth0.5dr_b = 0.55,r_t = 1.0,r0 = 0.775eta = 1delta(r-r0) P_l^0(theta) e_rP_l^0-uw_cellsize 1/4mpirun -np 8 ... -uw_cellsize 1/8Zhong analytical references for this case:
s4.998e-01b9.313e-01Results
Error summary
1/415.8%16.4%1.68%3.88%1/813.0%7.66%25.1%63.1%10, serial1/410.6%15.5%0.257%5.87%10, 8-rank1/848.0%52.4%0.654%0.243%100, 8-rank1/847.9%51.5%0.146%0.038%Serial actual response values
1/44.2090356241027566e-017.786127017538488e-011.0228577582537592e-021.2320478342852333e-02104.4705955177993373e-017.87091287177956e-011.0034120263339545e-021.2556363891469484e-028-rank actual response values
1/85.648430331865263e-011.0026232680557212e+001.2584202252522738e-021.9340833150169143e-02102.5978694927744095e-014.43175114203523e-011.0125825484077849e-021.1888840166227975e-021002.6026572894429606e-014.517496256438572e-011.0074644204660118e-021.1855484341433173e-02Interpretation
This appears to split into two issues:
1/8Nitsche run is below1%error for both surface and CMB characteristic velocity. Constrained free slip overpredicts these velocities at 8 ranks.sigma_rris not enough for topography. This likely needs a CBF-style or projected boundary traction recovery path for Nitsche runs.Current benchmark script behavior
010_stokes_response_isoviscous.pynow defaults to:P_l^0forcing-uw_freeslip_type constrainedfor multiplier/topography diagnosticsSuggested next steps
l = 2, 5, 8, 15and depths0.25d,0.5d,0.75d.