From a451dca961efe0e26c44829f78712a44f6d73eac Mon Sep 17 00:00:00 2001 From: Frank14f <1515444314@qq.com> Date: Sun, 9 Aug 2026 21:04:54 +0800 Subject: [PATCH] feat(theory): publish steady cloak result package Freeze the bounded steady-flow evidence, reader documentation, lattice-exact plotting package, and reproducible diagnostics for writing and review. Co-authored-by: Cursor --- src/steady_pinball_theory/DERIVATION.md | 641 + .../HISTORY_AND_LESSONS.md | 53 + src/steady_pinball_theory/LITERATURE.md | 216 +- src/steady_pinball_theory/README.md | 66 +- src/steady_pinball_theory/RESULTS.md | 55 +- src/steady_pinball_theory/contract.py | 53 + src/steady_pinball_theory/evidence | 1 + src/steady_pinball_theory/figures/README.md | 84 + .../cfd-accepted-s3p55_metrics.png | Bin 0 -> 20146 bytes .../annotations/cfd-reverse-s5p2_metrics.png | Bin 0 -> 20295 bytes .../annotations/cfd-stationary_metrics.png | Bin 0 -> 21099 bytes .../figures/annotations/mfs-gfit_metrics.png | Bin 0 -> 20444 bytes .../figures/annotations/mfs-gopt_metrics.png | Bin 0 -> 19768 bytes .../figures/annotations/mfs-zero_metrics.png | Bin 0 -> 21604 bytes .../colorbars/error_cfd_horizontal.png | Bin 0 -> 12585 bytes .../figures/colorbars/error_cfd_vertical.png | Bin 0 -> 16395 bytes .../colorbars/error_potential_horizontal.png | Bin 0 -> 14035 bytes .../colorbars/error_potential_vertical.png | Bin 0 -> 17925 bytes .../colorbars/vorticity_cfd_horizontal.png | Bin 0 -> 13289 bytes .../colorbars/vorticity_cfd_vertical.png | Bin 0 -> 17213 bytes .../figures/field_metrics.csv | 7 + .../fields/error/cfd-accepted-s3p55.png | Bin 0 -> 3695 bytes .../figures/fields/error/cfd-reverse-s5p2.png | Bin 0 -> 4469 bytes .../figures/fields/error/cfd-stationary.png | Bin 0 -> 3949 bytes .../figures/fields/error/mfs-gfit.png | Bin 0 -> 3447 bytes .../figures/fields/error/mfs-gopt.png | Bin 0 -> 2817 bytes .../figures/fields/error/mfs-zero.png | Bin 0 -> 3777 bytes .../fields/streamlines/cfd-accepted-s3p55.png | Bin 0 -> 29284 bytes .../fields/streamlines/cfd-reverse-s5p2.png | Bin 0 -> 28465 bytes .../fields/streamlines/cfd-stationary.png | Bin 0 -> 35885 bytes .../figures/fields/streamlines/mfs-gfit.png | Bin 0 -> 29049 bytes .../figures/fields/streamlines/mfs-gopt.png | Bin 0 -> 14647 bytes .../figures/fields/streamlines/mfs-zero.png | Bin 0 -> 20950 bytes .../fields/vorticity/cfd-accepted-s3p55.png | Bin 0 -> 5221 bytes .../fields/vorticity/cfd-reverse-s5p2.png | Bin 0 -> 6395 bytes .../fields/vorticity/cfd-stationary.png | Bin 0 -> 5777 bytes .../figures/fields/vorticity/mfs-gfit.png | Bin 0 -> 1415 bytes .../figures/fields/vorticity/mfs-gopt.png | Bin 0 -> 1415 bytes .../figures/fields/vorticity/mfs-zero.png | Bin 0 -> 1415 bytes .../figures/manifest.json | 627 + .../plates/error/cfd-accepted-s3p55.pdf | Bin 0 -> 24616 bytes .../plates/error/cfd-accepted-s3p55.png | Bin 0 -> 31628 bytes .../figures/plates/error/cfd-reverse-s5p2.pdf | Bin 0 -> 24116 bytes .../figures/plates/error/cfd-reverse-s5p2.png | Bin 0 -> 32506 bytes .../figures/plates/error/cfd-stationary.pdf | Bin 0 -> 27605 bytes .../figures/plates/error/cfd-stationary.png | Bin 0 -> 33724 bytes .../figures/plates/error/mfs-gfit.pdf | Bin 0 -> 26843 bytes .../figures/plates/error/mfs-gfit.png | Bin 0 -> 32098 bytes .../figures/plates/error/mfs-gopt.pdf | Bin 0 -> 18694 bytes .../figures/plates/error/mfs-gopt.png | Bin 0 -> 27328 bytes .../figures/plates/error/mfs-zero.pdf | Bin 0 -> 22727 bytes .../figures/plates/error/mfs-zero.png | Bin 0 -> 32513 bytes .../plates/streamlines/cfd-accepted-s3p55.pdf | Bin 0 -> 45687 bytes .../plates/streamlines/cfd-accepted-s3p55.png | Bin 0 -> 72423 bytes .../plates/streamlines/cfd-reverse-s5p2.pdf | Bin 0 -> 46836 bytes .../plates/streamlines/cfd-reverse-s5p2.png | Bin 0 -> 72542 bytes .../plates/streamlines/cfd-stationary.pdf | Bin 0 -> 48248 bytes .../plates/streamlines/cfd-stationary.png | Bin 0 -> 81979 bytes .../figures/plates/streamlines/mfs-gfit.pdf | Bin 0 -> 46977 bytes .../figures/plates/streamlines/mfs-gfit.png | Bin 0 -> 72888 bytes .../figures/plates/streamlines/mfs-gopt.pdf | Bin 0 -> 38152 bytes .../figures/plates/streamlines/mfs-gopt.png | Bin 0 -> 52085 bytes .../figures/plates/streamlines/mfs-zero.pdf | Bin 0 -> 43532 bytes .../figures/plates/streamlines/mfs-zero.png | Bin 0 -> 63887 bytes .../plates/vorticity/cfd-accepted-s3p55.pdf | Bin 0 -> 20103 bytes .../plates/vorticity/cfd-accepted-s3p55.png | Bin 0 -> 32691 bytes .../plates/vorticity/cfd-reverse-s5p2.pdf | Bin 0 -> 25159 bytes .../plates/vorticity/cfd-reverse-s5p2.png | Bin 0 -> 35323 bytes .../plates/vorticity/cfd-stationary.pdf | Bin 0 -> 28538 bytes .../plates/vorticity/cfd-stationary.png | Bin 0 -> 35876 bytes .../figures/plates/vorticity/mfs-gfit.pdf | Bin 0 -> 17815 bytes .../figures/plates/vorticity/mfs-gfit.png | Bin 0 -> 27385 bytes .../figures/plates/vorticity/mfs-gopt.pdf | Bin 0 -> 17006 bytes .../figures/plates/vorticity/mfs-gopt.png | Bin 0 -> 25171 bytes .../figures/plates/vorticity/mfs-zero.pdf | Bin 0 -> 17124 bytes .../figures/plates/vorticity/mfs-zero.png | Bin 0 -> 28344 bytes .../figures/profiles_long.csv | 14401 ++++++++++++++++ .../figures/summary/actuator_CP.csv | 3 + .../figures/summary/actuator_CP.pdf | Bin 0 -> 15186 bytes .../figures/summary/actuator_CP.png | Bin 0 -> 27092 bytes .../figures/summary/near_wake_diagnostics.csv | 3 + .../figures/summary/near_wake_diagnostics.pdf | Bin 0 -> 21918 bytes .../figures/summary/near_wake_diagnostics.png | Bin 0 -> 59480 bytes .../figures/summary/profile_Einf_vector.csv | 25 + .../figures/summary/profile_Einf_vector.pdf | Bin 0 -> 29062 bytes .../figures/summary/profile_Einf_vector.png | Bin 0 -> 150363 bytes .../figures/summary/signed_gap_Qstar.csv | 7 + .../figures/summary/signed_gap_Qstar.pdf | Bin 0 -> 16007 bytes .../figures/summary/signed_gap_Qstar.png | Bin 0 -> 54153 bytes src/steady_pinball_theory/metrics.py | 874 + src/steady_pinball_theory/plot_results.py | 229 + src/steady_pinball_theory/runner.py | 2717 ++- src/steady_pinball_theory/tests/test_core.py | 2002 ++- src/steady_pinball_theory/theory.py | 1287 +- 94 files changed, 23156 insertions(+), 195 deletions(-) create mode 100644 src/steady_pinball_theory/DERIVATION.md create mode 100644 src/steady_pinball_theory/HISTORY_AND_LESSONS.md create mode 120000 src/steady_pinball_theory/evidence create mode 100644 src/steady_pinball_theory/figures/README.md create mode 100644 src/steady_pinball_theory/figures/annotations/cfd-accepted-s3p55_metrics.png create mode 100644 src/steady_pinball_theory/figures/annotations/cfd-reverse-s5p2_metrics.png create mode 100644 src/steady_pinball_theory/figures/annotations/cfd-stationary_metrics.png create mode 100644 src/steady_pinball_theory/figures/annotations/mfs-gfit_metrics.png create mode 100644 src/steady_pinball_theory/figures/annotations/mfs-gopt_metrics.png create mode 100644 src/steady_pinball_theory/figures/annotations/mfs-zero_metrics.png create mode 100644 src/steady_pinball_theory/figures/colorbars/error_cfd_horizontal.png create mode 100644 src/steady_pinball_theory/figures/colorbars/error_cfd_vertical.png create mode 100644 src/steady_pinball_theory/figures/colorbars/error_potential_horizontal.png create mode 100644 src/steady_pinball_theory/figures/colorbars/error_potential_vertical.png create mode 100644 src/steady_pinball_theory/figures/colorbars/vorticity_cfd_horizontal.png create mode 100644 src/steady_pinball_theory/figures/colorbars/vorticity_cfd_vertical.png create mode 100644 src/steady_pinball_theory/figures/field_metrics.csv create mode 100644 src/steady_pinball_theory/figures/fields/error/cfd-accepted-s3p55.png create mode 100644 src/steady_pinball_theory/figures/fields/error/cfd-reverse-s5p2.png create mode 100644 src/steady_pinball_theory/figures/fields/error/cfd-stationary.png create mode 100644 src/steady_pinball_theory/figures/fields/error/mfs-gfit.png create mode 100644 src/steady_pinball_theory/figures/fields/error/mfs-gopt.png create mode 100644 src/steady_pinball_theory/figures/fields/error/mfs-zero.png create mode 100644 src/steady_pinball_theory/figures/fields/streamlines/cfd-accepted-s3p55.png create mode 100644 src/steady_pinball_theory/figures/fields/streamlines/cfd-reverse-s5p2.png create mode 100644 src/steady_pinball_theory/figures/fields/streamlines/cfd-stationary.png create mode 100644 src/steady_pinball_theory/figures/fields/streamlines/mfs-gfit.png create mode 100644 src/steady_pinball_theory/figures/fields/streamlines/mfs-gopt.png create mode 100644 src/steady_pinball_theory/figures/fields/streamlines/mfs-zero.png create mode 100644 src/steady_pinball_theory/figures/fields/vorticity/cfd-accepted-s3p55.png create mode 100644 src/steady_pinball_theory/figures/fields/vorticity/cfd-reverse-s5p2.png create mode 100644 src/steady_pinball_theory/figures/fields/vorticity/cfd-stationary.png create mode 100644 src/steady_pinball_theory/figures/fields/vorticity/mfs-gfit.png create mode 100644 src/steady_pinball_theory/figures/fields/vorticity/mfs-gopt.png create mode 100644 src/steady_pinball_theory/figures/fields/vorticity/mfs-zero.png create mode 100644 src/steady_pinball_theory/figures/manifest.json create mode 100644 src/steady_pinball_theory/figures/plates/error/cfd-accepted-s3p55.pdf create mode 100644 src/steady_pinball_theory/figures/plates/error/cfd-accepted-s3p55.png create mode 100644 src/steady_pinball_theory/figures/plates/error/cfd-reverse-s5p2.pdf create mode 100644 src/steady_pinball_theory/figures/plates/error/cfd-reverse-s5p2.png create mode 100644 src/steady_pinball_theory/figures/plates/error/cfd-stationary.pdf create mode 100644 src/steady_pinball_theory/figures/plates/error/cfd-stationary.png create mode 100644 src/steady_pinball_theory/figures/plates/error/mfs-gfit.pdf create mode 100644 src/steady_pinball_theory/figures/plates/error/mfs-gfit.png create mode 100644 src/steady_pinball_theory/figures/plates/error/mfs-gopt.pdf create mode 100644 src/steady_pinball_theory/figures/plates/error/mfs-gopt.png create mode 100644 src/steady_pinball_theory/figures/plates/error/mfs-zero.pdf create mode 100644 src/steady_pinball_theory/figures/plates/error/mfs-zero.png create mode 100644 src/steady_pinball_theory/figures/plates/streamlines/cfd-accepted-s3p55.pdf create mode 100644 src/steady_pinball_theory/figures/plates/streamlines/cfd-accepted-s3p55.png create mode 100644 src/steady_pinball_theory/figures/plates/streamlines/cfd-reverse-s5p2.pdf create mode 100644 src/steady_pinball_theory/figures/plates/streamlines/cfd-reverse-s5p2.png create mode 100644 src/steady_pinball_theory/figures/plates/streamlines/cfd-stationary.pdf create mode 100644 src/steady_pinball_theory/figures/plates/streamlines/cfd-stationary.png create mode 100644 src/steady_pinball_theory/figures/plates/streamlines/mfs-gfit.pdf create mode 100644 src/steady_pinball_theory/figures/plates/streamlines/mfs-gfit.png create mode 100644 src/steady_pinball_theory/figures/plates/streamlines/mfs-gopt.pdf create mode 100644 src/steady_pinball_theory/figures/plates/streamlines/mfs-gopt.png create mode 100644 src/steady_pinball_theory/figures/plates/streamlines/mfs-zero.pdf create mode 100644 src/steady_pinball_theory/figures/plates/streamlines/mfs-zero.png create mode 100644 src/steady_pinball_theory/figures/plates/vorticity/cfd-accepted-s3p55.pdf create mode 100644 src/steady_pinball_theory/figures/plates/vorticity/cfd-accepted-s3p55.png create mode 100644 src/steady_pinball_theory/figures/plates/vorticity/cfd-reverse-s5p2.pdf create mode 100644 src/steady_pinball_theory/figures/plates/vorticity/cfd-reverse-s5p2.png create mode 100644 src/steady_pinball_theory/figures/plates/vorticity/cfd-stationary.pdf create mode 100644 src/steady_pinball_theory/figures/plates/vorticity/cfd-stationary.png create mode 100644 src/steady_pinball_theory/figures/plates/vorticity/mfs-gfit.pdf create mode 100644 src/steady_pinball_theory/figures/plates/vorticity/mfs-gfit.png create mode 100644 src/steady_pinball_theory/figures/plates/vorticity/mfs-gopt.pdf create mode 100644 src/steady_pinball_theory/figures/plates/vorticity/mfs-gopt.png create mode 100644 src/steady_pinball_theory/figures/plates/vorticity/mfs-zero.pdf create mode 100644 src/steady_pinball_theory/figures/plates/vorticity/mfs-zero.png create mode 100644 src/steady_pinball_theory/figures/profiles_long.csv create mode 100644 src/steady_pinball_theory/figures/summary/actuator_CP.csv create mode 100644 src/steady_pinball_theory/figures/summary/actuator_CP.pdf create mode 100644 src/steady_pinball_theory/figures/summary/actuator_CP.png create mode 100644 src/steady_pinball_theory/figures/summary/near_wake_diagnostics.csv create mode 100644 src/steady_pinball_theory/figures/summary/near_wake_diagnostics.pdf create mode 100644 src/steady_pinball_theory/figures/summary/near_wake_diagnostics.png create mode 100644 src/steady_pinball_theory/figures/summary/profile_Einf_vector.csv create mode 100644 src/steady_pinball_theory/figures/summary/profile_Einf_vector.pdf create mode 100644 src/steady_pinball_theory/figures/summary/profile_Einf_vector.png create mode 100644 src/steady_pinball_theory/figures/summary/signed_gap_Qstar.csv create mode 100644 src/steady_pinball_theory/figures/summary/signed_gap_Qstar.pdf create mode 100644 src/steady_pinball_theory/figures/summary/signed_gap_Qstar.png create mode 100644 src/steady_pinball_theory/plot_results.py diff --git a/src/steady_pinball_theory/DERIVATION.md b/src/steady_pinball_theory/DERIVATION.md new file mode 100644 index 0000000..113d2bd --- /dev/null +++ b/src/steady_pinball_theory/DERIVATION.md @@ -0,0 +1,641 @@ +# Stage 1: boundary contract and claim limits + +This is the authoritative mathematical derivation for stage 1. It defines the inviscid problem; it does not validate the existing numerical solver or establish the later circulation-cancellation mechanism. Every substantive statement below has exactly one registry label. + +## 0. Statement registry and audit rule + +Labels have these exact meanings: + +- **proved mathematical result**: derived here from stated hypotheses. +- **primary-literature-supported result**: taken from or directly corroborated by the cited primary source. +- **numerical observation**: measured in this project; no numerical observation is promoted to a theorem. +- **modeling assumption**: an input, closure, convention, or extrapolation not implied by Euler. + +| ID | Exact label | Auditable statement | +|---|---|---| +| S1 | modeling assumption | Stage 1 studies a steady, two-dimensional, incompressible outer field around three fixed circles, either in a free-slip strip or its unbounded-plane limit. | +| S2 | proved mathematical result | Subject to the regularity, far-field, compatibility, and function-space hypotheses in §3, an irrotational Euler/Neumann solution is unique after all body circulations are fixed. | +| S3 | proved mathematical result | Rigid rotation of a circle about its center contributes no normal wall velocity. | +| S4 | primary-literature-supported result | A multiply connected irrotational outer flow contains independent circulation periods not selected by impermeability; Crowdy (2006), especially (16), (18), (20), and (34), supplies an exact zero-circulation construction. | +| S5 | proved mathematical result | For one circle, the exact uniform-flow-plus-circulation family has wall velocity `u_theta(a,theta)=-2U sin(theta)+Gamma/(2 pi a)`. | +| S6 | proved mathematical result | The case `U=0`, `Gamma=2 pi a^2 Omega` exactly matches the rotating wall's tangential speed while remaining an Euler slip solution; therefore an absolute impossibility claim is false. | +| S7 | proved mathematical result | For the one-circle family with `U != 0`, no constant `Omega` can make tangential no-slip hold at every angle. | +| S8 | proved mathematical result | In general multi-body geometry, prescribed normal and tangential traces form overdetermined Cauchy data; the finite-dimensional circulation freedom can satisfy only tangential data lying in its compatible finite-dimensional trace space. | +| S9 | primary-literature-supported result | Inviscid circulation is transported under Kelvin's hypotheses, while viscous rotating-cylinder problems impose full wall velocity and generate/diffuse vorticity; Ueda et al. (2003), (2.4), (2.7)–(2.10), exhibits that viscous boundary-value structure. | +| S10 | modeling assumption | Any map `Gamma_eff(s)` from nondimensional wall speed to an outer circulation is a viscous-interface/empirical closure, not an Euler boundary condition. | +| S11 | numerical observation | Existing project aggregate CFD records report downstream profile errors; no surviving endpoint velocity fields support a fitted effective circulation, so historical fitted values are withdrawn from current evidence. | +| S12 | modeling assumption | Later stages may test rear-opposite circulations as a cloak mechanism, but stage 1 neither derives nor validates that mechanism. | + +## 1. Historical Stage-1 charter (superseded as current governance) + +**1.1 — Proposition [proved mathematical result].** For the domains and spaces stated below, fixing the three circulation periods removes the harmonic nonuniqueness of the irrotational Euler/Neumann problem; centered circular rotation does not enter impermeability; and imposing the complete rotating-wall tangential trace as well is in general incompatible, though the explicit `U=0`, `Gamma=2 pi a^2 Omega` one-circle case is compatible. + +**1.2 — Pass evidence [modeling assumption].** This stage passes only if the proposition is supported by numbered definitions and proofs, an explicit counterexample, primary-source links at the inviscid/viscous interface, an equation ledger, and an end-stage claim/file audit. + +**1.3 — Falsification or claim-limiting evidence [modeling assumption].** A missing flux condition, an unacknowledged strip/exterior function-space issue, a counterexample to fixed-period uniqueness under the stated hypotheses, or evidence that a claimed result holds only for one circle forces repair or narrowing; numerical agreement cannot repair a mathematical failure. + +## 2. Geometry, nondimensionalization, and signs + +**2.1 — Domain [modeling assumption; S1].** Use cylinder diameter `D`, inflow speed `U_inf>0`, and time `D/U_inf` as scales. Dimensionless coordinates and velocity are `x=x*/D` and `u=u*/U_inf`; pressure is scaled by `rho U_inf^2`. Three disjoint closed disks are + +`B_j={x in R^2: |x-c_j| <= a_j}`, `j=1,2,3`, + +with positive gaps. The unbounded fluid domain is `Omega_inf=R^2 \ union_j B_j`. The strip domain is + +`Omega_H={-infinityinfinity`, with derivatives sufficient for the integrations below. In `Omega_H`, require free slip `u dot n=0` at `y=+/-H` and approach to a specified through-flow as `x->+/-infinity`. The phrase “unbounded limit” means taking `H->infinity` only after the strip and exterior problems have each been defined; it is not an automatic uniform convergence claim. + +## 3. Euler, Hodge periods, compatibility, and uniqueness + +**3.1 — Governing equations [primary-literature-supported result; S4].** The steady incompressible Euler equations in the fluid are + +`(u dot grad)u = -grad p`, `div u=0`. + +For the irrotational outer subclass, `curl u=0`. Crowdy (2006), (16), imposes uniform behavior at infinity; its constant-streamfunction boundary conditions (18)–(19) encode impermeability, and (20), (25)–(26), (34) construct the multiply connected zero-circulation complex potential. These equations support the formulation, not viscous no-slip or circulation selection. + +**3.2 — Harmonic decomposition [proved mathematical result].** Assume a sufficiently smooth domain and a single-valued harmonic potential `phi` for the zero-period part. Choose harmonic vector fields `h_j` satisfying + +`div h_j=curl h_j=0`, `h_j dot n=0`, and `integral_(CCW around B_k) h_j dot dl=delta_jk`. + +Then every admissible irrotational field with the prescribed far field can be written + +`u = u_N + sum_(j=1)^3 Gamma_j h_j`, + +where `u_N` has zero periods and solves the required Neumann data. This is the planar Hodge/de Rham separation of an exact part from the three cohomological periods. Crowdy's single-valued uniform-flow potential is an exact representation of the zero-period member, consistent with (33)–(34). + +**3.3 — Flux compatibility [proved mathematical result; S2].** For a truncated domain `Omega_R`, the divergence theorem gives + +`0=integral_(Omega_R) div u dA=integral_(partial Omega_R) u dot n ds`. + +Therefore prescribed normal data must have zero total flux after including outer truncation/end sections. For fixed rigid bodies and impermeable strip walls, all solid-wall contributions vanish. In the exterior problem, uniform inflow has zero net flux through a large closed circle. In the strip, the upstream and downstream section fluxes must agree. A source-based representation must likewise have zero total source; imposing zero source per body is stronger than global compatibility and is a numerical representation choice, not a new Euler law. + +**3.4 — Fixed-circulation uniqueness theorem [proved mathematical result; S2].** Assume: (i) two `C^1` irrotational, divergence-free solutions have identical normal traces, far/end behavior, and all three geometric circulations; (ii) their difference `w` and a potential for it lie in a class permitting integration by parts; and (iii) the boundary term at infinity or the two strip ends tends to zero. Then the two velocity fields coincide. + +*Proof.* The difference satisfies `div w=curl w=0`, `w dot n=0`, zero far/end data, and zero periods around every hole. Zero periods make the closed one-form `w dot dx` exact, so `w=grad chi` for a single-valued harmonic `chi`. Green's identity on a truncation gives + +`integral |grad chi|^2 dA = integral_(boundary) chi partial_n chi ds`. + +Body and free-slip-wall terms vanish because `partial_n chi=0`; the outer/end term vanishes by assumption. Thus `grad chi=0`, so `w=0`. QED. + +**3.5 — Caveats [modeling assumption].** The theorem is conditional, not an existence theorem. Nonzero net circulation in the unbounded plane has a `1/r` velocity tail and logarithmically divergent total kinetic energy, so “finite energy” must not be imposed on the full field unless the circulation class is adjusted; the *difference* in the uniqueness proof has zero periods and can have finite energy. In an infinite strip, end modes and through-flow must be fixed, and sufficient decay must exclude additional harmonic end modes. Corners, touching bodies, non-smooth traces, or weak Euler solutions require separate functional analysis. Pressure is then recovered locally from Bernoulli for a steady irrotational field, up to constants compatible with the connected fluid domain. + +**3.6 — Literature scope [primary-literature-supported result; S4].** Glass, Lacave, Munnier & Sueur (2019) provides a modern perfect-fluid/rigid-body framework in which vorticity and body circulations are independent state data and circulation-induced harmonic fields enter the dynamics. The present fixed-body theorem is narrower and is proved above rather than attributed to an unstated theorem number. + +## 4. Rigid-body impermeability + +**4.1 — Euler wall condition [primary-literature-supported result].** For a rigid body with center velocity `V_j` and angular velocity `Omega_j e_z`, its boundary velocity is + +`U_B,j(x)=V_j + Omega_j e_z cross (x-c_j)`. + +The inviscid kinematic condition is `(u-U_B,j) dot n=0`. Modern rigid-body Euler formulations, including Glass et al. (2019), use this normal matching while retaining circulations as separate data. + +**4.2 — Centered-circle cancellation [proved mathematical result; S3].** On a circle, `x-c_j=a_j e_r`, so the rotational velocity is `Omega_j a_j e_theta`. Since `e_theta dot n=e_theta dot (-e_r)=0`, + +`(Omega_j e_z cross (x-c_j)) dot n=0`. + +Thus centered rotation drops out of normal data exactly. Translation does not: `U_B,j dot n=V_j dot n`. For the fixed circles here, impermeability is simply `u dot n=0`, independent of `Omega_j`. + +## 5. Exact one-cylinder audit and counterexample + +**5.1 — Exact potential [primary-literature-supported result; S5].** For a circle `r=a` centered at the origin, uniform flow `U e_x`, and geometric CCW circulation `Gamma`, classical Lamb/Milne-Thomson circle-theorem theory gives + +`W(z)=U(z+a^2/z) - i Gamma/(2 pi) log(z/a)`, + +with complex velocity `dW/dz=u_x-i u_y`. Crowdy (2006), (15) and the `M=0` reduction following (34), independently recover the zero-circulation term. Classical edition/page/equation details for Lamb and Milne-Thomson remain marked for bibliographic verification; none is guessed here. + +**5.2 — Velocity and wall trace [proved mathematical result; S5].** Direct differentiation or polar differentiation gives + +`u_r=U(1-a^2/r^2) cos(theta)`, + +`u_theta=-U(1+a^2/r^2) sin(theta)+Gamma/(2 pi r)`. + +Hence `u_r(a,theta)=0` and + +`u_theta(a,theta)=-2U sin(theta)+Gamma/(2 pi a)`. + +The entire one-parameter family satisfies the same Euler impermeability condition. Therefore wall rotation does not select `Gamma`. + +**5.3 — Explicit compatible special case [proved mathematical result; S6].** Set `U=0`. The outer field is the line-vortex field `u_theta=Gamma/(2 pi r)`, irrotational for `r>a`. A wall rotating CCW with angular velocity `Omega` has tangential speed `a Omega`. Choosing + +`Gamma=2 pi a^2 Omega` + +makes `u_theta(a,theta)=a Omega` for every `theta`, while `u_r=0`. This is an exact special counterexample to “potential flow can never match a rotating circular wall.” It does not show that Euler selects this circulation: every other `Gamma` still satisfies Euler impermeability. + +**5.4 — Nonzero-inflow obstruction [proved mathematical result; S7].** If constant rotating no-slip held for `U != 0`, then + +`-2U sin(theta)+Gamma/(2 pi a)=a Omega` + +for all `theta`. Evaluating at `theta=pi/2` and `3pi/2` gives respectively `-2U+C=a Omega` and `2U+C=a Omega`, which imply `U=0`, a contradiction. Thus within this exact one-cylinder family, no constants `Gamma,Omega` give full rotating no-slip when `U != 0`. + +## 6. Why multi-body no-slip is generally overdetermined + +**6.1 — Trace-space argument [proved mathematical result; S8].** Solve the Neumann problem first. With geometry, far field, and normal data fixed, its irrotational solutions form the affine family + +`u|_(boundary) = u_N|_(boundary) + sum_j Gamma_j h_j|_(boundary)`. + +The freely adjustable tangential traces therefore lie in a space of dimension at most three. Full rigid-wall no-slip would prescribe one function of arclength on every body, + +`u dot t = U_B,j dot t` on `partial B_j`, + +in addition to normal data. Such target traces belong to an infinite-dimensional function space. They are attainable only if their difference from `u_N dot t` lies exactly in the span of the three harmonic tangential traces. Consequently compatibility can occur in special symmetric cases, but in general—and generically under perturbation of geometry, inflow, or wall speeds—it does not. + +**6.2 — Cauchy-data formulation [proved mathematical result; S8].** Locally write the zero-period part as `grad phi` with `Delta phi=0`. Normal velocity prescribes `partial_n phi`; tangential velocity prescribes `partial_s phi` (after subtracting harmonic circulation fields). Together they determine the full boundary gradient and hence constitute Cauchy data for an elliptic equation. Arbitrary Cauchy data do not satisfy the nonlocal harmonic compatibility relation. This is an overdetermination argument, not a claim that compatibility is never possible; §5.3 is the required exception. + +**6.3 — Scope [modeling assumption].** The argument establishes “in general” or “generically,” not a measure-theoretic genericity theorem for every geometry class. A rigorous transversality statement is outside stage 1. Noncircular rotation can also contribute normal velocity if rotation is not about a symmetry center or the body motion changes the domain; those cases are not covered by §4.2. + +## 7. Kelvin, vorticity, and the viscous interface + +**7.1 — Kelvin transport [primary-literature-supported result; S9].** Under the classical hypotheses of inviscid barotropic flow, conservative body forces, sufficient smoothness, and a closed material contour `C(t)`, Kelvin's theorem states + +`d/dt integral_(C(t)) u dot dl = 0`. + +Glass et al. (2019) explicitly treats body circulations as conserved parameters for smooth two-dimensional perfect-fluid/rigid-body motion. Original Kelvin bibliographic details and any historical equation number require later verification; no quotation or number is supplied here. + +**7.2 — Vorticity consequence [proved mathematical result; S9].** In two-dimensional constant-density Euler, taking curl gives `partial_t omega+u dot grad omega=0`. Thus initially irrotational fluid remains irrotational along smooth trajectories; Euler slip supplies no viscous wall-vorticity flux capable of selecting a new `Gamma` from `Omega`. Multiply connected nonzero periods may nevertheless exist with `omega=0` in the fluid because loops around holes need not bound fluid-only surfaces. + +**7.3 — Viscous boundary [primary-literature-supported result; S9].** A viscous rotating-body problem instead uses Navier–Stokes and full no-slip/no-penetration `u=U_B` on the wall. Ueda et al. (2003), (2.4), prescribes uniform far velocity and rotating-cylinder wall velocity; (2.7) relates velocity, streamfunction, and vorticity; and (2.8)–(2.10) carry the boundary/vorticity coupling into their low-Re formulation. These equations supply no Euler rule `Gamma=2 pi a^2 Omega`. + +**7.4 — Outer/inner closure [primary-literature-supported result; S10].** Glauert (1957) treats rapidly rotating, nonseparating flow by taking an irrotational outer flow with unknown circulation and using a viscous boundary-layer solution/no-slip matching to determine it in that restricted regime. Moore's 1957 rotating-cylinder work is a related boundary-layer source. These are precedents for a viscous closure, not universal formulas for this three-cylinder, finite-Re, possibly separated flow. Exact Moore equation mapping and edition details require later bibliographic verification. + +**7.5 — Project closure [modeling assumption; S10].** Define nondimensional wall-speed ratio `s=Omega a/U_inf` (or record explicitly if code uses `Omega D/U_inf`). Any `Gamma_eff(s)` used by this project must be obtained from a stated viscous model or empirical outer-field procedure—e.g. contour plateaus or held-out outer-profile fits—with sign, contour/mask, uncertainty, Reynolds number, geometry, and confinement recorded. It must not be set to `2 pi a^2 Omega` merely because §5.3 makes that identity compatible at `U=0`. + +## 8. Project implications and prohibited claims + +**8.1 — Allowed implications [proved mathematical result; S2–S8].** The outer potential problem may legitimately treat body circulations as independent prescribed controls, and a fixed-circulation solution can serve as a mathematically unique reference under §3.4 assumptions. Circular wall rotation cannot be inserted through impermeability; it must enter through a separately justified circulation/viscous interface. + +**8.2 — Empirical boundary [numerical observation; S11].** Historical fitted `Gamma_eff/(UD)` values without source arrays remain withdrawn. The later v4 endpoint campaign supplies direct fields and geometric contour sign; its corrected WLS is explicitly a descriptive projection rather than a causal wall-speed law. + +**8.3 — Later mechanism status [modeling assumption; S12].** Opposite rear-cylinder circulations, multipole cancellation, and any “cloak” interpretation are hypotheses reserved for later stages. Nothing in Euler uniqueness implies disturbance reduction, an optimum, stability, or agreement with Navier–Stokes. + +**8.4 — Prohibited claims [modeling assumption].** Until later evidence exists, this project must not claim: (a) Euler wall rotation selects circulation; (b) potential flow can *never* match a rotating wall; (c) `Gamma_eff=2 pi a^2 Omega` for nonzero inflow or multiple bodies; (d) impermeability implies no-slip; (e) a small collocation residual proves physical accuracy; (f) potential flow predicts separation, drag, torque, wall vorticity, or viscous stability; (g) the strip result follows automatically from the plane result; or (h) rear-opposite circulation is the demonstrated cloak mechanism. + +## 9. Equation-to-source-to-implementation/test ledger + +| Derivation item | Source/proof | Current implementation/test touchpoint | Stage-1 status | +|---|---|---|---| +| Domain, signs, `Gamma_j` | §2 definition | `contract.py`; sign tests in `tests/test_core.py` | Documentation only; code not revalidated here | +| Euler far field and streamline boundaries | Crowdy (2006), (16), (18)–(20), (34) | `theory.py` outer MFS | Mathematical contract frozen; numerical validation deferred | +| Prime-function exact reference | Crowdy (2006), (25)–(26), (34) | No exact Crowdy implementation | Later independent-reference task | +| Hodge circulation basis | §3.2–§3.4 proof; Glass et al. (2019) context | circulation basis in `theory.py` | Contract only; dense/off-grid tests deferred | +| Flux compatibility | §3.3 proof | zero-source constraints in `theory.py` | Distinguishes PDE compatibility from representation choice | +| Rigid Euler impermeability | §4 proof; Glass et al. (2019) | body normal collocation | Contract frozen | +| One-cylinder exact solution | classical Lamb/Milne-Thomson; Crowdy (2006), (15), (34) reduction | intended exact test in `tests/test_core.py` | Equation frozen; test audit deferred to stage 2 | +| Special `U=0` counterexample | §5.3 proof | no implementation required | Passed analytically | +| `U!=0` sine obstruction | §5.4 proof | no implementation required | Passed analytically | +| General Cauchy overdetermination | §6 trace-space proof | no no-slip solver should be inferred from MFS | Passed with genericity limit | +| Viscous wall/vorticity system | Ueda et al. (2003), (2.4), (2.7)–(2.10) | CFD is external to outer MFS | Interface distinguished | +| Circulation transport | Kelvin theorem; Glass et al. (2019) | prescribed `Gamma` | Source details flagged where unverified | +| `Gamma_eff(s)` closure | Glauert (1957); Moore (1957) as restricted precedents | later contour/profile fitting | Explicitly modeling/empirical, deferred | + +## 10. Concentrated end-stage review + +**10.1 — Derivation and citation review: PASS [modeling assumption].** Sections 2–7 give numbered definitions, compatibility, conditional uniqueness, circle rotation, exact solution, overdetermination, and viscous interface. Crowdy and the relied-upon Ueda equation mappings were checked against accessible primary PDFs. Classical-book edition details, original Kelvin bibliographic details, and exact Moore equation mapping remain publication holds; Kharlamov–Filip is contextual only and no equation mapping is asserted. + +**10.2 — Counterexample review: PASS [proved mathematical result; S6].** Section 5.3 explicitly verifies both normal and tangential wall velocity for `U=0`, `Gamma=2 pi a^2 Omega`, and separately states that Euler does not select this value. + +**10.3 — Claim-limit review: PASS [modeling assumption].** The text uses “in general” and “generically” for multi-body incompatibility, preserves the special exception, separates strip from exterior function spaces, and prohibits circulation-selection, no-slip, stability, and later-mechanism claims. + +**10.4 — File-budget review: PASS [numerical observation].** At review time the package has 9 root source files including the sole new root file `DERIVATION.md`, and 10 total source files when `tests/test_core.py` is included. Transient `__pycache__` is excluded because it is generated bytecode, not source. No Python file was changed in stage 1. Both counts satisfy root `<=10` and total `<=30`. + +**10.5 — Stage-1 verdict [modeling assumption].** PASS, conditional on preserving the bibliographic-verification flags. This verdict freezes only the boundary contract and claim limits; it does not pass any stage-2-or-later solver, mechanism, DNS, or stability objective. + +## References (primary where used) + +- Crowdy, D. G. (2006), “Analytical solutions for uniform potential flow past multiple cylinders,” *European Journal of Mechanics B/Fluids* 25, 459–470. DOI `10.1016/j.euromechflu.2005.11.005`. +- Glass, O., Lacave, C., Munnier, A. & Sueur, F. (2019), “Dynamics of rigid bodies in a two dimensional incompressible perfect fluid,” *Journal of Differential Equations*. DOI `10.1016/j.jde.2019.04.017`. +- Glauert, M. B. (1957), “The flow past a rapidly rotating circular cylinder,” *Proceedings of the Royal Society A*. DOI `10.1098/rspa.1957.0157`. +- Kharlamov, A. A. & Filip, P. (2012), “Generalisation of the method of images for the calculation of inviscid potential flow past several arbitrarily moving parallel circular cylinders,” *Journal of Engineering Mathematics* 77. Context only; no equation mapping or project result relies on it. +- Moore, D. W. (1957), “The flow past a rapidly rotating circular cylinder in a uniform stream,” *Journal of Fluid Mechanics* 2, 541–550. DOI `10.1017/S002211205700035X`; exact equation mapping not used here. +- Ueda, Y., Sellier, A., Kida, T. & Nakanishi, M. (2003), “On the low-Reynolds-number flow about two rotating circular cylinders,” *Journal of Fluid Mechanics* 495, 255–281. DOI `10.1017/S002211200300627X` (PDF-verified; DOI hold lifted). +- Lamb, *Hydrodynamics*, and Milne-Thomson, *Theoretical Hydrodynamics*: classical circle-flow sources; edition/page/equation details require bibliographic verification. +- Kelvin circulation theorem: classical result; original historical citation details require bibliographic verification. Glass et al. (2019) is the modern application used here. + + +## 11. Stage 2: reference-validation formulation + +**11.1 — Core proposition [modeling assumption].** The prescribed-circulation MFS field is accepted as a high-order outer/strip reference only on geometrically valid inputs and only when independent, dense off-collocation diagnostics and parameter convergence bound its numerical error; collocation residual alone is not validation. + +**11.2 — MFS equations [proved mathematical result].** On each circle, interior logarithmic sources are constrained to have zero sum body by body. Their strengths solve the normal-velocity equations for uniform flow plus prescribed geometric-CCW point-vortex periods. Equal-sign source images and opposite-sign vortex images enforce the horizontal-wall streamline symmetry in the infinite-image limit. Finite image layers are a truncation and must converge numerically. + +**11.3 — Exact audit [proved mathematical result].** The one-circle velocity used as the analytic oracle is exactly §5.2: `u_r=U(1-a^2/r^2)cos(theta)` and `u_theta=-U(1+a^2/r^2)sin(theta)+Gamma/(2 pi r)`, with positive `Gamma` counterclockwise. Its wall normal trace is independent of `Gamma`, while its tangential trace changes by `Gamma/(2 pi a)`. + +**11.4 — Independent formulation [modeling assumption].** The unbounded, zero-circulation cross-check measures agreement between independently discretized MFS and Fourier/Laurent boundary collocation: a uniform complex potential plus finite, single-valued Laurent multipoles `sum_(j,n) C_(jn) a^n/(z-c_j)^n`. It shares geometry and boundary data with MFS but uses neither logarithmic source points nor the MFS source radius. It is independently discretized by oversampled angular collocation. It is not Crowdy exact, does not represent prescribed circulation, and does not validate strip images. + +**11.5 — Dense diagnostics [modeling assumption].** Validation samples use angular nodes distinct from all solve nodes; the Laurent check changes the angles rather than merely moving solve angles radially. Report per-body `L_inf` and RMS normal residuals; gap-facing and outer-facing angular-sector residuals; strip-wall normal residual on an explicitly declared finite `x` interval; circulation quadrature on exterior body contours; far-field recovery; singular values, numerical rank, condition number, coefficient norms, and per-body zero-source error. In-sample residuals are labeled `collocation_*` only. + +**11.6 — Common-exterior error [modeling assumption].** On a fixed rectangle, use a tensor grid with composite-trapezoid weights, discard points within a declared exclusion radius of every body, and compute the weighted RMS velocity difference. Normalize by the weighted RMS reference disturbance from the declared uniform velocity; also report normalization by `|U|` when nonzero. The rectangle, grid, mask, retained weight, and normalization are part of every result. This metric is distinct from the pointwise `x/D=10` `E_inf_vector` profile objective. + +**11.7 — Scientific acceptance rule [modeling assumption].** Stage 2 scientific status is judged from exact-circle identities; strict failure controls; dense off-grid body, circulation, and far-field diagnostics; order and source-radius sensitivity for both zero and rear-opposite circulation; independently discretized Laurent agreement; metric grid/mask sensitivity; and finite-image field differences. Thresholds chosen after observing outputs are regression guards only, not preregistered or frozen scientific evidence. Because the tested strip differences do not support a defensible asymptotic tail estimate, strip status is bounded finite-image consistency rather than a converged reference. + +**11.8 — Falsification or claim limit [modeling assumption].** Rank loss, nonfinite output, uncontrolled condition/coefficient growth, off-grid or sector residual drift, circulation error, image/source/order sensitivity, mask/quadrature sensitivity, or disagreement with the Laurent formulation forces repair or limits the MFS reference claim. This stage establishes no multipole cloak mechanism, viscous closure, or stability result. + +**11.9 — Stage-2 review [numerical observation].** Exact-circle and failure controls pass. Dense source-radius comparisons for both `Gamma=0` and `(0,2,-2)` agree on the weighted common exterior; the Fourier/Laurent solve uses distinct shifted check angles and agrees with MFS under the declared grid and exclusion-mask alternatives. The unbounded Stage-2 reference therefore **PASSes for bounded agreement between independently discretized MFS and Fourier/Laurent boundary collocation**, not as exact independent truth. Strip wall residuals decrease and 20/40/80-layer exterior field differences shrink, but no defensible asymptotic tail estimate is inferred; the strip verdict is **BOUNDED finite-image consistency**. Numerical cutoffs in tests are post-hoc regression guards with stated safety margins, not frozen scientific evidence. + + +## 12. Stage 3: frozen circulation--multipole derivation and charter + +**12.1 — Frozen core proposition [modeling assumption].** In the unbounded outer problem, geometric-CCW rear circulations `(0,+Gamma,-Gamma)` have zero net circulation and therefore no logarithmic potential term. They generate a real potential-dipole coefficient `-Gamma b/pi` before body-induced source readjustment. Stage 3 passes only if the complete MFS coefficient is affine in real `Gamma`, its least-squares cancellation lowers both frozen reduced-field errors, and source truncations converge on declared common-exterior/profile regions and at held-out `Gamma`. It is falsified or claim-limited if the coefficient/sign is absent or wrong, the dipole is non-dominant, cancellation is not attainable on the real affine line, or reduced fields fail those held-out tests. Topology, stagnation, DNS, stability, and new metrics are excluded. + +**12.2 — Complex convention [proved mathematical result].** Let `z=x+i y`, `W=phi+i psi`, and + +`q(z)=dW/dz=u_x-i u_y`. + +A real source strength `Q` and geometric-CCW vortex circulation `Gamma` at `zeta` have + +`W_Q=Q/(2 pi) log(z-zeta)`, `q_Q=Q/[2 pi(z-zeta)]`, + +`W_Gamma=-i Gamma/(2 pi) log(z-zeta)`, `q_Gamma=-i Gamma/[2 pi(z-zeta)]`. + +Indeed `q_Q` gives `(u_x,u_y)=Q(dx,dy)/(2 pi r^2)`, while `q_Gamma` gives `Gamma(-dy,dx)/(2 pi r^2)`. These are exactly the signs in `singular_velocity`; adding `U(z+a^2/z)` gives the sign in `cylinder_velocity`. + +**12.3 — Exact rear-pair expansion and hypothesis challenge [proved mathematical result].** Put `z_+=x_r+i b`, `z_-=x_r-i b`, with assignments `(Gamma_+,Gamma_-)=(Gamma,-Gamma)`. For `|z|>max(|z_+|,|z_-|)`, on one consistent logarithm branch, + +`W_pair=-i Gamma/(2 pi)[log(z-z_+)-log(z-z_-)]` + +`= i Gamma/(2 pi) sum_(n>=1) (z_+^n-z_-^n)/(n z^n)`. + +The two `log z` terms cancel exactly because `Gamma_++Gamma_-=0`. The exact `1/z` potential coefficient is + +`C_pair=i Gamma(z_+-z_-)/(2 pi)=-Gamma b/pi`. + +Thus positive geometric-CCW circulation on the upper rear cylinder produces a **negative real** dipole coefficient; the prior narrative is accepted only with this sign. A positive real zero-circulation blockage coefficient can therefore be opposed by `Gamma>0`. This verifies the algebraic core hypothesis for the prescribed vortices, but does not yet prove that the body-readjusted coefficient has the same slope or that the dipole dominates finite-distance error. + +**12.4 — Reflection and parity [proved mathematical result].** Let `R(x,y)=(x,-y)` and `R_v=diag(1,-1)`. A physical velocity is a polar vector, so reflection acts as + +`(T u)(x,y)=R_v u(x,-y)`. + +A reflection-symmetric field satisfies `T u=u`, equivalently `u_x(x,-y)=u_x(x,y)` and `u_y(x,-y)=-u_y(x,y)`. The zero-circulation geometry, uniform inflow, and unique fixed-period solution are reflection invariant, hence have this parity. For a vortex field, direct substitution gives `T v_Gamma(.;x_0,y_0)=v_-Gamma(.;x_0,-y_0)`: geometric circulation changes sign under orientation reversal. Therefore the geometric assignment upper `+Gamma`, lower `-Gamma` is invariant as a whole and its velocity has the same `(even,odd)` parity. This statement concerns a geometric CCW assignment. Calling `Gamma` a scalar without its orientation convention is misleading; circulation/vorticity is pseudoscalar under reflection. The common-sign rear assignment instead maps to its negative and has perturbation parity `(u_x odd in y, u_y even in y)` when isolated from the symmetric base. + +**12.5 — Bodywise source multipoles [proved mathematical result].** For MFS sources `Q_jk` at `s_jk=c_j+delta_jk`, + +`W_s,j=sum_k Q_jk/(2 pi) log(z-s_jk)`. + +When `sum_k Q_jk=0`, and `|z-c_j|>rho_j=max_k|delta_jk|`, + +`W_s,j=sum_(n>=1) A_jn/(z-c_j)^n`, + +`A_jn=-[1/(2 pi n)] sum_k Q_jk delta_jk^n`, + +`q_s,j=sum_(n>=1) -n A_jn/(z-c_j)^(n+1)`. + +Truncation through `N` retains `1<=n<=N`; circulations remain separate exact vortex terms. Convergence is absolute outside every source ring. The implemented reconstruction therefore excludes all points with `|z-c_j|<=rho_j`; it is not a boundary-interior continuation and says nothing about viscous layers. + +**12.6 — Global unbounded far field [proved mathematical result].** Expanding all singularities about the fixed global origin gives + +`W(z)=U z + L log z + C/z+O(z^-2)`, + +`L=[sum Q_k-i sum Gamma_j]/(2 pi)`, + +`C=-(1/(2 pi)) sum_k Q_k s_k + (i/(2 pi)) sum_j Gamma_j z_j`. + +Bodywise zero source makes `sum Q_k=0`; rear-opposite circulation makes `sum Gamma_j=0`, so `L=0`. The source moment includes the circulation-dependent MFS readjustment, while the second term is the prescribed vortex-position moment. Because the boundary equations are linear, solves at `Gamma=0` and unit rear-opposite basis give exactly + +`C(Gamma)=C_0+Gamma dC`. + +For real `Gamma`, minimizing `|C_0+Gamma dC|^2` gives + +`Gamma_*=-Re(conj(dC) C_0)/|dC|^2`, + +provided `dC != 0`. Exact cancellation occurs iff the residual `C_*` vanishes (within a declared numerical tolerance); otherwise `|C_*|` is the distance from the origin to the real affine coefficient line. This is a closest complex cancellation, not permission to use complex circulation. + +**12.7 — Frozen reduced diagnostics [modeling assumption].** For term counts `N=1,2,...`, compare the source-multipole reconstruction plus exact circulation terms against the full unbounded MFS field using only: (i) the Stage-2 weighted common-exterior velocity error on `[-3,6] x [-3,3]`, `181 x 121`, exclusion `1.1a`; (ii) the complete `x/D=10` profile over `y/D in [-3,3]` with 1201 points and `profile_errors`; and (iii) reflection parity defect, the maximum absolute mismatch in `u_x(x,y)-u_x(x,-y)` and `u_y(x,y)+u_y(x,-y)`, normalized by `U`. No topology or stagnation diagnostic enters Stage 3. + +**12.8 — Strip asymptotic result [proved mathematical result].** The horizontal strip does not have the unbounded-plane Laurent basis as its downstream asymptotic basis. Wall-compatible harmonic disturbances separate into transverse Neumann/Dirichlet modes with exponential streamwise factors, while the uniform through-flow is the zero mode. Finite image sums therefore do not justify an algebraic `1/z` far-field claim. + +**12.9 — Strip scope [modeling assumption].** No strip modal diagnostic is added in Stage 3: cancellation and `Gamma_*` are scoped strictly to the unbounded outer solution, and any strip mechanism claim remains bounded pending a separately derived converged wall-compatible modal analysis. + + +**12.10 — Concentrated Stage-3 review [numerical observation].** Derivation review: PASS; §§12.2–12.6 derive every implemented sign and coefficient directly. Reproducibility/counterexample review: PASS; direct source velocities, pair sign, zero log coefficient, source-series convergence, polar reflection, affine prediction, real cancellation, and held-out `Gamma=1.37`/region convergence are tested. Claim review: PASS with limitation; the unbounded canonical dipole cancels essentially exactly and the downstream profile improves, but finite common-exterior disturbance does not vanish and strip/DNS/topology claims remain excluded. File review: PASS; 9 package-root source files and 10 source files including `tests/test_core.py`; no file was added. Stage-3 verdict: **PASS for an unbounded outer dipole-cancellation mechanism, bounded to its far-field and tested finite-distance consequences.** + + +## 13. Historical Stage-4 mechanism-test charter and preregistration + +**13.1 — Sole question [modeling assumption].** Does the geometric-CCW rear-opposite basis `(0,+Gamma,-Gamma)` explain the observed downstream disturbance reduction? Passing requires the frozen outer-model counterfactuals and genuinely held-out viscous evidence to agree in sign, relative strength, profile shape, and optimum-side degradation. Comparable counterfactual performance, a wrong sign/parity, failed held-out prediction, or absent field provenance limits or falsifies the claim. No stability question enters Stage 4. + +**13.2 — Frozen bases and norm [modeling assumption].** In body order `(front,rear_y_plus,rear_y_minus)`, define unit Euclidean-circulation-norm controls `b_ro=(0,1,-1)/sqrt(2)`, `b_cr=(0,1,1)/sqrt(2)`, and `b_f=(1,0,0)`. A scalar amplitude `g` means `Gamma_vector=g b`, so all ablations use identical `||Gamma_vector||_2=|g|`, geometry, discretization, and profile; no basis-specific rescaling is allowed after results are seen. + +**13.3 — Affine basis response [proved mathematical result].** The MFS Neumann system is linear at fixed geometry and discretization; therefore `u_b(g)=u_0+g v_b` and every global Laurent coefficient is affine in real `g`. + +**13.4 — Frozen analytic tests [modeling assumption].** For each basis, report: net geometric circulation/log coefficient; `dC/dg` for the complex dipole coefficient; reflection parity; the smooth complete-profile disturbance norm `J_2(g)=[mean_y |u_b(g)-U e_x|^2]^(1/2)` and its analytic directional derivative at `g=0`, `J_2'(0)=mean[(u_0-Ue_x) dot v_b]/J_2(0)` when `J_2(0)>0`; and `E_inf_vector` one-sided derivatives at `g=0` for `h={0.2,0.1,0.05,0.025}` with convergence reported, not relabeled as an analytic derivative. Also minimize `J_2` on each real affine basis at fixed norm convention, report the resulting dipole and full `x/D=10`, `y/D in [-3,3]`, 1201-point profile errors, and evaluate equal-amplitude ablations. Rear-opposite passes the theoretical-basis gate only if it alone has zero net circulation, correct symmetric `(u_x even,u_y odd)` parity, a dipole direction opposing blockage, and materially larger smooth-profile reduction than both counterfactuals. `E_inf` is acknowledged as nonsmooth; only declared finite-difference directional slopes are admissible. + +**13.5 — Frozen gap-flux diagnostic [modeling assumption].** Gap flux is the oriented line integral `integral u dot n ds` across each shortest center-to-center gap segment after removing the two radii; the line normal is the left rotation of the segment tangent. Report signed upper-front and lower-front values and their sum. It is descriptive and cannot replace the dipole/profile gates. + +**13.6 — DNS preregistration and evidence contract [modeling assumption].** A DNS circulation mapping may be fit only from endpoint `ux,uy` arrays with coordinates, body mask, `D,U`, action/body IDs, and q-in provenance. Positive fitted circulation is geometric CCW and must be inferred from an explicitly sampled CCW contour or from outer velocity WLS using the same `u_x-i u_y` convention as §12.2. The training mask is frozen as `s={3.45,3.65}` and held-out mask as `s={3.55}` for a linear `Gamma_eff(s)` closure; complete `x/D=10` profiles and the Stage-2 common-exterior norm are predicted without retuning. D20 aggregate scan points `s={3.4,3.5,3.6,3.8}` and D30 points `s={3.45,3.55,3.65}` are frozen only for the independent optimum-side performance test: the held-out center must be no worse than the neighboring values, and at least one point on each sufficiently separated side must degrade. Aggregate errors cannot determine `Gamma_eff`, profile shape, contour circulation, full-exterior error, or the action-to-geometric-circulation sign. + +**13.7 — Scope omissions frozen before implementation [modeling assumption].** Robust stagnation/separatrix/virtual-body diagnostics are omitted because the existing files have no continuation, root-completeness, or separatrix-closure machinery; isolated grid/root guesses would be fragile. Potential pressure and individual/total force are omitted because Bernoulli/Blasius force is not needed to answer the sole dipole/profile hypothesis and DNS pressure/force fields are absent. These omissions bound topology and force claims to “not tested.” The minimum implemented metrics are therefore dominant log/dipole coefficients, analytic smooth-profile sensitivity, converged one-sided `E_inf` slopes, parity, gap flux, complete profile errors, common-exterior capability, and held-out DNS/performance evidence when its contract is met. + +**13.8 — Frozen execution rule [modeling assumption].** Search narrowly for existing endpoint arrays first. If absent, aggregate summaries receive only their limited performance role; historical fitted `Gamma_eff=-4.293...` values are non-evidence until source arrays are recovered. No CFD is launched unless field-level evidence remains essential after the analytic/counterfactual result, and any run must be the smallest serial D20 train/held-out design with printed body/action/wall oracle and external `/tmp` output. Completion may be PASS, FAIL, or BOUNDED. + + +**13.9 — Historical Stage-4 review [numerical observation].** This pre-campaign review was BOUNDED because endpoint fields were then absent. It is superseded by §§16–18 and retained only as execution history: v4 now supplies direct fields and contour sign, while corrected descriptive WLS and the strip sign comparison reject the actual-actuation cancellation hypothesis. + + +## 14. Stage 5: frozen physical-value and stability hierarchy + +**14.1 — Sole question [modeling assumption].** For the fixed prescribed-circulation steady harmonic outer solution used by the sole rear-opposite mechanism, which precisely defined notions of well-posedness, numerical stability, structural persistence, and dynamical stability are supported? Passing requires the Stage-1 fixed-period uniqueness result, Stage-2 convergence/conditioning evidence, and a reproducible sampled audit showing nondegenerate interior stagnation roots persist under the frozen small parameter perturbations. A missed/failed root, count change, small Jacobian singular value, uncontrolled discretization drift, or absent evolution law limits the claim. No Euler or Navier–Stokes eigenanalysis is introduced. + +**14.2 — Four noninterchangeable levels [modeling assumption].** (i) *Mathematical BVP well-posedness* means existence, uniqueness, and continuous dependence in stated spaces; Stage 1 supplies only conditional fixed-circulation uniqueness. (ii) *Numerical stability* means conditioning plus convergence under representation parameters; Stage 2's convergence and independently discretized agreement are scientific evidence, while measured singular values and conditions are reported diagnostics with broad fail-fast regression guards. (iii) *Structural stability* here means only local persistence of sampled interior stagnation roots. (iv) *Dynamical stability* requires a state, evolution operator, equilibrium, and perturbation class. The present model prescribes no such dynamics, so decay, spectral, Hamiltonian, Euler-vorticity, and Navier–Stokes stability are undefined rather than positive. + +**14.3 — Discrete continuous dependence [proved mathematical result].** For a fixed nondegenerate discrete MFS matrix `A(mu)`, source coefficients satisfy `A(mu)q(mu)=b(mu)`. Continuity of `A,b` and `sigma_min(A(mu_0))>0` imply locally continuous `q(mu)=A(mu)^+b(mu)`, and affine dependence on prescribed circulation is exact at fixed geometry. This is discrete continuous dependence, not a complete PDE existence or shape-differentiability theorem. + +**14.4 — Interior stagnation definition and Jacobian [proved mathematical result].** For parameters `mu` (circulation, geometry, or a separately valid confinement representation), an interior stagnation point is `x_*` in the open fluid domain with + +`F(x_*,mu)=u(x_*;mu)=0`, `r=||F(x_*,mu)||_2`. + +The velocity Jacobian is `J=D_x F`, approximated by centered differences + +`J[:,k]=[F(x+h e_k,mu)-F(x-h e_k,mu)]/(2h)`. + +Record `det J` and singular values `sigma_max>=sigma_min>=0`. If `F` is continuously differentiable and `det J(x_*,mu_*) != 0` (equivalently `sigma_min>0`), the implicit-function theorem gives a unique local root branch `x(mu)` and + +`dx/dmu = -J^(-1) partial_mu F`. + +This proves local root persistence only. It does not prove global root completeness, separatrix equivalence, or absence of bifurcations elsewhere. Near `det J=0`, Brøns & Hartnack (1999) is the primary topology precedent for local streamline bifurcations near degenerate interior critical points; no equation number is imported. + +**14.5 — Frozen sampled-root audit [modeling assumption].** The canonical unbounded geometry is centers `(0,0),(1.3,+0.75),(1.3,-0.75)`, radius `a=0.5`, `U=1`, `n_boundary=64`, source ratio `0.65`, and Stage-3 `Gamma_*=4.818148415799425` in `(0,+Gamma,-Gamma)`. Search only the compact rectangle `[-2,5] x [-2.5,2.5]` from a `29 x 25` seed grid. Accept roots only at least `0.08D` outside every body (`distance >= a+0.08`), with residual `<=1e-9`; use centered-Jacobian step `h=2e-5`, deduplicate within `2e-5D`, and classify as nondegenerate only when `sigma_min>=1e-4`. Because a finite seed grid cannot establish completeness, every result is called a **sampled root audit**, never a proof of global topology. Boundary stagnation points are excluded: they require boundary coordinates and a separate boundary-critical-point theory. + +**14.6 — Frozen perturbations and continuation [modeling assumption].** Track baseline sampled roots by one-to-one nearest continuation, flagging unmatched roots, count changes, displacement above `0.20D`, residual failure, or `sigma_min<1e-4`. The preregistered unbounded perturbations are `Gamma/Gamma_* in {0.98,1.02}` and rear-center changes `(delta x_r,delta b) in {(-0.02,0),(+0.02,0),(0,-0.02),(0,+0.02)}`, applied symmetrically as rear centers `(1.3+delta x_r,+/-(0.75+delta b))`. Strip `H` and image-layer perturbations are excluded: Stage 3 established that the plane Laurent mechanism does not transfer to strip asymptotics, and no converged strip `Gamma_*` or structural charter is defined. This is an explicit scope limit, not evidence of confinement persistence. + +**14.7 — Analytic failure controls [proved mathematical result].** For the exact one-cylinder field with `Gamma=0`, the two stagnation points lie on the body boundary. The affine field `F(x,y)=(x,0)` has a singular Jacobian and a continuum of roots, while `F(x,y)=(x,y)` has one nondegenerate root. + +**14.8 — Required control behavior [modeling assumption].** The audit excludes the exact-circle boundary roots by its interior margin, classifies `F=(x,0)` as degenerate and `F=(x,y)` as nondegenerate, and returns no roots for a deliberately root-free constant field. These controls prevent an audit that always passes. + +**14.9 — Dynamical precedents and non-transfer [primary-literature-supported result].** Crowdy & Marshall (2005) derive Hamiltonian point-vortex motion around multiple circular islands; that problem evolves vortex position and is different from evaluating a prescribed harmonic velocity field. Classical Föppl and Protas's higher-order Föppl models evolve free point vortices or finite-area vortex moments and discuss stability of those equilibria; they do not establish stability of this fixed prescribed-circulation BVP. Passive-particle dynamics `dot x=u(x)` could define trajectory stability of a stagnation point, and Euler-vorticity or Navier–Stokes perturbations could define other stability problems, but none is introduced in Stage 5. + +**14.10 — Concentrated-review rule [modeling assumption].** Exactly one end-stage review must jointly check derivation/citations, sampled-root reproducibility and failure controls, claim limits, tests, no-CFD compliance, and file budget. The final verdict may be PASS, BOUNDED, or FAIL. Uniqueness, numerical convergence, and structural persistence must never be relabeled as perturbation decay or global hydrodynamic stability. + + +**14.11 — Concentrated Stage-5 review [numerical observation].** Derivation/citation review: PASS; §§14.1–14.7 separate the four levels, derive the root/Jacobian/implicit-function definitions, and scope Brøns–Hartnack, Crowdy–Marshall, and Föppl/Protas without invented equation numbers. Reproducibility/failure-control review: PASS; exact affine roots verify residual and centered Jacobians, a shifted affine root verifies nearest continuation, and singular, constant, and exact-circle boundary cases do not pass as nondegenerate interior persistence. Canonical sampled-root review: BOUNDED; the frozen `29 x 25` audit finds no admissible interior root at `Gamma_*`, `0.98/1.02 Gamma_*`, or the four rear-geometry perturbations. Thus there is no interior root branch to qualify; unchanged sampled count zero is evidence only on the frozen seeds/rectangle, not a global topology theorem. Numerical review: PASS for the tested convergence evidence; as a regression snapshot, at `n=64` the canonical matrix has `sigma_min=2.11372e-5`, condition `6.98404e5` independent of `Gamma`, and the `+/-2%` fields obey affine midpoint continuity to the test tolerance. Claim review: PASS with limitation; conditional uniqueness, numerical convergence, and the absence of sampled interior degeneracy are physically useful outer-reference properties, but dynamic stability is undefined and confinement persistence is untested. No-CFD/file review: PASS; no CFD was run and no file was added. Stage-5 verdict: **BOUNDED**—the hierarchy is rigorous and the sampled audit is numerically controlled, but it supplies no positive interior-root persistence branch and no dynamical-stability result. + + +## 15. Historical Stage-6 evidence-freeze charter + +**15.1 — Sole question [modeling assumption].** Does the accumulated evidence support one bounded mechanism claim: prescribed rear-opposite circulation is the unique tested direction that cancels the leading unbounded potential-flow dipole and reduces the declared downstream disturbance, while its causal mapping to the finite-Re rotating-cylinder flow remains unvalidated? Stage 6 introduces no science, metric, simulation, or fit. + +**15.2 — Pass evidence [modeling assumption].** The evidence package passes only if the numbered derivation and four-category statement audit are internally consistent; the source-to-equation ledger retains every bibliographic hold; Stage 2 and Stage 3 theoretical assertions are regenerated by `pinball_math`; Stage 4 is resolved as a split result: endpoint fields and contour sign now exist; geometric sign is PASS, affine WLS closure is BOUNDED, and the actual-actuation favorable-cancellation hypothesis FAILS; Stage 5 remains BOUNDED and dynamical stability remains undefined; aggregate CFD performance is retained only with provenance and explicit scalar-only limitations; the authority/reproduction order is unambiguous; and root/total file counts remain within `10/30` excluding generated bytecode. + +**15.3 — Claim-limiting evidence [modeling assumption].** Any mixed statement label, unsupported citation or equation mapping, missing reproduction command, claim based on absent arrays, inferred equality between wall action and geometric circulation, promotion of aggregate errors to field evidence, stability claim without an evolution law, unresolved cross-stage contradiction, failed test/compile/lint check, or file-budget breach prevents a Stage-6 package PASS until repaired or explicitly bounded. + +**15.4 — Concentrated-review rule [modeling assumption].** Exactly one final review jointly audits derivation, citations, reproducibility, counterexamples and held-out limits, claim matrix, environment guidance, public API, scoped diff, and file budget. Scientific stages may remain BOUNDED even if the evidence package passes, provided every boundary is explicit and no missing evidence is silently promoted. + + +**15.5 — Concentrated Stage-6 review record [numerical observation].** The evidence-package governance verdict is **PASS** after the v4 reconciliation: endpoint contour sign is PASS, corrected WLS and strip representation are BOUNDED, the actual-actuation favorable-cancellation hypothesis is FAIL, and Stage 5 remains BOUNDED with dynamical stability undefined. The package makes no causal WLS, full-PPO, or no-slip-channel claim. + + +## 16. Finite-Re endpoint bridge and strip charter + +**16.1 — Endpoint evidence contract [modeling assumption].** The only production endpoint set is canonical D20 `q_in` plus accepted numeric wall branch `[0,+Omega,-Omega]` at `s={3.45,3.55,3.65}` under one frozen configuration; `s=3.45,3.65` are training endpoints and `s=3.55` is held out. `q_blk` is nonranking, and diagnostics are separate artifacts. Schema v3 preserves raw uint16 solver flags and defines fluid cells exactly by Celeris `FLUID=0x0001`; `body_id=-1` means solver fluid, `-2` means static solver-nonfluid wall/inlet/outlet, and controlled circle interiors receive registry IDs `0,1,2` in semantic order `(front,rear_y_plus,rear_y_minus)`. The body-config loader ignores a JSON `id` key and allocates those IDs by insertion order. Geometry may label a body only where the solver says nonfluid, and every controlled ID must be nonempty. Every artifact also preserves coordinates, `(y,x)` axes, masks, centers, signed action and wall oracle, complete configurations, source/environment identity and hashes, final lattice and advective times, settling windows, finite/shape validation, and no-clobber hashes. Publication is from a validated temporary sibling by an atomic no-replace rename where supported, so a failed write is not an endpoint artifact. Production endpoints are prospectively frozen at final `tU/D=250`, sampling interval `2 D/U`, and two adjacent 10-sample windows. For each window, average `[E_inf_vector,E_L2_vector]`; define settling change as the Euclidean RMS across the two componentwise mean differences and require a finite value `<=1e-4`. Equality passes. A short diagnostic with fewer than 20 samples records JSON `null`, `computed=false`, `qualified=false`, and `reason=insufficient_samples`. The `1e-4` threshold is below 0.5% of the historical low-error magnitude near `0.023` and above historical scalar tail ranges up to approximately `4.6e-5`; those preexisting values informed prospective resolution design but do not prove that any new endpoint qualifies. This is an evidence schema, not physical evidence. + +**16.2 — Geometric contour sign [proved mathematical result].** Parameterize every contour explicitly counterclockwise by `r(theta)=c+R(cos theta,sin theta)`, `0<=theta<2pi`, with tangent `t=(-sin theta,cos theta)`. Then `Gamma_CCW=integral u(r(theta)) dot t R dtheta`; a positive point vortex gives positive `Gamma_CCW`. Bilinear interpolation is admissible only when all four stencil cells are finite fluid cells. Multiple radii must agree in sign before the numeric wall branch is named by geometric circulation. + +**16.3 — Preregistered outer WLS [modeling assumption].** On one frozen common-fluid mask separated from bodies and strip walls, fit the endpoint difference `d=u_ctl-u_in` to the strip rear-opposite unit field `v` with fixed nonnegative quadrature weights: `Gamma_eff=sum w d dot v/sum w |v|^2`. Report mask, weights, denominator and weighted vector residual. The fit has no intercept because `d=0` at zero model amplitude by construction; contour and WLS signs must agree. + +**16.4 — Two-point closure [proved mathematical result].** Two distinct training pairs `(s_-,Gamma_-)`, `(s_+,Gamma_+)` determine exactly `Gamma_eff(s)=a+b s`, with `b=(Gamma_+-Gamma_-)/(s_+-s_-)` and `a=Gamma_--b s_-`. The value at `s=3.55`, its complete `x/D=10` two-component profile, and frozen common-exterior field are predictions with no retuning. No odd symmetry is imposed. + +**16.5 — Exact free-slip strip modes [proved mathematical result].** Downstream of all bodies, an irrotational disturbance has potential `phi`; `Delta phi=0`, wall impermeability gives `partial_y phi=0` at `y=+-H`, and fixed through-flow removes any varying zero mode. The normalized Neumann potential basis is `cos(k_n(y+H))`, `k_n=n pi/(2H)`, whose squared integral is `H` for `n>=1`. A downstream-decaying potential `phi_n=-(A_n/k_n) exp[-k_n(x-x0)] cos[k_n(y+H)]` gives `u'_x=A_n exp[-k_n dx] cos[k_n(y+H)]` and `u'_y=A_n exp[-k_n dx] sin[k_n(y+H)]`. Thus longitudinal cosine and transverse sine coefficients are equal at a station and both propagate by `exp(-k_n dx)`. Under midline reflection, odd `n` potential modes are antisymmetric and even `n` modes symmetric; velocity parity follows by differentiating. + +**16.6 — Strip numerical representation [modeling assumption].** `strip_basis_affine` constructs `rear_opposite`, `common_rear`, and `front_only` equal-norm affine fields with finite MFS image layers. Modal station projection and exponential propagation, image-layer differences, station stability, and ablation determine the bounded strip claim. Unbounded `far_field_coefficients` are prohibited for strip asymptotics; decreasing wall residual alone is insufficient. + +**16.7 — No-slip-channel PDE contract [modeling assumption].** The independent future problem is steady incompressible Navier–Stokes at `Re_D=50`, with fully developed no-body `q_in`, stationary no-slip walls, rotating-cylinder full no-slip, and direct profiles against that same `q_in`. Its optimum `s` is not inherited from uniform/free-slip flow. Method priority is direct steady/mean continuation and convergence, then viscous gap momentum/boundary-layer/separation/base-bleeding analysis, then mean-linearized or resolvent modes after a qualified base. A future PASS requires settled profile improvement plus held-out or perturbation mechanism support; FAIL is nonimprovement/nonconvergence or wrong mechanism sign/shape; BOUNDED is performance without mechanism/robustness. No no-slip run/eigenanalysis is performed here. + +**16.8 — Asymptotic limit [primary-literature-supported result].** Watson's Stokes–Oseen rotating-cylinder construction concerns `Re<<1`; it does not asymptotically control `Re_D=50`. Attached boundary-layer closures likewise lack a controlled parameter in a separated moderate-Re three-body channel. These methods are limiting references, not the current no-slip model. + +**16.9 — Stage-3 field-analysis preregistration [modeling assumption].** Before reading endpoint field values, freeze normalized coordinates about the front center, velocity by `U`, and differences `delta q=q_ctl-q_in`. Primary `E_inf_vector` is the maximum pointwise norm over the complete common solver-fluid `x/D=10` cross-section after excluding the two outermost lattice rows; `x/D={2,4,6}` are diagnostics. Rear-body CCW contours use radii `r/D={0.60,0.65,0.70}` for both bodies: each exceeds `R/D=0.5` by at least two D20 lattice cells, paired `0.70D` contours do not intersect because rear centers are `1.5D` apart, and they remain separated from the front body. Every bilinear stencil must be fluid in both endpoint and q-in. Radius variation is reported as viscous enclosed-vorticity evidence, not required to form a mathematical plateau or identified with a topological potential period. + +**16.10 — Stage-3 strip-WLS preregistration [modeling assumption].** Fit dimensionless `delta q` with uniform weights on the common solver-fluid tensor subset `x/D in [-2,10]`, `|y/D|<=6`, sampled every second D20 lattice cell (`Delta x/D=Delta y/D=0.1`), excluding distance `<0.75D=1.5R` from every body. This domain is already at least `9D` from the free-slip walls, so no additional active wall clipping occurs; record the `1D` wall-margin rule. The model is `strip_basis_affine` at normalized centers `[(0,0),(1.3,0.75),(1.3,-0.75)]`, `R=0.5`, `H=15`, `U=1`, rear-opposite unit-L2 basis `(0,+1/sqrt(2),-1/sqrt(2))`, `n_boundary=32`, source ratio `0.65`, and 40 image layers. The fitted scalar `g` converts to each rear geometric circulation as `Gamma_upper/(UD)=g/sqrt(2)` and `Gamma_lower/(UD)=-g/sqrt(2)`. Only `s={3.45,3.65}` train `g(s)=a+bs`; `s=3.55` is held out. Report held-out scalar error, full-profile vector residual, common-domain weighted RMS/relative RMS, and residual reflection-parity defect. No material-usefulness threshold was preregistered, so predictive usefulness receives no numerical PASS threshold after observing data. The sign gate passes only if upper/lower contours are respectively positive/negative at every valid frozen radius and the WLS per-rear sign agrees; opposite signs fail, while missing/strongly inconsistent magnitudes bound the claim. + +**16.11 — Scientific status [numerical observation].** The v4 immutable endpoint analysis validates contour sampling, corrected blockage-subtracted WLS, two-point held-out arithmetic, and direct profiles. The geometric contour sign is a PASS field observation; WLS interpolation and full-field prediction remain BOUNDED. WLS is descriptive projection, not a causal action-to-circulation map. + +**16.12 — Stage-3 endpoint verdict [numerical observation].** The immutable v4 analysis passes the contour geometric sign gate: accepted numeric `[0,+Omega,-Omega]` produces upper negative/lower positive geometric circulation. Corrected WLS gives `g={-12.02563,-12.20055,-12.37465}`; scalar held-out error is `4.17e-4`, while common-field relative residual is `0.117943` and profile residual remains nonzero, so affine closure is BOUNDED. The projected WLS amplitude is descriptive and cannot be called causal effective circulation. + +## 17. Stage-4 free-slip strip modal qualification charter + +**17.1 — Modal sign convention [proved mathematical result].** For `phi_n=B_n exp[-k_n(x-x0)] cos[k_n(y+H)]`, direct differentiation gives `u_x=-k_n B_n exp[-k_n dx] cos[k_n(y+H)]` and `u_y=-k_n B_n exp[-k_n dx] sin[k_n(y+H)]`. Defining velocity amplitude `A_n=-k_n B_n` therefore gives equal signed cosine/sine coefficients. `strip_mode_field` accepts `A_n`; `strip_modal_projection` independently recovers the `u_x` cosine and `u_y` sine coefficients. No sign is inserted to improve agreement. + +**17.2 — Frozen modal audit [modeling assumption].** Use canonical normalized geometry, `H/D=15`, `U=1`, `R/D=0.5`, `n_boundary=32`, source ratio `0.65`, image layers `{20,40,80}`, stations `x/D={4,6,8,10}`, a 3001-point full-wall-to-wall `y` grid, and modes `n=1,...,12`. All bodies lie upstream because the rears end at `x/D=1.8`. Since `k_1=pi/30`, the slowest mode decays only by `exp(-pi Delta x/30)`. For base disturbance `u_0-Ue_x` and each unit-L2 affine direction, report zero mode, independently projected `u_x/u_y` coefficient disagreement, and station-collapse values obtained by multiplying station coefficients by `exp[k_n(x-4)]`. Modes whose reference vector amplitude exceeds `1e-8` times the largest reference mode are significant; no post-observation coefficient threshold is introduced. + +**17.3 — Frozen objective and ablation [modeling assumption].** Before computing Stage 4, freeze the complete smooth full-height profile objective at `x/D=10`, `J(g)=[mean_y |u_0+g v_b-Ue_x|^2]^(1/2)`, on the same 3001-point grid. For each unchanged equal-L2 basis `rear_opposite`, `common_rear`, and `front_only`, use the analytic real optimum from the affine quadratic and report `J(0)`, `g_opt`, `J_opt`, complete-profile `E_inf_vector`, and leading modal coefficients. Rear-opposite is uniquely favorable only if its `J_opt` is strictly below both counterfactual values at every image layer. A held amplitude `g=0.5 g_opt` must equal direct affine reconstruction to roundoff; this checks exact discrete linearity, not independent PDE validity. + +**17.4 — Convergence and verdict [modeling assumption].** Compare projected coefficients and `g_opt` at 20/40/80 image layers; decreasing differences are evidence of bounded finite-image consistency, while the previously observed approximate `0.5` image-tail ratio prohibits claiming a certified infinite-image error bound. The confinement cancellation mechanism PASSes only if rear-opposite is uniquely favorable, modal relations and station propagation are qualitatively consistent, and theoretical `g_opt` has the same sign as the actual finite-Re WLS `g<0`. Opposite theoretical/actual signs FAIL the proposed cancellation link without redefining the basis. Otherwise unresolved image/modal behavior yields BOUNDED. No-slip remains outside this stage. + +**17.5 — Stage-4 observed audit [numerical observation].** The modal sign audit confirms the `A_n=-k_nB_n` convention: synthetic projected mode tests recover equal signed components. At `H/D=15`, `k_1=0.1047198`. For the canonical zero-circulation base, the through-flow mode is approximately `-2.09e-5` at stations `4,6,8,10`; rear-opposite/common-rear/front-only direction zero modes are approximately `+3.07e-6/-9.26e-5/-6.55e-5`. At layer 40, significant symmetry-allowed even rear-opposite modes satisfy the independent ux/uy projection and station-collapse audit; the prior order-one comparison came from negligible forbidden odd `n=1` coefficients and is withdrawn. + +**17.6 — Stage-4 qualification verdict [numerical observation].** Rear-opposite is uniquely favorable under the frozen full-profile smooth RMS objective at layers 20/40/80: `J_opt` is approximately `1.47136e-4/1.47095e-4/1.47085e-4`, versus about `5.26245e-3/5.26244e-3/5.26247e-3` for both counterfactuals. Its optimal theoretical amplitude is `g_opt=+6.14794` at layer 40. The omitted-base v1 value `g=-14.63058` is withdrawn; corrected v4 WLS gives `g=-12.20055`, still opposite in sign. Exact held-amplitude affine reconstruction errors are below `9e-15`, which validates discrete linearity only. Image-layer changes in `g_opt` shrink from `1.20e-5` to `2.28e-7`, but the prior approximate image-tail ratio still prevents an infinite-image certification. Because the favorable theoretical sign opposes the measured finite-Re sign, the actual-actuation-as-favorable-strip-cancellation hypothesis is **FAIL** under the frozen Stage-4 charter; the bounded finite-image numerical observations and finite-Re WLS sign result remain separately reported. + +## 18. Critical Stage-3/4 correction + +**18.1 — Correct finite-Re comparison [proved mathematical result].** If `u_0` is the zero-circulation three-body strip field and `v=u_1-u_0` is the unchanged unit-L2 circulation direction, then the theoretical controlled disturbance relative to uniform no-body inflow is `(u_0-Ue_x)+g v`. Because the CFD reference `q_in` has no bodies, fitting `q_ctl-q_in` directly to `g v` omits blockage and biases `g`. The corrected WLS fits `[q_ctl-q_in-(u_0-Ue_x)]` to `v`, and held-out prediction is `(u_0-Ue_x)+g_pred v`. Contour circulation is unaffected. + +**18.2 — Symmetry correction [proved mathematical result].** Reflection-symmetric polar velocity has `u_x` even and `u_y` odd. In the shifted strip basis, even `n` gives `cos[n pi(y+H)/(2H)]` even about `y=0` and `sin[...]` odd; odd `n` occupies the opposite parity sector. Therefore rear-opposite and the symmetric base must be audited on significant even modes, beginning with `n=2`; the prior order-one relative error of negligible forbidden `n=1` is methodologically invalid and withdrawn. Common-rear/front-only are not required to share that sector. + +**18.3 — Corrected modal audit [modeling assumption].** Use stations `x/D={4,6,8,10,12,14,16}`; all are downstream of physical singularities at `x<=1.3`, while transverse images share those x coordinates. For each station and mode report raw coefficients and absolute disagreement. A coefficient is significant only when its vector amplitude exceeds `max(1e-8` times the dominant station coefficient, `1e-12)`; relative diagnostics below that floor are forbidden. For rear-opposite/base conclusions use significant even modes. Exact propagation is an infinite-strip property; finite image truncation and trapezoidal endpoint quadrature can leave absolute residuals, which must decrease or remain resolution-bounded with image layers. + +**18.4 — Corrected results [numerical observation].** At layer 40, rear-opposite `n=2` coefficients are `(-2.84940170e-3,-2.84940177e-3)` at `x/D=4`, `(-8.10966882e-4,-8.10967014e-4)` at 10, and `(-2.30808880e-4,-2.30809072e-4)` at 16. Absolute ux/uy disagreements are `7.28e-11`, `1.32e-10`, and `1.92e-10`; collapsed n=2 relative spreads are below `3.1e-7`. Thus the prior modal-propagation failure is withdrawn: significant symmetry-allowed rear-opposite modes pass the finite-image modal audit to the reported numerical resolution. + +**18.5 — Corrected qualification [numerical observation].** Corrected Stage-3 WLS gives `g={-12.02563,-12.20055,-12.37465}` with cosine similarities `{-0.99078,-0.98924,-0.98755}` after subtracting theoretical blockage. Held-out common-field relative residual improves from `0.292` to `0.11794`, while scalar interpolation error remains `4.17e-4`. The negative coefficient is a descriptive projection and is strongly anti-correlated with the unchanged positive unit direction. The favorable theoretical total-field optimum remains `g_opt=+6.14794`; conventions and strip implementation are identical. The earlier modal reason for FAIL is withdrawn; the sign contradiction alone rejects the proposed actual-actuation cancellation mechanism. The confinement mechanism remains **FAIL** specifically because measured finite-Re control drives the opposite potential direction; finite-image modal representation is BOUNDED and numerically consistent, and Stage-3 closure remains BOUNDED. + +## 19. Finite free-vortex feasibility model + +**19.1 — Scope and state [modeling assumption].** In the unbounded plane only, let the fixed three-cylinder base solution `u_base` be the existing MFS field with its prescribed geometric-CCW body circulations `Gamma_j`. Add a finite set of free point vortices at exterior positions `X_i` with fixed geometric-CCW strengths `kappa_i`. This first feasibility model excludes free-slip walls, vortex shedding or production, viscosity and diffusion, finite vortex cores, and Mow's global dispersion relation; it is an instantaneous inviscid transport model, not a Karman-street generation or stability theory. + +**19.2 — Instantaneous impermeability response [proved mathematical result].** The physical incident velocity of the free vortices is + +`u_free(x;X,kappa)=sum_i kappa_i K(x-X_i)`, `K(dx,dy)=(-dy,dx)/(2 pi (dx^2+dy^2))`, + +with the same positive-CCW sign as `singular_velocity(..., vortex=True)`. Because `u_free dot n` is generally nonzero on a cylinder, static superposition with `u_base` violates impermeability. At every vortex configuration solve a zero-period MFS Neumann response `u_resp`: its source strengths have zero sum on each body, its far field decays, it contains no body-vortex terms, and its boundary data satisfy `u_resp dot n=-u_free dot n`. Therefore `(u_base+u_free+u_resp) dot n=0` up to MFS discretization error, while the prescribed base body circulations remain unchanged. + +**19.3 — Finite-vortex ODE [proved mathematical result].** Omitting only the singular physical self term, each vortex is transported by the regular velocity + +`dX_i/dt = u_base(X_i) + sum_(m != i) kappa_m K(X_i-X_m) + u_resp(X_i;X,kappa)`. + +The response is generated by the complete incident set and is retained at `X_i`; in particular, a vortex moves under its own body-induced regular image/response field. Mutual induction retains the geometric-CCW signs above. Exterior, distinct positions are required so neither body collision nor vortex-vortex collision reaches a singular state. + +**19.4 — Hamiltonian status [modeling assumption].** Exact point-vortex motion around fixed bodies can be written using the domain Green function/Kirchhoff--Routh Hamiltonian, including its regular Robin part. The present collocated, zero-period MFS response is only a noncanonical numerical Hamiltonian approximation: it is not asserted to be an exact discrete Hamiltonian system, and MFS truncation and least-squares error may cause Hamiltonian drift. This model therefore tests instantaneous kinematic feasibility, not long-time conservative fidelity. + +**19.5 — Transmission observables [modeling assumption].** For a prescribed incoming finite staggered train, transparent passage can be assessed by matching vortices upstream and downstream and reporting nondimensional position/phase displacement, transverse displacement, spacing distortion, and velocity/strength preservation, together with minimum body clearance and accumulated impermeability error. These are conceptual diagnostics for later trajectory integrations; no acceptance threshold, campaign, or claim that the train passes unchanged is introduced here. + +**19.6 — Numerical qualification [numerical observation].** Qualification is limited to dense shifted-angle impermeability, zero bodywise source monopoles/no added body circulation, far-field decay of the response, correct no-body mutual induction, singular-self exclusion, finite RHS values, and fail-fast invalid/collision controls. Passing those checks establishes a narrow CPU feasibility prototype only. + + + +## 20. Stage 0: primary-paper equation maps and exact CPU oracles + +**20.1 — Vasconcelos--Moura--Schakel map [primary-literature-supported result].** Vasconcelos et al. (2012), DOI `10.1063/1.3667269`, nondimensionalize lengths by cylinder radius `a`, velocities by `U`, time by `a/U`, and define the upper wake vortex strength by `kappa=-Gamma/(2 pi U a)>0`; the upper vortex is therefore clockwise in this paper's convention and the lower one is its opposite-sign reflection. On the symmetric invariant subspace, their (7)--(8) give `H=y(1-1/r^2)-(kappa/2)log[y(r^2-1)/sqrt((r^2-1)^2+4y^2)]`, `xdot=H_y`, `ydot=-H_x`. Their Föppl equations (9)--(10) give `r0^2-1=2r0 y0` and `kappa=(r0^2+1)(r0^2-1)^2/r0^5`. At `r0=2`, the exact downstream point is `(sqrt(55)/4,3/4)` and `kappa=45/32`. Their critical level (26), `Hc=(kappa/2)[1-log(kappa/2)]`, belongs to the nilpotent saddle at infinity `(x,y)=(+/-infinity,kappa/2)`; it is **not** the finite Föppl equilibrium's Hamiltonian value. + +**20.2 — Kármán-street map [primary-literature-supported result].** Mowlavi, Arratia & Gallaire (2016), DOI `10.1017/jfm.2016.195`, use streamwise spacing `a`, row separation `h`, circulation magnitude `Gamma`, lengths scaled by `a`, and time `2 pi a^2/Gamma`. For the physical unconfined street (`n=0` in their confined array), lower vortices are `(ma,-h/2)` with `+Gamma` in the paper and upper vortices are `(ma+a/2,+h/2)` with `-Gamma`. With this project's geometric-CCW kernel, that paper assignment translates in negative x (consistent with the paper's negative unconfined values of `v0`). To expose the requested positive-advection baseline without hiding a sign change, `staggered_karman_train` reverses both rows: lower `-Gamma`, upper `+Gamma`. For this explicitly reversed convention the common positive x self-advection is `U_self=Gamma/(2a)tanh(pi h/a)`. The exact unconfined temporal-neutral aspect is `p0=h/a=asinh(1)/pi`. The finite constructor is only a symmetric truncation oracle; it converges algebraically to the infinite sum. The confined dispersion coefficients (2.7), dispersion relation (2.11), unconfined coefficients (4.4), and Briggs--Bers continuation are not implemented: no temporal growth curve or convective threshold is claimed. + +**20.3 — Green/Robin/Routh map [primary-literature-supported result].** Crowdy & Marshall (2005), DOI `10.1063/1.1900583`, formulate one-vortex motion around multiple circular islands through the domain Green function, its regular Robin self-part, and the Kirchhoff--Routh Hamiltonian, in the special case of zero circulation around every island. Any imposed irrotational background contributes its streamfunction term `H_B`; the vortex moves with the regular velocity after its singular self field is removed (Routh rule). `exact_circle_vortex_response` is the independently derivable one-circle reduction: a physical vortex is accompanied by its opposite image and a same-sign central vortex so the island circulation is zero, and both image terms contribute to regular self velocity. `MFSBodyResponse.response` is compared to this exact reduction; it is not promoted to Crowdy--Marshall's exact multiply connected prime-function formula. + +**20.4 — Routh/body coupling scope [primary-literature-supported result].** Streitlien's 1994 thesis record, DOI `10.1575/1912/5563`, treats incoming vortex streets interacting with a Joukowski foil using two-dimensional potential flow, complex-variable force/moment formulas, and nonlinear foil--vortex coupling. It supports retaining each incoming vortex's regular body-induced response and coupling the street to the body boundary; it does not make a prescribed finite train an equilibrium, prove transparent passage, or transfer foil force formulas to three fixed circles. + +**20.5 — Steady evidence map and sign non-equivalence [primary-literature-supported result].** Cornejo Maceda et al. (2021), DOI `10.1017/jfm.2021.301`, order controls `(front,bottom,top)` as `(b1,b2,b3)`, define positive command as counter-clockwise wall rotation, and call `b2=-b3<0` base bleed while `b2=-b3>0` is boat tailing/Coanda forcing. Chan et al. (2011), DOI `10.1017/jfm.2011.134`, define their side-by-side pair by figure 2's **doublet-like** and **reverse doublet-like** rotation drawings and associate the former at high speed with a virtual elliptical body; those names encode that paper's pair geometry and arrows, not this project's rear-pair labels. Rodrigues et al. (2026), DOI `10.1016/j.expthermflusci.2026.111798`, now has a **partially lifted** figure/sign map in `LITERATURE.md`: Eqs. (1)–(2) and Fig. 3 authorize wall-sense comparison, with project accepted `[0,+Omega,-Omega]` mapping to the literature **base-bleeding / gap-jet** family and literature **boat-tailing** mapping to project reverse. Quantitative Rod26 thresholds, forces, and `Re=9100` coordinates remain held. None of `base bleed`, `boat tailing`, `doublet-like`, `reverse doublet-like`, or this project's `rear_opposite` may be equated as identical mechanisms across different body orderings, Reynolds numbers, wall laws, or metrics; wall-sense family labels are comparative only. + +**20.6 — Stage-0 implementation boundary [modeling assumption].** Public CPU helpers are limited to the Vas Hamiltonian/RHS/equilibrium/critical level, one-circle exact zero-period response and Routh velocity, and finite/infinite Kármán baselines. Tests cover the exact Vas residual and critical-level distinction, finite-difference Hamiltonian gradient, short high-accuracy Hamiltonian conservation, exact-circle MFS response convergence, finite-window Kármán convergence, and the `sinh(pi p0)=1` identity. No CFD, wall images for the Kármán street, finite-train equilibrium, temporal growth oracle, convective threshold, multi-island prime function, or viscous branch transfer is implemented. + +## 21. Steady-contract mechanism comparison derivation + +1. **Frozen question and failure rule [modeling assumption].** Under one D20, uniform-inlet/free-slip, `Re_D=50` CFD setting, compare four preregistered branch outcomes: qualified no-body `q_in`, intentionally unsteady stationary pinball, qualified accepted `plus-minus` at `s=3.55`, and the historical reverse `minus-plus` stability candidate at `s=5.2`. The analyzer must fail if reverse `s=5.2` is absent or unqualified; in that event the stable-reverse claim is rejected. The settling threshold remains `1e-4`. + +2. **Role lock [modeling assumption].** Reverse production permits only `s={3.55,5.2}`. Reverse `s=3.55` is the same-amplitude negative control and is reported separately when present; it is not required to qualify and cannot support the stable-reverse claim. Reverse `s=5.2` is preregistered as the historical stability candidate because the earlier stable, high-deficit wrong-direction observation came from old `s=5.2` runs. Accepted production support remains `s={3.45,3.55,3.65}` and the frozen mechanism role is accepted `s=3.55`. + +3. **Comparison boundary [modeling assumption].** All roles retain exact shared grid, physics, boundary, runtime, sampling, settling, coordinate, and topology conventions; only the role parameter `s` may differ. Accepted `s=3.55` and reverse `s=5.2` are therefore not exact action reversals at equal amplitude. This comparison separates branch outcomes and is **not an equal-amplitude causal effect**. Source provenance is reported per role because the follow-up artifact is acquired after this preregistration, while exact CFD settings remain mandatory. + +4. **Output contract [modeling assumption].** The analyzer computes direct profile differences against `q_in` at `x/D={2,4,6,10}`, pairwise two-component field L2 on common-fluid masks, and controlled-case force-tail mean/std. If reverse `s=3.55` exists, the same descriptive outputs and its qualification/settling record are included under a separate negative-control report. No threshold relaxation, stability inference from an unqualified endpoint, or circulation/separation/causal mechanism metric is permitted. + + +## 22. Steady residual S2 charter + +**22.1 — Sole S2 question [modeling assumption].** Under the frozen D20, uniform-inlet/free-slip, `Re_D=50` geometry, can a common rear-opposite affine outer-potential description account for both the qualified accepted low-deficit endpoint at `s=3.55` and the qualified stable reverse high-deficit endpoint at `s=5.2`; and, after subtracting each endpoint's corrected total potential model (including zero-circulation blockage), which endpoint-feasible viscous residual observable distinguishes those outcomes? Fits are descriptive per endpoint because `s` differs; fitted amplitudes are not equal-intervention effects. A final endpoint cannot establish temporal causality. + +**22.2 — Frozen fields, signs, and outer fit [modeling assumption].** Normalize coordinates about the front center by `D` and velocity by `U_inf`. For accepted and stable reverse separately, fit `q_case-q_in=(q_0-U_inf e_x)+g(q_1-q_0)` by uniform-weight vector WLS on the Stage-3 strip mask `x/D in [-2,10]`, `|y/D|<=6`, every second D20 cell, common solver-fluid cells, distance `>=0.75D` from each cylinder, and at least `1D` from strip walls. The basis is the unchanged canonical strip rear-opposite unit-L2 circulation field with `H/D=15`, `R/D=0.5`, 32 boundary points, source ratio `0.65`, and 40 image layers. Report `g`, per-rear geometric circulation, cosine sign, weighted residual, and geometric-CCW contour circulation at `r/D={0.60,0.65,0.70}`. The residual total field is `q_nu=q_case-[q_in+(q_0-U_inf e_x)+g(q_1-q_0)]`. Opposite measured and favorable theoretical signs remain a contradiction; no canceled-circulation mechanism may be revived. + +**22.3 — Frozen residual regions and quadrature [modeling assumption].** Every area metric uses the common q-in/case solver-fluid mask and physical composite-trapezoid cell weights, with cylinder/nonfluid cells excluded exactly by that mask. Regions in front-centered coordinates are: `near_gap: -0.5<=x/D<1.8, |y/D|<=1.5`; `immediate_wake: 1.8<=x/D<4, |y/D|<=3`; `recovery: 4<=x/D<=10, |y/D|<=3`; and the observer line at the nearest `x/D=10` column with the two outermost rows excluded. Report explicit quadrature `L2=[integral |q_nu|^2 dA]^(1/2)` (never RMS), normalized `L2/[integral |q_case-q_in|^2 dA]^(1/2)`, retained area/line length, and observer-line `L2=[integral |q_nu|^2dy]^(1/2)` with the analogous normalization. Empty masks, nonfinite fields, or zero normalizers fail fast. + +**22.4 — Frozen viscous observables [modeling assumption].** Compute `omega_z=partial_x u_y-partial_y u_x` only where conservative centered differences have fluid neighbors on both sides; all other cells are invalid. Report endpoint-field gap fluxes across the shortest rear--rear, front--upper-rear, and front--lower-rear open segments, requiring every bilinear stencil to be common fluid. In `near_gap` and `immediate_wake`, report absolute-vorticity-weighted transverse centroid and width using physical area weights. Define recirculation by `u_x/U_inf<0` in the frozen symmetric window `1.8<=x/D<=10`, `|y/D|<=1.5`: report weighted area and streamwise extent from occupied columns (zero if absent). At nearest stations `x/D={2,4,6,10}`, report momentum-deficit proxy `integral max(0,1-u_x/U_inf)dy`, positive-deficit line measure, and signed deficit integral over common fluid rows after excluding the two outermost rows. Force observables are bodywise and total `Fx,Fy` means and population tail standard deviations over the final 10 samples; they are not pressure drag. + +**22.5 — Spatial-sequence and classification rule [modeling assumption].** Endpoint fields can support only ordered spatial coexistence/association. A mechanism-association PASS requires at least one preregistered observable to distinguish accepted from stable reverse in one direction at two or more of `x/D={2,4,6,10}`, with a nonzero strict difference at each station and no direction reversal across those stations; the reported candidate and all station values must be named. If no observable meets that criterion but all required data and metrics are valid, S2 is BOUNDED. A required-mask/model/qualification contradiction or an observable direction reversal falsely presented as consistent is FAIL. Reverse `s=3.55` is unsteady negative context only and cannot serve as a mechanism endpoint. + +**22.6 — Claim and literature limits [modeling assumption].** Rod26 (partial sign lift), Cornejo Maceda et al. (2021), and Chan et al. (2011) are qualitative literature frameworks for rotating-cylinder branches, gap transport, and wake organization. Wall-sense comparison may use the Stage-1 master map (accepted ↔ base-bleed family; boat-tail ↔ reverse), but Reynolds numbers, geometry, confinement, force thresholds, and drag optima do not transfer quantitatively to this D20 three-cylinder endpoint comparison. S2 may conclude spatial association, not temporal causality, pressure-drag decomposition, equal-amplitude intervention response, a literature proof that “boat-tailing explains the cloak,” or a universal circulation law. + +**22.7 — Immutable output and verdict contract [modeling assumption].** The analyzer writes a no-clobber external directory containing strict `analysis.json` and only essential NPZ arrays, records SHA-256 hashes of every endpoint payload and the analyzed source files, and records the exact reproduction command. Required controls are synthetic quadrature/regions, conservative masked vorticity, gap flux, recirculation, wake moments, sign/parity, empty/invalid mask failure, and runner no-clobber/role contract. The final verdict is exactly PASS, BOUNDED, or FAIL under §22.5. + + +## 23. K1 finite unbounded Kármán baseline qualification + +1. **Sole K1 question [modeling assumption].** Does the existing positive-advection, unbounded point-vortex Kármán street convention reproduce the infinite-street translation at the center and a short finite-horizon central propagation oracle under independent train-window and RK4-step refinement? This is a mathematical qualification baseline only. It is not CFD parameter identification: no trustworthy phase-resolved `q_in` extraction is available, so `a`, `h`, and `Gamma` are dimensionless Mowlavi-literature baseline quantities rather than fitted pinball values. + +2. **Signs, rows, stagger, and scaling [proved mathematical result].** Coordinates are x-right/y-up and positive circulation is geometric CCW, with kernel `K(dx,dy)=(-dy,dx)/(2 pi r^2)`. The implemented positive-x street reverses Mowlavi et al.'s physical signs explicitly: lower row `(m a,-h/2)` has `-Gamma`; upper row `((m+1/2)a,+h/2)` has `+Gamma`. Set `a=Gamma=1`, `p=h/a`, velocity scale `Gamma/(2 pi a)`, and time scale `2 pi a^2/Gamma`; the code uses the equivalent dimensional kernel and reports physical code time. The exact common speed is `U_self=Gamma/(2a)tanh(pi h/a)`, and the nominal aspect is `p0=asinh(1)/pi`. + +3. **Finite train and frozen observer [modeling assumption].** For half-window `M`, retain lower indices `m=-M,...,M` and upper indices `m=-M-1,...,M`, exactly as `staggered_karman_train`. Use `M={12,24,48}`. Freeze the observer by initial labels, not moving coordinates: both rows with initial `|x|<=2.5a`. End vortices remain in the ODE but never enter central acceptance metrics. The finite open train is not an equilibrium; only convergence of this fixed central observer as its separation from the ends grows may be claimed. + +4. **Evolution and collision scope [modeling assumption].** Integrate `dX_i/dt=sum_(j!=i) Gamma_j K(X_i-X_j)` by deterministic classical RK4 over `0<=t<=0.25 a^2/Gamma`, with fixed steps `dt={0.01,0.005,0.0025}` (the final step is shortened only to land exactly on the horizon). Reject nonfinite states or pair distance `<=1e-6 a`. No cylinders, pinball, walls, images, viscosity, shedding, CFD, GPU, or confinement are present. + +5. **Exact finite-plane Hamiltonian convention [proved mathematical result].** With fixed reference length exactly `a`, use +`H=-sum_(i24` to `24->48`, with the finest `<1e-2 a`; (iv) at `M=48`, successive time-step aligned differences decrease or both reach a `8 eps a` roundoff plateau, and the `0.005->0.0025` value is `<1e-7 a`; (v) finest normalized Hamiltonian drift is `<1e-8`, minimum pair distance remains `>0.2h`, and every metric is finite; and (vi) rerunning the complete analysis yields byte-identical canonical config/result payloads. Failure of any item makes K1 **FAIL** and stops the K lane. + +8. **Classification and K2 gate [modeling assumption].** Even when the mathematical core passes, overall K1 is **BOUNDED**, not PASS, because the attached plan requires at least a growth/impulse oracle while Mowlavi confined dispersion/growth and trustworthy phase-resolved extraction remain publication-held. The implemented perturbation observable is explicitly a finite-open-train sensitivity and cannot substitute for Mowlavi's periodic dispersion relation. Therefore K2 is **NO-GO** unless a later, separately frozen source-verified Mowlavi growth/impulse oracle is reproduced. No Mowlavi dispersion coefficient, temporal/convective stability, or confinement conclusion may be invented or inferred here. + +9. **Immutable output [modeling assumption].** The CPU runner publishes `/tmp/karman-baseline-20260806` atomically without replacement, containing strict canonical `config.json`, `result.json`, and `manifest.json` with SHA-256 hashes of both payloads and the four allowed edited source files. Arrays are omitted because all acceptance data are scalar or short metric records. Existing output is an error, never overwritten. + + +## 24. Inviscid→viscous theory boundary (Stage-1 continuous closure) + +This section continuously closes the Stage-1 inviscid contract against the finite-Re accepted branch. It does not reopen §§3–6 proofs, does not revive the canceled-blockage identification, and does not import Kármán/Föppl into the steady manuscript claim path. + +**24.1 — Impermeability and independent circulations [proved mathematical result; S2–S8].** Subject to §§3–6: the irrotational outer problem is a Neumann impermeability BVP whose body circulations are independent periods; centered circular rotation drops out of normal data (§4.2); the one-cylinder family shows wall rotation does not select `Gamma` under Euler slip (§5); and full rotating no-slip is generically overdetermined once periods are free only finitely (§6). Crowdy/Glass literature support for impermeable boundaries and independent perfect-fluid circulations remains as in §7 and S4/S9. Consequently any map from wall speed to outer circulation is a viscous-interface/empirical closure (S10), not an Euler boundary condition. + +**24.2 — Natural cancellation direction of prescribed `(0,+Gamma,-Gamma)` [proved mathematical result + numerical observation].** With body order `(front,rear_y_plus,rear_y_minus)`, the geometric-CCW rear-opposite assignment has zero net circulation, reflection-symmetric `(u_x` even, `u_y` odd) parity, and pair dipole coefficient `-Gamma b/pi` before body-source readjustment (§§12.3–12.6). Among the three equal-norm bases of §13.2, the strip smooth full-height profile objective uniquely favors that direction with theoretical optimum `g_opt=+6.147944` at 40 image layers (§§17.6, 18.5). That sign is therefore the natural *prescribed-circulation* cancellation direction for the outer potential problem; it is not a prediction that Navier–Stokes wall rotation must produce the same geometric periods. + +**24.3 — Accepted CFD effective sign contradiction [numerical observation; failed identification].** Accepted numeric wall action `[0,+Omega,-Omega]` at held-out `s=3.55` produces geometric contour circulation `(0,-,+)` and corrected descriptive WLS amplitude `g=-12.200554` on the same unit-L2 rear-opposite basis (§§16.12, 18.5). The theoretical favorable sign `g_opt=+6.147944` and the measured descriptive sign `g=-12.200554` therefore contradict under identical geometry, basis, and convention. The rear-opposite dipole algebra remains true; what fails is identifying prescribed potential-circulation cancellation as the accepted CFD mechanism. + +**24.4 — Mathematical entry of viscous wall vorticity, separation, and gap transport [primary-literature-supported result + modeling assumption].** Euler slip and Kelvin transport supply no wall-vorticity flux that can select `Gamma` from `Omega` (§§7.1–7.2). The viscous rotating-body problem instead imposes full no-slip and couples wall velocity to vorticity generation/diffusion (Ueda et al. 2003; §7.3). Restricted attached-layer closures (Glauert/Moore) do not control this moderate-Re, possibly separated three-body flow (§§7.4, 16.8). Therefore the continuum location where the Stage-1 outer contract ends—and where wall vorticity, separation/reattachment, and gap momentum transport must enter—is exactly the viscous no-slip interface and its near-wall/gap vorticity field, not the Neumann period problem. Downstream deficit then responds to that viscous near-field organization rather than to an a-priori prescribed outer `Gamma`. + +**24.5 — Sole surviving mechanism chain [modeling assumption / hypothesis].** After the sign contradiction, the sole modeling chain retained for the steady accepted/reverse comparison is the ordered spatial association already gated in §22: + +`wall rotation direction → gap / outer shear → recirculation / integrated force → downstream momentum deficit`. + +This is an endpoint coexistence hypothesis, not a proved evolution law. It does not assert equal-amplitude causality across different `s`, pressure-drag decomposition, or a universal `Gamma(Omega)` formula. + +**24.6 — Claim labels and falsification [modeling assumption].** Labels for this boundary: + +| Claim | Label | +|---|---| +| §§3–6 impermeability, independent periods, no-slip overdetermination | proved mathematical result | +| Crowdy/Glass/Ueda/Glauert interface distinction | primary-literature-supported result | +| `g_opt=+6.147944` vs accepted `g=-12.200554` and geometric `(0,-,+)` | numerical observation | +| Identification of prescribed `(0,+Gamma,-Gamma)` as the accepted CFD cancellation mechanism | failed/withdrawn | +| Chain wall → gap/shear → recirculation/force → downstream deficit | modeling assumption / hypothesis | +| Any `Gamma_eff(s)` as Euler wall law | modeling assumption (forbidden as proved) | + +Falsification or claim-limiting conditions: (i) a derived Euler rule selecting `Gamma` from centered `Omega` under the Stage-1 hypotheses; (ii) accepted geometric/WLS sign agreeing with `g_opt>0` under the frozen basis without redefinition; (iii) an equal-amplitude controlled intervention showing the residual chain reverses while the outer potential identification holds; (iv) promoting aggregate scalars or absent endpoint arrays to field mechanism evidence; (v) treating dynamical stability as proved for the static prescribed-circulation BVP (§14). + +**24.7 — Kármán/Föppl quarantine [modeling assumption].** Vasconcelos–Föppl oracles (§20.1), Kármán-street constructors/baselines (§§20.2, 23), and related free-vortex feasibility code (§19) remain available as mathematical CPU oracles only. They are **frozen quarantine** relative to the steady manuscript claim path: no Kármán phase, street transmission, Föppl equilibrium stability, or PPO-feedback conclusion is part of the Stage-1→S2 steady cloak identification. K1 FAIL / K2 NO-GO (§23) reinforces the pause; those results do not amend §§24.1–24.5. + + +## 25. Historical mechanism-completion charter (steady only) + +**25.1 — Sole scientific proposition [modeling assumption].** In the canonical uniform-inlet/free-slip `Re_D=50` pinball, accepted numeric rear-symmetric action `[0,+Omega,-Omega]` produces a qualified steady low-deficit state relative to uniform no-body `q_in` at `x/D=10`, whereas the potential-flow-favored opposite circulation direction corresponds to a stable high-deficit reverse branch rather than a cloak. The surviving explanatory hypothesis is viscous wall actuation that reorganizes gap transport and outer shear layers, then recirculation/force, then downstream deficit. Prescribed-circulation dipole cancellation is a proved outer-field property and a falsified CFD mechanism. + +**25.2 — Evidence governance [modeling assumption].** Physical payloads reside only under `/home/frank14f/optane/DynamisLab/steady_pinball_theory/` with top-level directories `authoritative/` and `archive/`. The package exposes exactly one entry, the symlink `evidence/`. `/tmp` is the sole scratch/discovery area. Promotion is atomic, no-clobber, one canonical result per scientific question, with `PROMOTION.json` hashes. Failed diagnostics are deleted unless uniquely valuable negative evidence. Kármán/Föppl implementations (§§19,23 and related APIs) are quarantine: they may remain for historical CPU tests but do not enter the steady manuscript claim path. CCD is excluded. + +**25.3 — Metric hierarchy [modeling assumption].** Primary cloak metric: full two-component `E_inf_vector(q_ctl,q_in)` at front-centered `x/D=10`. Secondary: explicit integral profile `L2`. Diagnostic only: stations `2,4,6`, field residuals, force tails, gap fluxes, vorticity widths, recirculation. `q_blk` never ranks. + +**25.4 — Inviscid→viscous entry point [proved mathematical result + numerical observation].** Impermeability and independent circulations are Euler data (§§3–6). The rear-opposite basis `(0,+Gamma,-Gamma)` has zero net circulation and an affine dipole (§12). Strip cancellation selects favorable `g_opt=+6.147944` [numerical observation]. Accepted CFD instead yields geometric `(0,-,+)` and descriptive `g=-12.200554` [numerical observation]. Therefore wall-speed → outer-circulation cancellation cannot be the measured cloak mechanism. Viscous no-slip generates wall vorticity, modifies separation and gap jets, and must enter before any finite-Re cloak claim (§§5–7,22,24). + +**25.5 — Surviving mechanism chain [modeling assumption].** Pre-registered ordered association only: +`wall direction → gap/outer shear → recirculation/force → downstream deficit`. +PASS requires at least one local, one near-wake, and one downstream discriminator coherent across stations without direction reversal. Temporal causality requires a separately frozen transient intervention. Incomplete control-volume ledgers must list unavailable pressure/viscous/torque terms and must not be called closed balances. + +**25.6 — Falsification [modeling assumption].** The viscous association fails if accepted and reverse are not distinguished by the pre-registered chain, if discriminators reverse across stations, if D20/D30 disagree beyond claim-tolerable uncertainty on the primary profile, or if a new equal-setting intervention shows local response after, not before, the observer-plane change. Cross-project SR/DRL salience remains contextual and cannot rescue a failed local mechanism. + +**25.7 — Mechanism-completion gate status [numerical observation; superseded].** Stage-2 credibility remains a numerical-observation **PASS** and Stage-3 remains a spatial-association **PASS** only; causality is **NOT_ESTABLISHED** and prescribed-circulation cancellation remains **FAIL**. The promoted semi-analytic artifact subsequently failed audit (§26.0), so no composite, validation, or manuscript-completion PASS survives. Section 27 supersedes the mechanism-completion path with an NS-first preregistration. + + +## 26. Withdrawn composite semi-analytic charter + +**26.0 — Audit disposition [failed/withdrawn].** This charter records a historical preregistration, not an active mechanism route. The promoted artifact double-subtracted the reference in its profile metric; its valid internal comparison is approximately `70.29%` improvement for `MFS0+Gamma` versus `70.51%` for the full fit. `q_VI` is independent of `omega`/branch, `q_wake` is inactive, and the speed/direction gates refit or read held-out CFD rather than independently predicting it. Every composite held-out PASS is withdrawn. The immutable artifact is bounded descriptive historical evidence at most and is non-authoritative for active claims. + +**26.1 — Historical target [modeling assumption; withdrawn].** Explain accepted numeric `[0,+Omega,-Omega]` (project base-bleed / gap-jet wall sense) with a low-dimensional composite model + +\[ +q_{SA}=q_{MFS,0}+q_{VI}+q_{gap}+q_{wake}, + +\] + +optionally compared against descriptive `q_{Gamma}` only. Pure prescribed `(0,+Gamma,-Gamma)` cancellation remains a **failed** outer counterexample (§§17–18, 24.3), not the measured mechanism or a stopping condition. + +**26.2 — Component contracts [modeling assumption].** +- `q_MFS,0`: zero-period `solve_mfs` strip field; impermeable geometric backbone only. +- `q_VI`: zero-net-per-body Neumann transpiration from moving-wall displacement proxy `v_n=d(U_e delta^*)/ds`; accepted/reverse signs enter through the wall oracle and branch, never through empirical circulation sign flips. +- `q_gap`: finite-gap Couette–Poiseuille / localized jet ansatz at `h/D=0.5`; reports `Q_g`, `J_g`, power scale; **not** a lubrication claim. +- `q_wake`: convected Gaussian deficit with parameters fit only from `x/D<=2`, wall, or gap regions; predicts `x/D={4,6,10}`. +- `q_Gamma`: descriptive `strip_basis_affine` rear-opposite circulation; optional baseline only. + +**26.3 — Historical fitting and held-out gates [modeling assumption; withdrawn].** These preregistered gates were not validly met and cannot support PASS. Three baselines: `MFS0`, `MFS0+Gamma`, full composite. Spatial held-out: fit near field only, score `x/D={4,6,10}` profiles and `E_inf_vector`. Speed held-out: train `s={3.45,3.65}`, predict `s=3.55`. Direction held-out: same equations on stable reverse `s=5.2` must yield higher deficit ranking and opposite gap-flux sign. **PASS** requires downstream ranking, gap sign, and significant held-out improvement over both potential baselines; else **BOUNDED** or **FAIL** by component. CFD fit alone is insufficient for mechanism claims. + +**26.4 — Historical literature method map [primary-literature-supported result + modeling assumption; withdrawn implementation].** Viscous–inviscid transpiration and displacement-thickness closures follow Fansler–Danberg / Celik–Patel / Yiu–Giles / Soares families; gap transport follows Dormy–Moffatt / Ueda / Watson / Umemura low-Re and finite-gap ansätze; wake replenishment follows Leal–Acrivos / Steiros / Freund–Mungal base-bleed motifs; branch topology follows Chan / Maceda / Rod26 qualitative maps (`LITERATURE.md` Stage-2 ledger). All asymptotic formulas are sign/scale templates at `Re_D=50`, `h/D=0.5`. + +**26.5 — Historical causality and minimal numerics [modeling assumption; withdrawn].** Reuse existing D20/D30 endpoints unless a missing quantity would change model selection. Equal-amplitude transients and V5 sanity run only if composite PASS still leaves direction causality ambiguous. Legacy steady-field ratios do not substitute for V5 sanity. + +**26.6 — Historical claim boundary [modeling assumption; withdrawn].** The never-achieved **PASS** would have meant: potential flow supplies the outer geometry; accepted wall actuation is represented by locatable viscous corrections that improve held-out profiles and preserve accepted/reverse ordering. It does **not** mean potential flow equals Navier–Stokes, nor that `Gamma_eff(s)` is causal. + +## 27. Historical NS-first execution charter + +**27.1 — Sole proposition [modeling assumption].** Determine whether accepted rear action `[0,+Omega,-Omega]` establishes a qualified stable low-deficit Navier–Stokes base flow through measurable actuator power, boundary-vorticity production, gap momentum, separation/base-pressure/recirculation reorganization, force and wake momentum-energy recovery, and stability. Potential flow remains an impermeability reference and failed mechanism counterexample; velocity-field fitting alone cannot pass. + +**27.2 — Four noninterchangeable roles [modeling assumption].** Freeze: (i) stationary; (ii) accepted `s=3.55`; (iii) equal-amplitude reverse `s=3.55`, which is an unsteady intervention/causal control; and (iv) stable reverse `s=5.2`, which is a different-amplitude steady topology control. No result from role (iv) may be represented as an equal-amplitude causal effect, and role (iii) need not qualify as a steady endpoint. + +**27.3 — Conservation and stability chain [modeling assumption].** The preregistered order is +`wall torque / actuator power → boundary vorticity + gap mass/momentum → separation, base pressure, recirculation → body force + wake momentum/mechanical-energy deficit → stability → x/D=10 E_inf_vector`. +Resolved station mass, momentum, kinetic/mechanical-energy fluxes, volume viscous dissipation, wall work, and control-volume residuals must retain physical quadrature and signs. Missing pressure, viscous, boundary, or torque terms force an explicit partial-ledger/BOUNDED status; no residual may be called closed without grid/control-volume convergence. Stability is separate: settling is not global stability; perturbation return is empirical evidence, while spectral claims require a qualified base state, perturbation class, and converged linear operator. + +**27.4 — Stage reflection and memory contract [modeling assumption].** Before each stage: read current Working Memory, perform targeted durable/thread recall when prior decisions matter, reread the governing plan, code contracts, and relevant Undermind source ledger, then preregister equations, dimensions, controls, PASS/BOUNDED/FAIL, and stopping rules here. After each stage: state what was answered, what remains absent, whether the result became a fit rather than a conservation/mechanism test, update `RESULTS.md`, `LITERATURE.md`, and `README.md`, and revise rather than duplicate durable memory. Code, reproducible CFD, immutable artifacts, and primary literature outrank memory summaries. + +**27.5 — Stage gates and chronology [modeling assumption + audited numerical status].** Stage 0 froze these gates before later acquisition. Torque endpoints, an NS diagnostic ledger, a same-parent switch, and pulse returns were subsequently run; therefore it is stale to call all NS work unimplemented. The 2026-08-08 audit nevertheless finds the gates unmet: fluxes and dissipation do not share a control volume, pressure was unavailable and represented as zero, the single deterministic switch uses heuristic gates, and the dimensionful return norm cannot identify a basin transition. Thus energy closure, causal mechanism, branch switching, nonlinear stability, held-out reduction, and global stability remain unestablished. + + +## 28. 2026-08-08 NS-first evidence boundary + +The Stage-1 source-only cut-link inference was falsified by the runtime manufactured oracle. Fluid-to-solid link traversal and the positive-drag force convention do not determine ownership of the public torque readback. Fresh `+omega`, `-omega`, and zero runs show same-sign `tau_read` and `omega`, odd parity defect `1.14e-5`, and zero/driven ratio `9.5e-6`; the project torque telemetry work convention is therefore `celeris_torque_channel_work_sign=actuator_on_fluid`. This does not establish Newton-pair ownership of the force channel: force and moving-wall torque readback semantics may differ, so force ownership remains unestablished. The runtime oracle overrides the earlier torque-work inference: +\[P_{act\to fluid}=\sum_{i=1}^3\Omega_i\tau_{i,read}^{act\to fluid},\qquad C_P=P_{act\to fluid}/(\tfrac12\rho_{ref} U_\infty^3D).\] +`read_force/read_torque(..., normalize=True)` means the cut-link lattice sum averaged once per accumulated LBM step. It performs no body, force/torque-coefficient, density, dynamic-pressure, or span normalization. All force, torque, and power quantities here are two-dimensional per-unit-span. The frozen project conversion is `x*=x/D`, `t*=t U_inf/D`, `nu*=nu/(U_inf D)`, `omega*=omega D/U_inf`, `Q*=Q/(U_inf D)`, `J*=J/(rho_ref U_inf^2 D)`, `C_F=F/(0.5 rho_ref U_inf^2 D)`, `C_tau=tau/(0.5 rho_ref U_inf^2 D^2)`, and `C_P=P/(0.5 rho_ref U_inf^3 D)`. +The accepted/reverse endpoints provide bounded power, signed rear-gap, kinetic-flux, and wake diagnostics. They do not form a mechanical-energy ledger: station fluxes cover x/D=2-to-10 while dissipation covers the full domain, pressure is absent despite zero-valued placeholders, and lateral/storage terms are missing. The switch is one deterministic same-parent response screened by heuristic polarity/dose/onset gates, so causal language is not licensed. Pulse norms describe finite-time field-distance histories only; their dimensionful threshold cannot determine branch switching. The promoted switch/return analyses also lack strong authenticated loader, telemetry-hash, and payload provenance. Matrix-free Arnoldi/global stability remains unavailable. + + +## 29. Publication-v3 formula freeze + +Exactly four main formula groups govern the article: (1) Celeris wall law `(Uw,Vw)=(-omega ry,omega rx)` and the x-right/y-up sign map; (2) lattice-to-dimensionless conversion, including `C_P=sum(omega tau_read)/(0.5 rho_ref U_inf^3 D)`, `normalize=True` step averaging only, and two-dimensional per-unit-span scope; (3) same-body-enclosing-CV momentum/mechanical-energy spatial terms, with storage/time-consistent and body-adjacent gradients explicitly unavailable and no residual; (4) `E_inf_vector(q_ctl,q_in)=max_y ||q_ctl-q_in||/U_inf` on the complete common-fluid `x/D=10` profile after excluding two outer rows. Potential amplitude `g` and finite-horizon return `r,m` are secondary explanations, not additional main formula groups. diff --git a/src/steady_pinball_theory/HISTORY_AND_LESSONS.md b/src/steady_pinball_theory/HISTORY_AND_LESSONS.md new file mode 100644 index 0000000..f9158ef --- /dev/null +++ b/src/steady_pinball_theory/HISTORY_AND_LESSONS.md @@ -0,0 +1,53 @@ +# Steady pinball history and lessons + +## Purpose + +Navigation and methodological history, not scientific evidence. Claims resolve through [evidence/INDEX.json](evidence/INDEX.json) and immutable artifacts. Plans, memory, and Undermind are **navigation not evidence**. + +## Chronology + +### Minimal reset +The package was reduced to verified mathematics, contracts, and a small evidence surface after prior finite-Re claims proved untrustworthy. Plan: [separated roadmap](/home/frank14f/.cursor/plans/steady-karman_separated_roadmap_6c64c1c0.plan.md). Lesson: remove unsupported authority while preserving unique negative evidence and provenance. + +### Finite-Re bridge +Four D20 endpoints connected action to measured outer fields and corrected total-field WLS. Plan: [finite-Re bridge](/home/frank14f/.cursor/plans/steady-cloak_finite-re_bridge_9074c427.plan.md). The result falsified potential cancellation by sign. + +### Mechanism completion +Credibility, endpoint residual diagnostics, and bounded DRL sanity were organized under one evidence root. Plan: [mechanism completion](/home/frank14f/.cursor/plans/steady-cloak_mechanism_completion_492ea630.plan.md). Endpoint association survived; causality did not. + +### Semi-analytic failure +A composite model was promoted too early. Audit found metric double subtraction, nearly identical baseline/full improvement, inactive wake contribution, and non-independent gates. Plan: [semi-analytic closure](/home/frank14f/.cursor/plans/accepted-direction_semi-analytic_closure_67ca3c02.plan.md). Its immutable payload remains failed descriptive history. + +### NS-first report +The project shifted from fitting to torque, momentum, vorticity, energy, intervention, and return diagnostics. Plan: [NS mechanism report](/home/frank14f/.cursor/plans/ns_cloak_mechanism_report_d2305159.plan.md). Runtime manufacture corrected torque-work interpretation; audit bounded ledger, switch, and return claims. + +### Article closeout +Exact formulas, hashes, figures, and the direct v5 metric were frozen while retaining publication supersession. Plan: [article closeout](/home/frank14f/.cursor/plans/steady理论收尾_7e4c9476.plan.md). + +### Current display +Authenticated endpoints and diagnostics were rendered into figures/CSVs without CFD. Plan: [display closeout](/home/frank14f/.cursor/plans/steady结果整理收尾_bd8df5c5.plan.md). Display v2 supersedes v1 as a reader view, not new evidence. + +## Key mistakes + +1. **Sign/body mapping:** array position or link traversal cannot replace semantic body IDs and wall-point oracles. +2. **Potential fit vs mechanism:** projection quality is descriptive; opposite `g` sign falsifies cancellation. +3. **Metric double subtraction:** never feed an already-subtracted disturbance to an absolute-profile metric. +4. **Lattice nondimensionalization:** `normalize=True` is one step average, not coefficient/density/dynamic-pressure/body/span normalization. +5. **Torque ownership/source inference:** cut-link direction did not establish API ownership. Runtime evidence establishes torque work sign only; force ownership remains open. +6. **Control-volume mismatch:** station fluxes and full-domain dissipation are not a common-CV balance. +7. **Mixed-unit transient:** dimensionful norms and arbitrary thresholds cannot identify a branch/basin. +8. **Immutable disposition:** archiving and supersession are index states, not permission to move or rewrite payloads. + +## Durable rules + +- Freeze order, signs, coordinates, units, metric, comparator, and claim boundary before analysis. +- Separate endpoint observation, association, intervention, conservation closure, and stability. +- Authenticate derived outputs to exact source paths/hashes; displays create no authority. +- Use no-clobber outputs and replacement links; preserve failures and superseded artifacts. +- A residual requires one control volume and all storage, boundary, pressure, viscous, and work terms. +- State realization count, horizon, amplitude matching, and uncertainty beside transient claims. +- Keep SR and CCD separate: SR supplies rear-constant context; CCD is pending for the steady total claim. + +## Memory and literature navigation + +Useful Nowledge topics: “Steady pinball minimal verified reset,” “finite-Re bridge,” and “mechanism-completion closure.” Useful Undermind topics: rotating-wall viscous interfaces, base-bleed/boat-tail context, and qualified-base stability. These are **navigation not evidence**; repository proofs/tests, primary-source mappings, and immutable artifacts remain authority. diff --git a/src/steady_pinball_theory/LITERATURE.md b/src/steady_pinball_theory/LITERATURE.md index 7a0ffc4..54827fd 100644 --- a/src/steady_pinball_theory/LITERATURE.md +++ b/src/steady_pinball_theory/LITERATURE.md @@ -1,18 +1,208 @@ -# Source-to-equation ledger +# Frozen source-to-claim ledger -This ledger separates inviscid geometry, finite-Re closure, and viscous stability. +`DERIVATION.md` is authoritative for project proofs. `RESULTS.md` freezes numeric observations. This ledger attributes only external equations/results actually used, with explicit transferable conclusions and prohibited transfers to the canonical D20 `Re_D=50` free-slip-channel pinball (cylinder walls rotate under Celeris no-slip; channel walls free-slip). A verification hold means the detail is deliberately not asserted; no DOI or equation mapping is inferred from secondary metadata alone. -- Crowdy (2006), *Analytical solutions for uniform potential flow past multiple cylinders*: exact multiply connected circular-domain uniform-flow construction. Reuse: independent reference for impermeability, circulation periods and far field; it does not impose no slip or predict separation. -- Crowdy & Marshall (2007), *Green's functions for Laplace's equation in multiply connected domains*: Schottky–Klein Green-function machinery. Reuse: exact/reference formulation for circular multiply connected domains. -- Kharlamov & Filip (2012), generalized method of images for several moving parallel cylinders. Reuse: iterative image cross-check and convergence logic. -- Chan, Jameson & Smits (2011), *Vortex suppression and drag reduction in the wake of counter-rotating cylinders*: viscous doublet-like/reverse-doublet topologies and virtual-body mechanism. Reuse: mechanism observables, not a sign oracle for this code. -- Mittal (2001), *Control of flow past bluff bodies using rotating control cylinders*: steady-wake suppression near tip-speed ratio five in a different geometry. Reuse: prior for search scale only, never a fixed optimum. -- Watson (1996), *Slow viscous flow past two rotating cylinders*: matched/Oseen rotating-cylinder precedent. Reuse: conceptual finite-Re interface; regime and geometry differ. -- Deng et al. (2018), fluidic-pinball bifurcations; Sierra et al. (2020), rotating-cylinder bifurcations. Reuse: require continuation/perturbation and do not assume unique symmetric steady state. -- Marquet, Sipp & Jacquin (2008): global sensitivity of cylinder flow. Reuse: independent viscous base-flow/eigenvalue workflow after empirical stability. +## Stage-1 literature charter -## Equations and claim limits +**Scope.** Deepen the viscous-mechanism half of the steady-cloak plan: why accepted rear-symmetric rotation can be both steady and low-deficit while potential-favored cancellation fails by sign. Corrected CCD is admitted only as contextual triangulation; Kármán transmission claims and CCD mechanism claims are not imported into the steady chain. -The outer field is `u = U_inf e_x + sum_j grad[Q_j log|z-z_j|/(2pi)] + sum_k Gamma_k e_theta/(2pi r)` with source strengths chosen to satisfy cylinder no penetration and zero net source per body. In a strip, scalar sources use equal-sign reflections and vortices opposite-sign reflections at free-slip walls. Truncation, source radius, collocation order, precision, boundary residual, wall residual and an independent exact/image formulation must be reported. +**Frozen project frame (not literature-derived).** +- Body order: `(front, rear_y_plus, rear_y_minus)`. +- Accepted numeric action: `[0,+Omega,-Omega]` with `Omega>0`, `s=Omega a/U_inf`. +- Celeris wall law: `(Uw,Vw)=(-omega*ry, omega*rx)` in x-right/y-up; positive `omega` matches geometric-CCW wall sense (outer cardinal of the upper rear driven upstream; gap-facing cardinals downstream). +- Primary metric: full two-component `E_inf_vector` of `q_ctl` versus uniform no-body `q_in` at `x/D=10`. +- Project telemetry contract (source-audited, not literature-derived): Celeris cut-link loads are lattice sums; `normalize=True` averages once per accumulated LBM step and applies no coefficient/density/dynamic-pressure/span normalization. The runtime manufactured oracle establishes raw torque as boundary/actuator-on-fluid for project use; actuator-to-fluid power is `sum(omega*tau_read)`. This runtime result overrides the falsified source-only cut-link ownership inference. +- Potential favorable cancellation `(0,+Gamma,-Gamma)` / `g_opt=+6.147944` **FAILS** against accepted geometric circulation `(0,-,+)` and descriptive `g=-12.200554` (`RESULTS.md`). +- Surviving modeling hypothesis: viscous gap momentum, shear/separation modification, and wake replenishment (literature boat-tail / base-bleed families as qualitative templates only). -`Gamma_k` is prescribed in the inviscid problem. Mapping wall rotation to an effective circulation is a finite-Re empirical interface requiring contour plateaus and held-out outer profiles; it is not `Gamma=2pi R^2 omega` by assumption. Potential flow cannot predict viscous separation, drag, base pressure, or global stability. +**Claim IDs used below.** Cross-link to `RESULTS.md` classes: `L-PF` potential/interface; `L-VIS` viscous rotating-wall; `L-BR` branch/topology context; `L-ST` stability-window context; `L-CLO` cloaking analogy; `H-ROD` Rod26 hold status; `X-KAR` Kármán quarantine; `X-CCD` CCD exclusion. + +## Sign-convention master map + +| Source | Body order | Positive rotation | Boat-tail / outer-shear family | Base-bleed / gap-jet family | Map to project accepted `[0,+Omega,-Omega]` | +|---|---|---|---|---|---| +| Project (Celeris) | `(front, rear_y_plus, rear_y_minus)` | geometric-CCW / Celeris `+omega` | `[0,-Omega,+Omega]` (outer downstream) | `[0,+Omega,-Omega]` (gap downstream) | **is** the gap-downstream family | +| Mac20 / Mac21 [= Cornejo Maceda et al. 2021] | `(front,bottom,top)=(b1,b2,b3)` | CCW | `b2=-b3>0` (bottom CCW, top CW) | `b2=-b3<0` | accepted ↔ Mac20 **base bleed** wall sense, not boat-tail | +| Rod26 | `(1 front, 2 upper, 3 lower)` | CCW-positive lab frame for mapping | `p>0`: upper CW, lower CCW (Fig. 3b,c) | `p<0`: upper CCW, lower CW (Fig. 3e,f) | accepted ↔ Rod26 **base-bleeding** wall sense (`p<0` family) | +| Cha11b | side-by-side pair | Fig. 2 arrows | doublet-like: upper CW, lower CCW (gap with freestream) | reverse doublet-like: upper CCW, lower CW (gap opposing) | names are pair-only; do not rename project branches | + +Do not call project accepted “boat-tailing” by Mac20/Rod26 labels. Literature boat-tail drag optima are not project-accepted optima. + +## Primary-source ledger + +- **Crowdy (2006), “Analytical solutions for uniform potential flow past multiple cylinders,” *European Journal of Mechanics B/Fluids* 25, 459–470, DOI `10.1016/j.euromechflu.2005.11.005` [Cro06].** Equations (16), (18)–(20), (25)–(26), and (34) support uniform far behavior, constant-streamfunction impermeable boundaries, the prime-function construction, and a zero-period (zero round-obstacle circulation) uniform-flow potential. **Transfer:** outer impermeability reference (`L-PF`). **Prohibit:** no-slip, `Gamma(Omega)`, separation, drag, or cloak metric (`X-CCD` unused). +- **Glass, Lacave, Munnier & Sueur (2019), “Dynamics of rigid bodies in a two dimensional incompressible perfect fluid,” *Journal of Differential Equations*, DOI `10.1016/j.jde.2019.04.017`.** Supports rigid-body normal matching and treatment of vorticity/body circulations as independent perfect-fluid state data. No theorem number is imported; the narrower fixed-body uniqueness result is proved in `DERIVATION.md` (`L-PF`). +- **Ueda, Sellier, Kida & Nakanishi (2003), “On the low-Reynolds-number flow about two rotating circular cylinders,” *Journal of Fluid Mechanics* 495, 255–281, DOI `10.1017/S002211200300627X` [Ued03].** PDF-verified. Equations (2.4) and (2.7)–(2.10) prescribe far velocity plus rotating no-slip walls, relate `(u,v,w)` to streamfunction, and carry modified vorticity into the unsteady Oseen form. **Transfer:** viscous wall/vorticity distinction vs Euler impermeability (`L-VIS`). **Prohibit:** quantitative forces or closures at `Re_D=50` (analysis is `Re≪1`). **DOI hold lifted.** +- **Glauert (1957), “The flow past a rapidly rotating circular cylinder,” *Proceedings of the Royal Society A*, DOI `10.1098/rspa.1957.0157` [Gla57].** Supports a restricted irrotational-outer/viscous-boundary-layer circulation closure precedent, not a universal `Gamma(Omega)` law (`L-VIS`). **Hold:** Undermind PDF unavailable; no new equation mapping. +- **Moore (1957), “The flow past a rapidly rotating circular cylinder in a uniform stream,” *Journal of Fluid Mechanics* 2, 541–550, DOI `10.1017/S002211205700035X` [Moo57].** Related rotating-cylinder boundary-layer precedent (`L-VIS`). **Hold:** PDF unavailable; no equation mapping. +- **Brøns & Hartnack (1999), “Streamline topologies near simple degenerate critical points in two-dimensional flow away from boundaries,” *Physics of Fluids* 11, 314–324, DOI `10.1063/1.869881`.** Primary precedent for local bifurcation near degenerate interior critical points. No equation number or global-topology theorem is imported. +- **Crowdy & Marshall (2005), “The motion of a point vortex around multiple circular islands,” *Physics of Fluids* 17, DOI `10.1063/1.1900583`.** Establishes a Hamiltonian problem with evolving vortex position; it does not establish stability of a fixed prescribed-circulation harmonic field (`X-KAR` if reused for street motion). +- **Protas (2006), “Higher-order Föppl models of steady wake flows,” *Physics of Fluids* 18, DOI `10.1063/1.2389033`.** Provides free-vortex/finite-area-vortex equilibrium and stability context; it does not transfer to this static BVP. + +## Stage-1 viscous-mechanism paper ledger + +Each entry records geometry, Re, body order, rotation convention, control parameter, key equations/figures, stability criterion, gap/shear/separation/force evidence, transferable conclusions, and prohibited transfers to D20 `Re_D=50` free-slip-channel pinball. + +### Rod26 — Rodrigues-Asensio et al. (2026) [claim `H-ROD` partially lifted] + +- **Citation.** “On the turbulent wake of the actuated fluidic pinball: Dynamics, bifurcations and control authority,” *Experimental Thermal and Fluid Science* 177, 111798, DOI `10.1016/j.expthermflusci.2026.111798`. PDF available in Undermind DynamisLab. +- **Geometry / Re.** Three equal cylinders, `D=30 mm`, equilateral centres `1.5D`, upstream-pointing triangle; water tunnel, blockage ~14%; `Re=U_∞D/ν=9100`. +- **Body order.** Cylinder 1 front (fixed); 2 upper rear; 3 lower rear (Fig. 1). +- **Rotation / control.** `b_i=Ω_i D/(2U_∞)` (Eq. 1); boat-tailing parameter `p=(b_3-b_2)/2` (Eq. 2). Verbatim physical labels (§2.2): base-bleeding `p<0` “opposes the freestream and generates a jet between the two downstream cylinders”; boat-tailing `p>0` “weakens the gap flow and accelerates the outer shear layer.” Fig. 3: `p>0` upper CW / lower CCW; `p<0` upper CCW / lower CW. In CCW-positive lab frame, boat-tail ↔ `(0,-,+)`, base-bleed ↔ `(0,+,-)` on `(front,upper,lower)`. +- **Key figures.** Fig. 3 mean wakes; Fig. 7 separation motion under boat-tailing; Fig. 8 `C_D(p)` with optimum near `p≈1.8` and loss of authority beyond; Fig. 9 three-dimensional actuation manifold with two inverse-pitchfork symmetrizations (`p≥0.8` boat-tail; `p≤-2.6` base-bleed). +- **Stability / forces.** Symmetrization thresholds above; drag non-monotonic on boat-tail branch; strong base-bleed can change shedding symmetry (mode-S) without changing mean-wake character. +- **Transfer (`L-BR`).** Qualitative: distinct boat-tail vs base-bleed topologies; gap vs outer-shear organization; actuation magnitude, mean symmetry, and drag are different coordinates; excessive actuation can lose authority. Exact Fig. 3 / Eq. 2 sign map now authorized for literature comparison. +- **Prohibit.** Do not transfer `Re=9100`, turbulent thresholds `p=0.8/-2.6`, `p≈1.8` drag optimum, force magnitudes, or URANS details to D20 `Re_D=50`. Do not equate project accepted `[0,+Omega,-Omega]` with Rod26 boat-tailing: accepted maps to the **base-bleeding wall-sense family**. Do not import Kármán-street transmission claims (`X-KAR`). +- **Hold status.** Full-text/figure-sign publication hold **partially lifted** (sign/branch map above). Remaining hold: no quantitative equivalence of thresholds, forces, or manifold coordinates to the project CFD. + +### Mac20 / Mac21 — Cornejo Maceda et al. (2021) [claim `L-BR`] + +- **Citation.** “Stabilization of the fluidic pinball with gradient-enriched machine learning control,” *J. Fluid Mech.* 917, A42, DOI `10.1017/jfm.2021.301`. Undermind cite key `Mac20`; published 2021 (Mac20/Mac21 denote the same JFM paper / thesis lineage, not two mechanisms). +- **Geometry / Re.** Equilateral centres `1.5D`, upstream apex; domain `[-6,20]×[-6,6]`; `Re_D=100`. +- **Body order / sign.** `(b1,b2,b3)=(front,bottom,top)`; positive command = CCW (§2.1). Symmetric scan `b2=-b3`: boat-tail `b2>0` accelerates outer layers and sucks near-wake fluid upstream; base-bleed `b2<0` ejects a gap jet (§4.1, Fig. 6). +- **Control / cost.** Commands `b`; cost `Ja` is space-time `L²` distance to unstable symmetric steady NS target `u_s` (Eqs. 2.3–2.4)—**not** project `E_inf(q_ctl,q_in)` at `x/D=10`. +- **Key regimes.** Six mechanisms (§2.2): boat-tailing, base bleeding, phasor, Magnus/unified rotation, high- and low-frequency forcing. Symmetric regimes include steady branches for `b2<-4` and `b2>2.375` (strong Coanda boat-tail), with global symmetric `Ja` minimum at weak base-bleed `b2=-0.375` still unsteady/chaotic (§4.1). +- **Transfer.** Two high-amplitude symmetric steady branches can exist with different physics; steady ≠ close to `u_s`; gap jet / outer shear are the organizing viscous motifs for rear-opposite rotation. +- **Prohibit.** Do not transfer `Ja` optima, `b` thresholds, `Re=100`, asymmetric EGM/gMLC laws, or sensor-feedback structure to the rear-only D20 cloak metric. Do not relabel project accepted as Mac20 boat-tailing (see master map). + +### Cha11b — Chan et al. (2011) [claim `L-BR`] + +- **Citation.** “Vortex suppression and drag reduction in the wake of counter-rotating cylinders,” *J. Fluid Mech.* 679, 343–382, DOI `10.1017/jfm.2011.134`. +- **Geometry / Re.** Side-by-side equal cylinders; gaps `g*=1,3,5`; `Re=100,150,200`; no front cylinder. +- **Sign.** Fig. 2: doublet-like = upper CW / lower CCW (gap with freestream); reverse doublet-like = opposite. `Ω=ωd/(2U)`. +- **Stability.** Unsteadiness suppressed when force fluctuations vanish (`σ(C_L)`, `σ(C_D)` → 0); `Ω_crit` in Table 1. Doublet-like high-`Ω` forms virtual elliptic body (Figs. 8–9) with gap flow reversal and total drag ≈ 0 (Fig. 11); reverse doublet-like also steadies by separating wakes, generally without the elliptic body. +- **Transfer.** Both opposite counter-rotation directions can suppress shedding via **different** topologies; “steady” ≠ “cloak-like / zero-deficit.” +- **Prohibit.** No quantitative `Ω_crit`, drag-zero claim, or pair-gap thresholds for the three-cylinder D20 case; figure names are not project branch names. + +### Mit01 — Mittal (2001) [claim `L-VIS` / `L-BR`] + +- **Citation.** “Control of flow past bluff bodies using rotating control cylinders,” *J. Fluids Struct.* 15, 291–326, DOI `10.1006/jfls.2000.0337`. +- **Geometry / Re.** Main cylinder + two small controls, `D/D2=20`, centres on a line normal to the stream; gaps `0.01D`, `0.075D`; `Re=100` and `10^4`. +- **Sign / control.** Upper CW, lower anti-clockwise (Fig. 4); tip-speed ratio `Uc/U=5` yields steady narrow wake at `Re=100` (Fig. 6) and organized narrower wake at `Re=10^4`. +- **Transfer.** Order-of-magnitude tip-speed ~O(1–5) and rotating-surface momentum injection as a viscous wake-narrowing motif. +- **Prohibit.** Not equilateral three-equal-cylinder geometry; MSBC relies on cylinder no-slip (project cylinders rotate no-slip, but size ratio and alignment differ); no free-slip-channel transfer; power/drag numbers do not carry to D20. + +### Ued03 — Ueda et al. (2003) [claim `L-VIS`] + +- See primary-source ledger. Two cylinders, arbitrary radii/Ω, `Re≪1` matched Stokes–Oseen. **Transfer:** rotating no-slip selects vorticity; Euler does not. **Prohibit:** `Re_D=50` forces/closures. + +### Wat96 — Watson (1996) [claim `L-VIS`] + +- **Citation.** “Slow viscous flow past two rotating cylinders,” *Q. J. Mech. Appl. Math.* 49, 195–216, DOI `10.1093/qjmam/49.2.195`. +- **Geometry / regime.** Bipolar Stokes inner + Oseen outer; `Re=Uc/ν≪1`; equal contra-rotating cases with stream normal or parallel to the line of centres; lift can be O(drag). +- **Transfer.** Low-Re rotating-pair force coupling precedent only. +- **Prohibit.** Does not control `Re_D=50` free-slip or no-slip channel pinball; no cloak metric. + +### Gla57 / Moo57 — Glauert & Moore (1957) [claim `L-VIS`, PDF hold] + +- Single rapidly rotating cylinder boundary-layer / outer irrotational closure precedents. **Transfer:** restricted `Gamma`–rotation coupling idea. **Prohibit:** universal `Gamma(Omega)` for multi-body `Re_D=50`. PDFs unavailable in Undermind → equation-level hold retained. + +### Kim92 — Kimura, Tsutahara & Wang (1992) [claim `L-ST`] + +- **Citation.** “Wake of a rotating circular cylinder,” *AIAA J.* 30, 555–556, DOI `10.2514/3.10953`. +- **Geometry / Re.** Single cylinder; experiments `Re~2e2–7e4`; spin `α=` peripheral/freestream up to ~2.5. +- **Findings.** Wake meandering amplitude falls and St rises with spin; critical spin decreases as Re increases (Fig. 3). +- **Transfer.** Qualitative: higher spin can suppress meandering; lower Re may need larger spin. +- **Prohibit:** single-body thresholds; no three-cylinder or free-slip-channel map; lowest Re still above project `50` shedding neighborhood. + +### Sie20 — Sierra et al. (2020) [claim `L-ST`] + +- **Citation.** “Bifurcation scenario in the two-dimensional laminar flow past a rotating cylinder,” *J. Fluid Mech.* 905, A2, DOI `10.1017/jfm.2020.692`. +- **Geometry / Re.** Single rotating cylinder to `Re=200`; `α=ΩD/(2U_∞)` with positive = CW. +- **Findings.** Codimension-two points (cusp, Takens–Bogdanov, generalized Hopf); multiple steady states; bistability windows (Fig. 5, Table 1). +- **Transfer.** Finite actuation windows and coexisting steady/unsteady states are generic for rotating cylinders—motivates treating reverse high-deficit steady as a distinct branch, not a sign error. +- **Prohibit.** No transfer of `(Re,α)` coordinates to the three-cylinder pinball. + +### Den18b — Deng et al. (2018/2019) [claim `L-ST`] + +- **Citation.** “Low-order model for successive bifurcations of the fluidic pinball,” *J. Fluid Mech.*, DOI `10.1017/jfm.2019.959` (Undermind `Den18b`). +- **Geometry / Re.** Equilateral three equal cylinders, side `3R`, upstream apex; unforced Hopf `Re1≈18` and pitchfork `Re2≈68` (D-based). +- **Model.** Five-mode mean-field Galerkin system (Eqs. 3.30–3.31, 5.5) for shedding + shift + jet-deflection modes. +- **Transfer.** Unforced context: at `Re_D=50` (between Hopf and pitchfork) the natural mean is symmetric with unstable steady `u_s`; controlled steady cloak must suppress the Hopf. +- **Prohibit.** Coefficients/ROM not recalibrated for rotating control; no cloak or CCD claim (`X-CCD`). + +### Cro06 — Crowdy (2006) [claim `L-PF`] + +- See primary-source ledger. Zero-circulation multi-cylinder potential only. + +### Urz12 — Urzhumov & Smith (2012) [claim `L-CLO`, workspace gap] + +- **Citation (mem-backed).** “Flow stabilization with active hydrodynamic cloaks,” *Phys. Rev. E* 86, 056313 (2012). Active Brinkman porous shell raises critical Re ~5× for a single cylinder. +- **Transfer.** Analogy only: active momentum injection can stabilize a low-signature steady wake. +- **Prohibit.** Not rotating pinball; Brinkman `κ(r)` ≠ cylinder `Ω`; no PDF in the Undermind folder for this Stage-1 pass → no equation import. **Bibliographic gap:** add PDF to workspace before any equation-level use. + +## Publication holds and unused context + +- **Kharlamov & Filip (2012), generalized images for several parallel cylinders:** only a broad independent image-method precedent. No equation-number mapping is asserted; pages and DOI remain unverified and are not needed for the implemented MFS or Laurent cross-check. This publication hold does not block the present evidence-package verdict. +- **Lamb, *Hydrodynamics*; Milne-Thomson, *Theoretical Hydrodynamics*:** classical circle-flow sources. Edition/page/equation details remain unverified; the velocity formulas and counterexample are directly derived and tested. +- **Kelvin circulation theorem:** used under its classical inviscid/barotropic/conservative-force/smooth-material-loop hypotheses; original historical citation details remain unverified. Glass et al. supplies the modern application context. +- Crowdy & Marshall (2007) [Cro07b] remains multiply-connected Green context only unless a prime-function backend is implemented. +- **Gla57 / Moo57:** PDF unavailable → equation hold retained (above). +- **Urz12:** not in Undermind folder PDF set for this pass → equation hold (above). + +## Project-derived equations and implementation boundary + +The following are derived in `DERIVATION.md` and validated by project tests, not attributed to external equation numbers: + +- Hodge-period form `u=u_N+sum_j Gamma_j h_j`, fixed-period uniqueness under stated hypotheses, flux compatibility, centered-circle rotational impermeability, and the one-circle trace `u_theta(a,theta)=-2U sin(theta)+Gamma/(2 pi a)`. +- MFS zero-source constraints, image truncation, diagnostics, independent finite Laurent collocation, and the common-exterior metric. +- Rear-pair log cancellation, `C_pair=-Gamma b/pi`, body-source multipoles, the affine coefficient `C(Gamma)=C0+Gamma dC`, real least-squares cancellation, symmetry parity, equal-norm ablation, gap flux, and sampled-root/Jacobian controls. + +`Gamma_j` is prescribed in the inviscid problem. Any `Gamma_eff(s)` is an empirical or viscous closure requiring endpoint fields, coordinates, masks, sign convention, uncertainty, Reynolds number, geometry, confinement, and held-out validation. Historical fitted values without source arrays remain withdrawn. The v4 endpoint fields now support contour geometric sign and a corrected descriptive WLS projection, but not a causal `Gamma_eff(s)` law. Potential flow alone does not predict no-slip vorticity generation, separation, drag, torque, base pressure, or viscous/global/dynamical stability. + +## Finite-Re/no-slip scope addition + +- **Watson (1996)** supports only a low-Reynolds-number Stokes–Oseen reference. It does not control the present `Re_D=50` free-slip or no-slip channel. +- **Mao, Blackburn & Sherwin (2015), JFM, DOI `10.1017/jfm.2015.304`; Kharlamov & Filip (2012), DOI `10.1007/S10665-012-9532-6`.** Retained as channel/global-mode and image-method context respectively; neither supplies the finite-Re circulation closure or licenses transfer from free-slip potential flow to no-slip flow. + +The exact free-slip strip modal relations in `DERIVATION.md` are project derivations from Laplace separation with Neumann walls. Watson is scoped only to low-Re Stokes–Oseen flow; Mao, Blackburn & Sherwin supplies channel/global-mode method context; Kharlamov–Filip supplies image-method context. None transfers the free-slip optimum or rescues the failed potential-circulation mechanism in a no-slip `Re_D=50` channel. New direct Navier–Stokes evidence is required because no-slip changes wall-vorticity production, base flow, separation, and modal operators. + +## Stage-0 paper-oracle ledger + +- **Vasconcelos, Moura & Schakel (2012), “Vortex motion around a circular cylinder,” DOI `10.1063/1.3667269`.** Equations (7)--(10), (13), and (26) map respectively to the symmetric Hamiltonian/canonical equations, Föppl locus/strength, infinity saddle, and its critical Hamiltonian level. The exact `kappa=45/32` finite equilibrium and the distinct infinity level are tested. +- **Mowlavi, Arratia & Gallaire (2016), “Spatio-temporal stability of the Kármán vortex street and the effect of confinement,” DOI `10.1017/jfm.2016.195`.** Physical-row coordinates/signs and scales are mapped from §2; the unconfined self-advection and `p0=asinh(1)/pi` are exact baselines. Equations (2.7), (2.11), and (4.3)--(4.9) are documented but intentionally not reproduced; temporal growth and convective thresholds remain publication holds (`X-KAR`). +- **Crowdy & Marshall (2005), “The motion of a point vortex around multiple circular islands,” DOI `10.1063/1.1900583`.** Supports Green/Robin/Kirchhoff--Routh motion for zero island circulations, background-flow Hamiltonian contribution, and regular self-response. Only the independently derived exact one-circle image reduction is implemented. +- **Streitlien (1994), “Extracting energy from unsteady flows through vortex control,” DOI `10.1575/1912/5563`.** Supports incoming-street/body coupling and Routh-regular vortex transport in a Joukowski-foil setting; no three-circle force or transparency claim is imported. +- **Cornejo Maceda et al. (2021)** — see Stage-1 Mac20 entry; Stage-0 retains paper-specific `(front,bottom,top)` labels only. +- **Chan et al. (2011)** — see Stage-1 Cha11b entry; Stage-0 retains figure-2 arrow specificity only. +- **Rodrigues et al. (2026)** — see Stage-1 Rod26 entry. Stage-0 metadata-only hold is superseded by the partial lift above; quantitative equivalence remains held (`H-ROD`). + +## Same-setting contract claim boundary + +The four-role steady contract is an internal CFD comparability and residual-readiness design, not a literature-derived mechanism test. Branch labels remain project-specific wall-action labels; accepted/reverse symmetry does not imply circulation, base-bleed, boat-tail, doublet, separation, force, or stability equivalence without the Stage-1 sign map. Fresh fields and forces must be regenerated before any new physical statement is made. + +## S2 residual interpretation boundary + +Rod26 (partially lifted), Cornejo Maceda et al. (2021), and Chan et al. (2011) are used only as qualitative frameworks for distinct steady rotating-cylinder branches, gap transport, and wake organization. The S2 endpoint result does not import their Reynolds numbers, geometry, confinement, body order, branch names, or force thresholds. Under the Stage-1 master map, project accepted wall sense aligns with literature **base-bleed / gap-jet** families, while literature **boat-tail** aligns with project reverse wall sense—yet project reverse is the high-deficit branch. Therefore S2 association (gap flux, shear width, recirculation, `Fx`, downstream deficit) is an internal D20 observation; it is not a literature proof that “boat-tailing explains the cloak,” nor a transfer of Rod26’s boat-tail drag optimum. + +## Frozen cross-project source/evidence map + +- **SR:** `src/SR_analysis/results/README.md`, `src/SR_analysis/PIPELINE.md`, `src/SR_analysis/results/runs/article2-steady-analysis-20260720/interpretation.md`, and the canonical term-deletion table support the ranking `rear constant > rear lift feedback > tested front feedback` only among the tested terms, plus order-of-magnitude steady correspondence. They do not establish necessity, global dominance, PPO mechanism, uniqueness, circulation, or a momentum-balance law. +- **CCD (`X-CCD`):** pending/not frozen for the steady total claim. No quantitative CCD value is imported here. Any later interface remains a separate estimand and cannot alone establish steady mechanism, actuator isolation, or causality. +- **Rod26 (`H-ROD`):** figure/sign map partially lifted in Stage-1; quantitative thresholds and force equivalence remain held. +- **Kármán (`X-KAR`):** vortex-street, phase, feedback, and control conclusions form a separate evidence chain and are not imported into the canonical uniform-inlet steady result. + +## K1 qualification boundary + +The 2026-08-06 K1 run uses only Mowlavi et al.'s documented unconfined row/stagger/scaling baseline and the exact neutral-aspect identity. A finite open train is integrated as a project numerical sensitivity problem; its end effects, central propagation, and perturbation amplification are not equations (2.7), (2.11), or (4.3)--(4.9), and are not temporal or convective growth. Mowlavi confined dispersion/growth and the plan-required growth/impulse oracle remain publication-held. Consequently K2 is NO-GO. + + +## Mechanism-completion literature boundary + +Stage-1 theory closure and later numerical work remain governed by the ledgers above. Ueda/Glauert/Moore support only the viscous-interface distinction; Maceda/Chan/Rod26 remain qualitative branch/gap context. SR supports rear-constant ranking only among tested terms. CCD remains pending/not frozen for the steady total claim and supplies no quantitative term here. None transfers Legacy layouts, PPO feedback, causality, or steady-mechanism proof into the canonical free-slip direct-`q_in` claim. + + +## Historical composite discussion + +The failed composite semi-analytic route, its source-family mapping, and its audit are recorded in [HISTORY_AND_LESSONS.md](HISTORY_AND_LESSONS.md#semi-analytic-failure) and the immutable `steady-semi-analytic-analysis-20260807` disposition in [evidence/INDEX.json](evidence/INDEX.json). Those sources remain useful historical context but are not active source-to-claim support. + +## NS-first literature governance + +The intended chain uses Drela for actuator/wake energy-accounting method, Steiros and related base-bleed work for conservation-reduction context, Mittal for rotating-control wake modification, Liu/Terrington for wall-motion and boundary-vorticity accounting, Mao–Blackburn–Sherwin for qualified-base global-stability methods, and Urzhumov–Smith for a limited active-cloak analogy. These anchors do not repair the audited project artifacts: the NS ledger is bounded diagnostics, and the causal/nonlinear promotions lack strong provenance. + +These are method anchors, not transferred results. No paper supplies the project torque sign, `C_P`, gap flux, energy closure, `Re_D=50` coefficients, accepted/reverse ranking, causal timing, or eigenvalues. Equation-level use requires the exact primary-source mapping already verified in the ledger or a publication hold; memory or synthesis text alone cannot authorize a number. The literature chain must follow `power → momentum/vorticity → wake energy → stability`, with each transfer and prohibited transfer recorded before analysis. + + +## Publication-v3 claim mapping + +The v3 report maps the wall/interface distinction to Crowdy, Glass, Ueda, and Glauert; qualitative gap/base-bleed branch context to Cornejo Maceda, Chan, and Rodrigues-Asensio; and stability-method context to Mao–Blackburn–Sherwin. None supplies the project torque sign, `C_P`, same-CV closure, direct `q_ctl-q_in` metric, causal timing, or return labels. Those are authenticated project results and remain BOUNDED. SR is contextual cross-project evidence only; CCD is pending/not frozen for this steady claim. diff --git a/src/steady_pinball_theory/README.md b/src/steady_pinball_theory/README.md index f679ad0..5bbcb85 100644 --- a/src/steady_pinball_theory/README.md +++ b/src/steady_pinball_theory/README.md @@ -1,19 +1,61 @@ -# Steady pinball theory (reset) +# Steady pinball theory -Minimal, from-scratch implementation for the uniform-inflow/free-slip steady-cloak study. -Nothing from the deleted implementation is promoted as evidence. +A bounded `Re_D=50` steady-flow evidence package. The strongest result is a settling-qualified low-deficit endpoint; prescribed-circulation cancellation fails by sign, and available NS diagnostics do not close a mechanism, causal effect, or stability proof. -## Frozen scientific scope +## Start here -- Canonical geometry: three equal cylinders, rear centers at `(1.3D, +/-0.75D)` from the front; `Re_D=50`; channel half-height `15D`; uniform inlet and free-slip horizontal walls. -- Primary observer: full cross-section at `x/D=10` from the front-cylinder center. -- Primary score: `max_y sqrt((u_ctl-u_in)^2+(v_ctl-v_in)^2)/U_inf`; passive `q_blk` is non-ranking. -- Celeris source uses x-right/y-up lattice coordinates and `(Uw,Vw)=(-omega*ry,omega*rx)`. Both signed rear actions are retained until the paired CFD oracle is reviewed. Names such as clockwise or cloak never override numeric body IDs and actions. +1. [RESULTS.md](RESULTS.md) — current results and limits. +2. [evidence/README.md](evidence/README.md) — conclusion-to-artifact and family index. +3. [DERIVATION.md](DERIVATION.md) — mathematics and historical charters. +4. [LITERATURE.md](LITERATURE.md) — active source boundaries. +5. [HISTORY_AND_LESSONS.md](HISTORY_AND_LESSONS.md) — chronology and durable rules. -## Files and evidence policy +Machine authority is [evidence/INDEX.json](evidence/INDEX.json). The sole `evidence/` symlink reaches the external physical root; path/hash-bound directories are never moved for semantic cleanup. -The package remains below 30 files. Runtime results are written outside this tree. `contract.py` and its tests define source-level facts; `runner.py` produces paired action-reversal diagnostics; `theory.py` is the MFS outer/strip representation; `metrics.py` owns the direct-q_in objective. Literature assumptions and equation provenance are in `LITERATURE.md`. +## Unified reader plotting deliverable -## Environments +[`plot_results.py`](plot_results.py) regenerates the unified lattice-exact raw field canvases, family-specific error colorbars, analytical-zero potential vorticity, titled PNG/PDF metric plates, CSVs, and summary curves/bars in [`figures/`](figures/): -CPU theory/tests: `conda run -n pinball_math ...`. CFD: `PYTHONPATH=CelerisLab/src:src conda run -n pycuda_3_10 python -m steady_pinball_theory.runner ...`. GPU cases execute serially. +```bash +PYTHONPATH="$PWD/src" conda run -n pinball_math python src/steady_pinball_theory/plot_results.py +``` + +Raw canvases preserve one pixel per lattice cell; companion plates are explicitly presentation assets rather than pixel-exact arrays. This is a CPU-only, regenerable reader-facing visualization of existing authenticated sources, not new evidence. It refuses to clobber an existing output unless `--overwrite` is explicit. + +## Display and CSV command + +```bash +xdg-open "$PWD/src/steady_pinball_theory/evidence/authoritative/steady-results-display-v2-20260809/01_total_velocity_streamlines.pdf" +xdg-open "$PWD/src/steady_pinball_theory/evidence/authoritative/steady-results-display-v2-20260809/02_cfd_disturbance_vorticity_streamlines.pdf" +xdg-open "$PWD/src/steady_pinball_theory/evidence/authoritative/steady-results-display-v2-20260809/03_ns_diagnostics_partial_no_residual.pdf" +python3 -c 'import pandas as pd; print(pd.read_csv("src/steady_pinball_theory/evidence/authoritative/steady-results-display-v2-20260809/summary.csv").to_string(index=False))' +``` + +Exact CPU-only display reproduction (change only `--out` to another fresh path): + +```bash +PYTHONPATH="$PWD/src" TZ=UTC LC_ALL=C.UTF-8 conda run -n pinball_math python -m steady_pinball_theory.runner publish-results-display --steady "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808" --strip "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-strip-modal-analysis-20260804-v4/analysis.json" --ledger "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/ns-ledger-v2-oracle-bound-d20-20260809/analysis.json" --out "/tmp/steady-results-display-v2-REPRO" +``` + +Verification: reproducing to a fresh `--out` path yields byte-identical figures, CSVs, and display README. `manifest.json` intentionally records the requested output path, so its `exact_reproduction_command` and derived `payload_sha256` differ when `--out` differs; this is provenance-path dependence, not a scientific/data difference. + +The [display manifest](evidence/authoritative/steady-results-display-v2-20260809/manifest.json) authenticates its sources. This derived view ran no CFD. + +## Frozen boundaries + +- Body order `(front, rear_y_plus, rear_y_minus)`; accepted action `[0,+Omega,-Omega]`. +- Primary metric: common-fluid `E_inf_vector(q_ctl,q_in)` at `x/D=10`; `q_blk` is nonranking. +- Celeris wall law `(Uw,Vw)=(-omega*ry,omega*rx)` in x-right/y-up. +- Runtime evidence establishes torque telemetry work sign, not force ownership. +- Potential flow is an impermeability/circulation reference, not rotating-wall no-slip closure. +- SR supplies only current rear-constant context. CCD is pending/not frozen here and contributes no quantitative term to the steady frozen claim. + +## Verification + +```bash +PYTHONPATH="$PWD/src" conda run -n pinball_math python -m pytest -q src/steady_pinball_theory/tests/test_core.py +conda run -n pinball_math python -m compileall -q src/steady_pinball_theory +git diff --check -- src/steady_pinball_theory +``` + +No CFD belongs in documentation or display verification. diff --git a/src/steady_pinball_theory/RESULTS.md b/src/steady_pinball_theory/RESULTS.md index 887bf21..412ee98 100644 --- a/src/steady_pinball_theory/RESULTS.md +++ b/src/steady_pinball_theory/RESULTS.md @@ -1,46 +1,41 @@ -# Reset campaign results and claim matrix +# Current steady results -All values below were generated from scratch after deletion of the previous project. Runtime arrays remain outside this source tree under `/tmp/steady-*`; these are diagnostic/production candidates, not a clean tagged archival release. +Only current valuable results are indexed here. Exact statuses, replacements, and entry files are in [evidence/README.md](evidence/README.md) and [evidence/INDEX.json](evidence/INDEX.json). -## Sign oracle +## Potential mathematics and failure -Celeris source defines Cartesian lattice coordinates and `(Uw,Vw)=(-omega*ry,omega*rx)`. With body order `front, rear_y_plus, rear_y_minus`, paired D20 runs at `s=5`, `tU/D=250` give: +The inviscid problem supports independent prescribed circulations and a rear-opposite dipole basis. The tested cancellation explanation fails: strip analysis requires `g_opt=+6.147944`, while accepted finite-Re flow has descriptive `g=-12.200554`. Potential flow remains a bounded outer reference, not a no-slip closure or viscous mechanism. -- `[0,+Omega,-Omega]`: direct `q_ctl-q_in` `E_inf_vector(x/D=10)=0.13764`; compact steady wake. -- `[0,-Omega,+Omega]`: `E_inf_vector=0.64593`; broad deficit/wake. +Evidence: [strip analysis](evidence/authoritative/steady-strip-modal-analysis-20260804-v4/analysis.json), [finite-Re analysis](evidence/authoritative/steady-finite-re-bridge-analysis-20260804-v4/analysis.json), [derivation](DERIVATION.md). -The accepted numerical cloak branch is therefore `[0,+Omega,-Omega]`. Its outer cardinal surfaces move upstream and its gap-facing cardinal surfaces downstream under the solver law; “outer-surface downstream boat-tail” is not an accurate description of this branch. +## Steady endpoint -## Rotation search +In the canonical uniform-inlet/free-slip `Re_D=50` setup, accepted `[0,+Omega,-Omega]`, `s=3.55`, is settling-qualified. Direct current-v5 recomputation gives exactly `E_inf_vector(q_ctl,q_in)=0.0231672176752314` at `x/D=10`; nearby `s={3.45,3.55,3.65}` values are approximately `{0.0232525,0.0231671,0.0312490}`. -At D20, `Re_D=50`, `H/D=15`, uniform inlet and free-slip horizontal walls, the accepted branch was scanned from `s=0` to `7` for `tU/D=250`. The direct profile objective falls from `1.046` at passive `s=0` to `0.0232` near `s=3.45-3.55`, then rises to `0.0604` at `s=4`, `0.1376` at `s=5`, and `0.2972` at `s=7`. The current candidate interval is `s=3.45-3.55`; resolution of the flat pointwise maximum does not justify a unique optimum more precise than this interval. +This is an endpoint observation, not uniqueness, global attraction, no-slip transfer, or causal mechanism. -## Numerical sensitivity +Evidence: [v5 contract](evidence/authoritative/steady-contract-v5-torque-d20-20260808/), [publication v3b](evidence/authoritative/steady-article-publication-v3b-20260809/REPORT.md), [display v2](evidence/authoritative/steady-results-display-v2-20260809/README.md). -At `s=3.55`, matched q-in references give `E_inf={0.04549,0.02317,0.02348}` for `D={10,20,30}`. D20 and D30 agree within `3.1e-4`; D10 is not converged. Lateral half-height sensitivity at D20 gives `E_inf=0.02382` for `H/D=12`, `0.02317` for `15`, and `0.02478` for `18`. Fine-grid D30 local values are `0.02353,0.02348,0.02921` at `s=3.45,3.55,3.65`. +## NS diagnostics -Late-window changes in the scanned steady candidates are `O(1e-5-1e-4)` in the profile diagnostic. Neighboring cold-start cases at D30 (`s=3.4,3.5,3.6,3.7`) likewise settle over `tU/D=250`. This is empirical cold-start steadiness only; no checkpoint perturbation decay or global eigenanalysis has been completed. +The oracle-bound ledger provides actuator power, signed gap fluxes, wake-profile errors, recirculation, force readbacks, and vorticity diagnostics. It is an endpoint spatial partial ledger: storage/time-consistent and some body-adjacent terms are unavailable, force ownership is not established, and no residual exists. Accepted `s=3.55` and stable reverse `s=5.2` are not amplitude matched. -## Analytical representation and finite-Re interface +Evidence: [ledger](evidence/authoritative/ns-ledger-v2-oracle-bound-d20-20260809/analysis.json), CSVs [cases](evidence/authoritative/steady-results-display-v2-20260809/ns_case_summary.csv), [gaps](evidence/authoritative/steady-results-display-v2-20260809/ns_gap_fluxes.csv), [stations](evidence/authoritative/steady-results-display-v2-20260809/ns_station_diagnostics.csv). -The MFS solver enforces cylinder no penetration and zero source per body for unbounded and image-strip formulations. Tests cover collocation order, source radius and image-layer sensitivity. A strip circulation scan predicts near cancellation at `|Gamma|/(U D) about 4.25` (sign depends on body/circulation convention), with boundary residual below `1e-14` in that solve. Outer-mask fits to D30 CFD at `s=3.45,3.55,3.65` yield signed `Gamma_eff/(UD)=-4.293,-4.339,-4.384`, close in magnitude to the inviscid cancellation value; residual component RMS is about `1.9-2.1% U`. This supports a circulation-dominated outer mechanism but does not close boundary layers, pressure, force or separation. +## Limits of transient evidence -## Claim matrix +Migrated switch and return products are bounded diagnostics. The switch is one deterministic same-parent realization with heuristic gates; return labels are finite-horizon field-distance descriptions. They establish neither replicated causality, branch switching/basins, nonlinear stability, eigenvalues, nor global stability. Earlier pre-migration artifacts have explicit replacements in [INDEX.json](evidence/INDEX.json). -Supported now: -- exact numeric action/body mapping and action-reversal ordering; -- direct q-in profile metric at the historical `x/D=10` plane; -- a D20/D30-converged low-error candidate interval near `s=3.45-3.55` in the tested Celeris setup; -- numerical MFS no-penetration/image-strip representation and effective-circulation magnitude agreement. +Evidence: [causal v3c](evidence/authoritative/steady-causal-analysis-v3c-d20-s3.55-20260808T2245/analysis.json), [return v2c](evidence/authoritative/steady-return-analysis-v2c-d20-s3.55-20260808T2250/analysis.json). -Bounded/descriptive: -- empirical cold-start steadiness through `tU/D=250`; -- circulation-dominated outer-flow interpretation; -- lateral-domain sensitivity over `H/D=12-18`. +## SR interface -Not supported: -- global stability, unique attractor, perturbation decay, or exact optimum; -- independent Navier-Stokes reproduction (no independent NS package is installed); -- pressure/drag/base-bleed/separation closure; -- JFM-ready exact Schottky-Klein derivation or clean immutable production release; -- three-dimensional, experimental, energetic or other-Re generality. +The only current SR link is contextual: persistent rear constant is the dominant tested term; rear-lift feedback is secondary and the tested front term weak over the declared deletion window. Use [SR claim K2](../SR_analysis/CLAIMS.md#k2--persistent-rear-counter-rotation-is-the-dominant-tested-element--current) and its exact evidence paths. This transfers neither Legacy metrics nor mechanism, necessity, uniqueness, or PPO explanation. + +## CCD pending + +CCD is **pending/not frozen for the steady total claim**. No quantitative CCD value contributes to this package's frozen conclusion. Any later interface must remain a separately identified estimand and cannot alone prove the steady mechanism. + +## Bottom line + +Evidence supports a qualified low-deficit steady endpoint and bounded NS diagnostics, and rejects potential-circulation cancellation. Mechanical-energy closure, same-amplitude steady comparison, replicated causality, branch/global stability, and no-slip transfer remain unestablished. diff --git a/src/steady_pinball_theory/contract.py b/src/steady_pinball_theory/contract.py index 5409b17..0b31d21 100644 --- a/src/steady_pinball_theory/contract.py +++ b/src/steady_pinball_theory/contract.py @@ -7,6 +7,59 @@ from __future__ import annotations from dataclasses import dataclass import numpy as np +REVERSE_PRODUCTION_S = (3.55, 5.2) +REVERSE_ROLE_BY_S = {3.55: "same_amplitude_negative_control", 5.2: "historical_stability_candidate"} + + +@dataclass(frozen=True) +class NondimensionalContract: + """2-D per-unit-span lattice-to-project reference contract.""" + + diameter: float + u_inf: float + rho_ref: float + + def __post_init__(self) -> None: + refs = np.asarray([self.diameter, self.u_inf, self.rho_ref], dtype=float) + if not np.isfinite(refs).all() or np.any(refs <= 0): + raise ValueError("diameter, u_inf, and rho_ref must be finite positive references") + + def convert(self, *, x=None, t=None, nu=None, omega=None, Q=None, J=None, + force=None, torque=None, power=None, mass_flux=None, + momentum_flux=None, energy_flux=None, pressure=None) -> dict: + """Convert supplied lattice quantities to project nondimensional values.""" + D, U, rho = float(self.diameter), float(self.u_inf), float(self.rho_ref) + scales = { + "x_star": D, "t_star": D / U, "nu_star": U * D, + "omega_star": U / D, "Q_star": U * D, "J_star": rho * U**2 * D, + "C_F": .5 * rho * U**2 * D, "C_tau": .5 * rho * U**2 * D**2, + "C_P": .5 * rho * U**3 * D, + "mass_flux_star": rho * U * D, + "momentum_flux_star": rho * U**2 * D, + "energy_flux_star": rho * U**3 * D, + "pressure_star": rho * U**2, + } + supplied = {"x_star": x, "t_star": t, "nu_star": nu, + "omega_star": omega, "Q_star": Q, "J_star": J, + "C_F": force, "C_tau": torque, "C_P": power, + "mass_flux_star": mass_flux, "momentum_flux_star": momentum_flux, + "energy_flux_star": energy_flux, "pressure_star": pressure} + out = {} + for name, value in supplied.items(): + if value is None: + continue + array = np.asarray(value, dtype=float) + if not np.isfinite(array).all(): + raise ValueError(f"{name} input must be finite") + converted = array / scales[name] + out[name] = float(converted) if converted.ndim == 0 else converted + out["metadata"] = { + "reference": {"D": D, "U_inf": U, "rho_ref": rho}, + "scope": "two-dimensional per-unit-span", + "definitions": "x/D; tU_inf/D; nu/(U_inf D); omega D/U_inf; Q/(U_inf D); J/(rho_ref U_inf^2 D); mass/(rho_ref U_inf D); momentum/(rho_ref U_inf^2 D); energy/(rho_ref U_inf^3 D); p/(rho_ref U_inf^2); force, torque, power coefficients use one-half dynamic-pressure scales", + } + return out + def wall_velocity(omega: float, rx: float, ry: float) -> tuple[float, float]: """Celeris curved-wall law: (Uw,Vw)=(-omega*ry, omega*rx).""" diff --git a/src/steady_pinball_theory/evidence b/src/steady_pinball_theory/evidence new file mode 120000 index 0000000..5d1333d --- /dev/null +++ b/src/steady_pinball_theory/evidence @@ -0,0 +1 @@ +/home/frank14f/optane/DynamisLab/steady_pinball_theory \ No newline at end of file diff --git a/src/steady_pinball_theory/figures/README.md b/src/steady_pinball_theory/figures/README.md new file mode 100644 index 0000000..f9b4773 --- /dev/null +++ b/src/steady_pinball_theory/figures/README.md @@ -0,0 +1,84 @@ +# Unified steady-pinball figures + +Regenerable reader-facing visualization, not new evidence. CPU-only; no CFD/CUDA ran. + +## Redraw +```bash +PYTHONPATH="$PWD/src" conda run -n pinball_math python src/steady_pinball_theory/plot_results.py --steady "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808" --strip "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-strip-modal-analysis-20260804-v4/analysis.json" --ledger "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/ns-ledger-v2-oracle-bound-d20-20260809/analysis.json" --output "/home/frank14f/DynamisLab/src/steady_pinball_theory/figures" +``` +Defaults permit omitting all flags. Existing output fails unless `--overwrite` is supplied; replacement uses atomic staging and affects only this generated root. + +## Contents and definitions +- `fields/error`: six raw `|q_case-q_in|/U_inf` canvases (dimensionless, not percent). +- `fields/vorticity`: six raw `omega D/U_inf` canvases. Potential exterior values are the analytical irrotational value zero; CFD retains conservative masked numerical curl. +- `fields/streamlines`: total-velocity streamlines, arrows enabled. +- `colorbars` and `annotations`: family-named standalone legends and separate metric assets. +- `plates/{error,vorticity,streamlines}`: publication-friendly PNG/PDF companions with titles and framed metrics. Plates are presentation assets, not pixel-exact arrays. +- `field_metrics.csv`, `profiles_long.csv`, and `summary`: direct redraw data; every summary PNG/PDF has a same-basename CSV. + +Crop indices x=960..1200, y=239..359; exact x/D=[-2,10], y/D=[-3.025,2.975], canvas=241x121 pixels. Arrays are yx, x is horizontal, y is up, origin is the front center. Potential uses these exact CFD lattice coordinates and analytic cylinders; CFD uses solver fluid masks. Scalar images use nearest mapping, one pixel/cell, no axes/titles/padding. Bodies are white with thin black outlines. Streamline paths are vector-rendered, but their PNG canvas has the same exact dimensions and lattice-edge extent. + +Potential and CFD errors use separate pooled-family 97.5-percentile limits: potential `1.131928670277732`, CFD `1.440698623657227`. Both use the same discrete Greys style, but grayscale darkness is only comparable within its named family colorbar. Shared CFD-only symmetric vorticity limit is `+/-2.374693971069057`. Potential displayed/exported vorticity is analytical zero. Values beyond limits map to end bins and raw maxima remain in CSV. Vorticity uses discrete RdBu_r with a forced-white center and no zero contour. + +Crop L2 is `sqrt(integral_common |q_case-q_in|^2 dA / integral_common dA)/U_inf` with tensor trapezoid weights. Profiles are direct differences, not deltas misused with a uniform-reference helper. Accepted x/D=10 direct vector E_inf is `0.0231672176752314`. + +Potential `g_opt=6.1479442395622` and fitted `g=-12.200554143243473` have opposite signs: do not infer a potential mechanism. Body order is front, rear_y_plus, rear_y_minus; accepted is `[0,+Omega,-Omega]`. Stationary is an unsteady reference. Accepted s=3.55 and reverse s=5.2 have mismatched amplitudes. The NS ledger is partial. No mechanism, causality, stability, or closure is established; no CCD numbers are used. + +## Sources +```json +{ + "ledger": { + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/ns-ledger-v2-oracle-bound-d20-20260809/analysis.json", + "sha256": "c5d1395dd438e0f9c1f98489fd94fe309349ee554d0a21752ddfa571fe4d66cb" + }, + "steady_root": { + "files": { + "accepted-s3.55/endpoint.npz": { + "bytes": 7493746, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/accepted-s3.55/endpoint.npz", + "sha256": "b6c70b76c7cf2a2e4330b27fb0d4e82a914b40fde8171076704e825a79ac72db" + }, + "accepted-s3.55/manifest.json": { + "bytes": 7701, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/accepted-s3.55/manifest.json", + "sha256": "0fef464f8acc445a772db9792d8bb751f5f7a1502b4bf4f545833c29b861eeb1" + }, + "qin/endpoint.npz": { + "bytes": 4783748, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/qin/endpoint.npz", + "sha256": "88cbeac1069336716c30d18fd5afd4fc9d6ae87617c7f390b1366fe7098e419b" + }, + "qin/manifest.json": { + "bytes": 6203, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/qin/manifest.json", + "sha256": "e68dc9c2ac5f64f3db024c1c1b0ff729d3403781c2ca6a2cae6740f060ce14ff" + }, + "reverse-s5.2/endpoint.npz": { + "bytes": 8376367, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/reverse-s5.2/endpoint.npz", + "sha256": "760c1e84dd9b7784151ed180d3f16d17619465a08ddb767ce23a87517cc28ec3" + }, + "reverse-s5.2/manifest.json": { + "bytes": 7750, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/reverse-s5.2/manifest.json", + "sha256": "99313ced195070fdeb2daefde792ea50d48ccb59ae211eb2493af021713dea69" + }, + "stationary/endpoint.npz": { + "bytes": 8795812, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/stationary/endpoint.npz", + "sha256": "c2edc9e4173fb6bbde7937314e4984c1c501de75f0dd4916b67aa68388dde8f3" + }, + "stationary/manifest.json": { + "bytes": 7197, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/stationary/manifest.json", + "sha256": "d9c4d4b8760116011bfe4c077fde8ffda69935c5eb79240aaca5ec9fc2654346" + } + }, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808" + }, + "strip_analysis": { + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-strip-modal-analysis-20260804-v4/analysis.json", + "sha256": "10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c" + } +} +``` diff --git a/src/steady_pinball_theory/figures/annotations/cfd-accepted-s3p55_metrics.png b/src/steady_pinball_theory/figures/annotations/cfd-accepted-s3p55_metrics.png new file mode 100644 index 0000000000000000000000000000000000000000..4a871ceeab2eeba853634710601cadf9f33039af GIT binary patch literal 20146 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 J(+`+k{y*HfXkq{W literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/annotations/cfd-reverse-s5p2_metrics.png b/src/steady_pinball_theory/figures/annotations/cfd-reverse-s5p2_metrics.png new file mode 100644 index 0000000000000000000000000000000000000000..41f2be35370f906eb4978c67e6ddf1494e7ad107 GIT binary patch literal 20295 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 s{NE?skx}^HC;yRA`2T$|EV0~BVfk literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/annotations/mfs-gfit_metrics.png b/src/steady_pinball_theory/figures/annotations/mfs-gfit_metrics.png new file mode 100644 index 0000000000000000000000000000000000000000..11d4a0cc3fb32762cfbbac9bbe49b35adefb896c GIT binary patch literal 20444 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 b+Ggq0zNogzhI{y+J>ra={wCsfJy`rR0$jII# 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 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/colorbars/error_cfd_horizontal.png b/src/steady_pinball_theory/figures/colorbars/error_cfd_horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..5c2dcb9f207a9dcafeae7227dd7cc031ba07ad7d GIT binary patch literal 12585 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 I1Lv;(A5Fn>#{d8T literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/colorbars/vorticity_cfd_horizontal.png b/src/steady_pinball_theory/figures/colorbars/vorticity_cfd_horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..c42b177d45ff640076832921aaa1f0b7d7606a44 GIT binary patch literal 13289 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 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/colorbars/vorticity_cfd_vertical.png b/src/steady_pinball_theory/figures/colorbars/vorticity_cfd_vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..e58376d7e955607744957bea2f9364960dd3fccf GIT binary patch literal 17213 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 HnOyxJ1ajzz literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/field_metrics.csv b/src/steady_pinball_theory/figures/field_metrics.csv new file mode 100644 index 0000000..12992b6 --- /dev/null +++ b/src/steady_pinball_theory/figures/field_metrics.csv @@ -0,0 +1,7 @@ +case,label,family,parameter_name,parameter,crop_L2_vector,x10_actual,x10_E_L2_x,x10_E_L2_y,x10_E_L2_vector,x10_E_inf_x,x10_E_inf_y,x10_E_inf_vector,error_max,vorticity_abs_max,source_path,source_sha256,crop_L2_definition,profile_definition +mfs-zero,"potential MFS, zero circulation",potential,g,0.0,0.18203706719105045,10.0,0.004105060774649961,0.0037312765646886127,0.005547427220411656,0.008680187804227746,0.0056069498132052175,0.008684020133851821,1.202101548510311,0.0,/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-strip-modal-analysis-20260804-v4/analysis.json,10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c,sqrt(integral common-fluid |q_case-q_in|^2 dA / integral common-fluid dA)/U_inf,direct q_case-q_in; trapezoid L2 and pointwise Linf +mfs-gopt,potential favorable g_opt,potential,g,6.1479442395622,0.3355483915233398,10.0,0.0017015730991986912,0.00010382641602204063,0.0017047377911516542,0.0018631773275301633,0.00017321182459621807,0.0018631935376256777,3.9970332436824467,0.0,/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-strip-modal-analysis-20260804-v4/analysis.json,10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c,sqrt(integral common-fluid |q_case-q_in|^2 dA / integral common-fluid dA)/U_inf,direct q_case-q_in; trapezoid L2 and pointwise Linf +mfs-gfit,potential finite-Re fitted g,potential,g,-12.200554143243473,0.573990978668274,10.0,0.011248144975468088,0.011131057331628027,0.015824702294486872,0.022827084217645455,0.01681377744611242,0.022840097461030467,4.344431091608549,0.0,/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-strip-modal-analysis-20260804-v4/analysis.json,10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c,sqrt(integral common-fluid |q_case-q_in|^2 dA / integral common-fluid dA)/U_inf,direct q_case-q_in; trapezoid L2 and pointwise Linf +cfd-stationary,stationary CFD (unsteady reference),CFD,s,,0.6134001663228681,10.0,0.24380732053243648,0.17501790659901814,0.30012210370920933,0.89350326359272,0.5572226829826832,1.0456532677804014,1.1928564310073853,7.971104932948947,/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/stationary/endpoint.npz,c2edc9e4173fb6bbde7937314e4984c1c501de75f0dd4916b67aa68388dde8f3,sqrt(integral common-fluid |q_case-q_in|^2 dA / integral common-fluid dA)/U_inf,direct q_case-q_in; trapezoid L2 and pointwise Linf +cfd-accepted-s3p55,"accepted CFD, s=3.55",CFD,s,3.55,0.629542973386836,10.0,0.010552478859473947,0.011214912363477216,0.015398995734111074,0.022375281900167465,0.016958430933300406,0.0231672176752314,4.6573591232299805,11.91890798509121,/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/accepted-s3.55/endpoint.npz,b6c70b76c7cf2a2e4330b27fb0d4e82a914b40fde8171076704e825a79ac72db,sqrt(integral common-fluid |q_case-q_in|^2 dA / integral common-fluid dA)/U_inf,direct q_case-q_in; trapezoid L2 and pointwise Linf +cfd-reverse-s5p2,"stable reverse CFD, s=5.2",CFD,s,5.2,0.7716071742597629,10.0,0.26540908803640445,0.014576513091228843,0.26580906452931813,0.6898418292403221,0.022048578830435872,0.6898418411784105,5.7240705490112305,28.39008765295148,/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/reverse-s5.2/endpoint.npz,760c1e84dd9b7784151ed180d3f16d17619465a08ddb767ce23a87517cc28ec3,sqrt(integral common-fluid |q_case-q_in|^2 dA / integral common-fluid dA)/U_inf,direct q_case-q_in; trapezoid L2 and pointwise Linf diff --git a/src/steady_pinball_theory/figures/fields/error/cfd-accepted-s3p55.png b/src/steady_pinball_theory/figures/fields/error/cfd-accepted-s3p55.png new file mode 100644 index 0000000000000000000000000000000000000000..ac500bd9d0a017d129d6211d898835898dcebfe1 GIT binary patch literal 3695 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 Z{{u~f$Tc1*PeK3y002ovPDHLkV1hI3Q^x=R literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/fields/error/mfs-gopt.png b/src/steady_pinball_theory/figures/fields/error/mfs-gopt.png new file mode 100644 index 0000000000000000000000000000000000000000..fc9c6c85a1dd373d57c826ba9a95838a24330a35 GIT binary patch literal 2817 zcmcIm`#aO`8-F{W)yx>l`GYh$7AX`PVwRGKB}OA=%%&VmqBfCy`9p6iX4(R1RZ&*Y*A7`wx7t>wZ1=56^Qw&;8uj{d(Ou#U14&C#@ z=L!%jDK1#&3|P$qr$a(`lRP4@q$>eY7Xf%IJ|O%O5gCBdjKoEdE<{}oVIlzkEU%;Yx7z;^AFjJ- z9BX(r8+EbmA%ih|OGnGlZ8{LWO;@N<5qHb!Bu^jk(_td7K7K{+L;Pi?m?gAeid}K_ zgu}FTj|{{>YCsNpc4uIiHv1=`MB?De+VIGT@3!Afq~A}QnNZ3I>M6F0`TB0JYbydR z$5oQKl9)KT(r;;Dp~!!cldobH+x?TwPaFBx6PkV~$0dM308LCxJgThh7$|cheD29g zUcQ9G!Pc9-U&|I4b`O#fVvE>sVd9AL9A z^5U^rtck6yJn%eW!%Pv;%X)pcvM@%0o}E;j;u~u7I8_EHK#I?kR6RUAplWJe4Phgt z1}6yJ^-dE&?mxjq^BTSH%8pTJ?t z{aRa_u(k!9^|E7rd=ldEcq>BYK{O?M9R|2AC#Lx3;~nB5YWLRGQEO}K$er!PK31?| zhNG#a<*lhHKP@eDi~_>D>wz%C8ZkWgl6|e@4L0iymfqZ)J~no4Yik26u}l4FLb_uk zTE4@7w}XR&q^Pi%){*l%=0OU_d(Of^Le%aseRQeGR89`0s-^}*A`N-Ax8oy6YA>+* z@{9@FTd}~7<4i+CgH413XrueL^WvdTr-QS9yQIo2G9M=nNyq{+GBQ?#nUqyN;aLwI4nLR~kJ^tFb>;dc-%JbnUZK7qoHh-?Hm;s8SvOsuv_*?n$(&}nC zUtiyi5h+pO4bJ4+DmIyRaKgb z(z6%ZK0J*Rlp4w6?QE1?Zu+8XQKr z{ej^ryEoW+tH@7DKa7%lgP!>7AP%C+8`bp&5~!#J<0Jt&L&C$ON!^~N<4PTDHhU{o zjSV%)QZ{7h;UgkgE%9q;JCadeUjPn=e0PfS(s%Ul3km1ImWK{0wX9FCb2%k=5R7%( zC=-6Q9zqZhtT(H^wYBvV?-J+5^U;IdnHqMhiMRcA6}Y%Qom#41np4#aW1q6Y0_h#!87KV)id_~{rW}o=TII6IL zSTB73;hs-m(PhK5WUpGkSO&sGHG|hWJ0L&BzEQ+$Ydqz5AdkpD1D`U;q-E(3UgFrD z<=X}EpZaV*s?HR-4%pw{o!p`MqN!-uf7(ZTfq zE!|-ro5iaeuT+wkmX?6aI=1nvuz&72L%xn}b}<`F-JjbIPaVPI@eGnH)!pFUE^Dal zc$&|zT&E@IqJR5m2n&=K-w&-*Hgn(JK6Cw;rk(vl*>HY0j3;=EGvFAIF=l}L4C${O zeWG9n_?qU;u(Cna!ot;~ww)Lr7{>+&b2+SC zBPS8E;y0kGs)kkto}sF8CYY6yICD=ES9%oNdmmPrVB$~H{ir>B#^H5R)4mtXZz>_; zNWT>uj9Wuj6&>7A{45h{5?hS{El?!KQLw9giO!_nU7jHNsm2~SbK3KrZ2s2i9MGm) zP)~Z^7Ly$Pq3d-_;1V*8dr68fF>f^;*SjDZ!8m NoIs%9HTM3={{iUuKJ5Si literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/fields/error/mfs-zero.png b/src/steady_pinball_theory/figures/fields/error/mfs-zero.png new file mode 100644 index 0000000000000000000000000000000000000000..cf629f32d1c3b9db081fbaa5d0a5bdd4d2823039 GIT binary patch literal 3777 zcmV;y4nFaTP)EVE^v9{u(1pP000SaNLh0L01sgR01sgS zs6VG^000g|NklPiP!f9LK*~L)C6dy429jreq5WQ4q0A&HdSacp*98Xp<1-L5F**|W>y6K-Omt$T#QiF-3`HioFs?g22m%9x z^EpZK7!!#H^`>S-CUG$$5)Z1tz+iuNqK8Z)F>m1iVMHcT$t)66;CA@$L86j+BsS@0 z-Q3&^^t_Rgk%X`0e;AQTSW=bP1c8H!>qQzuQ)Ci`R3y$?-nim=k)+TRnFJ+qiThPx znWSW<$Rr4fN}Q#@X~-*+gvgYb1R)WL2O;`;p<8B(OuC_6;$9QD(P()7tWYRKx(13& z(nPDoy&|xmxPF9@TBpdAnE0VZ;;iKbf(aZ|UN=EyrpP1>V(-{8LEs?h5?Hhqq`fT1 z=45b)6^Ts|*iRNO+3NLr;PyvHM?HTQBr5BQ$c)BBMP!Lh5g726SS4^6dEI!)oR-Lx zn5c*(u}K00!6kMJT&-5Swmm*R-tm}9=58W08k3|5EwO0=18Rx=1Xjr_Kc*7b{a98a zQ)1#Kl*A?q40M-R2rP>lBnk^;f#pAk6`9ePBtc+_O%)jEl-N&TSzg<=yS8mvR_o6~ z;H*Wa#6%|0(WWK~?1z`YLSFIv`ucj?>q@0kM_ZOMFLjws8CQZEV}N4MRgixPJXQCMG62+6XFgqtWn;#+#d)v7>Rb*<>^( zExJnF3sHDvWW;lZx>~Jv2)wegf?t051&0qG#v_kBf`=Y@2s?M~#2W@ZK#E?mIDg9km^Sz21c zxpU`GE|=TJ#Q-|~F5WL_G$uqRechcFQCJB4`RAYG?YG~?3opEYTrTJP+JgrV;*(E4 z!4pqBffFZAD4!EG8tdp%6C&{3J8fbV&gb)Ozk*`hHopG)Ykc(4M>u}`cvpc1xm*s% zj~_?5TvpCxyO*ir>;?;qiT^(&8D$#)wzd*3G7~D6}z9@ zuMtvrOZb-&`=aA=`}S?+<6?PlvmDF5__Ztl}ZHaGr{YOVfQ7)J9#v5-0dJjJ?Uc88@ zsVQZSu{#QLJWSFe=QxfNw<{e+Vy`keZUI+TRVfy)M_={ym>QL`d+iy#Kgn|o__ji?BBn?qdEkxk^@-z+Ae{`u!0oIZUT z@4WL)EP6sI$>nCun zR>PNHeu>v#e?3r&AOJXygZJKh4`#er}XEHgC zg9{ff;LSJR#N6B*ip64Vfq4Wf(M>Fg!`6FN%^-jE)mK+sgoT9#eEk~x>l;fpW6K)GDT?CdPY$HzO$^Hi%Hc9YU#8f@N7Pf#q3jRiQjF zbM2;BEMj6}0;N)^H4|;Jz>LI$jrNHxzg=0fNI(Dlv(^;BPe1*%?Qyy5EB@}c9$l-| zT9af#U{y310yC--Q-~~akbTmsT~}hFsnKX?O%Z(e-FNZegAcaN9*0@_kxSId5nXPJ z0uvKSrBI$K0w$dz=$6j?rDNN6E7HpO!QGM@gutQ;%bZ@4HK~;6@qF`yQUv90bg@`O zKA-Q1o^n@Nh%3)x@tJT(cxK^uqcBciRJH5WX zj#8=QdC;1O#`0E2cBe_!q!Ni$DSNwj??$Ck(b9gUQo+zr`}a}3UPq(RK%>#X+S*#H z{+9b#7k9m^ZuPUomqD}Hq`<@oB1dAs^N$3hqoW-&)Rtwzwrvy&1+6K9`}XYv;D21H zT#H&>D+bz^nEWUd3OvDq7=`xkbfHl2Tq_o9wPI4~?Afz;`Q?{mrwGo^&*RXcLv4?{ zXT*bS_E2s7aIY1MGnT>@1ElmMDN-8~t2SHQci(+lQUve0=bpC5#PX3l&sfO2y1I(r ze)|oxv$NQ{cdzHEh_`Ot>Ucj1o`3_uanbd1Q%KR#x!rv(LsFd!Iac5IloCDPjm?Z zRHbOWYC5X~mfI2Q(1KgHZsGLl(^^s2=+%k8=FSSs}?2hR5dR=SENH!bdAP@q(w{OG`iG&yScha>-Tu0(NJ#j6eN8rqE|E~ zBn`Cg*b1_r+AAuno}+5t&F1E2>&rnF$hK{iN+m2WF9*5wP^_=7dlup&ByHLx))9?^ zhzx|=>Et&FB;L;*<>d*kq)$ckg5zS628pC1>Rdu`x0TQ5+kUB@BgUzgWhI{SNJ!Qs zmQNg4=9JvsM7mkSyn6MF%GJf$8K;uOwvF( zz)NbmNw=V0*XUm65nbvyDUS;a3(8X_0In62Z1If5CXTm6U8}J5tt`vJqmMp{=bn2G z=g*&q;{-do#&H~+KYt!aj~-PnDY@lMbB)-<{~wYKeO&MF?YH0J*s)`H@x>QmSr$sAQpd><;yuE`!T>}kzUw7vCPwH&-uNN! z;1ZE^W@ZK}D=T>N$tQ96@L}Im5%=ub)2iL2>PE|iO-Cd|7daRX6Vs@vAU|@DGxGQan9bKhT zsiW4k>YQT=OiU$EBnHfm#$J&aP@j)1@T*ZRP|ZU72@FtTk}iQI2Fw*%wO89uWcQ!D z;XdbBkcGeiB_{2Jk{B>k}S6E~qH2Fw#VO2theSTt4% zot3}cfHu+(A_+6jBwK5IJke~ zlGzj}Fo{BDh4OgAw!?o95|zv%vCN=HWeQBnD3Qc)QR`iv`GHD1+afu1^t;8zgh)rRM rsSK3Fg!Cglu}(|~@rDu;(&PLKg~AJZB%io#00000NkvXXu0mjfaS$!b literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/fields/streamlines/cfd-accepted-s3p55.png b/src/steady_pinball_theory/figures/fields/streamlines/cfd-accepted-s3p55.png new file mode 100644 index 0000000000000000000000000000000000000000..a96e5faad5616efac0eda1a22b4cb57a2c33d44f GIT binary patch literal 29284 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 XB%Pn%H|lc_q|Dq|3nXc#&O84PM>SB_ literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/fields/streamlines/cfd-reverse-s5p2.png b/src/steady_pinball_theory/figures/fields/streamlines/cfd-reverse-s5p2.png new file mode 100644 index 0000000000000000000000000000000000000000..08c0401a2a2ea2edb34d4472836e182e39e0e1c5 GIT binary patch literal 28465 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 J9JX^0{(rcpT{Qpz literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/fields/streamlines/mfs-gfit.png b/src/steady_pinball_theory/figures/fields/streamlines/mfs-gfit.png new file mode 100644 index 0000000000000000000000000000000000000000..ee24a1cc98f375c2f72aca97b9e0834d430fb3c4 GIT binary patch literal 29049 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 EKXoDJHUIzs literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/fields/streamlines/mfs-gopt.png b/src/steady_pinball_theory/figures/fields/streamlines/mfs-gopt.png new file mode 100644 index 0000000000000000000000000000000000000000..a02c3ae852008f5a72fb5634d3c6da8bab0bf0e8 GIT binary patch literal 14647 zcmXY22RPOJ-xiXQ6;WiDWQ!!*F_WE5Rr6ju;V%ZHq$cvEtqIcE z(BTc5go}-#wfS2)LnB%{D_f+#!<)B`R>-&Pb}mbWMK|HoaqMKY-lCxq8lrw*%M!^n zM?>SQel8)V`YvJTm7DuZ$@;7B@-)xm>ZcCH@G{txSPWdS^X4(cG>D0aeth)uC)|}J ztzu>loNr!ido?qnRuIS{e2hM+LUdhHqt5C@ipsZsFHxPdZ+lUPUl^^!yD!rOOdmd6 zyZ_95@W$c!Y4@5OMy|y0+wVa%IJ9>Jq-R|t_V(WC;n+-{m4r^{{!5}6kezzF# z@S95ZeSHnaaKnEWr~V-!W&AW~|MsIB8qIjLFQu~bPiEZ+$=P*9MMcr1LMVK%JO z*E&?`a=N&>8o}56K0G9?C1}{W*cuXSur6;LeNA}0>3|ign_S24_HSb-^H0aaWHdB% z42&YP0s7XTKWl13ROpWLk48=rGV=1*{jqmz4-_7|9-0-u=^`7Pn0VwA*HwhvQ2Fme zhAmjBV_R-J)#aQn`^JxrTCw++!xg`N|IUcOreh2bKsq_yN>q^6*4CDJ`I02Npy1)i z$Vhr>s#i?Us-9)?gw^iIRux5TY^+4uz~_~&=xO$u3kKWrAa~~Mi`jY)RjJ+nT zRzus`+WdoqeKIp2cAJ!#(fepF2ef|ip^7wqe797a4ILeQerX8<7WbX2D=eOO*N}v% zVBA`tk3-cxJv}|$yCRArB`!sGnORuyhB6iXl9Q8Po~+tzPgM|7KDB9m+b87bi$`Al z=DXv=eBCOq-d+VW9(a(>k3PBe^+`NWo@gQO{QDyRI99GSfie4AVlpE?Q~x#J)d^!B ziag<axLu06fE<+R})xh4)#IE5}z%q7x~N@L~AnGQw06f(sT2=sER2`@_9+M zJ2Cxi`}9Jv!HNija6c}NLRC#o3n%EW7ejeBb&rX@RLMm5tKci6L2`c)Z@eNjx<{pH zr4wCUc(b#!y0b$=B^Ajf>+ic(_Nm8Ac__F{y6+ep8yl?mr?8tX&|=+M-r3nPGdEx0 z53H!DxSg?TyD^?RVN@FD#j!$~HfZ$RAK~oi*kr(oJ@|&#(a9+_C#TEEz;J5t<)qx+ zNYpKC{U02qhlP?Er-$Tdy@>*TBo7q~F8=;Wc-&cN*n*k;R`J$VwNMWpm9@}YjpoQs z?($9K(;fwRd0+RxzZc-PSL$#e*_y0)gKQiFtP=zBwA%D|K4dn$`$LaL%fy8Jx;d$zN;*M3yA`?yH1)f5viwt3p9ZnWx9cMfY`_I*)CmtRMTP|B$(xikaJC ztcvOJ`p!;Ic1Se|H8u70kt<%qzcZHhFq$xo8w9khthrAn$Oh|`B$5478>9SX*0@A!B<=q+RhJF$fDK69`*PtvEcZ zt*cvDT6%3yI<;Rcnfa)d^j>Rvmr2Q8M@L7#4;OrlaxouEOL+wU&U<6y;gRV6z+Ukc z7Ld)c{_kZVq%~H3lhV@Gf||aZxv7My$|dj-@298VzyIJtRXQTuK;W;aPlqu=TKWdR zfB;)4BF@OQPVaL@j2vUWaFJt*kj2#KC>GlK`ua!p97$M?i;D}^(J91ZJYf=t+dENT z$@!0^l6;39xGK-x>3*#^{Bq={0+5kVBlX=c&w8rQ`JnVoGr0}UfH~Kr(mQHoXL2O( zU0&fUDk?HX%EGVcF}CaQO71+hxp%xb7xwGdFJbF0T34F=Aaah>!ovPQ^uZ@gY$r!Y zWlZGU{DqP^zKxkkBoR?K;^2{kr6o&rW_C^v9u*ap?z0^7p3F9@s?VjdY!7`JfBw87 zn{f-*7rnl|{`a3ho&^OQ(eCcz_v3<3;S*{dWrwe-xb9 z?syWRaH_PTLcCxsEiDZL%iHsXb{-j)w-|D#*GZUnA{>D?pdVG2z-NyR8yC&~s(H4~ zZDD1_x3yIw=&jHGMKx8%MEUyDDH~^*yo|xu&ixzp-+GLWvPLX^g-9_xwVasLDU0?= zACpQ`E~dr#D4)%(@83#&>cYXn5j|)YE7v|kMM}C{?CORKADOmm!5=SreWN}2?$B7z zT?r2Hq~zo<0FWAO1%O~BCeq(0C*)5UiN4ys*pY~!4#a25C3;>kCZ02*9qEij+F_97 zh3C=O1uG0Wz&>TEGQ+RGr>FMPzKEs=QARbdFRk%lVb^*STQ)~>id>H@x)TM+(eCl8 z6PMssJm_)qMNZDBSd#6slY8fwm1qjt+uM78_YZ9}ewBn(D#wPa*u3N5d8SbLmQWp}W9q8yNnd%sF{S>o8R z9vzwSP}l|5n3PN)`0ht(dJ>BiS&FKcec=cxA2B;#S$Prr-rc=&B9udJk>*uOxZJ|V z22Pnaewp@8G5@Q8hO5gxKBw(Fss`~x=cj0*ILV=jM z3Uj3T8}~{1Y^0(nc2R1->gV*at!HAlSPYE%Qf`?u8=4##m1>z4{y935gu#Dtc?nFW z@qvej2dr1q)Ktyb1~(1BWY&)#&3-f={OQC$(LQ(}=|F`T*8VXZH@d|1-;3&N5P7sV z<*K04nSrnnq6jhhtT2U6hl%BVjg5^Buv6^q+Y-sa4dnXvcIg?FfL)>E^NsCL0$wz` z)$Y3&JGLI)a*X0KGT3D7x@HS(UuWn^a(>=cv2^3nX5v^`?-UHG|B9$F`W+S&w`^^4rpX|@7~ocHpXF;kMqe){y_0|wYw;0hU$yDKwM_>sf!Lzyl+j$ zsL?u0cA0h_HD6*SN8={_Qyw0>?6R^EBThS$o}FEXa_ipVmU^<>L!Gn%gX8T9b>xf| zKbxV_n%ao%gk_~S!-tzjT82`?XgN#vz=&l!ikZ{NP1m7QH=KuHP|)zi}xn}9&dz<}0tyYVSz%8x8W?{?eq%4xojPYkX|)Bpyd z;71=HOtD8*d9DeMDl#$VnXK@?m*<=BohS8MWsmLQy$K5-c}U=7q=CAH85!5*<>f0K zRswywF-Dhg=5oKT`W`QB2-h(jkIsEKXNzKg6iezME5yr;%fjQpa>$!#CV<1pB_=QV+ zs%iFz^El}yt1BNXo+cG>i6$hJv}{MHg?yh zEQK~(^8J9nR0ivsGpPamz7=4{1xnP=J+XVq=puH-EIbxyj1!FPnjY3+?6YouZPB zTII7dR~}wo2dWS(g|LtiNh>SXVT&h7n6)}O1A~KJ+@`(XN=r%6P%AW1V#>h7Gn{>V zj8$A*TKeSx@N#k+v!Gj0y{++J9qHa>m9P+GQ z7}-Fgj+&drLy5@hhDJ3~=Wk8cDe^dUX12D{ zuU|8O$oMv5Q8he09ei~;chxqKCcUt;6XNfWEx7-SLH$}S4jtUwC6keum^&y%WK3F6 zQ1DZl=DiP!1^)U>cSpbpwGglh_M5|xRMpk#A3V6uqMlp$dr4PA!w-1aH`p}L9`NuC zQo*81N}qkNU2_zciM|KWn&6G@6hNE4u(Gw)#YLT=Vh&HPV#VAcj9e#L?Mn`O9?ob8 z7xj|2G+RB#cff3WEZ2kFY;@yyeypcfRJ{$c1t6r@!KM-5a|LXtILrOL~fUlJ0wf8P|tZi1uZ zd3k>FdS|kXHzUo(#pUl3&6U5~Zq*GSLu9p5KzG=6D;x6y%u}~4yPgmfO^B`4=&(PI-4qtR!%!>S_wO2U&S}lJfE)Z8zBu zZ}kANfD0SSiz8Y=dbyVD(GExC%jeH14Amak9n*6Q!Q*ATjY8JbgSDa$m#!TR*Q@sm zVADb0qP`Q5Z#ZR@d%pabPrOx`Bkz^1)^x52V5fiG`nUN62_)v-@q}rSK@+;wbY;<; ztL$B~&!rm5T3P|9+c8yc-SX=TgZ)-s1wE{pcAon02Zu210k8lTfoMGyO&h3e8>o(s zCP!`bU2cH>2)ZEIp;VI9|$jVE7Sn99ZT;=^r~a&_hZcU;kMWQI1d zfz+&bf9A9^*%rAo*Fe*7c}#hdo0^)+36{crM#k#yRR7)hms93Z3I~y*e?Rn^>E+JO zMgeu*@XXq#yS*Eckoo;PA}KB|aClhN?*m-_k2D?^#Cx>|1dNJF+h3(B@p3c@+P4ZC z2oTsHFkQRRRGDw1%n&ax^xlet!;PT_@vA6_S6uw{C6Bq88IfSvD>r6RTpN!h+1%`I zdREqMFNFgJ#a}D?AGjNLXX_|Yv&f`3A%IP%{7{E#&lBr8lAni%6m*tl7>C8L~oqzfArODAq z#~O}qC1}9?{e8RB{Wl67z}6_axVXUCX@k+!(?(oRX25x;vWfHl{q%zPwtXKqqy z#Bgz$SXo;$UPM>!&{gS%j*n}?+8J#QXFHibham^JG@lkGyhwVvSFC6`@6$$C{))v)|7W>261%KSZqR4s(A z(j<8=x3zn3GGAQUen=F3n#j(^)&}1!Y)s#S>SWGCWN~Tffi-b8#^rNzZDxQHx7mQH z$w{SGuR^|ly=9}G0ZdjDtO%RR1*~bey*ggsyFlDh6Tjv+4Gj*WAq8yQ;9!4K&-t^S z78ba9>*4+T^XGdF&ap&odT6C#!e`hOGftGdbtii9M{pM53BRSMV`gMznAzBr|4mXu zPvN+xhHkjQGm`y1|7|uhE@KGMGB1ym zx;&Zt`BG8n!8#(dzMh&;>{P>aDF}KB!@b&re&fmSOf3{+6vH!fl?=UOV4yJhWqafZvO)M%pS~@T= zFn799#dHHKL6D9c1ClUk9UL6&V8qyj2!O#6Od~=K|41-)5aw}#0pNN^$dzZedW#(t zFcNkaKFVNIccgCf-NgQUr(&r;MVvi0q{oCiicRN}qR6G{;XMR)D3!pc!Nl8il zW;`*E-^e<5Cr~3*!#i4^XFiJj&T|F~tmOqqozL&zcA(c$#^asG#{RUCCW)lj4;me* zna?QG2WRRBe@6Y-rc35D^lC{WtH1i^hMGQu>CaO=O7#k)m6eHMO;N)dfgK_HU~q7- z(4;4h`Vl<}B8I-pivtMp+D!Yq9IVoTzJ-a>wlEhS;I4%;2~-%qpktaZeZyaElgK<88~a4RMhLGhf5Q zxd4{LB%Ko#{Oa6JQgd@}9<23MOgypzwM`}9G!GalYH!a)KrQGG*v_m01f^3BiUPpb;U=en;HBx)bVh>nSHSb1@W1qJaGDXp75oG`C4i3Ufap;hxfrIWFA}3j!N_;(^i8 zPl18BsLeS$-0%+ztH|-1n4Jv;i|v}PuP>;87$G-a7=OkGPmkp=-#orsTv7t#^QL#x zN9Vcsg_`^fdW-QZxgM^~s9kvX(5UG1uE-0`wR>_%Gwf zKA%1rbw)fQBN)r@Izk7>H_vMv5cNOL^23LEgJ3gh@q}V&oq+OyE3H5bfip^-H8N6C zS`H3EJTg{MV0B;}wrpqv3`Ikx!ke2-kMrq=!RG5q&!Xv1zu{;45ACBbF(L&c=lFp+=QqSJW(a*Rt} z6Gg5=R%n7cgJwnj-&Iw5K0S@>u==T+x&ez4AK(!94AP;k&Axb4b*~7@Z^9I2{(ZWZ%pfRuZ)0Oa-D$wPFl?{k zidv`KstKlBD9}Rt6&M5n-rELiWf)pEHtZc89mFGvCejlCFbpg#K|}o7b*@jqoI_FM zU%zDHr(V2z_3H0_7sr=~2xDT`p-4tAAYD2YHf`08TQF&UgYJF}WE1R}X~$25G@-yN z`P~yyu>xF4_3!>xYp;rppNBp8YXtX5aE{rRzBPu!F7QgaeA4n3~vYB z++87A7$0O*L`1~5yu2PSekUXnHJMQP3n(aXGM_DZOH;eF%4Q)q1|NW;u9=ol%1|)` zxErr_WI-_s0EpXr_2=wBqfuhFEr@(6RA9FeBwUg86t9G|v`$_fhkkvq{ZjivqVw#+ z{cTA}$#LKkJQVmzE~|GtxH%lh$*HJ9;1lTX-#6~Rx2MlZ5dvzq8EES6p-o%a%?Zd4 zI5Q864C1!rOJ}{m89*B%P zj2km6D+v{qTf6n=HZ^CHLf1#azn5zH^Pl+e3dn{fru1B#+m&7bSiV~dc}he?gfb3T zH4D+;k=d+ zB^Tg|{LIxVxi`5-jg2I?vlSSzcp`e=;AD4ZIZDTd4#re`L^5%n`iuJWU4dfzC8>R& za>NMi2{`DFn3=z-hTVbL{>!qUZuM|4L@MpYq!>0GWLpnu-X9WAGE-3+(nkq`E?=!CO9NoQS7yB#BQpjF@HwLIU=)@VfH^qpy2S>A zmw}g;ti+@TAt!fJ`ozb8H-2GnuWtflNO>d0k9rZ|dPo|&&U13R+k`tarYZXVP@0hB z%`<%>Beo}Gop@BIpS9V2P#mS@6FxQ};ZGnn|D}QL?fe&R&Z4sC1z4?ZZDRSV%qatA znAv3dVsN8~!65?b`flFy#_wMYVWN5JZx3~3{gA5kyVyR5ANmrWc>{dSZpLjVcVDq$ z(x(QrMh)@%SXpE%nQW>z7+GIc z53@N9Xeff8_6!0>Cb4)Pzzs#_$yI)zs9~WE2%42&DiPbRGQd z*7kOKHa7WwI&HA(3SzPM#jwQyL^?Y=l|Tf7?}9eJo#pNAjS99Tq@>W%P~jW6A}AUG zgDGKy77emadSPMe=g*&mvqbWw3{FaM){>7Wm2oQ3QUNXj&?@0OlAjW;@6IbLD}(ltgkuZ#?ezDgXGAEv zYy9TTf-kvV;ka#IM@JLz(IAn_4aLhz?&lu9FVKGw-{|g#9|4a?00Ms=PPi91(V#hn z|NUK}j>pD*H+soIz^Dlq(^B0Ug9Dvl^Lw z-P)O#nZBRu`s=;fI&ea9ZK_tt!(rs`wiD?b}}nh5vqp<$hXW zWgtE}G9t-zRE)B~<~K5v+u@Npfv-@9(83drms?Y!E{^-<(HJ{7F=n-+y<(Ce%JG<9 zeA*i)NG@4)S`T+VFRG6;El67W;;1$GaI!^87Ns**7LUS`mGHrlT83LVC zC8mTZ{fwGxKs6JJMJ#D3@7)UqgY5pphXTe&prpM}KFG`Oa!tSW|O z!hzW$EhU8oRe~GerYfRkGaO>wsP*;r(=#)tBD_j~FQCi>u(ZI#ZN}#VHwSQkNkuV4 zG?Ydpv|`p3&$jMpRP8pkuj>U67t4mQ%aQ2M!vR5ofsn9RI8%PK8Ay2c_ES&;_v`kX z&#AB4Z}W$F`K=Q^Eh%twwgx zTVUZuy&*!N>KncY!-ac|V2Jz-qxspz(GZ-K#gv|rv9RDr(+-L$cbNZFx*l_Cq!%4) zK;XaB?DX_hm&kH+YJ6^Pj{XrTF6yTds8N6$J!RXFcyMh7gc6Eg!i{g+`*0%QXHpEJ zmW5`}h>3-z1x31`!1C_hyKkWLfPz+nmR3?ynpX+`X+HFQfy3hzFUjMdOFZh7FTkPj zl+9>f?g&SDUJAq#DM|*zS;}AO>4*^h|KFmpjRvEGiJ2L_f5ruf30y_+m90~Fnkz(B zSwj3>YLM!2@1KaunbwPpBtv5&cEXAgzCssyjW+=ge+fjg7nCuYq<$IC*l0-y-|+f-Ii0-?wHz+_E z#TdkXzqiGCDKx!!b=T7i1L-L7$DiEBqvCgh#l+z6RHIk#D zGo3rk^y#>96x=1Br?c-cKo%zS^5G$>(@X%(mQaGzU~yw302NcTwN>2@?h^e8_pT6% zT7p*>2b$0Y`i3DEu|*eIg~z`O7k4nv zW4KL2&5Wg;vCDnv#bSC)z^7gW(+yY%_RX6Ta89MdsCNo&Ep!0y5*oi`^g}_StE7|0 zN>64?TPD`ei%L-U`oFTj$g^-o;cNXuoU8F)%gowZ67~qj z5c~p0sjQ)K!@J2~fT{Xlu)n`3?C9*fCH#wn;XkXxb6 z3_q)W{k=ZHgWwso_uhp*U1P0`;W((YA}g!Wxb92B1xJ`}T@mylczy05K5)QZR@dIx?c7$adX|dbc5v z+F2+WG?(5$+Ww^O?d)uR9VYZiV7C$j9D_2VO`MdH5|YQUR)q)rI2E|%5d8Z?Xa?E{ z3(^u@7qD8%FFkj~hXm;`KYaKA8Jaf)ie_d^C|llGZm&1Xf0!7>@S)D5JFBIc%_HC2 zZ!S8nOe@l-A9O&+SoFQ&I_rkLk`fX1yZLMJhnhc@-H5I}E%$%NxVsw|_zrd+^=g3R zgX8C;l3g033y#0l`1lOwLCb{qD6 z05A+i5LXC<1qB7aff7<;;)~RbTVrwU7tEO-h~BcQ(<6+PGkMUDn%zmRn~%DaMQEU1 zcyGI#-76AF@wcM5E;*TI*rH4g_vTF>?Y#0D>w`Z(X;3!pyR}4TU5i)Z*kVB2z)Mup z)Wk-EwQYp-!a6?^XTwER;+u{J2xJ^7MYhNw12f^rk&2YY)NAo2{vm zLHW#&N^9tzPk4W};RuG22*-aV6f#G$v*F`yi3Sk3sKo=;9>Z%*k>tMr9JERE+#C&a zq^w=TS0Z%CBB1;kr26WWH61?9V`FTTK?X+U^I44if&%BxuCG_u`PrFv44q2D$ZmR{mX?+#Sa7HuS3aKi8R@nh#CK#; zY4(K&)pv@)$PHB>LBIqENKK`8|J`&0Oc?}VRnogf9N_hc3>AA)oeY(U_x4V^(>T!m z=#GC{pfP6VL)6R6LQC6d-oZead{@4H#IdyRh>Rj+wJgRFY;j)|*Wy3*m409|^XEO537f+P82_AYY zI5XETZ3$ENXk{`>N=odHx3vU;Yx9<+oKb)vGMB{Kyq`oM3;F@_is`r+y+mjzL3uBs zHI^}Lz|46yylaIlkb+gsq{}BA3Nf?lk3XWCkU~OKKxJ7_g;*F{diw{3zG4*94fZ2e zTvZrw0sulqwY2VnOZY2W5q(Bml_CTyB_##6S`t-5@b;z};Q!Cq1tE1NX& z+SD}DR~jFR-N2^Y_d6bO{(B=$Kkp_hx*Z0XSg?a6&JnA?+URYVoMbTGfPk0yo3Hi>;!vyXe|X z*G>QhQ&4d5&E=Jqg`%I-Egly?Jt}p-_2G zIn^*iQ)!noN)Zu}-mlE}@B6&iRdSBNg*xrs!2UYz4?bADgZH zPxgL-WGsYAU9M)4Q6cvU_sv0bVwkDG`Jn%iT3${D1_mnE*3gKaKULKvgT9&dd0~nn z)MNPiD6D>(I3}FZ>G&Kbv?1fI2VT>Szka})g`9*gIxJ}=IG$&bNbT)e>lG~-HmK)q zeo<*KZWwxx1KuK-8VVae%t=bmpXqDc*s_^*)!$y9J;w(e1Lgr?90)U<5UHhz7j({P zP~?L%v2m&6hGMzEfKV*4_F}*5a`HwLgLjnBgN&rnxp3F?=Aogt^GKsS^&syXgor%# z7LW)C{9z~}Lo;)XwdWk*q!9dN!QYJ-Kr+3%B8|X+SJKg8*?eb6^gig?P=Fhy4-wQW z)2gcOYUJw{DP0?}C`)C0A3FF-BWg;e-A;;N;pS!9wiHv*+*H>TKYzIMa{crxb}Wtl z?d9cVn~g(Y@0GG04fn=ysw8f|jqC)AOHT2Uk9cs0HF2*;S*Eew;t3pN`;&o}_>7UV z*UPkfvOV-bLZS{8RQem@j+}R=1KZ2z*KDj=STsz-q=1&J`3F;r^3{mf`V;gl;bz17O$6K~B|g%ideGH-!C z=m3_e9?$Q++|PS6?vTP@8L^w|@lZBxf{onO_(?pJVle`3`eY!;B~(sPvh(6`4Gs-m z4HliwTVBM56sOR%k6JE~|28GBm7Oe_3{G%$YbhFrJ0M!(nV=M!1dEOmHjLrbs&v`bIJ9lNZ{l z&HyQ}5~#jOLKJP6@neNkV=D2zS`pVnrVp1#8leOw z0gfKbs=Xq(k`&*twh#dsc2k-8LcaxuBeS7{(>0^WX^>o`jqCxA|J(~d~3;HcB zEqOkch$yLDn73Fk8Umo>PmJn4z@)mqQKUILsvOKOfQX-w&)i9DNiFDXoBvVuGEZGx z*svKhm`Y$YH4VE;C?f!C=hmjNRr)pcJS8)s>mMmcPD{MUX`AwUB4r-{<<2W_8GoC9 z+ro_V4yVJi%*9cGM;WJht@`ejwqHVTOg{D#hca*68BIk>_i%)IRAV$Db`gP_6ob)W zB%1(eGKEBbU#Nw{RKExP2nhtjOT2UV`MM3xiP98>-_L3Kf#oL4J{;~pKtwnr_#DrI(;X*ql)_G zB2~;Zp69u#uwywVCnqG_JoP7LAflqO=6YRdZ$07ggSd^bx2>1Q>YlD^ddSjMwh_0_ zxIvSCJPRpq6C2lAU09f6^0~n-{yP^JL+E1v1qcCbn)qMaS>eeyEIKNa5-mHtP!ZbV zDeG;tpS=+X?pwY@b;d6tN>NDQ^91`QnDQyXizrqxE34cVl{cnlrAh+hkKJ5!q>F0v z4t$fM^J>RWg&vW^rHKaT3gtXNbHnQ}MltfVefz@LlG5Ayo>1U`AlmiKauv4Hv3~B6{gZffp#j37EIm+P5T9&}JRH5AYCE1xgf$DyOdHi_39}DUoD^)Vz* z6#u7mkGIAE5`L?dKm2>HL8R#Fx{wv$}hpu`G4aM zoTvb>Q}Eo3bZ#xpelJp?E%n*xvwLVwCJt{YSq7@8DT-^oif5w9-?JBCR4AEwYAOBW zC0pr=i6}J*iFZs)OufxdT30ln z5U9LiYpmcWst__|QQ=6Yp0C}MocQV6atYQXLWbtI$5Q4iduXWctNZAr< z)l$myFVcVs6rDRwzGnv3NN7Bi2S7(n`RwV{Ax9@I{!&J zG`(iQ1S>9n%rdD9eLsk>ftTVAnz-Q}Srup0GnSH(QVO<~*Z2hU!rLk^Utt9dYn**lxES4fiiF+;Kwijb9*O(EH3?@h-4dd~Ov zKQE`wtHY<~xu5&KuJ^j0SZz%eLOfbLG&D5AyQ)gM@cRz@>yLv4zb@bG{sh0Vdfzef z)^oG-_O5h3Xmt_;y@()dyZ^Xv9{? zzgOPKmN=lH={&frB(Lw6y%Fpmq<4S%B1OnyL_|HSa-~Jv_%Jy2j*>j)6`ePEI0bKR z#<1>j6?U-X39fDzEZl7Q#!3`A^|Xttd>lGy?u3DM_ng?0BO;_pfUN+{iWr zS4G2@W=Ww5N;7)Q;t9jV!~_ljfs&~y{j1v+n}csAh;O8-ky2CRd^An`{8`TUkEb{~ zI{NI^mR7tH%gV;a5p|Nx>CKjlQ>SON!g$0o$Jf6kF%cIIef9Uzg++D2QFt;t-xZ%f zWKX~9B0~3Ta#DPWWh;ZCc7ovPB;UzDXIO7cOw7Ugt*xzX^M?X7aA#AkueSVQZO3aL z5f2X!Unh&*-sxsy<>JCKD7!`(e^n%l(4Z{UwZeeAy}kW<+V{ZV4H`kayv9b_y~Vzc z_}eWpaHY4Uk^`4#T4h;SShn{^v=&G-@o3APHt``k-eS@gkdw( z7#J8Uy`OW1bNuFUZSCx=f0jQOZwZzR3lDETJ04?nad9zf4UrBD3nQVVR9-s~Y}H^7 zS1VG`)_$&tOF-cLFKL(ES%fZnh{Qm#o;@X&vTz6|r3W*_&C=yFYynfBrMw8KeBl0rCtkasm)4Haksi(KM zv)ZZyR(tDj!?ZN7`KK7Gjwt`%>`Hg;+|jsqk8mTx^J8|u-=?;lZ?*51IRS$N1qK$u z_P3LeyL=fM_D)XW24zJi6$bG?e;T}RXc$?DxDZQL#f1I!MxV?0rP__?;_tTa)&xlW z@CiCTTi3wXV8$zFVn(SLjvPPqyLa!V3ptRzy7d6P&iLLVi$jgx8IH*F3D*X%Lz*a$ zZ_maLoZqd+eem&R^j(#X99!P6L(h=M(VMMGnGlTbu?;gQi_~CWD5seUF14o16xZH)o$Av@7)#f&`*q0yST&(QAmQ>qV zTU+~aWq!0&|V$2@RD_;*afU|J__)z;-|n#L zYbeV2u2%b3^Sq54ojy%d^3??+D`K@_g1CI!GqQr$ucOJ!%XLd+Sn-ZY3B=Fwb3nYuGDndCo)llbYH~NU>m8P zoOoy6EBm*4**h?xVqic?dE5LfE1kLO8s?*ULv#PDTP^>1*)_9csLcJYC`J?AdGv_G zMar3(Fe7>5g|mp=Ku*Hw=%~}4kd%3(KqGidN&YNM$-?ss9Q<_TiSc({!WDE<*S>u z+%cNjVr@`AE*ccr6zuHSWiHRWV!Es&A|vN6{%xtKso|x@z2h{4vN8FEV2s?Si2s;s9+&XbUkz?(nRg+9SdWgECSIiioFA(E@Ve z$KZ!ULPE@2x2B(}=JeSKPQ3`uZ!i9)@IJ!=$7Ru?wn5k0Fp8m-dSyQp1H0O;kGA|l zE!Ke49zl_z#glVk0xS%8xY7lt1RZ(J&8SL@2`9yt%!fTMZp6gIkVp*-6{_eM7+_Tx zs9#DM2B`T+XIu*k4u;L}CLq+T+<;qyJ!Nv>24y@c8Clripf=nhGc+$)M{_}vYPba_ zr^2mx=Q?8^73yV;!A?E`IDKzOo|_$$IhN`NOxe8;3quduA5s~IHh0^#$BR|2nmkK` zecV|@)5ew>Ywc%6hlyKrWXSoc)%I*#y08-^6i?VER&~ZG3njKNg?#tty>EXwCPf(6 z)zv*$E7C62XUxzzyav~1Y;3$-u2yeb@hw`P>yDqF81#T;5izk3S`YCel=pskDhaFL z)tq`3F+Dz%tyzmTP9#XLTo%gj%gD$ust>vLvRRaI#IjqI#%o1z%wzGRsFmrR6Mjh)+y75B?CpMQQ0(*uhCRXI~C;q{KdC5yfNr{g3_U+r} z$;nsZyTT$OFyU+t2v6trP5qDzZy1~C`-`| zGa+K^X)jbzR212QubYjVJHEZMGxrHQ zf4-9K^!G+mq)^?LvRT3?`6B+!@55}spNcNSnTPw)o1(}#~TSO0G zCk;B*(OYT4ad>ZBF*0*}dOBRk9vIl{oX~{P!DsK{a>vDmXLWT|+r%XP%NOOu9I|Cv zTWHjIL-r)su3b$~4u{=YHRw<~(QBm$@Bx4n?a1;$K%!YtV4&nP<-%D4mCe+=H*atx zeK#YZF527QTpY+v8XeUKWFo=$&OsT7tXNWSLzmd=iyz^shRB@@sG2$V&EG z2Gx!m3QR1Rx?HKv7ai15p>39OaIq>$YWfyIT&%X4%e}m>&YLyZ3*TpyKMD^Imu`7d z5MEVLaR=JBqm$Fn=qQ_5+3E4|;FV`)5m@iw9yHSVu9O*6v~PtRNmfzH@XB#5j<94-oGh^>RR;>t~5L$h5mbkS) zk#Y(xL(zM#{p#YMo)kXX1R~LIRG!EG{;`UQQA1bDuFKRd-FNI5TJc6eCG5w+!9g^X zCdW7pU|nBfj6n>{%DDUiiYkq#7gob9q zX0?YhvxY_^FtAC{#=+6C{cvLvjw^y~Pxh7;eww%yIm#*I#)ik2?8ZZxe_vmJ!Omdx z>8cE&ounmB@MdKW#Ya=3V7M_{T|sSJnFq;Mam(j~%{k1U>=5>lZp&a0xoFIlg^U z(>E|EsIULowm&d4!^F?e57_;Vh6aIxqGI5=^HM*m(+2tps4``N%+ybUXlf1@;tX0Rggw z?xgPRxeip05^ow{yogn`j`nsy6Tcr}U5C;Qb^T3Mm5P}e!|K}FO5R+Y47uBDfUFYg zdn(f5ZBOg#MM^XYS(0(AtgK=Z6P4i_VTq*#-T`8lyMO;09Cqyo4`Pdp+1nPNOcZUx z_aQ~a(f{Y@XvF-y^)our{*8ajxB$S5zB$LrCQFcWO);SAjVs3P{93OFn2+z}Rq)QZ z7l_(uD(KsM`R9*qjAo8hPqxJ4xYG)(t5@5cMQr|lOU1#%YkzS=eS28__Q6NISS#xH zb#*#zBrDk>S$$Rp&sEuQ@bMMlRb`NM{fBrP4Cj+t2kvgG>u?yrBs ztt2NWtE#CfczSv!*%?Da9Ucygio#M`prfN>cqN6ffW&)}GcC=c3T@xhZX?XfZ>^$% z&u@E{5w$ReDKJ}G%Ad<%$dU>bhPNbmIBx;HOFUn`_cnh7x}M_%THE7GTuv z2%*Znyz7aX>{3#nRNlV|?nCOr_rlsJ4RgFuQ{EEY9RN;1`kHR^T2o^^e*E|*C#SrJ z2R~f3_{?`(fzIx3R%YfaJ3Bj!A5|K|`s@ma?L(NO82TfU{jogC=G~d2|&mUW3VEfCJiU+&f`#L^8zL!J( z&!0b|;QR#!7eimQtEKsOwABraEIBhX4oZp5Tze$6P9pD2GaS?={-mAT82*sWqpoW% zK6gq2St5N(?1gA!pfXTfCuxkTD4}zWw%#e=CI1F%*l34OOuSY1O|@iXsQ&>x@Wn;D zXqzAa&ZMNF%gYF{Mo61LMtS$xIu9TYJUqPTX=%}!nY8`E?Ck6;JUoOzF&HyqUOc=5 z_Xno|SrT|$C3Y3CXW(K@>YYP1*gIa|P1*kKHGp8;ZgdHmceS-1%Y)42W=)4te7*iE98E`F{)(Q734W^D57xlNO#t{hhK9)BYusyB8$Nh9U)x=x zMD%t27(TRwhYueDURQ)2uVwr>6(X!$#fqfNR6T@y^1BjrvI_aW@C*-iV^Wt_)X9mNKNCuwB+bFw{Wx5|#XJd(s51e7E0Ii07&K2>t ztSr3C+9Qt#L5wJMi8ma>riDW>Z{KpkPRjfADO=Y#PyKV9&xWy<+f3Q=`uhG&%2dq~ zM&*HHC!(ckE?N3l;B2|1>_SaYI!M+Z)wZU#``DQ~7yV?D5AX_{=cu)xrNzFJmgJ=OSF zlasf@`+;}OL9Y_d*VaeLs!9p28tmi-dcNB z+1!nVBh9G_M-iGSOYZk&-Dl-uG;?M8Oq&BzZDQ|~=l(|V6En#?{jH zULtt>P_A~3$jW~>!ac?f59`8n(%ve8X84Rjk}@2NaQ^r04!)Z_Ja>SJz|nIEc6aA{ z@#4kvoSZ~Jt#ju`Gu==bq#CJYKpJ>&%mb&_eRY&mYWFMa%L9!ZDH@4p?W0e zqnGEf6CX(?k({2Xo2{PF&haC~T0a=}aQv@d#uV4CSph@>a0XN=T{;jEapX9K@}s0t z462W~pnL(F>;7WEl6;+?pOll66RzF!8y0nxd~mSz?%rN$bqpq&rKl>Ijv#DpP#nm; z=bT(!zkKvsa{v47no)&8jFOp1IXSxq09jA57U-~nN1I)l!cM@B^Ypp+0}q`wGKFxF zPriFs-rL(dDN-4fqVZ}gjC$vZc@mQ{NsoW*{?XaiWZf;pSXrPG+^FRW?S{ly;fIWFOZs=n!QYVmi}O!YHML3e0$sd zE$^_s5Wq(H){t{P&p)c4j-~@+Vq-m;NcjoEq4B*;ODlxO24W6TJ9VmBB&a89PE!m7 z&y-oG{g)U{#aUR;OG``j57=z4JghUe;-l6!GKx`8dUzX~AzFC;=7tA_DoIhxfMYbEYjgaHQY+du8a{@d zvCuEMMG>?@NJw~-n_CfTx1*yY{m*8gPou}o?Cix_V_qO~2@4A&t?BMvT$Lkkve-O> zvZ2-|PhJ-nd$vys5QIacKU9%3nwadVA%l^tplP;fEKjy=l#0BKmVqQO=y$))o0Tc0j3{`qaxjlnao zI@<7KXg=g{b#qezsG53x@1O~4GOQ8s9XSOBbks+){Myv0K6dG*b2oC zK@rMHB=KGF!14u~j4Kv}hM_Z1P*7Z#m1Tl{2#XFRr>!?bP@JH{S!4l}9kIZ}TX0N( zLfG|ZuL#LdcksQbto-t$%rH4OcOdrfH3|x)iVsqCU098O(7U?2q!Z)&l+Dc<-@SWB zkN(vHzf=IN!Sg0=Fy*foy8x0GPL^_2phUCZ%Z!L-3ZVw{(JU~%jQ{Jm9*)m^Vj>ZC zd^u<&5|OoIH$g#L^_@y(6eI|Tqt@8(VsAeiw6(St|KWoe8#F0q=C;D2+E1V8;RGrI zW_wzhw?odMsRT-1l7&8CeIf>l2&m(#MY_L(kEWK#s+gA2;gje=w*hbgo45_IAb-f2 zUxUDbL!B|Qb>Y*lUAsnPuB_CmaZ{Kd`^IX?yLSQr+lU11dOs&JNRrUf{wiGhG;OK( zFhui42=5KwWg$+LMEW*F-GmBBz$8N-PsyX8q0vkD@Y4{(vFDX`Mh=biZ3}E15fEtM z=hZ4|+B-TxGWhe-`pMZ&_xMLI4p`jSlAHiM*l558yxD=jMfTXv-})AtBB!gXn?xW9 z^f@jr?s-az;*Bs1*&YFTXldOir`s@1)mCWadSJMfNX>2{QSj>VeSW?wPepD0M=WBc7D9TbQuHW z`jmlm6!-57>k<)R+JsS~XyTTa>6gx%KljMPCBNtYiBpy=?3=p#8h7L1)y|g$%wMth z*vUCmw7t9p5q#;9A9|^|*7QcQcVk`MwUd*Rn_OH4?=ww1 z1_p=$f+C<9{;66Jw`d8XL6jSy;e1|;8U*xWBv3!T_Vgf>)6(*K6afu7D1G#jJ_J;^ z%@GA3^s(O+rzLrLXxPMzV00i_viqbS3h+S> zzhzX7*4NiJUgt!`Yx?17dO9@$od^M5BszfSG+r|WD4ojBs6$nlf+^rn0uR^a9UZwg zn~$bltKgvnp>W?{)}c;NR%Ii5#wbm@@Fii-$nwX~kbKcF8=8VI4ciT}Sj88K6o9xGQZ?X9E*(BrVD|1Fy}Fv3nBa%1s@veKAm|t#c06VZQee7wd71-PVD8fsa++f1Uk*Wzp_ zHsj}&k&+#x=KHq(L*>aw3j!dqefV&0e`N$3I!SD!fD#crOF$H>b*&;yY~OD5Se1{h ziI-~h$nfiWDCeH!;!4{wJ%L7jcE0tbWV6_7slV%UD2Cah4$J=dM2PPfy5^cEEu^K@ zqO%4ZcGOXgcrPBiJ2`PLMUs$r0~TTC~^wIN%&*tx*2gFCh zV4`i$h7%*Z->A;<+UCb4Mzy4=p8P+t6pbZc=+1&=#vh-_zr8K_NzkFTB%RMnA&q+; z1UY+c&qp8%k46ZvvtxlmzOM`|;}&K7cVSDQ>btwU&rztpm2&XARMpixo?gL_Djs1^ z!3A`ok2n467ha9gGmtfHR!2+e9ZmrqCck#Mej=`E40>;+O z^u$!#+5)Kd?bfsZNd59qp>#o|a}`g^ZT^2r?Efw#RcHFiJogTe@ISrUjeHoJd%kV+sSA)#$- zjMvo6{r0s!R~Os^pZBtM2^Q(+Cu0MEc7%8Z#j%+{_>GB=FZ^lVzu)s{Ag61(IdCVf z^{i{*5vx&yE5l~%Wr$iED2F>>o7wbb3Wp8Y2xPdQ?mNJ~YjdmvmBQ+Hdkz*!(a0#> zP=d0<`_A^+;iOxQ`SwXzsV<&P5lkn-ZC778_Fr}a$q znBs)}!}3rj=(U9f1?V?!+!*cJ0`K4sXha}MfV5oWIwg^|W|7qw1waIhlft)e<1WNO zGDnzIZ0wG4R0QbkXRzSQsrx@I`7FEQu8lYO-mVbL&_HUzYh6ypkYlT~Hp~QNRygHA z9J~2lnQPwO-S2(#=4MhjnR%l(Zf?*nu88ya;3K<8@KKn@C1r1LHjzm5mGrKk=M37_ zZ&WwE~Sv4Of>licIK$qX995rTTHu?j0L%rhVu4 zSvSJO#$H%RlJ!yL`@%;6ZNX!)m*!<^YN%D?JT2%?RseiKnAxl)6_J#rgK{wb$=|DL zpw3~0{deG2Gm&cu?D*q9DO$4tBcKd;)0Jfrl9gpf+<042@i=oY_H~1m%6m2)o+r5C z1*m*L1BR8RZ6MHB9#x#NFiZIFvU$PN$`lXH4Hz|3x%~axbd}Wv_92}7{MWA|LYROC z*4T9WbYV6|y|f3h`~!F&pI$W2!r?}C@5--q;*_2U3~Zvj4zj_Gk%w5jT8n^gAu>!VvT!<_xqbrTM34N9NsHPOw&1R^Sk# zoBPdO)yS1;9@|=Nh+r&Bhsvm?t`7Jt39ySMMqENd*BhO}=PzIW@mX+jbL&p!HgrGP zeVDnKqM9l$+FQs0(zs(CEvxdg&p?dm-z+PF?Fo+YXYQR`=sVyyCxVy!wPL}^$q89- zI5;|)Dg;I`!dXqaL55&x4z3+E>l#jM_-MXV3z=pk+ec|XlyR}6bN!&0HF4>rsYxVr zJc~iAb(RyjDevhiaBd#6*;p{LK4Zr1P%F5vzq-zgcvV~?V6wnxjq;{7Kb({%M+8w2 ze1MN3U|+h}6LfX4kTWq}vqsD)E3j*k!q|(FOj|%-Cd$mp@&G|~{r5+5wIVWN*)zWL z#AUqZD_U2%X%n!Ztt^a^>J7t+WJ~$$@->j5flGQ)gecP5H|cXYL`A7Ub{9pCsPklf zg~}@z>zedNCUd8=HH%9HS6AMgCl~(6CK8P_WK{6p{d1RHP>`G@Ii}c#nK?jprHAQX z2eGVNg@Fw?58DR^kyEbSUGY>q0D3!Y1(>g2e;Sp%^8IG)_g6d}fPBX}mi~eD1bk+s zqH{`*Ps4EBnC$2oYD4GdBIR9aJnzRBPyr>Df7~F$vvYa3gZ7<*O7ChY+Nv5F>xakBo)I87+`iE;lh~IfihuFNu}&gE z_pW^{xW<|#3)*&vKWWT1Ij61#xaKcNmtIzcDwYJsgN6nrj2R9c=r*9FKm!H4>N8y0 zlt>l;IpCy1b(}S|het;$`uY@5T(@-e<6pj{__MSWc&9oQxJ0tlzmpT>026ssKpMe; zVgR3t7l%C%qmiB-@N(((WDub@budse!4jTcUJUJ6HS%`-(-O)1Shi0|;!J$VrK3&4 zc))1^PD6VW#Diz#fpOY9NM`}33V9?ww(a9JHZ^WDG7ZCphISaJy4M;<#yxqe^>P@=dR zwn0;6g~y9ec`NVqFDQWxW|*-OMa9KfPyS8LRD1qaD_QGq;cN0fJOh^vi{}I9+1xzr z{qEWUnRx%bMJuRSxF8xD)!0e%M`Jyo0R*&MOv*4+9;tx>HV;bYQgadGW{8g?35 z&k4h^i7ACB5VfG?@**(k;$+F_y?ruA5)0e?E;?T! z`FH+7(gsj!^tSlx?V{e-BymB7#;(bquYyp)_|a=R!YM{TP%s0?keKY#JCY%1J1Rj( zQ@+||Khnj$*hSo?pZ)ps$CZw-gO8fu8WW0B1jyXkGQpXZDa~^%sv&zodNH0_s@xd6 ztESfe_I}y#mVOWdbaZtUstW%X3mV_>=}qUyfUDn3$@u9kA{jB@@rpc_!aBW86sy)0xZ)LM{InmPAalQXp(Np^FZ>^KWXU@_?)Ld93MjAULXSe z`Wdiy=10%JaVFhVR8)d)t>+?p-?*#zsy^-FkyB7~emdLzo^1nSQ9H6&uBfD>=D;HX zlLptnqYN@Z=@T_J*fw>>42cbs8@(XlwZonheAJ)q5n$dl)sNidT`jFgGADn?`~UIN zCVH8cZ@`Fyas`gcat*Mp4}1NRD*=As1$oz>19-~UEj_iZFxJ%# zGi&mhD=o=U@b-S+;RZ}@=cx6PVQC;&1^I(tO^`hTt+TT*NoG~YTM4cJrF^^?3mOje z-Y}7#PP>Wj?j^(ge`m12YW(-?oG0F01*)HS0GJMh$pc50{VX&kU`4%9%*BV*Ux*R7 zzntIs_eqH*AGdpCc$kEoe8ffZHvlBaJZ(R@JbDs5&w}Gk$h-Avj|i-B$mq=LN2{U# zt!rpd>qI*1ibLH%3CVu{qp=%bu2pA)#6~cLOeC!9z&D}1tC6kmos%>+s$zeR> z3I^7`gaT_U!3zN1LrBC4Bza0$)??u92!)c|{LnFX1ey_VvmL1W9+24i^Y^b#M+&$H z2w58`(Yov_A-SfYtc-PWGVsJ2b`^5ix*0RA==X4w&vTrsx@71?jhhwn(WK^1foEAl zj-w9_!iRIZtiCT$*99++yJgeU%mZS3`upvui=BAZH-9xsntt@`vT|7`3_4vY>4hfM z`)6@c0Ae?5OP56pP@a3kuHvW1#o=iNhlI$~BDMMuRaoU&*fu4hr;v?<7@K6;z_j5(|KM16Af8*cEGWJ&AQS@MjVHnqQqBt5 zGaxz$aRa5GrGZzCZZu+_h(b#L3_?_G|? z2xJg=exwIQ?29K6E^dC$hr7u=w%+3Nu>l<;6q%KH;w7~b7hZT9l9TV`hnGm)>U0W~ zbtb|Gcc#mIvD{GIBYT1PIXSWrV0r-}RRaSaz^$ig79ljPmq1yY3D)3>I8J32*^j_7Nu9%_m7!W5>ba$y@ZDsfa} zl_}=;@85T(1Gnb#qZvKb-G71(c}}QR~Ti7g6u$AHh6_ z^E3;X`J-$3-!YtI%@P~%VmNH$YpH@}KVOkL`ICas%AAl>hla}-aM6&+lyV^{gcJ%I zt=yV$C@CmrL74mujd;u3O#Ovsu5=(JP(64UQ2$;!78e&=w}oAmZpqDZPXy?9>%lur zkPi@p!F?w9=!$z%qvRwXK=_ zPAbc8k1kU3efIg}baqKofQ%9gDcF!ZZP-koAqobH=;(|1psmt?b>m?_t(EgSV{!{?L;e*DdbkSyi3nq>A!hR|@c@tK*gm682O#skP9@LkPj!K~G+Wd;aj7x6DIM{xUY<$Q+K_0B5fn zAubQgH;wjYP(r(@)ZiDjAInsfAPcDL<(Tl&EoVj?l^Eb@`Ibfeb{MrF{ zaGjHLC17S)_>RTMb89}JMASe8 zqwe*I@;*|HvT{FMe{i;Sd2t&$7)BoV>}P;J**>!k(*gKdqHbSc-ImNB-3i+1qCy}! zxE1q&ZVm%ntsYsfy^D3%i3uTB!SnGb;$_{>CUhHg@S)BDy%Ito>Eux*q6$2RZp~JH zLsQKkya@BX{Nh7=eRKG2zTk{Fkfk9;@+t%#z}~BS`nJ40qQ@3}@SqxGA;_i(MG-R* z$;!&M(NQ5#a2rmCO=k=#C}dqwd9oXE5~=yo5!A4=&|PEMhW?D2Utv4@;NajGm{Hul zERi`Vh~|&|M_0U$*J}p`LBUE;R{V<&`quW*Q3-$5c$X!gT*-)h*^h#XiUh00 z_NZ0xu8@#mh&9cZl9}~9zt^V3M_+EY9HXy|Rds_IwF4TT|0tzvyBByNpc@eV7dCow z87Orys^=<-4ha+}Os1dwNFkaC)B&=f-H?pAo~mYc@yd$&40=1FmLontBO?(?Q{^6G zmo-0<%@fGr1CdlCOQf$fUljyMB&+*re^?zz(MD}~j2zYXuiw5YfJ9VR^h&L0^l5|{ zM350`tXnEYr2bF69k$DMJN|7;h#~sTMN$Q9l=_fYGD~>OV|syVcL_G782mRJlQ$Fr zC%bM+b%iebe&GGa6Vc?7=(aCMG5f^jkDh@;W-C zfZrUxguj0;)Y;Yb*l7-!NF)oQM#qxM&yzZmqS`6w0xjCr8)k95COsz&$>Y>V|&~tX%58A=imPt zH3tY^?3c*;pP?C7P=XDN$hoeq=RTV2jN>NEF z153+ULSg)m_+)6gRo36We*Fvy>unIh=4-kc|8@l$pkAcwxUN<2 zSobSm5yC%!u7*g{vct8ln87H>Wv3;E=n-;gPS>i!t*F1+3IM)QC>)Y29Qq95EvN)A z!2uEunD)gqHzBEpNSE?=cS>?Y@X*HCxLLrOzj^aB$hrg&VO@iKKVqF~WQ&pN=;(~q z%?W52=K0q%$Ce10ydlZ;x~Pk=_W|+6pvpV}>5M}Kcccp@f(oe~bst5v9~SL5-CjP5 zz$G{3&=<_=qqj*!gt(6%C*(b8$;rbZ6T-^FlVE2}600=zh4KOp2yDr@!5*NMNTvl$ zd~Ulfp&!!OwJqRX2}w!uFov=paS%U3kQXdlSeNyc4)4F% zw0xFm5DfqOUPsbP2o7#hvfwqmt1t-xao{MZ{RBu_6dbZ@Xf*b9#*iII3}A;iA^0vG z&>on{Vyj`($awg_pKu14jSZG=$WhbGM-A2vY}kQiWnemy0>~a59sRQ}{oK|GBtgg( z;1ChPK8?uDogq}OLsA?Jl0LI_W9A*uh8)hnCbRAUVnZB*v7OD3V3OA(a)zBx0hj>* zxDJUsSZ{=L>;O)-nRxfm57wa6%pLj%q)x<(y`hkO2sq$^!g2E;_4{9>7lRMEI=Fnf zlk~(A5P|-xw979c$b}lmT-;|Pn|o#Air^{We~tIe4kEu7_Stnn8{GNInl$Jx)DO|m z=NTEXpv(3Xln&WH&(79pZgPzv>fs}B7Rkb>@OjnLL(|M|l?_&I6g1l2EKy=yT-?#K zeQ11P4myF{b(Cbsk6~tAC8{*QNlK9w0nqzZe>-G&K2ceVM3z#7v2d&TKCi zCb57h4<7;cvPA=>1{?q&sfv&Q+IS9D8KS8|vw%6BnAWqux6?&jGCSNFTqd!g&qE`5 zJn1p9jDKw;UopBG&IttEBw3;joMJxIYjx6&+blc$SH1;)GiJdAuS@~mmAff18dNAQ)rzMK5E7t z+x~iG9;k{U+|gn`Dn6Pq00+1QlC^`p15hTYz$-QICk_q{)DU0#zAY<(A_BhOR&XaC z8eJT?wi+1%SD`9P0;oxT{`@I~LJ$Be77!(B#<&D-FocW%?Pcr*!y*tdO5uQn4|x^| zLToln(6%6lfW$rDzQqHE4KiVvV1g1$D8!xAiVC7wK{9Y8m&!kA?gBor4T7rW#;>~U zP)Hq?A(9coGlrf9f}WOF0|~!^D|5K0!_n0*_ChR>U;vg5@y(J0z)Upceu12Xzlg79r4ONDzrYLvBV0#uIL)@3filCfVN0%*oMQQ&(5t0XSj} zzyN|h_1}+8VId5w%)6jD4F3Mz`|%QpRA*e{DHJf4U;~f8GL_- zf?}YUuZ^Qt75S<0IFiXMwfQfVT>AXs=ncKEn1^X-@)9l$lS7aKgw_PWPMd2A7(o*A zZ8_ew5$$SZTav|F!l6NguxQ4yA3wk%8rE)@e%fcJ2<9tf-V*`yLy-nehE+u56=Ut= zwV&o6rOd&QhU6*IFrM=M`sB5w2^pDNCiNQCdk|SfYKj6J^~a1fP*Jc5sAqKos0{&5 z0C9lEB7sU|Rk_Y34&y$vO#N=7K}-JmQ4p%Ry3b1S4?v3FLV_s3g6AM2Kvw0tuyCrb z)4Xy|@h@jJ9{us5`zMoG6sFXSLk=ic4r;(8yzGuGgSkOOb2tGm%LAiPJFXq4MurFIq7U|&G!A`RTz=1@- z-poN}1Id2*E9vQ_gfqShZUJ-!^EC1hlY8Fy8b$%ZKRAj_9YuWJ`S{!ORZq^jRq%qz z$0(auJ1gNKK7$Dig{m>g)mek?ER+DLSPIY#l3%=NzbmuplHO;xKHW?QP9-2_m?ZrC zC^vX9`TGLctqE}NgPJLjq=NvOrXv|ZGoVkfu~}~1xC%Y!@!jayNE2vWV1C*YvF{op zb3PDX0}cw@7l)AWu{at8w)3D>ag!ZSKfTw`BuF%;=X5BOKU8V&qZOy!nc4Eft|@*~ zYP>OAeZ|`i@jVIYL@a;2y-zLTOud8!y!#DjfjR8=PIorY8X(OFiln)JG6Z>!j~9}l z;BOBq5(B08zrk${`vuW)6j+jHk^aUf$aeGg?QXEDV9-G;SEX>s5;Ss1BW)a<9zju0 z7jFO16Ut}PL~j$`iLe*R z9}031nXHb`s%IVbl*fGh_;I}Ti7bpnRQv5%V?U6C zbR7|sj7HG`5PmrFaosvXG*OVd`upYtlCkvf3?O$sn;<&Pr}JSW45J!$1 zNp~Z7e~|n@gad19YxiyjUvEijK7w$_WrMet55)apYR*fuicy}wOl8x~+#aaOxbB8TKUBzQrhW`Zs|RWPwxJiz=f zSh}!Dy|!7oWO8y+=fQ)!tRdSBOpqyg4k|yS^pKS|3$_-b^;j9cVfw-S3V4*A5CCiT z*+hI|TU$iL0rh`Y^%FvTw`b+yNF%ehz>qbulc9uVOZpN)OlDLF`ZTkM2qh9qR8`%+ zIYCFKq_Baj&IKC|EDi@2G2QIQy`9dv&)0Y${YvzOIY?rPp?PsD#S`Q_Fk7S8w@skr zLAvI5@q_~IM)t;x>T<0xKb)?R`p5t@+c?(;@rFH^IQ^Ne0ZW4Q)aRQJ;zlVhDgd|q!FntJ1U_YK~p_a(Q zj7XA5s_6nWF^k&cN22IT9Gcmdpw)Ntzvq~I{`|R2i5<*k<>!a`?82Z#qQsqBl#ry3 z!)pSzGsTFDjD&ppB!x(lzdv{|mIXYmq}d1f4$&d>!Bn-~%BIbEqbHD*eDQ(|i3rLA z7lSb}q*+6T%D=BLmay!HS~&K$bT)!UVS3R2JaY^$sOLS$7v^XphIYhF0od}4NtTgV zY8wrFv8m#b{zK{fiGGikQ|m??Ki-k$jlSu2C@U{j0r&&L;liFp7x8Rlda0WQF?MMSCX?QIzw1waLNpwvUGDLq$PsLukgOU7%Fz-N6t zRCL-;kRJH|whDkKm`#eJ@KregYnBwv9g2?EDi0+-=s^fl0nJ;Yb}&9(N&nrw zxF+UM(@<(Xh)`dHAA|XlyzqFVTgvb-!DfKRh?S~#6-KrHH_r^eHk&6w)Un?U&IBJ| z7FRRki6aQC#I3J8zkK;}(5uH*z;PK;;9ebSFD9<*7$Qs(FY`|3JrJyU8d z{JA;k;5NLzx!V1V1_Kmk>v1P8AFDOi2@u_2q@>U>X=AcsVXdn5i<$3Kr0=wUH|w<& zXhEn?kTroSm%Rn!NeR^%&z}!g%&r0O1sz$lmWX7^3A6>M$NiXAk`zUu8Jq;aUbC55P_%=)pt>g?l8y@JEzJKKX3$}V`X)Nt^=jl&0C7P&$ni?d^ z4xa<%7Q`f421xe&vJsAh1_2@))N>ucD-aUJmYfF?!*=5aGqhIF{5k;f#zXb80Xk*A zB?T@wWU3HNqg#?2z5_H&g`l7_VI6t+Trh`W$aio#y>q~*WJDZCe%uo?gd?TLmZ)uI z;-v%x)!@wmvWO;upv5HF3o)3eb`!h*-R+vW4u1teb~(d#VUa18T5|wKJjNA2^F!hJ z!JX?EN@@KJvo+Jew3uvg>ju@d6n6=fin!`(z5w%i3OT$7Tady4O#&Gz*M*r4C^Qhk z3y_A%a>yqmXqNZJh7M)}%)sl|r+`bg>%c1OqU zFS6-__uR%!1JxZj;_L!-#|M@?3_4rFdTa}HC!km~`mi@pl9PAr%sq~TKn=XA0l?@2 zu)S!=>w%5G;y;0U4|A+vmUjVYLmILqJUTj>m7jmeskm4v-2fasxI~z=kyOnEIt!{I zDLFX?Ob5=+&bm%0LBtv|m1&ieqPOhEMzzzeP!22k}u$GXvS{bf|O zBzCCLt>WD)3Z)aHnYpi0l?L`fP?gyMi_u3J;tLr10qKw(}dp144qa#hNIP z8W)D7`85nbZ36gT-Tv$wFk1);2ADP=yFfMo@t~2&DHMnd4WC+@#~32_4 zW|~0>kS-Y^*t6)yVVQGrc2AraExN__$d5Fbe^atbXRy__*p=fwPCWj@cb$<>BEG znw(yHws8qgpyH4s@Lv4W`V!82;tD4z^+(BNI2#Zc%Lgn430NUXHlUsg5XtS^T2DAQ zL~MxfJPp8Vt|3#M(nr5B0NinvvgZekN8R`{F|id-xC<6}(un?BfsAM5&vG#HmsGy5 zC*pq4y*s6J^xtMfvM$QxCc&&icvzU2+D)s-7$==7H9k%^L z>M9{2G76m#l5bGI@|6LE!RYSra9ll2Z+^|7!$Ld zt(ig)0x-(n(NO^eL`Y4EJ5tMl+zWlhJ{l&|);x|Mpcj;}x1Gf(qUD!VURSCZf1!8C zZM6l`U}Cda5BXnS)g`vodgwQq;TcbE!@R2ZihNw{mACLn^oljwKwd=DjE1dlJ-*&2 zUg9;Sb=(qtL~;YuWLZHF%thu1A+`ed4qFP0Mds6kHI=Ff@?W>uhA7GY_y>fb@s`#N z)j&3s4-&+9Bq*Q@a-;+>pq(~Zj_E1=WENs-$oPOCa1E2 zq^;nM7odu~x0;3wJ&~@K4=c1H1@s9A1Cj!Eu>Y!g#;=Y6l;Y zexsz?y~C4Iy`D#IgJ!w|7L@+#nNxZJTRf%0O(DP>+r1?qK!>~>03x?Y@VJettEC4T zVWXzqqo%F(^-g3A20VzgrDGm=naM25cX|$!Vborz`4u6W84d5|r#($X1x8+k;M%ky z0-GC3^Rl-DHn*@Ygm3BB2b<_-$1O*kM2hT297Iy#mk@J~-4kUh$Elb+2h;H<+0V5< zcXvlC-j983=l$4vC4@kCE%@+K(5L$S7~aS^6TtZANT9v(hMe3FXPqK z!fEpM@lk;A9ypUo+_z{rDA41hsb-=1G!AMJ6q9xk3=z${@X6%`U?x|w4=;=X)*cm& z7?h>z-v8g5TpAxPsgkW)g0=d-gM5m6s4L(F+B%>hv7qB>lWsLOGEB(bnXzXugJ~UG zVbZ_?fD};(VU!oZ`J2qAn9o>U{hg(6Urr!v&_MoBP$O+hh;%)fM^c(dJn?C>hLzh1 zqY}t<$cuw0d5j}mChN^=9}+Mr1@I`9M6&&e&}5Pgp+~|!aHJ71=(}kO)XuBG`o)*; zEtF5@=f;krG;0S|`gf*&G&O0sV?FW?0QI*0?iYyjLTp<_ppOW5f%7YxoZSl~EGhd0 zd6|IFF6&2~!+U}nhGNEK0qi$#;y@0$K!MJX%n7!TUhumyMa2`k-+<&fG5I4ISU6zG+r*0n^IY!ndf1uQ?Z#Y@X8kb)oBxuif7v+@xv|&P2|R= zr~7wCt^bh# zky3Xg;I(BOgD#CERdRxM??Rqpv$0vu=Ml4@Ea^NlBYn4mqtFH>Bw;);0pN-l&YR!T z#2tLk;q4AYM2k2mpmEKsQb;-}To^=jd9Qn)hf3SV#?r8!Qx%M`-Abye+IpN~L3#W9={}{>wJu&!ixw}4={1`V z=+KbPG0FA|HnHA?QnVgg9R+YS@z*nIEz{ey8wBvy9|&HiYVP5~oxAvoqsk4+uCI|c zrnMB0D6~FK)5Ncl*4=XKS`+d+%e~m=Kw_^AzdiAhEHD9$04D6p{;>6l=Wo1Jb)64a zpuX7kWk!OUQX=Y6(Z**sXMg&(jV?hMer_b+917e-W<}gyRLVJsWi|FgEWaO*nZYYS z3Kbiv+wD~u*%iu8ba?N2h%`wSj;z~^kFo9l%J9x~Lu>D!>LlXZ;wsT|yNYVXLQ3Y! zb(E`%OC-$e6lH-8qCeboh{@tKVljN{Hw>2}am?vY{z#8H72>vWlOI)5O8?3z^jLyH zSfaG7tOE>m-1si^BHdVczC&z2uLS}7s^#ON*!45bYy~C=oouG`5RVyo2LTAeNmubH z&sHUZ8-^VO;%cQs$D^1*!(3GI6ccy)1Gyroi$p@%1USw7Ww#(%qpTcdLI!SCjG;wv zYOyJb-v$e^Fthu9Xdo)KpPlRldb{}q8V>s$X1>B?|AT$?PxvRndSfknTs`1u$koF{ z03w3AF56lI)#fbP1Pk)l3v@JObOxp;z>b9(@i>4IN54dxL=UEPY_$eUO7ERquf@xs zdtE)^)@W=9FP}Of4OF&j`j)IvaIab&^feG3`613Mb$Pb;;rwv2^t9cs*5g*<*Onps zKd-Mo9MQQr-_4c3MX7f#p;JbBKdWKA4Y(sDVVmdGgMi;ctoen67|HgSj{+BijLhjW zE0V0t{^K3ND9H_T#Lnd?7%i60GT+1a4zCD9-nIk*+fFdg5NB5`!r+j?*{nj6|KllF zI--|Be(n+K7|OOE7)#smk_ajgrDGESCFiiNq2^gm2lgIkD7kH=Y-7McXi^*l?bVfug;|g zW&F^n5OZJq1H4PkZ8bFTN)OVeJm!_6ZzHL9VC4UApyiPg76l5x!R&K$ESVQ%tJ&25 zv)T9K5jXGvyH{)O-Cc14xCGb>Sl9yF=Af+#{dr};CEmbYHA|15+?8JfT-exmWWH`b zaM)WWK3CD}G#h8#`D@&(uV(%E_kBNTE%d(+?e+=4<#l)6?kHRfKaxH}c3wKLM$NOm z4s^>#;Q2s3lE%jln_t?lpg1kQ^66ANPV1Vrj=9S-kN*FkY!6&`2^y>e0^p#>;Vx0_ z0AP;_xR(WVR0gooE%V(hDd0hti>h&J+I&x_ubs+?kNq}HVzI^SvmC%xjPC!>P5Yxg)ypy5YoW!>n$tSX z2Z2jfSb&YWxz^>2fIAO?86C8@hne5zfaUyvcHnthO$#g2&dhk&d)*^(^G%l4m^X*k zKUP;47s|0by8#h*bILOW#TKn$B{GST{-)|L~u~Q`H>`Y^J;NI^U zR;5~Id3QiNEB%^HC3vyT>utx^QN0PIsFG7VKA@qnIvfZ-Nr@+ zbaET8eWCed!4o-P!~jp^y7{*BCTQCSaD~l-fb;v?fMrwY=?$_xKbmKmPm_GV|37H5 z;&~i!DDL^KH`NLJHAiy308>0@(+nsb0J|&O&R_9(x6j_pI+=U-k0#x12Hm5vcvloSV0KuStVfx!{UA*8!w=nxQ)5D=8EpGpXlqr(6W-3>$M z(A_Zu3~`Tt!2NXZhkf?5pJ$(a*4b;l?|RpY)`Y&IBx4~XA|j$xQ&rXi<^y2(k&*z< z^+z3OVB&(Sz~I`hHgF$v4{IW2KNoXndru8>iwAB_u5eQiYfmpHxTlbt-%>>-1+e{& zo2r2)5fQcdzj5QIe4#xN5&gQFvVx9p)=qYSrq0@Ihy0@nT3A<%F%w@S+4r~%Wetlz zuRRY+pYd)Ofk)eY9A0m+K0j)Qj+$7M6{NbOHJn8=gmu59TRmGAv9z$Da~x*=p(or9 zp=n|eK?pI0c810Ow@v8qr&`;Nvo`RS+9&jGf6992Js=s_k4LTf1rN|KdDIw_hMB=4 zRR|!E!a6Hw|X8o=W~7w?)U{ z?kE!nKr+u=W2J;+Y&l7T_-rc5rAryaX*hqI>5w?n#iE-v%?H&44#||_6u8`7S9a`v zZk*VDQtjJ4*&|haZ+W`c`mLLF+VJ)Z+Z}_32KrPn=p`QccB6Jp+0OhwGrQ=ZJ2UW= z=R{pxABp|_ERD8w?4=!@iHs4GH|$D_EOoq5Kh^ZeiQEnJPSQA$dUlBhQR0!w6WV4f zCWGW9$*A9B?L3*;V=O*o61rl;@Tz#`FkP%SX|~`Q?g-oeOzz6P;oF zVj)4tkHMWG21EBqAYGyTN31R_l1E~_XV(nkM3WxTY0eydneXb=W9`v<5Mnal^HFZ` zV(!N?T`|x79{+6gSh!?x?V?FWa80C2Ce`7|&<~#}NgK^-;S=Fl`U>bXSCzI-|3OZCk7$7&{ccR;N^ z;_KUuR@=Cx!*2=jwLyabJqD>NB$UtNl~P=kz%eWF^Jv*ydds?b-Szg|Qmekaw!H2q z*z%J{Zn&WVsk1I2@13bOgmq7vxN`<}K+a>CbZe~CvOh~o=6wA}7W~i6bMnY1+=&sY zqGmk1YG!T_<1~BD9~*b$$5C2U8=jA+pA*4v5<6`c+qA_nz)JPl-(R>}SXlVW+)nLj zgFLAV@3UE&)j` z--)h3WyPLax@#kKV;0c7r6ql0GKxXmufiJmhL-A0;=4>t!x&7nSJ#B#Y6<)<$6IE0?d_2!;I2&)`7Eygn9%R|b zU0K*DhBY>Sqe8sL_V-0Zi<)N;Yv0N4xE1zU(%1f2NfWI4ic97=b4AJ?hi~Q`dfsC- zvykv`5E&WS>F9yajq1SlA0d78Ij0aSw?YK>Z<@!%iWa6f!5h=Y*vOsg4~(z*vn}I0 zbnA0BWmmS#T&YjzqkVEvv~7iVZfnbBfh4`lSf!jwnMmk$njLEY)$v+qJc zL}R7BLy1kF>-ZV%ByVmVVP0$WYb*lD^4&R_V#hWV7snhdb$nbg?nvNxW1UYh23#)L zfVV5hFo)3_BpIwzzRliV;NQ=QA$fcs>eRvZXA128{CN0&srK%|T$WXBKl^w8H#Oq~ zzZ49Su&^)%D`Sr1XoYzTIY$mycrV~iDfIJ~jzzJ^Vrp=MM}>lNtg zeEn_tvF_8t%rxE4>gsDMPGa>C%(A;p0kL@8yijUvSy@>{p1Zz2(^Te}x;{O;XDahq zWTQ_h@sM_nU=lUk_moz{Q0#RD#`gSinn=kfC?xOcaQN1#Nk(zTWxcrVm~u&m@Dds= z1K^}3{0{wjV83mD)gvSLU-EkX z#Z4t2e#%{p?q8OVd;o!Zu6mIZI=K?|+gV-17kbS*;@M;__FFaw*6_7P%*e~O`gOJ4 z92ajD@}1XJ^)lgCJdf4>@iGun3yrB%(4EI8{`E@}dK`jb8+qyUH5t~Fk|lRjt$Faa zdNJP96YsG7?flfkT7iYb5IqPTdaj}$c)bD%$CR$N04CoZIPxJfi4af+SeA& zWDP#sVX2L{1pT8xclNfnwi1&%mcO(8CtKr{(>uT-V{y@9j6-ICobpv*eM8cqFuko7 zOhiexKJd&VCkQtwmrW2IkZCzw>GA4FI(iu(cy~}A0NY51rc#p3GtTEbm^sYL;pDAA zt=U#nQ>o&VA;2TfJ$rjzvGcaqzmu4cmE>6E&bWYcZ<-Ni>79I6Ktw6J3Bth_zA>?} z0YP(9B%~1$qKM9Pu^~s=x)iv3>IMu!aVHb)eeYv7|wsE;5YAO!7-u5`wJGj~vkD7^Ucdn1r z9IF?@PquO({j9U#P(rgN)b@nP0+S-%*XHw7s^c%c^VW`U7AkEvBH?5Ir0;|dyWyV^BupX03u|41pCk#Pr?50Ij z*MK%@5AzPK72oYsBbk@T9o1auw7E=JlyYC7i=e(Td7l%Zq9fyn1F62HRm98(;-zc;JIO0UMT zBjfPEi^rMl@00Sc-3D+7-d5quv1dTAisG({I*ZGRE$IM>v{}X$ zJx5Dz3x*xM*d2(e@wHsQ(-uwEy0^zivWOUNtvh&--vy*pxof`v8!2mv_Ov7VS5Ix{ zKrgKex3o}v_P1j`b7BX%7S(|KX>pmrTe+)xY6MCZ%IHPaqiA9~j=DL#fs~!}+A zp-t~2;bzIUb?Te66p7!Ek$J)yHkhj{6a8+5Aa&%xFEswz+?93)Wet|zLu!5X&`pi3 z_fFKr8Den4U|6BmPx3=+>@&I-vwK|}-2}g2lf0o|EK?*2ZL(w)lB%PSFtOi#=TJ|U z5yz+i%~{&Zo$$5u7Ra-)bhU4>fa>HU(&*JTw&%3kEFw>^YGHfaL(CG9sBTu+N#V{m zc)Cw+M)0%5o9yoOKg#U2g4zr$=zJVf$?}a|8#U8Hbx3DKBMdM$nX*2av1u(Qplo2T z#elmB~he@`MqH z{5?+pB&{yLPqqXEe+GB;B5S1IDnie5qr9JB&*v0#$_WVr?`ShqXM5MZOn>e9Iq35X zda1}rN^`tO?Iv5GF^X-V9J$Te6!Qe}F*i!$1-F5qgSO)PKcw-{tt+k}amuW}d*c_u z%hX*pdv|uBan_ejM>mYvuY-d@0MTyA^_Wy;;^j;7iu=|2B=q3~#j_u^D~LBWO5ZlR zPd<0!Lc;;$_LNBDqF(>qw)^>3;(_$x2xL>yXTgrv_yi|)GLgZQYq9ak_(b$Z@X;iX z__e!Ir(lA->0kZvEOUN19|G5||MZwA8A-9MOeK*tBTHY&&7PQ18sEUX7N?hhN2=_f zp^jgl#ptk6is=}OeyLpd(w)~dVo#O(Tp}$IFzMoTZkKmY{U&h|MuFzQ05?-Zki^CBE?dI)y8O8IYT=93>@S;}=|RqZfw+$IGfdx!vxC7bmOJ5onOx*! zPQ-i8V4w4;pYTOQ$ug6{WRT@(9J9r#(}Ma{@DCNYz6`M&Mj+F`0~Hb5%Q47Hh&r;sa72DZ=bi|v+XUKuwBX_=U?io_*3Xii!mLAfyTvR; ze|g)KQ>aoru486NP7hwiGcWQd*_my5d?Yc9(4H(c8$LVW_-ixkK4D(_WbMkq59GUE zrO_C)K>D?_E*&BDnda=1!iaZ>TcPl$n%iWd%d#u?N497FYa5$W)7BNOSt0Oe9V*Sj zD)?^K!`G|AHgez5{=J_5%AgeTS*xZ2#CYQ))!Rgvnq_Gx*;%kw&4v>>ll<(f?$-3p z=9@XbE+5D)|AH+>;|ik9TwUxpexW&w{-Z&19f|Aq$;VTZ9L+zFyzawQdmE`dt3?Dt1N?{y1$`sWlEZO1TEjikJq$wbS-jcm%l zRPluht}35AByFPcif%%60>bMDV)$P*+Fb%vO)1S9^gh^(Z<+H8u~$-{=dLWGC-`?}m5+`3Ud!a_*pLip?v%B~!834-*UyH|pjkKD}@)v850V(k{ z#eXm2K1F_hep;W6jlg894~J1N=3Wf|H0b0l+XV6(AUYULvw|{8e1~%Cukea_5eh4X#sS+N){c%3Ef6JNrS;$~VF zfYeawEdY-zCBZ<9&0Qf7i(5Mm$?ATTbF67?Rb#@y4;kDl0thiTvk+?il?Mw>_Dn^$ zZC+=yYV|B-h&lRl)+HJV>+x%Jw{+b!uy;zl+Rbuw-fVAja@3vqlJo zY;4K))PD>$%?qvGGYi_wo2hG+qL_80 z@tp%LEQ&kwGjm`pg-d#}*0d=9zglSZT)bY+UxyFD-_jk{vAU1q*O#oYle*nda(jmG zlp&?}!O~FMW*ibo{{Va3m`BEZECiek^ar?v*HuXBddUnEfi3|)t(&^P-?r=6sX^k` zU3UP<%d;?eqy8Pio8&{ynsne(i1mxq|8Obd-9pvlO~u8Y#UjMTg9Q}e9|C7-!>=7; zEfpfWwnSxb;q>KV(TaJ(d95^($+9YX7+tVvb?W%gZc`q^y;^IWamJYbc???d&(o6D zc|j3)PYJ`l!7hq(k$alcWDH?~*(xRvrlC11ASrDn#=%-cyYwFy0F6K*H5I6GnW9cy; literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/fields/vorticity/cfd-reverse-s5p2.png b/src/steady_pinball_theory/figures/fields/vorticity/cfd-reverse-s5p2.png new file mode 100644 index 0000000000000000000000000000000000000000..d86cbf0bb766d5bfb1515ae2d1e16a8951b2cf76 GIT binary patch literal 6395 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 JPDHLkV1lb!@Lm7_ literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/fields/vorticity/cfd-stationary.png b/src/steady_pinball_theory/figures/fields/vorticity/cfd-stationary.png new file mode 100644 index 0000000000000000000000000000000000000000..2fdd60e5d2263cb471f1f193dc035bbf201e8ebf GIT binary patch literal 5777 zcmV;C7H;W@P)EVE^v9{u(1pP000SaNLh0L01sgR01sgS zs6VG^000&gNkleQZ?MnTLM^7#4qKG6dV$sCLFS29*K{BulqyvPw`yMHX!c zj#=donxHCVg*Gd*yGq(Z(r&Y|64;HJ0zy!TlrF&tw0taNgQ_-cC|Mf@Lfj42*5E8qH6KRE{?D2!JY6yubVnZX; zY_<(FC2q=}?XR5@A+Zh2h-*ezCxfl~>$|oet3}lV)2Sa*;66fPlNgDsC#@M--H_64 zg!FtMB-TMsTrFv}gta4SXK%vtWAvykE24TlJ%r%w5E3h}Dz2KeTEfzn(k>LRvpZ@C34nBVk`0zafx6=)V;hgH9?C$kxeX-8my z%|e(QKP`%Rol0s|9mo+ zMBd+B=)qub0`XXfV|js0fvw7GS6W^q^$I5f^CmCB%G5fmBsLR$Pqz1?y(fXl#U8}Y zo}l*Ja)FidYKd!B+FX}Zi)@rvj#-hjW;(4DSb4ih9({j*tcBY15_!#tt0!%?i%NSc zZAV}~h^vN?$iA1@?6vRF^EaqPUo~-+(rO9oR93Sx@RH&wS!w7Gd4Gb@ ze!l%_*zoW$UV7;z?EBe20szK}%K#ulX05-)E`E`kCOk}+?Z|2ct7AiN9B`F(sl3)y z$}68L%aND$-Rc`kyA^cygV%8A&>=?x13*DR0qX1P@%uaZ_-6iu6eIoJnj&ir1S@Z# za!}flS}6sOQhP0~+tM06pV62gf1}#_&rKwj3#=xuyhKosU|EqQaea9aN-rP5^Uptz zxpU__KF2FpuHfLogLtFyX#f+^SdLy~*1~SYcI&<)3wXFC#9CZ4m>mo9_ulhJteie8 z^PB-ll}5lsZLeCz5J}9aFE7FmmR8}LcdlUV;ZDq%Gl$B#&Y3d@9UUD2p4R-Gk^XM! z-)4m-gUPDQ@`3C`Xf>f|i%lzg%89&gNGpH8<=FW!2hz_`Z#;yiPnOOW2PMS2y)U7FkRiW+54Cqg{?7&mL zvDe~iiE8&Tv_9O)>*A@zvB9AfYHMq8_3BkB3tLyOUPWDv_Ab;Y@l`FA-|9-sr=9`Ys z{iBaQ!m3rP(x%Z`Oo{hW6B%$GmF3X5ZRPYionl8`C*qoU&y6serOB}(vnP>w;O;&A z=Gp*0__#w=V7(H-M}GWqMoFOjmJ-Pv%Bu`xd1(Q*E%+M@HaspJ$1cOe!)R}BPrFBK zgptTrp%s;t(5jDhJH3&mxHP0SI;NSiVMb=A63eI2N6+8TED>yIXh7316Hh9ftyuJ(bYGUQJfze971_z4XT&TL-;};c0aZn6+d|yEiEl* zXlSr}&Mhr12nK_gd-XU_soq<9G}>iLWV^T(m3e`Myk3Z_g_DI*IyX=)a`gO-j1s{_ zB7uGT_UYF60>F|bOR#U>J|q$eME`5M=4$a+aT!X&6(iac#m~~{AieRDiWrdOcZt2Sm%G-lHVdmVFe=D;{ zEWf2B&wbvs>S4({SOl?b*U!*3sW62L?|oPoRdP%*0t$;vRQm&H;Ky3mKN zEeBBY;oDfVW{qxBfMha>wzf8G-MSUeKKm?Io;ia=T}VpwC<#{pNC};%5t&)y=cw%D zLx^S69gTKb`hBOfGAnmEm`|s>zrLGMB50?^7XTU>8qn0#gnxTx8eaduKT8!(B-<#j zvIZsL2twVxsOuU;WOx++`{EDr^ZqvM-n|>|yz>q!Dk?JC^Tc8?Jo3mRc>n$P@uP

F;J&06`-0&NJQE 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 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/fields/vorticity/mfs-gopt.png b/src/steady_pinball_theory/figures/fields/vorticity/mfs-gopt.png new file mode 100644 index 0000000000000000000000000000000000000000..2bed4d3e3f0f09e41f046a577d14302f8e0346aa GIT binary patch literal 1415 zcmeAS@N?(olHy`uVBq!ia0vp^AAz`%gAGW&&^W#aNGX@NMwA5SrHMR9+b%@Cb>ZG>bS+9FtSL|Y zW9SZnlX(*}E_iWo6)?PQwSC8(?t-03W#`|`yg&1K@b2Tu9}Ui&`(v|Gqf3d=VD-uG zYz$Z0Iv5{!NEr0di+VTpJ@1dQ+S;{6JJ)zET{LZ)*w?RLS8m>X`TMp8ac|c^k)QWm z7T>*hFRQvbT3ube>i4&`zkdJz`s}Qb+Z{5Cq`QpWi&z?Oqv9S2D-#%JLZ0p923(wED&(6y7S{bsc(V8_*&rr}ka7k+` z>)z_`e#XYe`dvm{O1ZhYFaP|BdHwozOHYKC&k=2H?N@K#UcGVShJ5|D0F4)K-uQHP zcbDFf44CawV;!p_R$5;lA9`StiJjfL-Mg(tyIqf4GiOcj(EfPjNK09H`PDmjV!ldE z^>V#@`LdOTMZpf^1!V{0JH3}qva9(K5PV?Ll}ncv-Mbez)l1dgn)wcg-J|vK`?Hdg z4xNmeJbAK}jZMiWu?Jos1poi~>OIrv*vY7wK5psh>3-LkVmR#{g=j5Zre8J|6`4*Z+@OzI?ggH7i@&P=Eja$y*u1 zoBAtCO0L}8eE09)+TNZXi%9MQ)oqJA*1554zPaYwwQK)kmq!5|ZeRZ|#BBE3D&7Th zNnekJ?R8`6KDvmHkMGOV)6-XdH#0Y1e)8nWboKcR@=1b)%5E&-VPR8FrU1j^-|^qc z3`~X3Y#+Jxa{T*Ty=(VwQ)}zrkIv`h<-L0Js439p$h7bJ+rq-bO>J!cJle2ifBb_P zbLU>YaA5+__P9SYzkV%UdO7oH(av=BNsBZtef+qwXy=?uFHIPgukDHJti8MX9x!F3 zr@PsIgnWZQHh0-`Px>u6H~(P^u^{UJOiO_xIPo{`&g* ztJklC-QC@<{$`Xqds}%~RS!ql=O4=#FLs`9SGy{czrp|ByG}_#mOCHB43(Q2r0*%E zxd;>-{;jOWu=OK~Q1p==4yL?{YCoCjf{uQ!Ev22cZzlx{3Ua*<_UV-od=lc)a-#Z3 zuN0Vd>US|H9L%zw2xgeP4}Y}$m8sH+{m&gwB#C|u)^lfhZ19QWig(Wc+e=pq9^BDm z!}Rsh-+4RkNmRPLXzHIa(H#`Al3Pk zdn3Bu?!LUPP)o^aYKQj5BP%;N!jsk=@dpV^I?*xzQHV>#^dB9JuZ4>Jd0M*YRYV|_ cMgN$j-yQjMYNMA4u&8A4boFyt=akR{0Fi{7EdT%j literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/fields/vorticity/mfs-zero.png b/src/steady_pinball_theory/figures/fields/vorticity/mfs-zero.png new file mode 100644 index 0000000000000000000000000000000000000000..2bed4d3e3f0f09e41f046a577d14302f8e0346aa GIT binary patch literal 1415 zcmeAS@N?(olHy`uVBq!ia0vp^AAz`%gAGW&&^W#aNGX@NMwA5SrHMR9+b%@Cb>ZG>bS+9FtSL|Y zW9SZnlX(*}E_iWo6)?PQwSC8(?t-03W#`|`yg&1K@b2Tu9}Ui&`(v|Gqf3d=VD-uG zYz$Z0Iv5{!NEr0di+VTpJ@1dQ+S;{6JJ)zET{LZ)*w?RLS8m>X`TMp8ac|c^k)QWm z7T>*hFRQvbT3ube>i4&`zkdJz`s}Qb+Z{5Cq`QpWi&z?Oqv9S2D-#%JLZ0p923(wED&(6y7S{bsc(V8_*&rr}ka7k+` z>)z_`e#XYe`dvm{O1ZhYFaP|BdHwozOHYKC&k=2H?N@K#UcGVShJ5|D0F4)K-uQHP zcbDFf44CawV;!p_R$5;lA9`StiJjfL-Mg(tyIqf4GiOcj(EfPjNK09H`PDmjV!ldE z^>V#@`LdOTMZpf^1!V{0JH3}qva9(K5PV?Ll}ncv-Mbez)l1dgn)wcg-J|vK`?Hdg z4xNmeJbAK}jZMiWu?Jos1poi~>OIrv*vY7wK5psh>3-LkVmR#{g=j5Zre8J|6`4*Z+@OzI?ggH7i@&P=Eja$y*u1 zoBAtCO0L}8eE09)+TNZXi%9MQ)oqJA*1554zPaYwwQK)kmq!5|ZeRZ|#BBE3D&7Th zNnekJ?R8`6KDvmHkMGOV)6-XdH#0Y1e)8nWboKcR@=1b)%5E&-VPR8FrU1j^-|^qc z3`~X3Y#+Jxa{T*Ty=(VwQ)}zrkIv`h<-L0Js439p$h7bJ+rq-bO>J!cJle2ifBb_P zbLU>YaA5+__P9SYzkV%UdO7oH(av=BNsBZtef+qwXy=?uFHIPgukDHJti8MX9x!F3 zr@PsIgnWZQHh0-`Px>u6H~(P^u^{UJOiO_xIPo{`&g* ztJklC-QC@<{$`Xqds}%~RS!ql=O4=#FLs`9SGy{czrp|ByG}_#mOCHB43(Q2r0*%E zxd;>-{;jOWu=OK~Q1p==4yL?{YCoCjf{uQ!Ev22cZzlx{3Ua*<_UV-od=lc)a-#Z3 zuN0Vd>US|H9L%zw2xgeP4}Y}$m8sH+{m&gwB#C|u)^lfhZ19QWig(Wc+e=pq9^BDm z!}Rsh-+4RkNmRPLXzHIa(H#`Al3Pk zdn3Bu?!LUPP)o^aYKQj5BP%;N!jsk=@dpV^I?*xzQHV>#^dB9JuZ4>Jd0M*YRYV|_ cMgN$j-yQjMYNMA4u&8A4boFyt=akR{0Fi{7EdT%j literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/manifest.json b/src/steady_pinball_theory/figures/manifest.json new file mode 100644 index 0000000..b9e931c --- /dev/null +++ b/src/steady_pinball_theory/figures/manifest.json @@ -0,0 +1,627 @@ +{ + "cases": [ + { + "case": "mfs-zero", + "error_scale_family": "potential", + "family": "potential", + "label": "potential MFS, zero circulation", + "parameter": 0.0, + "parameter_name": "g", + "source_sha256": "10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c" + }, + { + "case": "mfs-gopt", + "error_scale_family": "potential", + "family": "potential", + "label": "potential favorable g_opt", + "parameter": 6.1479442395622, + "parameter_name": "g", + "source_sha256": "10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c" + }, + { + "case": "mfs-gfit", + "error_scale_family": "potential", + "family": "potential", + "label": "potential finite-Re fitted g", + "parameter": -12.200554143243473, + "parameter_name": "g", + "source_sha256": "10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c" + }, + { + "case": "cfd-stationary", + "error_scale_family": "CFD", + "family": "CFD", + "label": "stationary CFD (unsteady reference)", + "parameter": null, + "parameter_name": "s", + "source_sha256": "c2edc9e4173fb6bbde7937314e4984c1c501de75f0dd4916b67aa68388dde8f3" + }, + { + "case": "cfd-accepted-s3p55", + "error_scale_family": "CFD", + "family": "CFD", + "label": "accepted CFD, s=3.55", + "parameter": 3.55, + "parameter_name": "s", + "source_sha256": "b6c70b76c7cf2a2e4330b27fb0d4e82a914b40fde8171076704e825a79ac72db" + }, + { + "case": "cfd-reverse-s5p2", + "error_scale_family": "CFD", + "family": "CFD", + "label": "stable reverse CFD, s=5.2", + "parameter": 5.2, + "parameter_name": "s", + "source_sha256": "760c1e84dd9b7784151ed180d3f16d17619465a08ddb767ce23a87517cc28ec3" + } + ], + "colormaps": { + "error": { + "bins": 12, + "clipping": "end bins; raw values retained", + "comparison_warning": "grayscale values compare only within the named family scale", + "family_scales": { + "CFD": { + "colorbars": [ + "colorbars/error_cfd_horizontal.png", + "colorbars/error_cfd_vertical.png" + ], + "edges": [ + 0.0, + 0.12005821863810222, + 0.24011643727620444, + 0.36017465591430664, + 0.4802328745524089, + 0.6002910931905111, + 0.7203493118286133, + 0.8404075304667156, + 0.9604657491048177, + 1.08052396774292, + 1.2005821863810222, + 1.3206404050191245, + 1.4406986236572266 + ], + "limit_statistic": "family-pooled 97.5 percentile", + "limits": [ + 0, + 1.4406986236572266 + ] + }, + "potential": { + "colorbars": [ + "colorbars/error_potential_horizontal.png", + "colorbars/error_potential_vertical.png" + ], + "edges": [ + 0.0, + 0.09432738918981097, + 0.18865477837962194, + 0.2829821675694329, + 0.3773095567592439, + 0.47163694594905486, + 0.5659643351388658, + 0.6602917243286768, + 0.7546191135184878, + 0.8489465027082987, + 0.9432738918981097, + 1.0376012810879207, + 1.1319286702777316 + ], + "limit_statistic": "family-pooled 97.5 percentile", + "limits": [ + 0, + 1.1319286702777316 + ] + } + }, + "name": "Greys" + }, + "vorticity": { + "bins": 21, + "center_bin": "white", + "clipping": "end bins; raw values retained", + "edges": [ + -2.374693971069057, + -2.1485326404910516, + -1.922371309913046, + -1.6962099793350407, + -1.4700486487570352, + -1.2438873181790298, + -1.0177259876010245, + -0.791564657023019, + -0.5654033264450136, + -0.3392419958670083, + -0.11308066528900262, + 0.11308066528900262, + 0.3392419958670079, + 0.5654033264450136, + 0.7915646570230188, + 1.0177259876010245, + 1.2438873181790298, + 1.470048648757035, + 1.6962099793350403, + 1.9223713099130464, + 2.1485326404910516, + 2.374693971069057 + ], + "limit_statistic": "CFD-only pooled absolute 97.5 percentile", + "limits": [ + -2.374693971069057, + 2.374693971069057 + ], + "name": "RdBu_r", + "potential_value": "analytical irrotational zero on valid exterior", + "zero_contour": false + } + }, + "crop": { + "array_order": "yx", + "pixel_dimensions_xy": [ + 241, + 121 + ], + "requested_x_over_D": [ + -2, + 10 + ], + "requested_y_over_D": [ + -3, + 3 + ], + "x_indices_inclusive": [ + 960, + 1200 + ], + "x_lattice": [ + 960.0, + 1200.0 + ], + "x_over_D": [ + -2.0, + 10.0 + ], + "y_indices_inclusive": [ + 239, + 359 + ], + "y_lattice": [ + 239.0, + 359.0 + ], + "y_over_D": [ + -3.025, + 2.975 + ] + }, + "definitions": { + "crop_L2": "sqrt(integral common-fluid |q_case-q_in|^2 dA / integral common-fluid dA)/U_inf; tensor trapezoid weights", + "error": "hypot(ux-qin_ux,uy-qin_uy)/U_inf", + "vorticity": "potential analytical zero; CFD conservative omega D/U_inf" + }, + "exact_command": "PYTHONPATH=\"$PWD/src\" conda run -n pinball_math python src/steady_pinball_theory/plot_results.py --steady \"/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808\" --strip \"/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-strip-modal-analysis-20260804-v4/analysis.json\" --ledger \"/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/ns-ledger-v2-oracle-bound-d20-20260809/analysis.json\" --output \"/home/frank14f/DynamisLab/src/steady_pinball_theory/figures\"", + "files": { + "README.md": { + "bytes": 6431, + "sha256": "871fb4bfdb64d4f1d32ee4e0aa033441a19e56e911e3e3b5a3efca3b4e19d2a1" + }, + "annotations/cfd-accepted-s3p55_metrics.png": { + "bytes": 20146, + "sha256": "492662832f9112adfc6e3d8e480499c3c57935eae2487e0ae0a6da7d6503e662" + }, + "annotations/cfd-reverse-s5p2_metrics.png": { + "bytes": 20295, + "sha256": "bf7306a40657a547d47dd228290d712a1a20b37a1f1295d65ef46a88c739db18" + }, + "annotations/cfd-stationary_metrics.png": { + "bytes": 21099, + "sha256": "0e20045477c5a4e0e0d03566c7ee423d273c6a26edcc1c3726b2cb791ee17775" + }, + "annotations/mfs-gfit_metrics.png": { + "bytes": 20444, + "sha256": "c81253c5dee3350b8a8f92be2389f5a98bae8488fc31d5c49455eb5f73361e95" + }, + "annotations/mfs-gopt_metrics.png": { + "bytes": 19768, + "sha256": "2ddf633bf39fe2f1614a490aa0f9622762b9b99a13f7270b29e0dc8a47be18a0" + }, + "annotations/mfs-zero_metrics.png": { + "bytes": 21604, + "sha256": "c5c01e24ee841278b6d7beedb7f7ecd02bb318c3af72b4f10af924e121a10730" + }, + "colorbars/error_cfd_horizontal.png": { + "bytes": 12585, + "sha256": "ef42c0dabed479db73bf1b916820f4586d60372e46fe176d607e132e489c9913" + }, + "colorbars/error_cfd_vertical.png": { + "bytes": 16395, + "sha256": "345169fe247b884d04ec6c4d5cb563869e9ea42162f4b20253e482b46bfdf993" + }, + "colorbars/error_potential_horizontal.png": { + "bytes": 14035, + "sha256": "fe900bd3709f262bb60d8fae5fdade3796399313d43790af1f11d4f4b25cf531" + }, + "colorbars/error_potential_vertical.png": { + "bytes": 17925, + "sha256": "a08d99f5c333987452cbe1dbbcfb3ba1adaa8777cd172a0c55892e34056fc79d" + }, + "colorbars/vorticity_cfd_horizontal.png": { + "bytes": 13289, + "sha256": "f1009e127fad3e695903d4904eb3906c5672dc80bd8cbe8471bf9408fbba940a" + }, + "colorbars/vorticity_cfd_vertical.png": { + "bytes": 17213, + "sha256": "f88e5c9e83d5b50da2c7ffa3e8bd0111ad6f2f2f087e409e1fff7ed30f28930d" + }, + "field_metrics.csv": { + "bytes": 3618, + "sha256": "e6cc9887c6ce8e49fb2d24a1bf9e32236aa93fc2f5f8d9b50bd18207cd247925" + }, + "fields/error/cfd-accepted-s3p55.png": { + "bytes": 3695, + "sha256": "728a9c02f63700d7ab79f5d721ba7504c469935dccc2ff8b01ba77c12be9f9a0" + }, + "fields/error/cfd-reverse-s5p2.png": { + "bytes": 4469, + "sha256": "cf2d0fb790931bb3c250eb45430f7754cccde506979cec79645f99c6e62d6b39" + }, + "fields/error/cfd-stationary.png": { + "bytes": 3949, + "sha256": "5d46db4ba779235edb09bf03a57484c3cb85df229d2d2a090126d99f6dbde5eb" + }, + "fields/error/mfs-gfit.png": { + "bytes": 3447, + "sha256": "57f7107d1a00de376ff501656681b45243cdd15db5fc392cffd30ecf2b4cf0d4" + }, + "fields/error/mfs-gopt.png": { + "bytes": 2817, + "sha256": "f4fc08e16a01df92c8a7d3d39748f502665d1551e8b81788c957b3aa6fa6b957" + }, + "fields/error/mfs-zero.png": { + "bytes": 3777, + "sha256": "826bcd60a590064c54063037ae83136b68330644e526281d7e5f8bd591c26e03" + }, + "fields/streamlines/cfd-accepted-s3p55.png": { + "bytes": 29284, + "sha256": "71ffdeaa6919f919cd1de6bb399574d7b3a70cf731c90fec7b2812e501d6de18" + }, + "fields/streamlines/cfd-reverse-s5p2.png": { + "bytes": 28465, + "sha256": "122d09145b2e8969b19d9696e1249e1d2aa8fabddbba2ca55a2f16f2f5483bf3" + }, + "fields/streamlines/cfd-stationary.png": { + "bytes": 35885, + "sha256": "5ce2032e28dc66765049051694a934e63d03aacf4a03c6e70700c4692efd9d39" + }, + "fields/streamlines/mfs-gfit.png": { + "bytes": 29049, + "sha256": "297acdf718cfef9f796025a4297b75acdc00a1a1ce860acb690774fba6dbea95" + }, + "fields/streamlines/mfs-gopt.png": { + "bytes": 14647, + "sha256": "bcdfe160646da2cd58ed51979c01a1b42b0dbcaece9d4d5e81b339b599b5ea03" + }, + "fields/streamlines/mfs-zero.png": { + "bytes": 20950, + "sha256": "2a74f7003e5f02275e1fb09fac172244010d7c8bf496bc0fadd09544e448db85" + }, + "fields/vorticity/cfd-accepted-s3p55.png": { + "bytes": 5221, + "sha256": "b50c659bff982186292076249a0d1295172d05af64b29bc9544f400e0782323e" + }, + "fields/vorticity/cfd-reverse-s5p2.png": { + "bytes": 6395, + "sha256": "1a8020af924a24525dbf4c1880326da3c8685fafe9e27b2dcfa54d406e1484c7" + }, + "fields/vorticity/cfd-stationary.png": { + "bytes": 5777, + "sha256": "f0b2bf9240548786b46a55ce7ae7dfc7cf65f357dc2c7c1e0b5e4ae5896c4c1e" + }, + "fields/vorticity/mfs-gfit.png": { + "bytes": 1415, + "sha256": "7c92e631aa2ddc3735d9c0b3834df8e4eac0d7ec3ecd940ff43381e9427d4648" + }, + "fields/vorticity/mfs-gopt.png": { + "bytes": 1415, + "sha256": "7c92e631aa2ddc3735d9c0b3834df8e4eac0d7ec3ecd940ff43381e9427d4648" + }, + "fields/vorticity/mfs-zero.png": { + "bytes": 1415, + "sha256": "7c92e631aa2ddc3735d9c0b3834df8e4eac0d7ec3ecd940ff43381e9427d4648" + }, + "plates/error/cfd-accepted-s3p55.pdf": { + "bytes": 24616, + "sha256": "3ad03ccaf7a64c248ac0449aba67e7872986e8bdb2995cc0a205e2ae200a77b4" + }, + "plates/error/cfd-accepted-s3p55.png": { + "bytes": 31628, + "sha256": "4e860a0c6a71a62e4f310d101b4ecf40c29d06a245d217e465cc288733dca5bb" + }, + "plates/error/cfd-reverse-s5p2.pdf": { + "bytes": 24116, + "sha256": "56b34cf9d344ec0384a1b30872c3293c25d1d36a58684f22d2d31167e79f912b" + }, + "plates/error/cfd-reverse-s5p2.png": { + "bytes": 32506, + "sha256": "03d3c4ecbb5bdeb0ee32cc036cf1e026cc1cf6e4e7b42b306699f44f8f8efd1e" + }, + "plates/error/cfd-stationary.pdf": { + "bytes": 27605, + "sha256": "9ce97806eba91314dd6182fa673bcdfe5212ecac275dae41d3f35c78f6c389f1" + }, + "plates/error/cfd-stationary.png": { + "bytes": 33724, + "sha256": "36951582b551a4b249aae524c75cea476467dd603fcf72e0adb01d2bab01777f" + }, + "plates/error/mfs-gfit.pdf": { + "bytes": 26843, + "sha256": "87ba7343f34fb81e51e2ecbce4684a31638775e5ddaf067d3605a17b76268263" + }, + "plates/error/mfs-gfit.png": { + "bytes": 32098, + "sha256": "0cf8844de77ba156e88389e4a5a47aa54e02b2d467ef950efc3cc70a5b3a5fdd" + }, + "plates/error/mfs-gopt.pdf": { + "bytes": 18694, + "sha256": "8d5be07a64a6f341a9f73d601273ec9952b370689790f9fe46be359da14c9df3" + }, + "plates/error/mfs-gopt.png": { + "bytes": 27328, + "sha256": "9ced96e5ddd772158e1851448cae81ddd79d5f78d7ef258d0ff26e71d199ef08" + }, + "plates/error/mfs-zero.pdf": { + "bytes": 22727, + "sha256": "23488c6a638486150979ca07207034ec409bd65083e44b8b8adb51c78f2168ad" + }, + "plates/error/mfs-zero.png": { + "bytes": 32513, + "sha256": "35dee33bdcd5834a26f31b78d2694932895d6df786912105c139f1993241fbc5" + }, + "plates/streamlines/cfd-accepted-s3p55.pdf": { + "bytes": 45687, + "sha256": "813bb42a214e7ca016f966f8c64f885d3eff147aea0610baab8f88211de09580" + }, + "plates/streamlines/cfd-accepted-s3p55.png": { + "bytes": 72423, + "sha256": "ddb8a828ac03a54f71f2d2070842f7148286a5a7aff592a3cab2d493e0246e81" + }, + "plates/streamlines/cfd-reverse-s5p2.pdf": { + "bytes": 46836, + "sha256": "1f72992477419ccd8ae309e506be6281bbaaa9a967ff9a804e496f1a8e3aa336" + }, + "plates/streamlines/cfd-reverse-s5p2.png": { + "bytes": 72542, + "sha256": "8fa3ce57de0f557cc438cdfcc3b2b7a1858722192f219d952ae38b87297c4b14" + }, + "plates/streamlines/cfd-stationary.pdf": { + "bytes": 48248, + "sha256": "93082d4edc37cdb200e14c93a27e661446efec30c9b0d1831aaf7ac29303e84b" + }, + "plates/streamlines/cfd-stationary.png": { + "bytes": 81979, + "sha256": "63b05c00da8bd40d906ecf2b8c2ecbe102e64cd526c1c0ef34863b01b6927491" + }, + "plates/streamlines/mfs-gfit.pdf": { + "bytes": 46977, + "sha256": "0efd1fef52ae431c3ac1e3730c2e68085765a724ff296f8c691dffc6bfcb641a" + }, + "plates/streamlines/mfs-gfit.png": { + "bytes": 72888, + "sha256": "e3c3d78e7c6a5e075f1b8c070d79b1bf254551a6be05139c61d2411461b6fe08" + }, + "plates/streamlines/mfs-gopt.pdf": { + "bytes": 38152, + "sha256": "53fcbaa41222c7a3bf432bcf403579f7fb3c3db2b6867ec2472cd2235f040a73" + }, + "plates/streamlines/mfs-gopt.png": { + "bytes": 52085, + "sha256": "5e509d63dcea5194cf2d10bede9b2da3fbf3aad73b55473adeafa5c16f4e0597" + }, + "plates/streamlines/mfs-zero.pdf": { + "bytes": 43532, + "sha256": "5c4a8225ea43ec43ba3b035d3e79cba3be3cd4d4a9dd5f051261370ab42b0d0e" + }, + "plates/streamlines/mfs-zero.png": { + "bytes": 63887, + "sha256": "82079ff0f593e5dc199246003d72c7090e2268fe3c7e0c6d21d7afd324c03275" + }, + "plates/vorticity/cfd-accepted-s3p55.pdf": { + "bytes": 20103, + "sha256": "52eb760e9a0af5914ef98684ae9199a76acaaf8d73a7b56147bc44293ef15fc7" + }, + "plates/vorticity/cfd-accepted-s3p55.png": { + "bytes": 32691, + "sha256": "e88011569775f3a51002a234f680156adb9dc1e5a7e06694d43aacc246a1837b" + }, + "plates/vorticity/cfd-reverse-s5p2.pdf": { + "bytes": 25159, + "sha256": "5004f1600bc6078786b0b665b8991bfaa520f14c6cb21382cab63d892dd4413d" + }, + "plates/vorticity/cfd-reverse-s5p2.png": { + "bytes": 35323, + "sha256": "67399eb89a680b87193e5e5af7ec8e582d0a02eb09d7c7176dc478279257944e" + }, + "plates/vorticity/cfd-stationary.pdf": { + "bytes": 28538, + "sha256": "6daa0e38976c35f94de273ee2f4e92eb064e4ac5a874c058765eec496cb6a750" + }, + "plates/vorticity/cfd-stationary.png": { + "bytes": 35876, + "sha256": "1d9256f1d86158ec9568401ddbf8640c39ecb5941e39a39c703c222318eaaa59" + }, + "plates/vorticity/mfs-gfit.pdf": { + "bytes": 17815, + "sha256": "3f0e31f0ebdbd24644ab5ed83ea4c24c7c76eb87db2c446af6178ead275bdf49" + }, + "plates/vorticity/mfs-gfit.png": { + "bytes": 27385, + "sha256": "e2bdaeef82d5bdbcfe84b397d34c2b9773d3e23438d6071b72ee39a29017dc09" + }, + "plates/vorticity/mfs-gopt.pdf": { + "bytes": 17006, + "sha256": "d9793820362af7a91e0bd6a1a5134b5723ef4c353bcfc8e247b30cfcaa25f66e" + }, + "plates/vorticity/mfs-gopt.png": { + "bytes": 25171, + "sha256": "345462f05d296d917a6bf455fcea96a7d52add1c77e4705e81617be2fb6dea0a" + }, + "plates/vorticity/mfs-zero.pdf": { + "bytes": 17124, + "sha256": "3a2f99ebc6de49c4e6e61500b66bc53096d59e4693ed72c804415f7181984c08" + }, + "plates/vorticity/mfs-zero.png": { + "bytes": 28344, + "sha256": "0379dc27497ba014cc5c3000aae3e615c1aba9dec1c3747e56c98363fc3fbc33" + }, + "profiles_long.csv": { + "bytes": 3104648, + "sha256": "dc0597bd93dafa57cbed80aa39ed4df8f396c092fa51a6865bb4580627f0980a" + }, + "summary/actuator_CP.csv": { + "bytes": 276, + "sha256": "893ab88122be018a529a3ece0f0633385f5f8b74534e46e01bd248416f677981" + }, + "summary/actuator_CP.pdf": { + "bytes": 15186, + "sha256": "64720f93a8867e2fcc2e57f93b24c9bb4bebfba3881bc35ef4007f1d41a7314d" + }, + "summary/actuator_CP.png": { + "bytes": 27092, + "sha256": "a12db1cf4e20232c1c48c7cc578f4d3c9d667e9f1d4ef78dec184df0d7058a1b" + }, + "summary/near_wake_diagnostics.csv": { + "bytes": 530, + "sha256": "2b05967391e4e942ad0b139d48e0e5c4e54bf1beff367475585f4a6b56921220" + }, + "summary/near_wake_diagnostics.pdf": { + "bytes": 21918, + "sha256": "876b634f5c2c78edfb479e2f3e5ede4f41aaa62e7dbc800e7f0587c242545c47" + }, + "summary/near_wake_diagnostics.png": { + "bytes": 59480, + "sha256": "5a02165dbcdb990eab9e9f82f59c34871ffa39f504b33f951b474570259af962" + }, + "summary/profile_Einf_vector.csv": { + "bytes": 3644, + "sha256": "643720d093a49398b1d76277d5d89a777c95eb17b4f3e97f4e255170ebdea5d2" + }, + "summary/profile_Einf_vector.pdf": { + "bytes": 29062, + "sha256": "95fe5497a7de3fa3a291a498b6829e46a1e295f53769800bedc34f3a1049849c" + }, + "summary/profile_Einf_vector.png": { + "bytes": 150363, + "sha256": "12fe1537a24f4bb008f14a2c7629bf40c15f61f8627dafcdef542b032760b9ad" + }, + "summary/signed_gap_Qstar.csv": { + "bytes": 1487, + "sha256": "3ae80d31586c049185e013739953d83718e6b68c9f0206aaf2e3ceb348c9fb98" + }, + "summary/signed_gap_Qstar.pdf": { + "bytes": 16007, + "sha256": "d1a9be901077d3f2faf838597a47c6a3a0844bb1614f872f55025483a5c21659" + }, + "summary/signed_gap_Qstar.png": { + "bytes": 54153, + "sha256": "ef4359825116d8e601c5cd7c2ab39d2f62f5684ac7928ba070157c78c2ea1068" + } + }, + "geometry": { + "body_order": [ + "front", + "rear_y_plus", + "rear_y_minus" + ], + "centers_over_D": [ + [ + 0.0, + 0.0 + ], + [ + 1.3, + 0.75 + ], + [ + 1.3, + -0.75 + ] + ], + "coordinates": "x-right_y-up", + "origin": "front center", + "radius_over_D": 0.5 + }, + "masks": { + "CFD": "case/q_in common solver FLUID bits; conservative centered curl stencil", + "potential": "analytic cylinder exterior; displayed/exported vorticity analytically zero" + }, + "overwrite_contract": "default fail; explicit --overwrite atomically replaces only output root", + "payload_sha256": "425fd18756b853cb3d5309900d70a5c8a0b922701fe2decb78040811943ca367", + "primary_identity": { + "E_inf_vector": 0.0231672176752314, + "case": "cfd-accepted-s3p55", + "x_over_D": 10 + }, + "render": { + "one_output_pixel_per_lattice_cell": true, + "plates": "presentation companions; not pixel-exact raw arrays", + "raw_axes_titles": false, + "scalar_interpolation": "nearest", + "streamline_arrowheads": true + }, + "schema": "steady-pinball-unified-figures/v2", + "scientific_scope": "CPU-only regenerable visualization; no CFD/CUDA; not evidence", + "sources": { + "ledger": { + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/ns-ledger-v2-oracle-bound-d20-20260809/analysis.json", + "sha256": "c5d1395dd438e0f9c1f98489fd94fe309349ee554d0a21752ddfa571fe4d66cb" + }, + "steady_root": { + "files": { + "accepted-s3.55/endpoint.npz": { + "bytes": 7493746, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/accepted-s3.55/endpoint.npz", + "sha256": "b6c70b76c7cf2a2e4330b27fb0d4e82a914b40fde8171076704e825a79ac72db" + }, + "accepted-s3.55/manifest.json": { + "bytes": 7701, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/accepted-s3.55/manifest.json", + "sha256": "0fef464f8acc445a772db9792d8bb751f5f7a1502b4bf4f545833c29b861eeb1" + }, + "qin/endpoint.npz": { + "bytes": 4783748, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/qin/endpoint.npz", + "sha256": "88cbeac1069336716c30d18fd5afd4fc9d6ae87617c7f390b1366fe7098e419b" + }, + "qin/manifest.json": { + "bytes": 6203, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/qin/manifest.json", + "sha256": "e68dc9c2ac5f64f3db024c1c1b0ff729d3403781c2ca6a2cae6740f060ce14ff" + }, + "reverse-s5.2/endpoint.npz": { + "bytes": 8376367, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/reverse-s5.2/endpoint.npz", + "sha256": "760c1e84dd9b7784151ed180d3f16d17619465a08ddb767ce23a87517cc28ec3" + }, + "reverse-s5.2/manifest.json": { + "bytes": 7750, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/reverse-s5.2/manifest.json", + "sha256": "99313ced195070fdeb2daefde792ea50d48ccb59ae211eb2493af021713dea69" + }, + "stationary/endpoint.npz": { + "bytes": 8795812, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/stationary/endpoint.npz", + "sha256": "c2edc9e4173fb6bbde7937314e4984c1c501de75f0dd4916b67aa68388dde8f3" + }, + "stationary/manifest.json": { + "bytes": 7197, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808/stationary/manifest.json", + "sha256": "d9c4d4b8760116011bfe4c077fde8ffda69935c5eb79240aaca5ec9fc2654346" + } + }, + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808" + }, + "strip_analysis": { + "path": "/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-strip-modal-analysis-20260804-v4/analysis.json", + "sha256": "10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c" + } + } +} diff --git a/src/steady_pinball_theory/figures/plates/error/cfd-accepted-s3p55.pdf b/src/steady_pinball_theory/figures/plates/error/cfd-accepted-s3p55.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ce802aecb3e97a5c76baff43626b606bc68c2905 GIT binary patch literal 24616 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 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/error/cfd-reverse-s5p2.pdf b/src/steady_pinball_theory/figures/plates/error/cfd-reverse-s5p2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ffd4b94ebc310d151441a35a25ad3d92d3f7c149 GIT binary patch literal 24116 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 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/error/cfd-reverse-s5p2.png b/src/steady_pinball_theory/figures/plates/error/cfd-reverse-s5p2.png new file mode 100644 index 0000000000000000000000000000000000000000..c83fca6df4967e48f9c52aae7384764e29727d39 GIT binary patch literal 32506 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 z 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 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/error/cfd-stationary.png b/src/steady_pinball_theory/figures/plates/error/cfd-stationary.png new file mode 100644 index 0000000000000000000000000000000000000000..024bffd6d5a71265066d3656226af5cff7f0ccf2 GIT binary patch literal 33724 zcmeFZcT|*Fvn~#XQNV;Gm83X`2*{uUl93>aB9b#Gh$ztH3=J4i1OXi-NCqV*2~7?P z0t!N-6Poa=&75!UcYo(PhqKoG=dN{JYesC|?tb6BcU3+0)Km53`ZcA! zv`1*EsHpZ{zNDZ|MYXesifa4q-M_&r-wH0Pz+cCm6m^|6Y;QZc-gGdhQgFAqiMi`| z^`_}jJ8N4f69;ogXKN?N({}DdZ*%v+y_xY6nVKza#!UJ9;GvomDk;~``%l@3(SXa-sqx#{_P{zQCgeh$Dckub26{_ z?NhFkCqGv1jk?Kl>^DX7j@<_i?mlqzuAFXOML*|q=~!~#xRZ0-czSl_^h85awDdwp znrlXSifWvRe3-c&+z$L<|N5G+ee)+@kN9u^9n|%@>~e-j~??;rIW! z1lHky*5y}+K`KLv%Chk>r}v@#GOKn93f4uvE?>%Ar%#3WXHVwVa|F82kJK*B4w(&y z>SUAcN-IV>7s*6hPQL77(@-VN!?xwK7t4Qsy)rxSnDb(oxsXjy@u5F%$l@MrxhAW| zaR^qeIy~i&67SG83$on53+}>F4jpCOt}ne68|#$WvDYCN6+Y~fm^@J7v5-!1EMFQ7 zobASYi*Rw>ZjL^DTq*dfG_!Q>jraE>gv>6M&o@itepTkH{rLR2S=ZZ}CD?F&y@QLr zt|n21W$P;wEWt);^$SzI62I*^bl}0R{lWCdFBWVlzWl>^ysgV^D9Eg0p(8LQ&Rbkt z_om->{FhhaL*iKl@JN&0`DP34IyrOxUnAjryhv6ift2a0Dn*L?ekn$xO&P}dH?4XO z&&k|FqBe%sxwXujcP=k4k9*vPLAN!#G!&u~!Xafk8siEJ1y6dXZqMS8nZZE8I+m)X zT7UnDvliF(96s~riu5i_{;f}c7LTWA4E}lL^pj67cPklBPeM0C?7az?o9t`Mm?lcN4 zJnQjuOnYM`zHM$_6K4@DhTC+-qG?B_-fV|~ZEde>Kf7x`)-~Fpfp>PoWJBDAh$(WZ zYQFs9L~V>~-(gnkw-+X>Hr7df`wH66;w3eTv!}|YrOy&1KBc9^9ue*La$KExEc0~x zzVq=m;k?_ZsC*06?Na;(Y980Wx%?ts>S^iEkto|b_%8PR+f4z+6&|&&mGd#@*O!J2 z_(${Zd`T=O6%q$uYFv9_5r-AADIR##bDv^g&#n{k-Z)r2#Pdf|_~2ZlU`Re*THJPCUhuYoLtK6jGEFMt$d(W)XElxtRB z$Dk@nFWO@#&*s!}p`8N)43%c+eb1d0aE^t{>Yjeg zU7TKjNYB5*Gp>7%wIm3+Om-z=d{$@cg{(RZVV|{6lC*++0xjS>;)^QMr-I&(~Zj<@r{rZZ$@73y1;&(>v0Z@`&lLnk$}Y^pT3 zS$u-uwOnPN)Xx^V+_hkdsgtYR7aYO71F+<79(1nGk3^Ue%1OaTge^5!zw^jEk>4lw zyGxIKz1w_~=unIN{-7VNDfN~aS=t?i#_q$R#b94%eoWf_V2tOA@L;S%uPkDpNMlz% zh!Cw`5G~%{-#Pp7c!+|+Y~&AKe2TJh3VoyZlQS4Xfg3mnvv2S2<-)2K-DS2b8C_0M zK@a0Gk%cVGbZw#2)>$u(C)O=7an#2k`#o4g`Ivo91zG=dwAk4^{y^srJs#Jl<-=!h zf1ndAKM*2C)>Tl*d|OQ`;C=VJ*V0VajR$)j>f6IeqOZ=FE1we)se{kfDekP8tz$(S z>9(=9Xx39~FVOtN-#v`*m|VMoYPa>}QM0L@5}{ikpXqv%aIaP4q#Ln@VrDjT z?K$4U*TjFkDW0jOE4%f6EyrigsvN94x9*75hp{iO4M?8-*u~mExv!Xhju7I`7bN8G zk17~0mRkDuU^c{O^*9$-9zWj-_cA&ma778xR@@@|w9yf(%-o9^KD?o>*G?N2|BAAWV#uh2dw$wwgoddYamGKNApY_!)ulc6H`!D+8FE

DRZ&hCda40+()3dcHITApF@ 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 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/error/mfs-gfit.pdf b/src/steady_pinball_theory/figures/plates/error/mfs-gfit.pdf new file mode 100644 index 0000000000000000000000000000000000000000..334574696dccc7e10684d0cb184aa1f290931bd6 GIT binary patch literal 26843 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 PMF@_^#3ZkwfcJj@!{AOV literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/error/mfs-gfit.png b/src/steady_pinball_theory/figures/plates/error/mfs-gfit.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeb52c94e9b2e32ca57ae1399a637538d532062 GIT binary patch literal 32098 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

YReGZ1YzD?=C>Ze=k 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 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/streamlines/cfd-accepted-s3p55.pdf b/src/steady_pinball_theory/figures/plates/streamlines/cfd-accepted-s3p55.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f2a8f03825f6c42514ff3031ebbaa1bc9a2ecceb GIT binary patch literal 45687 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 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/streamlines/cfd-reverse-s5p2.pdf b/src/steady_pinball_theory/figures/plates/streamlines/cfd-reverse-s5p2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4cd0239dbc90ea3980cce3e8d44c382684b96dcc GIT binary patch literal 46836 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

T5BL&eFf406pd}bAAuu5*Epx#MV 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 TB6*yA)@@sN>asTfe)|6bgtB;j literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/streamlines/cfd-stationary.pdf b/src/steady_pinball_theory/figures/plates/streamlines/cfd-stationary.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dfdd11d412c98e860d61e85e593316503baa006b GIT binary patch literal 48248 zcmc$`bzD_j^FJ<9(w!2Al7>Tfw{(MacSx5Y-7Q@rDN3uPgf!BPgmg)_fbiP~^||-+ zT%Paszn|yD*=w)8&R#RK*37(T_H3z?#3dP7nAj1i-p+#F)FZNhz#s=>Yeas25VM-6 zqZx=<%*e&a*1-bAtYlnF~knQf?CROsQMxMc6-W#7CjkhfagBjDTAH`n-59M2i9Xg;9p(>bv1_}xXFxjA#Y ztyPo7M)Tx}Wo_p=CbsVK5i+5|ejPTVCKq}7RUKW9f)v5N_vKCsI^GhAZSb4NpRrM3 zicIfgeMIJMX~S%4W$Y6KEfZRmA9zZB!rGvI+I;f4RSr3grB03jbBqgoS-iN9x@L@e zX8Cm5Zj{NZ$_rL_KMb ze%FBlB*&s^+SeEjKlB&`b9ehR+&l5>e!PFM|KfND#Y_0WLz%9LOU10A>tdjQ>!tay ztkd}3B;U5e3w=8zu~2Fanmt;wMXNEj5>s=nbiQss`PEiww`uDyu@4`MS~qMlJ4`q3 zqkk(!jlngZ&#v_7TWqD0pK4kDfC{Zb{(>6M51ni&0UfhGZ_i@!Go66F|s46C=;e*hOS(faC&4V1)nW#mF<$+ zOKGQMGnq~kl-F#B9$l)VJ$qe^RkYcqB=pV4Vka`5FaIElq#V<#bfOXwL31ZqCH^v> zX=X3$U_v7EEE+MIeL$lVuGBRRjVkZ3@bF6^;-ltpa~RFbVe>+@Pt$KRox$G^(xTIP z^bvT}l_})rM+m0ns)vcYPSrOM(LFZgGrz6}s?vjt;G9Hoqr zuLRWNrq^pBawArF2d}cAUd_GBAMMg++1ws9vXbH2C*dPxXAE^+5GWv43h_u{eNGps z@h*||IjvZuC_$d)O)cwG)0^RW)}0C_g5Cqf*A-9TBoM0PvK~)=88G83|lfO3$l;$RbNP-4xr<|$K9dAtZZC>-u{dJawyl?!LT6r zsdum&3g@4{&gMXdce{BVs>{tCN8kS@QfF$vC6xOUkrjMS)hFb5_~vR)-K)3gBDSv* zl?3)xA6#dz@}meoR$pN5Z<O{CdDRPDWK2s6;ptd~y)$7=2dk!J}B9{i>8MxL?EG|3$#Y z+ouKEy8(l~s0VM|kxQ&Nbg-<0%YPK6WaMd?B5t%={-B;5%wW+s@TlY7yMx=mdzfEl zo}2C8nU(MFM`-~)fE(gd1qbxr2+EHJ&fPqD7kzR+)(8CsAujSD`Ie>HesNs&`<92| z#wCihHYFi;OO4$xJh3XDZ88^OtVIS_62JLqz{E|8IZhOK2Wb#*^Isl_i|0>BYei@Q zKY$%-P~{HLh^|+p6`;H{pdT60y;2M+uOl;(L|GQb`;?gLCWMKH?``uTBnESx35Url zO8(V>zMryLbDF_r(8Dr#RxJGMJII1Sg8w3mll|YxV&mY@1S?g%yN6j=D2ce%35Q4< zqAT1~7hfRCl#*M(lbQr=u8j{(05Wq7fr^8(8SvliS?pbS41KSA7rp%sIv~*Fzvy5C zbN@Rb0?M-XCM?J^m)MQM_r9$Uda}~gOYb!^zGklmcT)?g=D%YAS3V-qpm85#y{g6_ z*w;HJXtH2)U;0wLyteT2qsYQOKBw* zM?b>|)nm|BoM2>T&3vYrm%_`Q_h!t=XNZr|NduLH#rhP%qEkt zk0_F>p>v{NL@pk2nWFJevDLieju6Z6=5i|guDOVNG=#RisaP5iCCfrbbz-Lwqio;7 zUN|{aLRXTanI^Ec6*HjOQOd1IOX3=QsM0@@=n&SIs#)JbY>_pg5i_WgtvfWy41MDQ zcZcvHK<~eV&&me=ci}TC_e8gYkuMt%Il<5E`A$qLrn>BJzUIDwx*zw!G+vDrHbAbC z9b+9NdoaN2vXlri~*uGgpd_GESv2@@$ zQV*N4IjaXpo3&n-#^Rk|x+QKzWnE=jesk%)d(z-5sJ^a7bceVgK={AJ#l`vW(qiM} z1at<>4ihga8G=|Cf(y|Z5R@1NR z&g4#|qzAa-oPqQx_ljTQRo+1p1k3+7O@Cnd7(ch7JO?9-4SN^v-|$Tk)Bb#azbe5^ve;HGYzKQ9R&S7 z`1oat|IA%0^~6Jyp;rr@MY%^ek2BBm5+KuCDF_wy2dZH<&gBnFg9HYX?l#O~j|{RhbvYgG|km)CB)^r$+nj z&Na8;xcCmAC8GP_4yoM*ayVH3eQyaU@x(y0 zAbGna zT)1hh1jMI-1JAqL0TtCALR7NYMVYLamDk0#Y2_JMm|{~t&U|=`h}UGC$u;^)*`a+= z2E!~us{9%5k%AWQu+ay!k?ezX85Vp4wz?lS*(uYij|pAWFJTxkk=Ng0$#YLmqF)5_ zyx=h&mfitHZu9riqL`HEjcqHgDNLPJ$@wsQL>rv0$R$l4W7~hXQ0fY@FHJAPeprUG zyxyU*1+Pu#P&kp2+UWLmX+Wk^{}X0%bj{$&-ubJ`BNSWOC%XR>B4D}xp$lw0eZm#FK=s!ibPey0|uG^3aI*-08*SG2+5|=N7W@Y@ zte8zvWwjHJDIDn0<^+)3{jFFOnY4nR2?X5Pm zq{En123f#om{1Y%scw@M=qJujA2D6eF#Zhg#!hChRQFn3?zHqFXWVVsuRZUzf zT;^7>vC)wQd?^gE?itx?y%=bl_PvG**L{_I$AaDg>;A;xN_=hrU>&l=@Vsgx#uW-O zwgk4(4JVvzF5ltN&O|FZsx%h6st1fc*&_XBs+v?+gPFXljX;U3tUFW7&Pr(FSTc2@7RT$Gt-u~^vwPp{Q|CRezvwS>WRnhkWS6>wojY(K zE61O(qs(XD0Y;v2M$}(`nwUKFRKX_J-)l}*dGbd+-D7t$ z$b~ZT(_!^g>c0$<3oxI4>XR?3<-Uc>5TQ(zZV|V2s-sP;0^-|$OcKV2gg#Nl1vk{3hK}ra=CgAx<;iar3N|4n;xh4O0#?tyk*GBW0VW1yIYCKRe#;D`!ip_kJ z4_8pfC}xYU`6!H?70I0!XSW*_Wh5b3sivuAoaLZ2jbv+oe& z9Wa*X51@g3vjK z@fnJiz;&JzMQ8I7cms#Cz~1oVJelttehHPP8cJsU~DlaELkvp%IB$}2YtOz)lpF*3@<4&q2fP7 z&_2vCD$5nB19O%jM=c*!g#r%$x~XB;O;#V!|lC;o;%PJ`yT{nche&nmh{=o63S@xxi;tv zrh-U2TkXibx@;7hJ0`vhC2{_NBqWr15@5)XKYIq}EIjm3bg+{LU*5Qwjk0Bdl3bk^cUE=P`-1kR`8>ZLZK#oo%{mT>ock>^UXny{NjX%Bmez|Il@DFPdbf zPoH`ALqW0v-3{0kPHuktl$IedS1=PR5}G zXPL@STW-U2^m_V{HD0~B26ttgDM<>ssK}StS&ijXWf6Oe;PU8Hq@L;9lCDW>XB@Re zXE&KRkxhY@Emqz3ZV1Z{F42w+%~$Ra=N<5gnYUb5TeYG07&Z-qX}8VQbFmE-u@gVx6VqQ{c>R?df$Vr2lQ@4j6p^EOs<6V zdS2`qHi-qSCM|s!^P3xwgD73-8fOZsddbw+Pg0_`3=TpA+y~5!A84>BSFw3QzicNAm0dt#cZAwo!Op|5*t3{-~8FS zc)%899#BJOyI98!?TZG6pLN&NDT}UGP80=O%%QK8MIUrNV!$gDp;OQP%yywS`#w6s z7%GR}m`h|#B}h+4G)p{q|Jhl8B^4$CPEnNKEB;A`u3jFxzGk6FHPn$fj)#>edRJwRzUrzIAy+PRen!((Bzf?TY~)#?C>WkA&DpeI{kDo+;lTTXvN=m~w-OxT)hIc=K(EN_| zy8}Y7vj2hd%PaBN0~t*S*f+c1(EN3(M2uUE6xK1w7}w4 zXL>c{tf^>OLwiGX!f$dJur7*w>YKb$$zCyDY2hp9n1*^n$43*O zUPeE{fR4&C!EFRU)=x70G_;K_3lC+ ze}FaFINt&8AIuJhPLK={PL6*q8bOwl>(3Ks^(yW&EC#!BH&iw9b9QM|NikDaz~?TO zprqb0`yJqeh4T-jE1|@PDn^Dp!xJ1U+!S}zShBV6b@Lvz#et-;8Rq)wbtDEZd z+%m~Y;J(DjkZ$4!?J{VlY%eGpZ8yLA2`z=mvWyhN z@l0U&%c@#+KDv2BVjT@Ej~R(-ESIeGF`)DT6y=2b~M?-D(}jAzJYGWR1vo~J6d zU&{u;v6>dF)v+`N;4|cY*z^dvc0mJIubm2~A$H;zs``b#Y^a{Lc9+P!0o)tT$aSWt zu4)(Q#(38V-_i`71!ZNexKfP+`@fgb7#3+HX0aRbzkBfdVNmnTSaY$pma?Y@2UrZVYFt z4PpV+LzE&J3-j_0ita#8Y^;CsbWP=_FIvaB0`l+geq^KI(k9&0klEQ%MKdVpa}!7V z&!1O`_P6)7)Cgce^I-bLmJ6n(kWGYmlUXmGOwB(q0K1*1b4hLmr!fZdGIXU?R(>ac zA%o88BC7KQy0u>}LBOZ~{GG)Nlyno4(m@$FK}v}jCA+f~g1C4v?Gh<%`T9DogB((? z$^^;zGi&_xQJ#))w)`oMp#1CvAN8Oq>V)#Sh#GThScS0|XKX1dvq9mq=O?1u-q=;E zlIylkv9gmQ&hrLd0p3nL1ZUxzkyW;|#5B)FUr(xbG+7-pfH))0SbL*tC5RjSP*nKv zY~YKehQ4{@NZ1bwrag@vmhaV85hY7TN<1x~ZLhTMjgFRAE8`m3;3luNh>=i*^COQx z!t!J|rIXbRUhdf|HX*043gxF(JgSt^_;>?l^2jIZpX`2``kSy-a6Z@LY9KW@W6D{Q5!!{ebtdb*edlEQ5kX>`@IWJRKhz*xC1${ z{J|5MTPyv%4Ou~6+F#Cj1)cspJ+!!>^4##@6j zzUK@prUPRWGZ2yzhm54=!#O@u+5P1_ZzQqGTN+Ntl!GCtO!WdA2`Uk}Zz zthpi8+KqzvbWBpoIBZ9hF#;2V9zF?{l5vr>%~}~G`+_#RUQgUzG_m(l0`FsUkt++@ z9qilzM%Vx!{;xQk@t5xWKzs%yZD;nTLDH4q{T`}RcL)<@VXq!0FzOu^(55jGGkvW$ zPC0k|t`pDXtGi@>z$zorUel;SKE5lW9lrYPEg^+4q0Wf9f;3U0^m&_}b-j;O*!!4g zjAFYUr@`vVn8yB+4}3QXlRI}SN*MPFW)`K8?FMm56Y}2HYZA_K??jB}dNNkQ?b{c^ zns1V57+F?|9K4i@d3K8bV&8GpnG*YnTu?-9jR%b&GLHamgYCm(66_5mmyjypZc?G-9l+*bd!8Xx?rKNq<+v)vD=YF~n*j&9^>UV=mQSV&U;<=FN_BG*zXQ zYD2sp=c2+hEaN{98H&S+4;lF~MC6RjS~Hjx_fDP4W{| zml+M2E=J9r7CZ!KyvGw0IVeX%^3f{stV<04b*o;f(jZaP*O5C%`){{CHwOPsj^oneu@=xhYc&} zXDgrVBZILe;m@#4*B zLXICNt8oLxC5ar8A9Xj^BjrTPjmn5<1fC_Z^k2dxCH#OFSe}5lLr$q2U6^geB!fDW zY5p-f{n{b3fUUY?_8`mrZEPjz+m&bM*>}&T8z}uOojV?30|}yk zh>?Zs53)w`akBOjKrO-g+fNT`F$d7J21`p&_0NP#7oUyAqoKl3ulmOj)TVYjnqnB( zvKcX4*>~f6u*ck(>M|S4E7e#cO%%*M<*IJSuaHw~(Xgw_=;FC_i3$dZxP4zlLM9&> zXNXCU)x!{I7T6RVD`+^?5WwV)-x@*EaD?Ta6L`dw#jzw&5Z|m$OAx9B{kTl8{lhc@ z)vOrps11($rBzvrww{gWsMziqX(JK;)*bqN2Vne@XEJOY09aKT;(#%xFkypLMQ7IIcf=t{2q`316Xae{AA_!hKzvV?`W{wPR1e3hTFd4$~N33K|DX^7_2Z^bS^8BS3=|`c| zM$Gd&2)YBh@caRI=8*5f05Y6cs<2c+Ch8YGriVk<%_7lgQ&|G{a(ya4=+f}$f5#2z zdKHMAQ07PtVjb%-LgL6&kCQ`gu4=U?=(E(*WR1`2XD589h+k|A^$_t} zObRxYviv?RvJ?)%OA8s>fM<_3YYR900Uw(D&2;EqI*R>|YnLQ(De^1+Dd4QGCkW_X-uj}@&f>q;J(vTUz>(+P_} z!sg-G_FGAB1DS@Z6q!tVgV>4q7D+O9FgFSovv9^k@Ntx6G-17?h-!*LZp$I&Ij@ha z_a=$SLV;a34~950RUlPy+7ou8;Zq;6Cr2|DNe-E2XPk$#D)p2aFGZf?pmtSXa9ybl z_E3H)6Aej#?Prnv1T%1awL$5$r0c^RpB(@4gXBFOLemeVoiO*n@wqg@r)sYr^Xm)p`?$RvOsDj3-T z1+4$L_s`#p{w!K$WC63XfEd|1*+48@JnTT>DH|J57<)T~ypfBO)oo=f6BrBuT)^i) zEl7PUK%Ej$a0`^QLM#DLjVoafRH#DAasMg<{@sPhEN*3PZUz+7LaJwVZn<)HG%^7S zdx5N=Bc#gK*38`HSJTPL!qNo|hV@>EaHwTr8c;fVMeMqzimoxdClwfCXk}GdIYu&2DeY0RTl42U`bw5G1lT zd+KUri^vIt6F_CKIEYySU>*c{f+q*!0sM!ny{Va#vx$R~8HfiMV+7&>kgf@c8K40& z5m3zw46*_az)fvI%yx*(z&rpYjvy8mfP8=qU@-xh0O0iplV z;)^(&Kx&?OSOHccGeAxlSs}r>n31FOPa%R4nYDg5fr@IN*4xTN#NNWz3?Q6Y)y2$C z1JaN;^0?&@kRAKqx%mxxfPDb4$_WPl&p$REFbMMZdkkbe8?bJ-N1()#6CextL;Q98 zeg1!s!2Q`EV}H%V&GtX$4>>~q{;E~|yVn*2u|OOWu=m74x8;~XO9BMk=C)4~#0rUqfIc}8Dh{zM*bqNkwjf}Yfj&fLI}otOw^!`} zk^F2qKupbTAH-nXCf|YS9YH`^`?mKlBgB3?E0BhTn5F;NqMw6)8X)#xb31|9f6eU- zV*kbRPh-P=J3r#B{QN<@?pTHDVmUIEUD^+aLkp z$`y2rbAjLf%`9>JBESvUvp;X(0Rl|i?M*#_wg1_=wUoDh`u~^}$hhBTjCyV#<&K3$SVz!#HY<~bIb%YKX&^A0sclC#RW`>VUun?j{P_n~c* zcFUt5iw6sr+N#|l-`^=u)8V$S06>nkd5#E(L+8)BbPs5ujKIq)XtjI+M6SuI|EsG{+#b8r1yz|1w>d^yEyb$&c2Dn9P?&IuLEAK_KjJqD#EG0nUbd)KRxDqmvsN(^!d z7ZY^|np3|7e4#>w57Fz>5`0@jYeKaQBmFY6LLU+PKE3~YVcH6eq5G1CNNKJ}X&R>Z zA|kM4DyVAVPYZBMUQ8GCF`02vD~EcMxAP)d2kMYNH#U8|T=L*0zKBtw!u=;O?;coU z3@HomDWzPE4AY>NVv!l@h9=lJ z^u7^f$R_djnxXeb@Ykeca-OBKRo>hDu(u3;g>-{v06n5~2Nr{DhyPmAKgl4ov4bHY z!R_<&55RM54izvbyOK1^3Tvern6pByd$o$41E$)kg@M8Z9f=0PLU;v|vcr3Z8gT~^ zkj?v>h`-zw=x>-uTI8{+{Qtr{fa~}VSpT_NPzlKQX_n_akn}3oF){7Id zX$PSP?_Edm*rP?tY$yj+eOwuu8*x!AfX_2QC&V#9{eDI~H;2u;&~iRcJ-AqO{r-#z z+D}mgEwz=`0h7r{p3tbh$8*BXFmvGSwVS}3Ztm8$52l&k4$xTl&*8&m6&@1l%i$k{ zL)~kp4D9)ifI2zq*g!ae@8>9)lWU|BAR;^X@wJBr+x_zWO0N8dMq-3ZXCHfv+&9kN zk@n?Z~>wUotc!9VsE{U)NiV+C0X7!<4^9 zE0fvv%z~v|H0cPbZ__FApIZ2LC6r_VvHWrrk`RROUwiB~AcFvR5thH>_y4?r$1ElS z-5(${nZKaPruhr1|aCaskrUaL=`29ZMU(wC&+kC(D z2e<`*0+@dRQ2?_+-nz4Oa8kXEEP%HFWdQi@VFrM8aWgk76EhVlQ2@1YAky62-2C|Q zXJ;oTCr3v|2L}gxdwV-OJKw&2+uYn-UteEcU0q&YUR+%K`t|GF+}zB} z%=Gm1gvkM%JTB^($dm5Z{ECq{ko{AsGy)AFE1}QH#a9ICo3x}BO@a%EiEM_ zB`GN>F)=YdK0Y=!Haa>wGBPqeJUlcsG&ndoFfh>H-`~&A@7c3w-rnAxo}TXR?yjz` z&d$zHpFVYP0OBP(8yg!dD=P~N3o|n_6B837BO?O?13f)G9UUEQZEa0WO?7p3RaI4G zWo1Q0MR|F7Sy@>b85t=lDG3P)F)=X_5fLFFAprpaK0ZDk9v&_(E)EV3Ha0dE78Yh^ zW=2LvdU|?YTF8f*nwpA=ih_cIjEszwl$4m5_~FBc1OxFMe5@$uo|;r{;q?(XjP_V(7+ z*2c!h+S=O6%F5Ex(!#>R{QUgv?Ch5>U#6y}CMG7v#>PfQMuvul1_lQD`uci%d%L^4 zJ3Bku+uJ{V`qa|W($v({*w|QKUte2W`{BcfckkX+RaI3~RFsvKy?y((q@<*{xVW&e zFh4*4)vH%8U%t%F&d$utOixcwO-)TsPJZ#?MM6SCTwGjCOiWZ%R76BXSXfv{NJvmn zP(VPy^XJcfeSLj=e7wB8JUl$y+}vDTT%4So9336)?d@%CZLO`XEiEn0&CN|sO^uC> z4Gj(T_4Rdc|2=u~L`zFcLqkJNO-)5bMM+6XK|w)IPVVvJ$I{Z$l9H0*;^LyBqQb($ zf`Wql{QSJUyxiQ}oSdBO?Ch*S9Ss=F#KgqFz(7Ywr%MC*JbLtql9G~~oE!uKk&uuO z5fKp*65`|I2XJt3FfcIp@87?7?;b585YLNR zxi~ACIf*&gIRXF~i1~n!_Kp|WfJpxKMN}mtCp+g`OQGZhyaj7=n~DIu+^qrvLG5kJ z)ecBz{8Z9AZVy-n=3h1(2*7`Nz5l%2y7SS!)=pcy$h%vDPDMl{-g!Wz1d+1X<0CPP zYmHL}3}fp42LuU$6}1&Z5gZ=X=hAQKgc0Vf-_&%3blM+Sk6MdSNZR7;g!pz|X6re> zB<3LI`?iD6S8k^j@S$4mOGgLpB1gNa&G2m48rn=0 z2gdDVY^iK0F6LQ0CR+Z7Zr+80Da^V^_HYjLv!t~%4XwUe*G`W8pJH1L@S3nl5ZxJO ziRX1*nlbTszvwJqQK%TlX)bV-=~^Jd!|U{;JtsUf>|KKQFYqco3pYRE3 zfyeRvrzC&)srrR3oNILMVdbe36!XLOfaT*f*oNs7q^KDreN_*vss4@2<=B(bOYrvd zH4j3^XF_P@L0s7Q7!KaIMbBK9%Zq(?FY=iaU zd*Sjj1s60AtHr~_tane@=zjFW&ZOpD4jKfd;FZDX%pp%13^GrxmK^8`Snf`sO{F}= z7q|wz;n|B%68rPL4k&b4vu|EIN*om@^USFZ5RRIVkP&EK~+9GPI|WEl-BM>0^at!<6PYq}rH z>_Z6G*2FR+=WEy>B=NN#4IGmBzBWzsUWk+6KCw|YnGd=qEkEf1-7MjY*&m4GX0h%~ z5$;fv?(~KXO;-}ZN6)jJ9i0{A8wngbGY-rf>!Li^=A*cl`#qcqfYaOFHP)s6U%h5N zii-^klZfT;_B9dYIiug(L)Mm3VppKpj~Sm2oT?`g9VExIcXl7^N+bzkhMa*;vh*URt3WD9Q&7?@$y&fOLkZ$MX) ztxZ=cEzfVPS_(_ahHf@5Tbnxe)j2FLviAp2uLsL_JBnLGfKN)7ZPg>qtDxGvTOzkyD?XYJdIhU1H+MNs9S*An9y9FU0FREIkI zasieNOHJhX@-%QG=?Ferr8UtB=hGWR_I6o4hl&-HoqepIf+28VqWCEows~F2JH&-D zKEx?$7j|-qXs`(v&|`4yuO|`TFF?_&Ah+Y2RErNEG(X_QYU_dO^>wFZ-p>l&o}Im3 zePid{{kcW;QBTprfcXO3jU=Mlpp$;fyD2$ErW7WH)$I)N5${uxgG1nsQ2f1Tjlgu_x3Fo59kXA z#!h$!(nYOdJoKk~DxLDC5%Qnd78rN*K6Me4nv535XzVS$&wn+26|K&xHXd*_Jky*v z>hduARd5~KEZq2Kd+)CyaNp?#mKVypXMG1TP8Ua3hWFuNO|1EdpGaM9Z?!C*2S%WT zvUW_h$~;L&<#xUBBXv_v?mMA-am92}RlME~*~bK^%)hp;(eHiyw?=4NhIlBE&_)|2 zTw}qs`6=K1?ZNcNPlnzp(p)hrDQpV`I#Fh|m00M=1b^l{m-l$W=!BRNtux!(tiUq9 zCZ4n`lT=4yyZRN1J)&Rw)A-9b`!rd`wd@UTWfSbk3u{rxc{2~8$(+>t9*0I=`jBY( z9yC8Em<%1uv4H#G8|T8x&F^waGoG_WYTM6qk&}8Q%mJ?_M}2zg8E#mfH97QpT494K z%IgxXa_*T2I5fsr@o5}|z@$k9yNQo=`J#GPPqNiKs)Ek0TQNsCpsRLaz?WxxhRILX z9m=TZiGFQXXMuw?{9lsz##7f=hlXC}X4#ylw7CM^V$Nn8eYi}@_%_^gzy`)WI`?@} z)(6)7(#R36j|5x!b+pKNx%C8C1Ja?hB2@g2cK3}$YXrA;SMeEG!L3Os>28kZPri!u z^{1Y9_sh$|@@T(}_G!szjYQg=8wq|CtFeB?d2ZX9{~?ibduREjEN0qAxQL3Iik+DE zOY;>1@xa%`sQIqcP^z{0?ZLi=qaUY1J zW;Q13LQa$!SMBSba||pe7WR~3iyltq6N(qNmQ|~%wer1SKUnK*&!FZ$FwgLSaQ^Qn zs*@SG<;!k!G=c<#QS*6pe zi=Hvc9xRkZW(S;)4aI$ZD*6HWdyB3tobU$J_D(KDK8`!LkQX?dhk zqCR;!(mi%l2BD}CrD7!dd4Hnry^6reS02tffI)UPfGoX-GuBeSYTB)N<|3QtPYUNk z8_UT2@`Cg_XeUSf(xkr`UDY?drTxh5z4X^2`A4vRoPM(J&4v|m3eiVNa zg1;sylR1Cmv1)Mhz}MVJ^Rn)8-Hhv^Oq35l0xPS|N64M9XJEkoK;P|a@cH?*JCjz$ zK$ln8~^ zj_!qXaq&KDLI~&yU6ZCOi49%@H z8z$Ucb+k`DykXe;UyaTLxaG4&9-Hlarc9eus7 zx*yQgt8w=9%8)2^-?fq1j7<&2$YNBU=-alQnRrUndv}o}ml6C+=uCp?q0gl*si*QH zULvg<-2O-M<5H&+q|o%dOwHWxU2LNSbC;oK0U6NYrZs!k9Uq&&!UakiAu*j@^E4Y4 z`)O)>GUAUmIeaW$kj345S~km*%#7_|@5y$swsxz)JZB|K{Rm6_Siv67@2Mb5z1H8J zk#XyY)@I*CK;)u`z0^OR%^K@Eg+pRWacfAtC^tjNyWcsCr z4P6%;rWr{ic*%E?S9OsYIgdKIfaP7_Bc;*?c|S;FWCT3G_IUZsd_@tfM+udjiNL z#iLsO|9KKRkdePL?TW&tPG+DW4|63y$+S&3*z@W+WtBQEr)ZbQE0qNt_^-ux*KB*z=G8d$mY@W)~+D-^ba@ z^cz?aNkbou^l)u!t%H>HcQV8==+MqFg}$s z)~;vV-rz)ri|;3GZopb|f%`!{Yknt;%K{w&NYrlU&gL8w59MZn<u7(Y^~X|PH(cPcHyM=+_+oP)O+Q}V4Ccf~hXJJ*oHD$)GxhTR$kE=> z?)(bdq}S0R;J}K}<3X%>rvNQqjIVkXrD1rDMM(C@a+lDsVt9%){BT=^n`&J4tyZ-i zRJlk}ASgNA@8s1oO2wB+&fQzsfpcANI$fV1nOVR->KU!i%1*A?m-C3|QcNx!J4i5t zR!MXiQd3WHA$2QM*Q;$LU#3)73O~<3Dq}lYX#3^b;2$^EWkg0p3?c-+rs&!J2cc~n z|LR1mQTRpI?(I)M_v-$D` zKdNS_YgmlpncxU*$x2ktb4Bb-LQV#u^)%WMsnGh>2Bc-W#-Oi8eKT=#&Kuu`1*-NR zfSxpwu7l2>@gFaaZEk<&3%oFVS>HdIAS1juG)XJuj`4BUm6$v+6zGe>;(+Cvd7^6hYcci1zwL}sg~nwO|A>5;nIeMba?>Zlh{S`vb!_c8^) z5H*alS}^!ZOglih0HCJ=g!)xrhp#;aL69i~fHU33ctFUK39LCkD&!)$CXWk#>2R3sBU#yH5#iu!>5D0Z4ME2X^Zs-AB*RMj0vm^ z7>-NL4QIYE@{KqulTMO>R=S?Fymyo~os_Y324OGqHy1y{&mv}&>wPg=<*8!Iu1CY_ z=kze(ja+z9FhEE(3a7@yyu3O_f@G@lL-9O2U=aZ^bb8WbH!97YpycI>zH7IvB#!IT zuJZ!DK4Sb#a`i49N`?3NB@1%fLZ%%&l+zWLD9D$+@1SdSxM;gbVxIpX^x}BoK4Ul6 zjTmD?hc%ALSk}cjsZ7ipU?q`Hw7byvF6$}VlV)q%!5+S-RjOwa>4E^?F_4HN#KSqs z!x@0c|RIB zBYP>+MQGyZ=g=eAbChY&U9rM$0xw+n%K84{M~jDspV9Q`({fwma{;}+o}(SWR8lN zlKg$4`U^8Fu_t~tRzbDH@LMx7Ra0hD-e%UsZ zrG5;^J}KmyCTdq2@jp?^_Q%a1QdQUA(Iv08r)r+E5|lh*c+)N$VNTrs0aS#yotQb5 zZH>Qs@740@&Jp4+m8$wMVH7EU%#FPw8kde+n^k+~YG0?Aa>;nFv>?aA{NSgL`9e-i z`oce=pJtJ(Kl zpqR`qvduU9-jMo3q3(N$p&Yzff=Je|8yt_fyHOpJnS9_vDL*Fg{nImvj=bu|=QFi7 zey<~p&QVf+aHoO06=S*FrGMJ$HD3&eT_k{M9vPtH^cLL$zW#5`x`z(C%r5YO2Wr)C z@As~8sE9g$e>%sLU9>|soKN5+Sm2qWfwSiVf04FM?P43=-2453jwf?-feg`tiyPMA zgXrwh&`3vjoW_dAB8?FNZ=b2y$LAl9)s}Nz1|Qy=*;Rr+u!hk;b6*()v5NgjBA>d~ zjS#3q#I-k_G)eFjt~8!WRxtZxlKrO8AoSH?nKh&A_{vq{N@qg_&GN!A?*J+GHAY`F z-yYV03U(IFxI_#$3F7_nEJTL$B z-VntgqMo14D7fu=xWRO;=dN%6@_vyQN>9#}`#1BlIb%EN6sHLHhdIi#I9sm4#J2Z4 z>@4r4FVE{m*KK8@!tr*>8j)Jht4~&=b=ir$8`ge<8F?m`XX{m?&Ptlg{Pmf~$Lg*f zXBsZRoIQk?W=_Z#C9t~F4h;a4y1vK1cKTn5ChANsD|(Z$pvQY((U!lchqdm4=DWh> zn1MG#XzDqSHey`)cVV4~@)C|zUh&5hz@yPr4)xhx+ey-$t#o-rIG1(??56-z8$|u;?;wc`&jusIa8;WxvYzuynk*CsyH zO`GU4IdyFGq`Z}chqEvw%=?*(jP-C1__aq!Adw-E)B$86kUmeTVa3>ohv&uzwuHG{ z`G}}~vma2Vo$3kZqYZa`QuH~+2kqcPS{Dmh>{6uVAr$*&A?)P^e$37(H>ilde zS-GyG8U__H>6T=RyxMa0;C8Rm?$%=kf@}?Nn{#7N>9F*+pAX){QMt{_z`U8(%`f&# zN2{L{KXKu_n+)NwNy$UvCbp5$Z?_JaxnHyQ4I7D4S3sC~G=M?r+_Qpm$C#`>5zQ^< z1LmSrikeTwLX%3d!`ddpn+W-_`<+iLz5rYyI|KGj9%AFbDZuHA-(CH4qN8yehhD7Y zB`*_%vQjRU#GcXQjKK4Hut#Dh*0PU^TB5yqdf>j?YLOC&;;mjMVb3ez5SxdK%7@7} z%k`S{O#{qahMgGN%y`b2qP>So(&lV-2uwCtwzkI>=Sf@NBeL(CAAkI?>ejkE+h2yw zSzSPvt80dWc{wW^X<;J`$D`%|l4NgK$;)Fa#|hNIM*FC}?a=nnuk-L=Zc)v*D`41Y zH!{TI@|;^ee;YISkx;j7^~T(K1Z?#riI#BU*;1)R+sqWijq#I(ah*Xna*u2z7j%1u zH^c(06m(=jE%o1`)5DRa{(A>&z~VM}kFNV8V-wiFg%0PJn;cQBUl$4XLxx$ALt{Oa z?BGO^0ZlzNm#q(s4pobaG$J;zsx4Ys5k!SL=pwk22@dp<=} z+?k~v`Lg!9_+@5Ed|TsE1x3d&0gR$j)%N!_e%6N6`A|lN=Ni#JwouQDuBpykdC~h$ zQjfcO(PJfr_H*9hO`g5$>AYs=Z!}ytiKXgLUR|yKIFc|K3HIn{7P`&ptI+wuweY> zzV5SrabC#A6~>gilwu~s>gKd1l&2QOwnyP2Zx>&m;E5giLy%ZDTNcttEwXtZC z7TK>m68;pk(wgC^&&z_wNbv2bPeyPqM3L7geBOP`;`y~iCDi;TnL7BM1Co&fd4Iys zoRIB9A8TgVLcaVaBufBXHmZa%$7#5)RJ8PVRz9YGTy=1-5tWx4=e@RLiVzk`TG1G# z)}P(>J&R!>{QHOYGE!H3QKcq?T06)Mv3BxvPK6GfQaRkMC5Gs3Fcs{y{_&uwEJ z9q;DUCj3%0*l_Hd$r(s&dEnv6XGjc|p>0M!RS$W!+_z1iX$^fY%@0N|*tjdd6e{Z! z{1hM7(nODvv;=MV)ybWyfYI#Cf&nEV9ZeYHA!7-()~=>K+YS?fhd;$lzwi593xN z!Hf1_l%JMaPic^@V&IsxxUm|JjSvfF1-PU3M8N8k+&`QOF3?>7QU!`Hp&*QMAqCor z-UGki0W_3S8@QT<{eyv>^6Kcah|UbxEt+xR2dYAMf7X!Z(`Fp+EM545^w)w&Y?lRe zvXTB1ploe;yTb42o-`K%j%zsk48COq{~BC-FtN4+}eX|=r7 z!)j(uCa6*4_$~;0bG;|tuu*&gZkJxn)r19(@a@mD9?Hw!~LgIil z(F7g|&^-a}IH>cVh;UPbcBBj(3{omA7u7rz<_lANvYRf;HHnOnX@AYH%M#BQUQcr0 zbCVP5+&ED%9_08ISf`Fjih3^o{FGuTe%==yjP^&qI^muS zxfDpd8OUWGo>(K_9j_dpiNt5w`Vj?wQ^SFD*JnB1fHz>Vd+^5*%Yw;Mplz_Bp36Q! zr$>Bu+iQh;9&clI?vM(|c(-?eW)%j4q6&Z+pvCnS4pE-|uVO7J}w0SGn4>?i|U z39_D!hjchUDo=k2T-Yu#WZJKzVUqo7YU2ox5LHE=Ygih+kj9q)Oh6ee%#Sgcv1SpHT z6-AQAy$|q-=O$^z{B*M^EpZs>G&(}Ou9rOTeYA0`JDzbjc^<;wOq_#Rp8k9w(!HK; zquhX&groJt&k!gAe;mpkT#KO4eBJ0VbQ&k1nEm8YAt%wcXyj|BUzbD5N^#}T_Ef$Z z_;nMhuN&O<8ncELs~Jgx@n)+r{B@1L_isb$5_nM0+p8bk>-oJKysP$X8Bp5|SlrJND&@oA;K^P7=VqQ)@$pThu1> z9Oz|}d3}#hrj+Ow1^?Z@;<-zcxxnTOUaUvkG3(fyL^kiFzEx95{^sZAAWZKbZ7GnJ z;I9aX>95dbl?78=nTURAnK)S#%~Lz?53gCC zKX(~~QMV;4W_=qq|EqF)RGlh#`XqZi}@RjRnbRNypjK zppXtjwIn#upq;Aqs1aK5d=1(nYjX46$lz{aW?aM3T^sA7mL4El--4`_ z5Io|THPkZ~*d+(t5{Mr-p9)&w7z9=ZouEg9 zbKm^g$eB&CmXLpB4PFbu!RZg5@(BUGF`Ps}Ap=d3BA z2(WIUV{z1z2f~Bs0A2xn7 z=Dkg}el z=oLAmhfH*aCL@&34Wjlxo&0rE9gz5Az1Z>KMQdTt>I*K@Cjr$MBK|Z>^ptzeU(Kj%&hTY7ODt2+M>>)%@KP^PR&KdXE!eV;_q0wS-lM|Hb~jtDi_3!b^D(y) zVuInityc?nI%DNT5{B+s>m_sjaeiO&6JSsW_cmb}wMfDcw@mp4l96z7-5f@XQgnI?@0 ztFgBNgmrTRsP!MnufirZ?2%agn|unr#mncG3@ST2mfi%(-SFr@o*XRej@xO1+1!u< z76Fu0(<{U}8N8P82J2V%fTnoYKIPwQlw)Vz(jr;mTyGve=Wzl{a)Uk3h}(vmh((mU z8x~)*yv2)^Bv1!#aE^!E_eTt zzn4!y1STo+Yc{GS0jUs+X<=TcJIy1cULT)Oo6vkb-!=0Z2-oc|NSYkN>)5@m?i(IT zdD~OwAuF%@qL}mw6jT)PCM+`C4W$Kg#QQ3NG4~4`cDNhG@L^T>#gHqeQ2xQy8{?lMxxRB`;=-KCJ=A=p zRjcd9XfK6$SuZ)Jkw4E>8mxnI<1cX#I)tBo51TzaWlrhtjvERO2frN@BpRMqZM!e= zBuG}DEcVwk{k=R_(h1&yVSGs<+y?q zKlcj1R5=Zto*WKPBfS3#A9HjV`*? z_WCMaB2IE~IpcH03vibE=w&c~Kv?PwCGJ)kPDz9(2AHWI*!J^1^P?njZGA{?KP}4~ zZu&FgC3e& zYsy?bylN`ma`^12ZVg2N)iEAO&Q06`iDd)~MYv*Pr;~v@L5>@(luLwVE$(laQ-D-41^qFbC(Gr0mI_FiFP~KNK?a zbH0eS_lre;hT&0jjm~1e$LRD~q>RG?Q|K_{aIO8Ib!Bym$UM<2cQ!x!I&KHkS|!)} z{ps134{BhP58Cm`<}e5c~57;kJ#qqPy6LTvG7(H z8j%?VAIAC21Y_%KkYAThI7l)K3YvhYfz~m)g%nYkdlK63_)bV*61_nu*aAl01M58teu|co}h6moW9F_cQYR> zCE3$*l-PdIHbD4#`BohK*YZhDu8V5YKt#$*dm|LHaXOlbd9SFQ; zu~p5l!@IrNL3DaSiLI*l8HYM;%Oc|yB6E=CptZH!_zrsB*^WDSqn#m(0jksFEg3L| zSY!EHmC+ywxot~w_qy0QLw+Zww@K%|NYI41Wmj!@w@nJkFUg0B_Eo!_0A5yl!rerd zyfI?bQEhN{P@G0R>_jR|ODpJ=W=|MfQ!p0(SB(cR>z);zU!9^D#8%)i&A6^wRf zmuq}TI>PeH&u z0?X@47JboOy8+-`k4~ZpI|Zco4T0)<-)@StCab1>eVVpcw!e5y2nmm)G?62-hr19| zw;i>P-omg|ZE;xZxQ7O?E2sHar7M6%cl0AI57aimlL7=h5E^xW1tA^?_?#?|m88T{bo(&AHv(a^GX-v< z_wwyKMw@7N$KCs5{`d7q7z;Jjejh`9HQKEj5C8I7PX_cf>CTLfY>J{U3^bt)`)>Cy zsB&XPSAZh#d@S_X=$G>>c-rSUwg&sWd0x(0A%`8n%f2siunf&G_&GDKpiX)C`-tgx zpY+=)>%KqwMbXP)6HMA7K50W#n)bbD;n?L5e^yQUa+?=h&z~$=EX@Sbs|?(1j~x|A z?)FHN{0IZW&tM7Ko+DhPkUX*zM<{4FW62`B8FHE|zudyf9`HPRAUSeXq zMDVG@_c{91)y$%_YQF;W5IY8gBt1vLbAn?^FE2mO?;tDJUJJNrlUqcw!{RBTT+6q@ zZa76l@{z?kksJG#z39IEWTzWPiAdKjJZXabH?~?Pjjy$X*d_hhV?$0wo`qR@4R}vY zWq4y6UX%rl6%crpwD$j*-+vO`GUv~JXNa2gLUIxNnXpIfSkR5~2tS4Riyr zb_*J|jyyv=4%n2UBaRlCMHSY+!Vn|MjERgM5Qj)jJ+4iesFErhPA=R|(5N_aO}j3t zg(Rr&%)<-z%w}jv)0T@)uywylq1X2#`zYpSb!4mCG@XAU74VpYppPfGJ@p(C58660 zh-e9s#Lw5c3XHC!fQkqJR>yi=bpU!907e{uvU``K(^=P1wLE9T21+>gTD_M`G z4VlT;G`GOHDe=g|0=c%X#iy4K6~23_&B(oCx9%vJVfwdY>BsOwHzLhEUVagX1Xza; z#Bk>vYsY#)q}9D-EeI*^HaKNG4GW$|?A8%rI)9~~qVuU;+819`RC6HVFryppUOmoA z8r3~kFL2K@-f?!)V_kk&C#jAS<InGNsi*qO%w7vJEN@qd@2HqZVOUfgRhxR?l ze>Fp-heL%)Cn}skuGIT?Cj#D6Z@V}AP?}$6f3ECa->{hIPj*yP?j0o8MS75yuA_P5 zM1-}@SC-UmS@p-z_IK3el;rH)kFRS7?HgzoD}EEe1Nh&?hWm3dV zgy^krGe$~@Q_>tZ*fs@yX3O)?SDxwFu>l2x=i%Uva9euiAKT@{+-fMqNX4d-! zLfB3Hw%9_z%FG+RRs}STJ&cRohua-c8N7z%H7c9KCB_9(7i+{Z)S7u|o zyJ0){>4|wgiOl2RPFLm{epj_1znLHuW%K$I=B8cz-$cQj7TrK;J^mI8RKRGf2^-ph z>6LS#5Ly}(|C!~Xs2v!80fYw``~p2F;FN%hQn|3&CQMqa`eS>l=bI#+ z`-eM(gK2b((>y-bn0GNP^%d{x2YGi17jadHjB>HxdMFDUrMAiu+tA6uA|e80f@7mC z@y`gz^e+_(Fn;2VZvU=VRPgpS^|i2W6>ePedEj~fqNRVkg;-I)5TlaxRNarj@n(!f zt*M_oog&wGTZ@V;zr0twf^4${;hXtcoA4byIomiU!OPY)v)Z0NPUzi&n8#&IdUN=y zDDCM(pF<4>2bXk|oG~=xTh0Yk(8$Rq= zcASx)(%|N7e1M-&e&D?|(_1fA#`@Nm?ZB_O;+nQ1sh3TVU!MdaU*c66n-db4*p=BR zM&|TeX!KMqi>2;MXe`!q{}C`>yy%-SzyyyDV$>X2#0#gi|K%>&1@8F=-2*OD*boTq zqb&b!TV#W&l$;4ziGKhudx}tT+Odd7kD_$xf?zPUGCg!wS5Xt zr@y7e*zV1cb}?#iv~Ct%5!-R!#Up2VHs7$YN;(3$Y7eP75Ky7^K-G;g*RKxoQSy^3 zB_CE{cXz04GLOh-vvNJ9K^#vqwfDv0IPSaETyD@i-rScRIw5-SjVw3yMI7rz*FCPV zz8zH3#C0OljmT!N!?4wGI44WK!hDxDE+lSfI3Kt?qfLZSIIfD53*!wEmff$%W>LLDtc zD~JYZQs?8HjYpxLgm!;UhEw`5E1`-uZX^oTO*{nrw~q=<7~b(O!!ILD0{n$1kqUKL z?&FEEfl{@gNR6e z>5n>FHD`8EPyv*~TkL{6) zxLn9iii(e%WyaF^V`dfRHv5}|?aSFbsfDwid8?RJStUb`4GHmDI)1mz1?J(`!bVfC zh@ygh1exMgB0qBTqRk(wFLNblA!}4|fL7H>xm$WR)|!l9QkkSW@FgrMeNW&#rdg`z z<@dA9sI}xT5nh7si{PkU9oB)y^E+sq)BHvgTzRlIE$u5fUH=5z$Y0O>{V}kgdR{^VwmxRo_nfO81LP#fM+J zz6o^lD(tjyae6gLy!-oVKnVYxR&xrRZ2sL$yDU19tqyLa^AA~V@^CTQ$Pc0l>@C%2 zWj0K=PdqbpV{9Ij?kja{?BV(mSZ*uYO_p>V2W0E!y1`>Nyn5c~i7LWf{+x85(&0%v z$k~FKtFHxu;sBWorcS&D9uMH>VF3*w-6LaQrvMt!0MzRSb6b9GU(B|7E8F=;f9kKl z;xKdV$8-zMpunMZoo0eJCzw~RdOixH!n19u*0j}}-{8{W`-r|r3Z#yj%|&eD2*fQW zdo5!oS7x*SMB!8tE-bCO3QHh}1$nmBMSDw6! zyCfMrAFvmB3-7m*L@yj5bkx?qI*C%NG?|IUvqXi?NDg51l)WW+P%Q9n0UjFQX`pX8 z0t5h9fW`o3ekiC1a2`NoK;r>sMy-oNJY5fK%Q#$@K@%Lk89{X%ZDe+L_N~CXNpD1d zLPn%&WLiPCQVn8l#QTu%rK=h{>jQY>X_YJ)nlU&17qRiZsNP@y%==?gg1j=V8h}|c z&qLwuwa_?@;B6^Qp+;C-RFqg7gYDvRHy~KdX|U*HL6P!+q>E4LxpWs~!t*g`z>!M5 z$m!KYNW?(`%{~^FjSr>h%IfG9;>1a!7U*gXE%s22q;l0_g(1?0<(5sbxHPMS9QU7I zwekEPjW+`HfB9#{;sSMI7>>3-JjPFlc^>2==95({3ftyjNP>y<>P%{6Z$jhm45s`E zxL?g~a%7eSMi=Rxzn=)w|Hz)<*u{8VaW=Z)UEHcI5S=*iaTU?Hpp13+!gs#@h`UI% zRMp0M5f{bC#5z_?2b2(79>O`S=OiZk=b8{1MF*1;8-qnAac)d%%6q#&!iB;fWm$JD z2i$nqM8NdbJHNzM1OadXla^!hBb+dom*tP(kTvdl^-(I?+U3P06h zx<#f?P(tf@@m^)gMwIGB$@*=(r0#k%DE66u^LWg631i|K$L)u0_edH%=TzVaN_v*& zg4iN?(~P|{zZpoOrwfxAl_VCsKaF*{$#T2?sa|y2|A4u1A!9Bt3Ua7qy4FtjM#*Q5 z?lA^d+@M^;qZ!)dUorY<-4b|q=<`>s4I;Kiyl}>(o3aI!Te%jJ8`|K4+^k6v6bMtN z7cFRlM49WxaPzQaq7L6t5Eyvc=e=ShxDeJYsWaBI)$P!?bk|Sfy+1s-Fjd6vE6LVy zWS{xlu!Fie6?&WhQ2hblBX6dsvLY?+Edf=NLz;2s^DUbRQ$G#ha%*Nnj{W-{bFD=MK@_3|ste!SRP zVAJsDE1B3i!t0YS#~jBs%YFpV6a>E(I)k z0^BNaj~yVUDulSrR;bn*^!fNpj27Zk(dyn z3T`cviW;{g&e%rNm*&AuPNUMqr7vRXg=MHMg-N1UV>x)zb~g-Re66TwiuyY~K!`-A21~D&5y$g1()~wO#d|FTJ zi#p2y(gB#NR5kvQ#T>r;v-buqR5}0o1I-;do}YG!M@t1?4_tX`uOALNRO_t_re@dI ziM0!9DVv7so$s&{&(2HRgL6!e7+dKVP)y!Jh?Q&dagWoG#a^`_H>!Mj}HphvlfEcPw_?TD(6wP}n*NUokk~ zFo0yGdh(pi>v+@C2_wryAll~#86T-&s0e)JJO}HVBAy3T!Cy1)zO*;Z?*~#4i4#ZX zeJ+lgBCSnaj4tx%SiHY+qL!Zp`f08SMAP|jTs0JDUegD(ol*991GbfaSZ1J8!)RAn zM~1Rf0PhO3RSE&g&L`gpTl#^v@P)Z&`$xhZ4+vk_@3ATT-Q+_QSCeR%_)6D=ddLN( ztrxDGYew4IBI4OAg}BlTRogo5h;&8#^C_{0tj`t&KiAq}zE3Dg`aS-o`dEOucb`?l zhy8M3ED!rPk$YyOear&E@UW1ZBLnVk#QPgrk64m=6^pUs(!zzZ7R$ZD44!m?`L-%PWEsh8KeyBRGt^DIC-U=Z?QRiysG>LW1U{$h zD;;ecP3$c_-_3Kp$g@vI8O_mF4?gVNqmNWb!q~Y^y+7EUX{=FhniFR@iJusNI<%lN zLRzSX*`A3r-BD=H45Y77Zb?m04xCZAfu6K$O~ z?&CdVJ-}0MctVt36|7!$_UE$aHkMz(a|RsoZKLfHwYf=m=_m*7AVt-8uwd11;n`(* zkDh22_agCP%!UiP_mu)#Knex_w{cuLR;!e)uN{qq;3*|qxtlWo1~DsTrI`0#>qccb z6HAEBq$xA}Sfhm=Z82jWH7VX4>A!h%Y_RSY`I43vw{y;Uo%ui8D?-s3pfJ?|H(h*l zt$4Md=?v^V!>Amn=>QrqFQH)skoN$g2PHKCrg{gkIW?MP{Kn=Gl4*~q>Y4grtf~mg zSez#g{S}pi8m9LiAvKQoc4HPjd}Y#ea9;G1NYYiHM(Xcr^nLLNe|x0w`4MX8g^LDU z(U*f0pB|xa&Cy)da&|H=oTXl&@BWe*k`}I|=VN6)@mShEzafmIHJ>@o-bmD}X~pE5Jt}CoW0OfyUmkhXroHmX*Hkg z{q-M#%iZI|SJC6;D&6(nQ~;AMdiSwqQKKdj-e$g92brT-kPQHIo~>VWR2gln#~$)^ zQQa*woZ2R&A}dHLY$ zzIR%UvcGiHIx6R_V`@lxp4j4 ze!=~UAYo*AM`5;&Z+~?*-gY-w==YwICZy0Oc&gY`7ssRwL_0e{@aJC{F)sd*dX2o% z*=Oq=bkQaL#;kE}&iCKLfecE+(gsHN&^^j_FfY%eAs{Py&1&hMz3torIoqOAM zM4;xR<`O6R5XJ37Y^%z}$*d)hHcd{hk8I{hdqQ*V2tU$&ChzK%%#h`a4o-9np*F;` zr_nyXB4hj^%QxugMbSs_E=I{tTRTI7Zf`cYghXO%@KG%f24(0(j|Wiu6RHxcrMCLp z4y5QwhWQ+$oQ(~G!F7|v{b&=vNPXb*ZN*}C-F|fi^nTjxV@~}_mUBs1u{e-9YrY!I zQkM(tUmUGp0(!@zrwi(e1n6;qCw~WJH=wdLkX=9!EeD<(qo@9!;GX%e2;CL4O)Q+w z$Py^^*8WiAzzIz}!yjjJJY zKAhwgGF`ihUDZ60gQCj!vhidSZ~ZtO0#A{?b}40yems%>msvwnLShH&i48N6GO>Hb zFLC*UPeS*8YjuKNyQxLQ;`T0nYas_K0xq-O=%?_3p%L5V!7+o(PJIal*r63`wn zGyI4ZpEsD(i#4`zd;S^zqPrczPV(nyZ0=@?10w@>)lzZsg7UWu>=C2xVH*4iA<%nbNTEl++3{`P1 zoD^Y~v!bAY%PDr1(dY26eU;@xz*ot(It1H0WQfVlS39^tPe)0l|V$t^%*ju|;_+T}W{TLz7_{6Kd_(Ho8R1)K6q z|G~@K&xATy?V1m)e&qq_AxR;0ezT_|-a=+C5_H_!kJd3@xel#cH1p)F!h#56}x$(RZgh2fnxYc*UzKIVQCjwbU&3D;@HChI@NcksQO?DjST@CvmHvw5 ze%Wj4Hh4iVZ?-6y-%ISFUPIC6ZbKMXG@Q5-d37FjAcXZbI2mHd z_6xr(!Z!CxBDOLMMR8o&diagcvsGk=*0JwZf=v;-y|4*fdGB}}-s;h6Cw)sr+J{au3ok%ox5oxT0iJ8#H z2OJF0poh6Hd0}G_YzP1*X((z2yd7aXgLW89$4kR|wa+8Y8|p%`ViVg#4kkPkL$-Qc zKdqNqImx`}0cZ&RzGTdh>ybBm48+Hj}PMHXKMlJu!ZJ=Uv_G!bdO z-cmPMX|{3=(Jgj*k42wkAi~J_*-3O>G^p24Y%9tof#_6p2T`pK^4%q~y|}o(UHM5g z%B!tx-(!Ku!Pq+X-HxlAN0kps>sdbz$1pDrAYlN<02KFsC@z?90T8+8-C{YyQ92fM zYTrD|w_1x()-3%YIjdZ&k_jOen(KE_5D%HFE;XLYAWEm$s4S8~(6k>)=0p$7B5&NH zTo++ou{60xB>QN=3PxM`X1%|H-JARud@{h;>Fi{%V_;bFaxT?v2~8qy*j}|C@5%3G z{CLm7R$hsz(}6$(ou>c;kI%g4y3vl^dTGF|`YmdNf7LeupGj0bZfxz3+LbM1aC7X_ zv1GbeY;t)7yVGZ00Rvv? zx}y;tNz$Is1#5sBk^FZN4WM&xq#En^9;-dD7yx;^Hlru1NxiKmGW`Qz1poVkU(=Qj zGyBE9YFc>*>l`iWYH1=Jh$ovUc9*f&#~4&;%|6(4HJfiD6|K1fzk|&;&L?zkdakIs z&IPB@9!7@fZ{dlH1YPX=?Mh8XNY0}B0eUK?za(MQt@N$5S=+kv)drZF)847 zxv+V%+CjLsT-(^u_zm9l_wcIi`QSDtvJUVgE-{+9X0w-Q_d^HTtz#Fbo-xvM^rE^L zzMAbpJ45e&1s&(0yM};t1>JpEhw`9&?;F*jT@V^0z=svk!2rsM0w1n35pwd-Tb)HO z^|uB*IH)mE9HqTpP)_{30AVH+uLAn4jR^ZXHAV9K>)u0ftXA=aqhzgO)GlHaG-PbemV^fxyFx!MdvG{ z3p-nmgJj$;zEsssLeBKkBMbNPOv`dctHi_Av%~d}f(5oqq#exN%#*aD^@j0PSzd2u z*w!In-Ffr?Jf;S8;CW=!fRq6cHUJ%<)#35~qR~Zy3It`?(0UcppGG2jk>0voPP7Xn z5>+se_26^akS@+PA?NsjmV`@O-5j5LP1V(Q?Z_!tmiwLJEwY_i-*$+Bq~jY-eioRw zw&j1ebDqJLk9XKPwC(}__AKvW#1Gv4Yhe%rc9bFiyhvegK~u(pBv`S z(c-=t87rJIX5)Qh(qe}=(v|RMnno6pRIl9D_i>XaW0~_Fp_HZ#FO_~Nkc-L@%{rl5 zwy(wuE}}H{epWETA4j6;;<^;*Z$A&sI_fqbRC zy+4}IW=K>V*ds~M4mWwR`4gM8glns@9Xu{O|NLOmxTjvXk&pVZkU)neAVh#u1kMkJ z$N>)PvAw{oP_S>-|0wSSTjD(oIk>-8!L2ez;omDk;(T-Fg&uxPR43qaw^@x*|FDAU z8i-zvn4xd;O|YGNQ8${b0S6=`MYj6qNxpEz&1XFReew{hxdZ@?*OmSb1-r0S97?&7 z+zuJR3HHlTjcX=vSqNgyns9L9?(ia{B3Y{@y5Yz=D{C`lLe%?9QsIg-oVpK{KP$9! z^!PQ((TfH3E7-iJjAeH5X_)YUJF@8S;;{9Gr?t5yUJ4IVK*S6d9s1$FLFy;;lW9x0 zI8j$^U-u~@szLtcSDti?&tvWUkqbu=-p_9^i1?D6rIXD+2quoR%S(bn`UIBxYKsHT z&AoY{;;^Pm5wzAo84JkZHw)+mH7KzD6QyYZ)M6gqu0}rJ7B$tqTs1SRhu#ADIyH*{ zxe0@x@o~e&1wu|dI~O|q!~EHw=bCiopY;j#r&s%wdF!-6K9JiChBT~x3$f1|FY)|o zX?imFVeP6icO9|08)sp`29dFsZ(?J9a;@IP`g1o$ZL2{QF*{2_!f3&vo$X$NvnwZ3 z3`%U6@Q;^X*H6Box?l9&i-wk=5eglS2dx?HJW<%RqbqcCqne=1noJi?i{Zv@iBNA$ zk`5vkTJhr#7#VUwToH(ZLzbFcIQ$b2>Bo6zE1&gx-f$*%4nu0*?P{}^-EN2KZC~%U zixAcjUvm;3xNI>r6Z?~3)MpA@*KSu+vt%f^fHq%R7<~gfmZAS?t%P1)^N-~c#*bd` z!Z%5;YMvblPC4JdP|hB)0qzMkO`f#DCRjl0C zt>rnyd2UWOb0uT!eAg_x4HcE*`- z?9&?!aDLD0f_cz}&Xpq2v!DzsVw(FI%w1=TXUp$lCew&n!^c1bg*=*Z?Dz1D!e zWm2YTt1hAGz4yoPQ5NN6u8Ooa?%D`*a2f=CpKkE9NaIODn7S%*^^A{ITh^F!#Xav3 z2!*3eyyeNS>#1ywo(Cr6l>P~oAweGn5x0qy4q)Ve)_r z1TlEbm4xS66(;M_YfZNyTo`_}x#URingzimml^xL-UpG9UUKiLpZ*$A#og zF7%`lO)r~*SUXJ6$N8f7^A)?VT$fFjCDGCmafev8AV!b`4Mg?W_tqUUXZSA(vDoDG zKnB(7-csC==6KIIYlbb>SBGz}{IDtzuqQJ0tC=PZ0_(;z2!DD!;#6v*2s@kVrEkMgVQNmL}Uu)>JYIJe|rP6Qt zrkh}Q#+?yr)P}~yWAXWCc?(MPXo@~AhT^LmYk5OZN50w3B1kA!=5?{gS;6*>w?RwbP=E4?e$98;|-}a+s&E zyChGN+J#%O@w~|!Cys`O9!RM^U4rLcd1DTEpa1G}>$+L-XNC_Il*1y%Sh+{8a64-% zOArn7_Iaj+m~-gg5a}_*JsND*;)F9-zL4d^_|e+a9()pjLhw@P6>%8OwPXEsGjbg- zSj(4kclNidm*7r|;#&oEmJ-J>rNXw5f;4_soxahwSzjCX$l;k!$~i*kDL{GvxE|2I zp^F&6=>MNcbjYCH|-eF(f5+WTT?Rx@{+fSMp*Fi318+~Mjm#|R%TumF|mEyii+Hh&hc3y?QmF6QhT6|T8`TaTb_NOjt zq23pG*MS1KqwL*YpywQp=^_v3ih4>QL~}1}^^azI*>{14vq|0D$c`N{0=$ReN!_0e z3)f%h#A7R3u&}ajnyo*Km!J=@G;EpeYM={Xb@xp zxS7QJEsW-Z>Q7L&R|=H$1h({`=2#eE0I);AXAKv|JNiAuGr}AD3`4Dm4g$9K414KE zISprm#TbFV<|+_UWurO@5LESZ`w|tYw0_T{NNJ8l#^EqD-NBcJbfqH(*coFKAP@KV z8yg@g{hXqN9QfAT3!^Qf-6amzCJ(lmS$a2V>NFlO^8*;ynWAmG&t##lGM z^s?`pJb&pwrGjg4LlV-ji@TIIzm}R(9?;0jQ^P}>7=2iqgd`EL-wxX=g?ln|Gj8UlYm=J>#E;}A9f zj+KXMFhshE+pEW5ZhLcG7Z-z*^TawRM=ltdj?&PkF%hB-$JszquWUH}5m6$f3(`&H z4EO^A#zx&tR+MJun`KoPC0rTbG;*&n5E8nevV!A~-v^NyndoplCDBizNK>_KVM-gI z*p(|O*Cq$skVa$tMf6)R6(k)~@tQE)?xT0b-5Ir$^3cr0)siEyZF%#}LFVF2*yz<| z4tg|PMaYA}^65~h(A#VVtaHHnn-AgLj@sg0nEUr)vH!Ym>F9sG*Biilz_vVtN9-y8 z&I^w3`L(Hc0bW{#taUn1br5r_E}5uR<4!-7X#DCL?ZEu7BH%z#gO+IjCW;(uD?q22 z@@doXbxh}FKIJxq4KwPcwK27iYUxOu$%^sE0o?a%Km7%S?H~yeAEj&W;UOc^F_pYv z9CGrhK`XTA)>6>(Z|boS7wd6pmB=N?2I&{AkP+V(I(1x}@u<&{nnsD|$Bj4#`Ee=) zyCQ!ZV~Mh~XU?p!WGd$D|J6n|ySBAUaAUdktOklzj0pg2spO(iW@|it8NzB|-)Ag|yRo8F-lV*gS2z=>MXZ`JNl{<%-N|D1m#JVQ z_y!*3;(_vMA z24r(Ky)&O}%Yk3&?`_FvT0dK^9w%CdNEz>YV5uxRP_dx>RYW+fkF+7o&uW^Rxq}1= zBX)OHnZ9+wT`4NPE>E&{o%hVZ%sz&`+jUQ9JmVj&8^d1de`a{yTpOh$W+t+%acAdJ zrm?NwpzLc9R)%P_#tJE7>I-@3cn6)b2$%Tbi_A6=NO6|G{_DWg&-qc_@dx&&XG>{G z>6}s6eo|%X_#~6w!kn!7eWW8D`ON+#Vi3_DLbf(pP-TV>A)j#RDFN%vub{Tv^#>hv z9hO_nTlwX8AL{8W^5v0hdXvL*et=v?SJI1%Yd^L%JEtfmq`@OKD#s7UlwQQhf+mNb zabAe~p?N6Scn+$D=O?IYM6x@1y}1-R@qc$_q|o@Q!B}XD&%HQW?-X&Lb#5iqSV0~7k%Zwb|^*Agf-AOQR;6Ynd@Z=;n)t{UCjB@FYCH! zCl06Rl5^Z=qK_$gYW~|=89TPst!k#T=7lQUsNx-+^+)_Tv$ljM_*hr3j0Ob&1r!MW zZg2+l2(X|rKLYJ-fV=s~7+Bqh8NOXPx%kGLrv1szFAlE|uB;dD!rrB>N@}PJl`Cc| z5#W@AOfWPEjd>Cra(KA!dr5PJxO+ zwOM&Y8XAQfK|%*lR`5$xnv?sXH31V+(&ot)N7izNcT3| z4|VR)gK`{+Dc+zJwgcA-)2-ZNNi*%c(jPnHCZerI!&EKc@zZu;DNttty#2>3CS8DA zKgxk^2)9@=8|j>*{oZtu!B^&Is`thF=Zl{_@}1RrK8#(Klg>m6@Pq5~zWUV8o1^|f zGc^0gEuSH$xcq`39fI~h`ugg)sJ8EI0VPHWN$EjUKoDk_MmiOwLzGrhV(0-RMM9($ z6_5)k2uKM^Dk&w>pp4iT^Tof0mlPJsEMG`et|t1cE;&66A1q6l%(%y!db@s~ zTj#K3^W4~pjPeA=LA9jB{H-eqOY#rC)?I-8^cG&4@Rbx1w!0k{9oj5HN>ctmJ6{ZWK@|*!4-%l+6e1)J$HSF0L`ph+|Z}n>V@}gwqe&F`OHW^dkE39x_ zmfY0G{fa{72rP|Jjb?3)cC#GhGPqfU0Z7gb%+fxMV&++C_kd`|5Og52%GBIph zV=ve|)NETiv*Q&^nhQ0T#9Y<5f7>D!+O)tQ73*5hK z(7!GD*aaNg+LQ>05ohh5p89@|RRlg+E4cL?fzJC_`Kp+qBJ!0%2x}e>c zaArP3&%jxzdN%Rua))jfWuj3~<*ybp$IF`1TA98wB4aug`96l&=;r}cWsj}W5}E)qtDp?l*Pbg7T!Bij#@sq^n7&3YIY-OC`xhKr`prr*>KIe7+l z_GX>#sbV*Nwu0JxgpU;m!Y2VNTnv7q{*UvSkdXwAMyYxCu@h^w1ACr3;Vf@; z{g^m-wOd)XlbdOq<@t`vDVM;^+8YSDe%^R2XqZ!<034l&+D!!mFFWe@pgHm4B%{W)Z#rtx7S&tP`9^d0| zozgX0!@Sm{B!2*Mi2`O3o?n1*FFbH&Vm~)cGx#C2^Mm(7Dkua-;z(;FXKqf%W;(UJky6jyhWXBo^sd<$k%i->y5AM{J|Fx(yO_*jm%_?4ck_ zxZ*d!SH)X;kwlL3ofSM1vJ-%yD?((DeZy#AW@tp;>7%M8(b(KO9*R4U6tQlu?6ID0 ztFC^fag_>|ESajkn7ZB5tn!B&57ZL(6m@wbE^xwPhbhg)sX;Xnmve&KW^x>mjLNvL zCwTi+?wZxoIckP-d#-l*K^>2epkd)KKLNAq zD0m+4-%4-;1)2eHcEY=X;s^SlrAt!Iu$|1g^^DOk{*bW}k^>j3vtr{d;wrloWrgST za|Q$XS~gPr_P~x|xem2`U`@aAqLm4#7-=i_(6B_L+wv=A5;v;aTS2+wK1}Hq=b6^K zDC;&Unl3We^IF>}kNrIGdg>1vQVhHIsP~hM3=cy=$q&xJ#_KkNRV=7kzfGyyz|&XK zwl=DQ4=9GICHHSK3%TNoY8)m;V>&X8evNvhtduE+xEuRQR9=BzXLFx%Fj^=W(-o7_ z#I-wO1o_`dRvL5yb2LyvF1_(q9{@jtmw=`K0CH^szMp_MC_qkR1^|ixNIQV5c0a&q z1OO*N%QO2{rJ&LWkw~xsVKW<75}w( z-~3KG|IU-EpK=|`!JJQDzAs7nww)!H;T|nzQ4rs+z|->c-F+v$SEBR5vGZPJv8k`F zOH_W2i$sOsr`|Z#atr_kp#pT*`URk~fC=a#(1V^&9hJRe(BaT0O?KVf@vJ{4+$NDh zU3U(?dT11dRsFurX}9M}du5M(+i)yobcAVskE5a-5t~A;XI(T$Q zH-ikSh;Fe3DK=&ae;xQ1VOnc5yoGG)^SlPPnI6*HWnOb0k4}pf_{36O&U-GmGXIsa z1AyCrH>=lm@W5~cbU1Zg;J=GDabglGL+v*_Ooe*BF(95VbfdeBt**{?!g;;Dw>VGL+R_y&wn_){Yl5) z@kRUYLAYl6(=NIiYA=2m^1B~u0yH3!2j*)a@D z^lCKuX~CSFVD`NH)+Ez=p(iEe`p;=G!D=14jeII5v=Sq3(R{G}B4W(wZ8g^AjY(l> zzjE;$whaJ^1GbOf1CtElXdHF}aF;te)QJP!3y-kLApjXe6HPhh(N3s?N>_UtWANk7 zwOrElx&g|2M%Uz90D~g>66I407{loC&HdR}3hE}t~QJ%Q9qJbFMSOw3(cX5WC zPfM1p6>&3W*Xy-$#X(I%l~k1_tIZlgs&h$gzJ@QK?4ejVDs=;p*mTXH)&agstatGb zIm*14;w_FK?|khRhs@j5S1O*Z7QUan*YfLq1G_|h9#15vA+39bK;KdsTUcyLTCSr1 zH`sG739+Xx0u!xQ>(Z2He1njYVE3;&E|aX|~LO z*@;+VhYwaoA#}Aj3rbU&P+ptXyg6r`GaL^yS<;cLY>>>u0zN5!3B#?L?~V)X%zrU4 z$Mz;ZB8z3#y`}5-?nSlTp?+e|Flo1R+Du!{@^zD|WLdd&-pd&*$kLQQR#6(k96q)p zbOPNk$l~o?x!m)FH*9Pq0XI*FljDPo&1E@8kTAU&Xeu6aGPK{C`d)63Oy4`9{Ym|^ zRMJY|?AeglB5FErG8E(iPf%6)j@1m*JQRjI;uY8Z>qBKtM7yuKyPUt>nFl?q+aP{B zG4TEYgQ=`Ue!{?&kyFV+Ldx2hXWP+`72AL_$ueKevv*hxBHL@8I+yV4+VG30@u6?44h00e*lqY_Y$ z2J~1p!d(psA%OO*K(Y7LW-gnrmWk*oMIxFhuNPfFF+`fi^0pXBTue#a;-jun;q_?b zLiiy)VORa*xYWltp3lySl{`>%D$CV~Y1qolM$+ztCBYQn74OhOldUW)YDtb*ShEm_Eh4Wws>|oyNfkBA9(!%EUXfD% zlX6}h#?H*Q9+~qx?ASlYvi?d}QsX8JNrHg@#HZn{Ui>BxfI5UfnZ={W|2cO&3uvi= z&({}PueTHyShDut)3v>tL>0(-!|43;wW}L8+C^>KKT<)FMalf$jPAwMjpAtb4`Nl^ z6gSUKmJLPQj+8tG$9IU!o{?-E&lyj?#M}kT16?(`^j_ewa5ZC<`*bmX_td$OUdsdb z$n=|KAG;mnaFuh1I@YWsWO0FvUm^l>OcI{_z7zTE;uL7^Y1D7-Qz(^}u_w_Cd>UPj zL&_mGb>@nC>2XWe7DY}>H$}vAT=NtAY46>TJvyAxKH3qzC1hyJy~&eJ*sZ;K9uM3JfI9*W0kHi2zsxAwt^@=7T^QBY zYt)w*3V{G??zfejPTQYk1btpJABIBSKSn^53m`K{~ z)&S!v`g2+V6yJ($zBRgBw;Q;z=xe<@h+|YU(GdMcpCfL`&?G?<^}IJE78_m6fnDZ4 zf@}PkL>TdeRl){g&|~mceIY^!yp^5bfvw8ywV7TOX3eZ$=O3!DtPr9YKF z@N{9eCG{@JW0*Vd_nL@%0sKQPfu7SWOyOUhIVhO0>Ivz4tCkak^FmC3Fi+IsA)|pR z;nnleQ93Zl|Cz+GZaLv#INiR(L9J`xBoNHre|nPnB)=5xVXkR+!PL!bpe~coQOv${ zeMR+`rhb`I3@)<;O=ZxPZ;;O}UlSM8^X*9w86p26op#ek-(k&J{GAom=8Zcm?^3~n z^?PXn4%`Niv4srK2*uXr?K6;-(`6cKBuZiGdf^b5cVjQ+^qj8C9ZqV#<;AOvUIvwW za*6Myo_`rD?RMPceC>r9|Ghf$xZ&a=PdmR(Fk@HsjUa|!MCRPLv!x}?Nnr??_Fn6rN^H!xHJ7fpUG`Vcn;e zBS8nx#?~*tqPCpwaBf@hd$*e4uV&~JsIN+rOCHIWwqeqtFlaDi>gD=4b44Utb6?_J zxoNuqt+>rK@@ypQc1Vb7(w6;4N$RhIGPzB$_9&$#q_bO?wWoJ*aP$}cMO3)#x zP$d+DyZ#}q(}~%vbeD;@c_gQn?c2B9TH_ZK40=l_S=jj*X)q7-J;HgoOyWd4TY8a8uRxM8K=DNB%JYIUV zeb8%F28BB`{ZfG&v=^p4ByPNQL(Tl^d2+V^5Zk*wuJX#ad!*9KQ!U6bZzi7kiM4K- zd>Bj#cZ0yN4lIQE!E=ys9?nO=10pmQ5K%TjxI~B#KlSeXYB2X1Onc@g?DPhyll}+& z(GGi2#H{iJre-`zJDv|5iocHkBl-_&_ao+Z4KphX7qEzmjkych01Sl^_??aLtk7-% zw=|wZ{_ng<^glAoIa`?FsigT;&0HPru&#DCcfjs2VJK7>A_TT}b#-(R6A`ih-!);Z zvy}iyM8g?t?snJW-`O0^Ex~up?%D!H{QD6C|9Gv3vxOxH0!Cs$0H5}s4;TqBog=`O z;QysTkzm3#u*07;I1&lL97}`3Md1kIG&E2#{O5mpp>P=dKhluI&x2tg$MOQtK^}hx z1OkHrE&s1~K%k;1`0+G|DCGEif%_20?}Os$#gFBMLea3}d7)4w(R-m#2m^`6@nB!%EK#>sQG&KBp`5;gX1|Sdr*LxwNP@;B*h>D_#o+pYVZc|YV zULgPdJV4fu%K-!?iacIl2n>NDPD5je^1@-ndEp2mxq`q^#P3Bwh}#b#iXUMAE;9l~ z)Nc?398J`I2qc84KM)w=yhtdDs2)f-k?cZ{NKvA8Mq*&cWgG%jji}5h7@A1NQ3&F? zp-@EQ4T6Re$uk5E14iGmc0r^5BMl8BDhnDTN|c6yiW12N20>gF3>tO3ouPn`A1@0O zA__m=R!|5GeY~xJp@krR9twH9KcFx)`gmVLVMwBWgTi1$G6V%w&hfedX+(8{!bG9R z>j6h1(8tFhpeO$+8?Me~Hg*=yAaQZ9h_;QF1)z7qB3f81eky=~wZJ0R9W1e6!c?Gz aSJE!7X3nkz6%9wC&}h)biwf$Bp#KB*ty%s6 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/streamlines/cfd-stationary.png b/src/steady_pinball_theory/figures/plates/streamlines/cfd-stationary.png new file mode 100644 index 0000000000000000000000000000000000000000..36d55ea7091ed281d0f6242f6fdd5dc7945524d0 GIT binary patch literal 81979 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

6jo;!rgElr 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 A_5c6? literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/streamlines/mfs-gfit.pdf b/src/steady_pinball_theory/figures/plates/streamlines/mfs-gfit.pdf new file mode 100644 index 0000000000000000000000000000000000000000..08408bd43409a6e414278b8d79e9c6d218218a4b GIT binary patch literal 46977 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%0DVg zHwn!wb41z!9gSg&aqo-Z@{SLA%HNr!*u*-r`0Mc)91MKW4g6C=JUEq3`0l9u zE%pruT2HMgPog<{FG`RCA-9WSHi^4YUw$d$Ls(@~h0wswFZ z`k|PODmhooeE88G&Zq0xAFE^t-08sw1j2l6%|%asky6Rq^k_(5^k%h_mX+f?;559eQw!+{(diljuHptyx{>hgHPG~<_>O@oRv2_BJeunWX< zU(}Mtbg=T~IyS{*Zp;QQJ*62FLR}=0u~F;VPFB;t6X5 z@-tLgy>dE(*>QhfTQ)0u@&GEMBlH-GLMw7-*nw?^!?!0Fo{*qaH2`dVEVNcmZc(Zn z=O(ulzQki_miDb<(qz*e@r{!uWXgN?`RhMehcRn2S-@m2UlcWa>pY)u!u~jz^}Jhe zI|=7k@4!$nB?ke3Pr>a60OZ2{Un{S#PbT{{Bw1dMlTWM*MjH=IF^F%Wcjtd{U&53( zpng2wDu&%*DM~XhIvFVxr=7{?Kj?kHL-)aBa%;8jW&8QYLM@-L#qmBEU1DsC4x;wO zXGqyiQW^X9<)`%yti*yd5t>mZ@OdppzVCOODgKVS+Z0Vb*H5z;=zH$5t`xP;{@CdK zV4Y2PS>*cqP1z*v9}`0P;=%;0VS))aTN{Ni(Q@QZHQg?6E1M8K$)L`r7vF9FtTaEn z@tJBIx!aSzChM~rdmkM3r{`&y0|U2+qt2*ZDY0+==4Xqe+qUWckE4!nj$i*i7<4?y zsibzs=1%O;3!%K=;y zAVmWj2tseSRF0yR)z`RFhU$*7jjWjw_P2+IBA{gwlEK{q#~(z^U=0r1Wslh7EGyzj6F zk9e6ETiR>!e~!QFsoV5J@_SyiQvX8LV1z&VH-tiMMl%m7IH|WNv1^7+hPOreg^|mb z$N3o=k*Ka%G670Yr2Va9BYk}v#4C5!hg*_<8V$Kq&2;}ZA$faF$u0cWkTy)#9Lwhy zA=xs53MMRVoB>>;Y@L*vWj$S|e@{Gu167e|VStb#Cbm8{cd!yri4&}EFco1E#VT@D zu1Tj;JC%pnfYz2Xsn@YHb|Y0(RAGbDAC`noZ-vtoAn#WP)xMp44&7ARa_&I#|s zZIAIEtnMFK?Cb%o%J|4b&tKDxPFrPlf8%5IC%2MIs#;DQcdsO~4$m|!N0~MmQ%b2%?GRZ|x6_>z$@;x)FowRA>T1fN*{vPD3ptBr=j>hX*KSsr{sODe8DMVKw-LBy)9UbOY%@ID9Ro;pI z%l?~$DU&m7Hg+Qq1D9`Aqyh_uLE)~yNK~7@r@KX?>gX~R;PUjy#repS5p|YfAs3fU zt`WY?vBZUU;gEx40l~m0z*>OBFA^jJZ&U1ou696k{wgz_R|dJUh7y~f9I`WeYUu3A zgdC`*?$_`Pur6)A->C|!D2q%n{hhidJzxlp4V{S#TEkY?mK((XoYWz7+)-qF>(7&_ zWE`?A{@Np*-cVVEcR4H;R7BH7Z(W4*D6d=cbd|OB$0N!V-SZI@A><;9&$S+7ycY$L zStV`}sFY4+6r?KN_&A)pW%$)JtLtA{@{usH7vfC8vj$k|*8F6x3yB!pc3kqogF>(L z8qUHX`UgwW8q?D-jZv!DSNS>JXw)XAU&P|8$Bo}mP^hi>EH4eGcG)6hJ;h1Mpgze?@Qq_m^lBP#Jt@!55W% zg%(P7QEr_l7j$oz4cDDxC=*Ig^~i)~yPPaE828MWl!u-Xbr+}BhtA9$ZMT|$P3skdLz#$%dtSr-<~ zZ7{D63cL{|6mkE>jZ&oUUM(@+>gjTW?XS`Cq4ol6Qor7jWMG{ZO_iGB3iWxtJ&A{g z)BX_eOp9d_7iQ0L47MmUb6T|yLY|wA?Zz8(nSkHT$M3H?cRjETTZPxSEk=Ycrc|8* zvLB}lSBj-H_H^N`qrCN+ymM8KwRP#ofYQxjw3)Bt;$lu^s3)P#Idyjf0X@nSBJyBK zaN*;>UBWU?nS!glagl=73Z1`qhi>y4pm6f?UyYy!r)-OqhJQ_oJE0FPYbC-Y`tycA zy>JaD0hl=t%RhQ?UH43gu$CxzqT@b48Oadki2d9226LrPYdwW0w3uYqGQld*!3ziJ z>Z9;AEo;Qr?{;$)GhXG{DZBVfRTgkIhx*dFO`jlQ9c2cmHBOy}Bq8#3(YiqpE z+vNg;&@;CFFRdDJ__;n5_~G;^r!A@6@&^-BUS`)0Y+P;Fz}S@=IJq>WZs^_)Jx_FFq*>pYW?>8U%Qth! zin9rcCKqz0_{m1lTwFY9l_3lbt%K~x`J{u&OfyRx$0i&z&}B=6y7_hR$m0c&4k$TF z#^L=LrK36u*JW_jBeR#5EgxM!@MdYzP72st_cE|bM#xvpXa@LJAzAS-DMx4-48%?F zx%$d}<}J=OMp5~r8lFQRJ$2IJEUYu)E=d36C{o%!Wv+nKpCIC~Bu0^oZ}EPqlQvIe zI$3)As)$ZnDZNw^bpy3x1y5+mbz1Gz3|eve_L?Cinac}>Hp|;pizNO9caMRb6J~;! zK#4i7IU3V5*ZeK)=&hmeqn9;zZeQlnWGXE;_^ycF>#kFMWxtb1K}yd+%PHSB3#d`91Co0MGg`CQtAXHWUyA#1^2Nu3;LOZE*?yyLgxh zB6`33!3TmKBb(h<(%V-E;I_wl&lY21YqZeMDCQab26XqDLxoq9D*gmA;Bk@-owt>7 zy0*2}V|NpZ#}P$J%)vFrskc)(kLfCf9Vqk{oenk_H@Ld(wUkD9z15zT&o6^FehSyX z;`u1vIh)j#BSB2K@TKPE`xy0q?xtWZ;#7UI?CCKTOzv;sr~J)p<4eBDB~i<+b;daM zYahMp)BEgjBOP7edBvp~q6w-vxtTVrSQ%jW5%ojbDkk(FecZu7W5)mZ&?r>-a}L!{ zH))3vKGlsbJHmN1`E6lb!}Dq7NXc+}=<86c_oXiF!}2HA)qJ$0#m`bGh4LepZRcXi zvJwg*w99ZxHB4YJ_M(K%t$9HLVVFgT;l5O=X>FA(1t2o%&uSSH)i8X( zc_mwBIg$j&VZNKoI!xK-)Mcae%1Ak#^Fmy5oE{ldw z5pM?YcVp0k;oqwF&We8F&5@Uj%lP^@nJM8Vb5`T+zE!RWUn-~8*)WSF zrsShVgA19j?>|-S2WTJG{-4IKJRYj={ilhsCX`IJsVOAO%$PAV_L4-A5NWaRduA+= zvL+&-?6OAoz3kbFWEa`DkSwXjp7`B6_4&NMna>};`G?nY&$;J3=bY!;Vt^bKUBr4!=LKo@I%2@|!G=BaKH@ z-aw>AQ{%fNy_YV0T&Jehhes9GYwlfk+Wxk;*p&WTCzq?fE+@~eR@c*q-X}-^Hr7z3(Rf5wg{#=cqlZi%3G1{aGAscxTG;I3py$Nd zw*C9&piWyokZk8i16Fqz6~5i3VLrlv@`w-(eP;P)u*LhbtH6z#?&Ewuw`z|n;_7bY zLC+erc_s+uwU8QJcx}$wjh#I(6l?F+@?ecG+q6tyBuV+o=~sM6(N}95r0mSxJ5Em@ ze36R~W+RvNa%2N;Rf-gMW(0U+ko)b<%m#2oOr+?Ihry`q@=Fw$4SPSunYLT!r_r77 zwlZfTEE>s|6bGz1jQpI@J0DKzc@xEEN*Xu?9Up`epA6+4ix&22PR+k5drvErqmsn# z+}=82n*3C*Axwc?uUA|9peGU?ZN}@~&-Xm@QKVoz9pY(YO;l-UDtq_j`Q^$Sm6!4E zHjw`ICpuN!WhebiJC2UA0kO@Y;*2vk>`|^01JQ-Ayf&JI8lKk)$-hqy?6Z~0EE3O! zt1@VFKaMPC@845km}^OnbF_nGpk+B@UHC7i=IA3|>N`86s5D|YdbTdJqnsJ}zO&f{ zvbZY!4z3@@QnoJ8kI(^7>w&8o^ye%FvUS|Yg#`sz+OB0-g!-13jPvTM_nwD*{v5ye zL-mnOW-adZwwuz9&hn2&@3n`^D-g9hpyvB~Ge*_57h)wpjr18NoU(Qa^K#}c!R%}^ zn@)^n$s`WQ?YG&s<1UWplqCCgU3Df0aOH~~@cS8A%|B|s6Cq6av0KJ8SdjAYh+%)XEi^`vCE3gO~t>1ys(ks+0AL61t1#}}xja0K%| zcrV?0@dEfc?FF)e3xNw)5R_9-Q1SGY0bJDl;04&j2e{)5EAxmrJgT2Xn69$#P2{&s zL?74gLZ>=u`A5bZ9_-&d_BecndHo|T!c#GWIpoaN;C=~}VserKV`P9>VYIf2%PHBE zhwLh;>BT4kW|E5zCV1*J=BzJ{n|E#QNpEGegu5_K3awII$rh~NCb0c;?{venA5H!{ zhuW~H50an9Y)`+~TZfY1yuUaa-CaO``mK>rd@~dAw$ht9id#^#V zZ2#2>sV0pIal_O8%}J7wNGn6$Gfa%(pPTjLqDE5`7Jeyxa3i`Q_lnXsk-E8u_<;1J zReAu}gD~)y;Qsq=M+t;fUiuvl02(c3W)mnUwQ^rKqPRQp*uJLt`NaoWombA?(^Z{4 z4qqdzU#yd~kh=b&D@@}}^A~>k+bgMyylJG6r|XXe`8>rDChCORL7(vgV_Od8Dh`uL zz3j17p5ZnHQ!no3cZ#v)m073lVRn)ZdILH>|5OKKU;9wMub9fTbjzV5KaTq^ zntUVs&tc;4(I#NS-mciLXffq2rs=TtmMIaXHoax}JXt?|gwH|UTVM|Z>(r`@DtPst znkUOTtZ>wr1Ci4J{seG|R0J&1(GN8O>9mMnDIz8k{F zd_;nyx+>-?0$Ikn;H52}=SqaUb?03}&dtNFw>v48EyTWUEjQQ9HWB@L#QKNTDc62_x$dkSA8TT%;a% zkZ6g`g-b6%SRK$L3kFzI;C24^LVy|0F&g*afj6g?IJgx@A8-CXZelR zAj>V~M>}rb!#%r@9}}e$!xDU@JA`}Ptx%}fj`4odNk8l$R#BYmO-6#7@9+n#T8|rW zx2qTwbo^R-DE{Q~q*b*|RO(w);rq({>u!*Q8JTeF`Gp1k)a9rXEmtqn8ygf%nUrB1 z-v$0;nUPNbTn-}4=a3X=Gw z)*Oe|kKtD{_V#ECc(OAj$TNlt zbB&)RJXqoHxtncQ9j8m;_CzT`sQ zejWbyg|;YYbaD#eGwbTtt80CV40sZ}80Nu!Um7p;!fzVPCr$K;JbdeYIhH@;MMUM9 zr~A(i2D6>4H~!Uh%$d%>Vu0)VIXVLk+UoU7x_A0ui2m8Om9gsrUJ<>Knh?m2ERoA8d2BMamtxl z<<;?12<}aB#$E=o*ATV(mh$<{J5~1HWgeWZkuMrYW5k!lxeO3{GMLMJx}?u^tE)65 z1iSgS8mOI4VGTBruvDu}Qf@nJ94tk=Z!Y#etX#shJ}28uz{x(MPLWtuGuW?jx;rMK zD?Yq*H3e6fjLhkBRWM!t@DuvMVrnop@Zc5Go;szW+=H{Voh28wp?mEz9}mcmSFg@b zy<+^RgS61L+(|Nek~-8gruWU)F-WTG_#KO`Ouvk_Qseek;Uipqlq_cRpocfP0KDb{ zTMr=EprZNvOocrdxx~r@GM*O)euJwU^6TeJ0yjw=vG|+YY7@|L3EEUw(|qT1@?ls+ zGT$Ebf!jAAX~nnq%hKQ#2mBTiyqSq)xsWx~dEPZY>)cl5WHAZ4z_k&UvNSe*Ouz=6c#DzocRpF*}h5f319^?dx8KgfS5z0Ge=GFE^py9H|BIk zqqf(j6-+tPuK&o3zp}{id5@ybjSg!q!C2H*^*8CW`R7btOWeQBZaPT71T zh!^a=Ewt5ZA9u3pG)kVVP+8iVfw^RvU9t&4pML|oGF?~NWQ;PAcAcCN^G{vM;snb6zpX3usbw8 z0ifhubq%UY(NH?Jczv(&5$DoZ;g(Yt=~E1gX*OqISJ7``0cYL`$nAancPisN??2x(H{#z} z?}77WI_{JuYa9#CC0ut4QZB*ChH&hIWnH{HshQC=&Dj2JT}e5EmPxFcn(aaJqA=wmF>_D$8D~H8=?tv0fT-KGJ{Mx{dG^5{k_^}0 z)_aXgS|A9p+03zn<>{$N6?NcQU)4H#$UNttR|7hFSK-ifT9vmso zDX1P2uzia=d}C-pvvB4#cf$qYS?XK5x-LGTIcLvh>;CE*j0 z;_^{9{o@v~<}X-9XEoK3Bo0Qwa4Kif(H= zkuxmW8~Mth(>b;NyFAQ%Fk!#TB!2Q+I@EF`Pr+&7%|dCWaJHU%?ud#!v;00=qkgi7 z#wrj`3AoJwN9cLr0C#}00RY>5UL2qbpg=EyNx45D@a4IQjuWMM{xi(jxZCBm=6QNJONZ-U6A&H%nC2x9zC zUCI9iCRTJZGXmjEg#f5ElDItqLjF}-M`Po9GompGKyFJR^YV`sW8gUt_gFyle{#6d3VE|m`T{JB6KWJzGvVM0t%%ajLp#6qc$k zS`q_H_+NE_zTkKF1&P9?srkjDcDIW}qtF1l_1|rvsmC6P#v`fPKohW3<17I% zxBGn(7!)-P2dti5?P37TU@DpfhN{mP0Opyh9G;qAED}rgJ}d@=Z~vQLES9i)O(L=X z(LXGnYL1YSDC)YB7&O%!0nemE4Gs(&~%j*2%NmOxz&MJ@zQ11eHvqfT`Tg2MUR! zTDvGVmwyz0p$V8Hn6N$1N12Q0iV?1#} J>C!pI{{w7EQlS6< literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/streamlines/mfs-gfit.png b/src/steady_pinball_theory/figures/plates/streamlines/mfs-gfit.png new file mode 100644 index 0000000000000000000000000000000000000000..debf8e1ca9a6b75bf03d48b7d981f8b3d7b53767 GIT binary patch literal 72888 zcmeFZXH-*Z`!|Z?j5=c*bX26s2nrU;2!<-45>UDVf`q2hQ|Lvyj*g;I1Qetz(joK& zkfx##x&jH108uGXLx|MS0_WP!Gv|H3{Lh)^%USEJ^}5!~Fo4O8Q5&TEeSLd>?nTNA)z*TQ20d%1IRf3z3 z;ni!ud*VHO?Y*6R{P4a$a-M;srDfaT*MIgrZ{;H(ux}Ug&jy!_9#er00s?yIGv?P* zCx-(<%$?}#(+_?-`^)WJzaQ*-7rZb3*p~a(wC`^(E47d*EMymlma&y=k1xm-4*YuH zH^J=uxe=V}vmbx>+3gUEx4E%n7ndFF^F%RTZ?Vo^-oCqnY2!1|m88f@tx+7Z+|%ME z3h(y!pAGkpaR2ZBxv>9_k30VJgBzQlcy9jB*Dp63R&V^z*B>@W4gK>Mz6tD}`p>ro zuHX1M;GeHgy}Ygd&({a8ycYZC>z)7S; z8h^#W(9rNQp{lg>f<=j)Y*JE^sk!-~d-v}3RJfQ7R=C6z+0>X`yLK%re0?oFvIbqc z(3*clS=kc#Wh*NyQyUwZ*4EaZXWE+wU-%W`hpON6f-D^2Wy-HlU%M9>`KY2xt+4Ly zt>2FZrb$XjIDU9}b6i8Tk-s<^V|w}Wku>#ygcpA71fJ(>_fuP<;(Wq7lTq2{Vh)6@ zBXvcf&GfC8Xl~u+4IYjzF74e~>oO7&E~#F3(C5x2&PEunMSG1lNA;9D83+pMnV2Nr z*)9?^vucOuWhdIjZ9Z`Q^o|3kKDP(We?6?VzFJYYzP6&^+#!^2-`FrYSkV%HBJl`r z^5YDB-=00KJGEA?j0p+~nm*Uvu4iBnPbc9Ln<#6nXLk?8HLmly-gBQX+A9Ukxh}z_ zkC(L^h~F$8@{Sjj?#gTkEyoWk+`E52POZajIFDy^APJO#|O$B&ICqZ$+N1+addKOWo3lR?XwT@3f!67G2M}>YIgs@gKS)X zv1zVx+RXkBdU<)HJF;PM;H{jxQdR$1oY%@j$77>Jl-oYMx}`I=h&C}bHC2tFm_a7Bg_g@`u=}J?#l&cxrbuT6+adL9<2Kz$8*=aQ| z8S@?5cecf5W=bR}5t37br)rSfd#TS0sjsJXT5hYqhCPzHP59(_G`iqYp+(p8r3@Z3 z+#Zcyo@YyIt$w?O)_EMZH9ISd^7PEDKWAj8Jcp%~h}KmLp_v8#@f+mQZf)A`2)AlnV_Q>#tTlRUaje5bnxTW< zv|V^C8H5l=fR3x!&H@vn|6pEdHeRQf?Lm_z_HkKMe{W^HRWOapw_mw zxU8&0ZoN5CXf(PysB3rsV|go@1DsQ*hOkCLvKo#iW7QB+;}P5#ihr&fmF35#h4lw6 z)$WB;_?22X{_dH!X^EYN8@1r^ypY;{GRJZ(r|4##acuxMfxsZ&8&&Da(%bF!?&;0k zZZ9~MgJlkP9UUFdhlJEsVyXJOcI~oRk8X6Co#-qNoOQkz74^6wbS1&6_S)NDS}Bwx zvo@bpqVWTzXBMW0kC&B|^%Pt>o^Mwl^m4SLwKaC0-EZLUPwpdHTVhDq@vow#@ES-R zG%vI;N>(CZ>or}C%q*e$)%tVd;w+R666Iv)@6zICS78G=_U0IcaoWe*6Wd4XgWHD^ zom724KP<9uw40foJ*=u~h1_E~xnlFE#?ifkN9E)ak`!I;Q>JHqu3gKF5Y;+2HCS=( zm#tf=yZ~qC9Q;U~)y&LH)|p$I!kGP{YQE?FCkGB9CA!c;78ckjN#h)iXf6Ha%NJz9 zzVzkCM~F7c)9V5&RH7wit;y#0y^)dIkiu-9Z>po_`}xYGWcVZM$x9;ruWoI2f?HyG z;ll53Zf0bYSTH-dEbf#-C1O?BbQ~4`A z^?)I-yYUYnerQL(`7%^fp%}a{sZgcp(j}S;jl%fxu}k_IO0b!eRJ<}TLe*L^^=ssF zS7*DG4^%j`>|niM7b`Yf)(82qy41P8(W0uR6WqkdkH=4~erqx&Vo3TL4Huv5cDZDP z?tLeuj34;W-rL(7MX3MwdTSRPw$!}5JX1!VY4-izDi3>BZbq0XkIg0Y=NPA{IYslU z)~O}-%-&E-+JN>vePxsqE7|bqsKJI9jThg%H_N6EL!9_-y!#S6k zvDOV5E$^S7OM`2te;KZ=^6H9-jP&i&;Muq=&5VELn$D=9b#-6RH#5Ulh>{Yud-F^VAT)n;*DI5(Eqq4)3Kcfn^(gHw{vFfugsMZZ~sHK%5H zKwsW};@WMl&BYmeQ`5NF54U!z!GWcn5Lfkn6S(;CZrY0 zIoUllWW#D$nNpk*N59cCGV+_M=h?Ad-rVSB z;?ov5jFo2FZ2dhfhDW2umlJCvZ?3m?7g&}|RT3C9WHEa)b+$??DD?0ShO|98+B|CP z|2lN>+sE&RL>Pr#T~ErJ=#}n3n!WtXCQYX zOeu8Pm+9yPCpVQ$V5n`}w9Pa5q}wOPLLe)RC93Y{HZ+xsZUQEynw#NkatS@XeW7w74Q}3ZCe=m*DHbQtmNvBr~MXtR0nHR_Nr50RD zn;NcF2Q1>iie@OG>Lf7C{;{i7Hme@C%hL^g+mp+T%uFm^u4Dtit>+D+!OMmoeOkErx z+9H`3Z2uK$2*27GRtHbM(Yqw*Ra`su!gP0{h!Xyr(d#}ays7|v^IJUVm94y2FW~NX zLmKh|-O!GSy2q#*+Qnl~yPz4<8kA8#Th6>M*uT8bq z;j%-S*!uAV>!L<`WM4|BUw_@&-Ob~N07)>$V3O6`zBorVDxU~rr3I)puFgD&^%$ue ztQm_l5RDyWzR~c)ui<&TM~3)ye{bR&fQzjD+bgY;$RW7@_aWd8*Y;cbw1@>fS{{T} z8oJv)bb0QC)K^XZoEdXvG|461OQRvqBe8)u68yE>Kj7k_eQpf z7Jn?|a?NCUdumZpktu@%@W?|vqvQ5sN0MS_Oyly`LIWeA?A%;+c;TO2S3bUE_Pb3D z)ikt@`gEzbAjpF2vclsA$W?#%ff>BK!fn*bXHh5=Pbd~)F0eP6yA$N?r{=g!rl26Q z7n{3H{9g}yiLyq5xqj&A^$l&#Pz<4H!2VGP^IsTrQJ46Hoa`qm%xbUa9tvxfy~c_M za4DYM?d`MtkA-3UW#AA#AzH_e9rIqBjtO6k<}=p}Zh!i8E!TtD5KWoZI$ICdZG83W z)%@hc1_>%Lr)DCUqh6vdymLixgZ673p9UPtP)_n#arl7LhlmIt>Lp97s^>MUGwq@A zU5)%^UoWq+*`}RZc`WVl=Fm^KYa>*e?(VcKIS8dh2s^77P!+ILhWTGpu-?Ck9FIh)l!%1IdO>))SNZ{#m9oQ&r( zCf95#U1R0LIi&tb2LhDdF5qpWMRxV{>&D35e%5rmw#7KrT!TN?n+B`$+?h=y8bf1} zl<3le1vAwW(F&`R^j=Nr2284Sz}m)UGBt1_3GRU`rt%0WG+f$NJbcxQdDo1Sau-@6 zkf|A?oV04OS{23aFYz$U;ir2hd+r5)JpD}jt{SYyXG?Q)$JG#MDh=b?j;-7dZf$UfgT5T~wXW_IvvJ3M z70(ZP8ZF$xDvu1Vy$i63;=b-5l05BeytBFW)j;M)S%ZUv4IUR7XS>w1|85r!u)UA_ ztpKT?@G7u2i+}y0D9x!zhODnP(Wi$`f_!#gz9{e1@ zU4{2%H0}0Ef4S6Y|ACU zW;*CGGQ&My&F^a-1F4i*aG7zju?L|!X?&S}oO?Q~A5O~BR4o^cc3fSY20rh0su(JO z_uD;|seJ=LOU9w(>=TSdiZbCs(xXSdJ&cm`#zXy8L*5VQ*H1`E>AE-a{RLG=u2*E8 z;I;w^d<0;#9jPF!%4~x~eItvaH7U1E4udz#sa2VLFL5Zu9Vo-M>h8!UIU1r2jw22p$+^6YkRwy z^smsiB1KhuN?5b{Q2U+cKEH>zX%_Ji(h8sLRL;)JJ5MJQjzcf^A#vh@Z~nD)-zLp> z3N``5e%Rhg6ppqiETA>_PMelP8f}SzPb(g_cn0BF$*HNLRxf<>S3%TiU^f9E*BQG$ z`VJ(IycisVOr$>~gLZ&WL_xv*YQA~&H`PGL8+cQIk@`3pMdfzgaqK0J48@0hD{mPP zmCpH34eeh<;G@9rM>5-j1s+?q-j!u^Yc7A5w1TrFuO2j)haY}%3617ovHJ98XTWjG z;z#gm%NjXwr`aRBaX4r3%N zH4ZvqKkx4IU9b}qZf)KP1XQo1yxB6>SPUu22we@D`}~ooxnZQWtSb8YgP@*D zNW_7j3M3}G*atbYEeC=Pox9UzK^&o-aCCOo2aO|g$iMS9!F(vH5fLY0Av%(Qq6LQ8 z%HnJe_s=plU4CDw2;h$NC>lu4y&aAk|8lZj1A7_jD zl*h|UyE7L$SD3+5;D1`ABCSmXRxYCOQs1UmC@c;ve^zspBb z!A(c73&x|6KoGTtD4QRFzvdyGp0sE8(eg>m>W_f{EN@8gjFZj2;gR zT)r0(@er6jQ=EWrsnY82n5iyK@9^1Ft~EM3>I6~&QmiSUZI1!;Oa!gi4jmoN0PY{_ zy~3$V44guYyI(^Lt2bW^3u~C)h;OZuGHBrQ80(E=tYqjE%)33i#YbayYl-@EM{J=( zF4e}kjnvf?vbK;Bl^nh+yIuI?LjbuZ$jUp+ETsB$9VPV%{1D86d*BG{6&ppkhKCN) z5WY(uKt>~cqUa&yNP)m$U~c|smCp^gZ0Rqt*8=joG(7FrzS;aoC?C?a1i$nnY!@e0 zua(10U!M00Y@*5o1~-o_(a4so8qyhyid8H}!B|)sGZ2C#K(34rV1`=02;jQ+Rk{z; zxgPf(JgUzysgr}gV{&KPehGk(kKtOol|Qb1yeqB`Nb{uYyVJwQttW=S3UC{$p5{j9 zg2NFORqMFUADPa!)pl@j0EJxn&-QjeQ%8{ARyW-&((p3?7HPP_PM{nX_?a?7zvkzT zMXOIe1X<@Sa*AhJ-HCATfm@q7!oR!$GcGsia7l6fYEn|o+;LC+kq4l7AUEQ{sEYTi zpY~C<%GdpFlzj5&rQmNL&g9$HlB;g*aJV^XA{cu>BZvY!9#NcUKr(7wU7B@zpQ(dX z%_RnNO{%1B<~|5uJ9~<4YoA7n!(DyJb$G22K`XKMu$_74_$g~l#a!}?cglE*~Mq%}vxp|mF4zWpPjd4m++QZ<3sF;$4wy!!e_cFzX8l3vXIA7|*i z&+oMXVFJjghaL!CmmizAyF~^^AAh5 zCL!Ix5J#TWsZF~`kG|n}43xf7OL_r9VLW}U^lDRIxS(J(2%Mqo>u_D!P#>_v_v%j$ zrN{etdpiQ>ftC#iBQKrC#~8?ikL!bZZ5eBG(n)H51-YZ&?R2f=oK5dR5}*!wi7tU5fXWf1EveO!P4|EY$^mXt z&nH-#@A*iQ_X6H}9=a}AWK3moo#@8&!^}TryQc>qO^!0v-TC=YgN=-h7ldNdQZsO5=)xI_x#w+HZQlRj-Vh|0%zN*s(Scvc3*PW+NpCE78d!u z8_x7fw>XeShIOCHz4$DlXK45c*?J(&N&)PhMfp|A-bAb}LBSnLPs#RsYPHo0Y&o zJN&+w=mNd3TcG0_wC?kl*(K5%Q{~%0hO3H9WAOO*>W^Xj@}AKi&5smB{xF!K1TwyY z_t^Qs4>vcX-<giNduE1wy6;h@b+J%lcpw>~9=9(yUv5o)Zyz%K7rk!=4YJL#idRY2YtdyghncQ@ zQX)IW)Ep;!&Ccjt=NN!EO92ikDbdnjyaw88>PjqL5_b_&D zUTZKu%o>AU*b191GNb#+3GI%6}HjO>HVv|hv^s2cWXaQSK*@-2wT zfSOH#vgpe$`3FNs48_&2(~t@XKnj}v-kN!ub$hCBcU#-BikkU*NNYoy5$G|kVgW-} zS62Z%&9rE(T|}edOtV(@DM&~l9S-Ss-abC#_m3BsuEk~+^;?_Gs4WL~zW9=p0xp_( zy}t0i48w}PT~29i#Dlf2U8`!RR*O{`fziPoXn@ul8bv@wk3L%N7dqU}1{jWzl*naO zpNU5p%%u6Rl(i1Ttf?ov^-2kzi1`VMp}@1ZaSCUYuDlee8I4vS1NxH)3NEti9KjKi zkU+d$ht{Naxmv@KAhs;>f(YkP09T?0ZU-1I#;~0703+%UVgh7j9PBQ+`2i3H4Zu!u zg2Uwv1)+^o#gqfV5FEul2xjAokihatY+N0epBalcX(Ln(O98(xixfI>7E|eZFnW{% z1^bYOhAqNZtg1bqiE0GRWzi1P7S)@}ZNiquXF!#v0K+}9;2*72K&*W3!i~Gy=iGNFgA|10WRwe;A=&= z7qrdum@0Qpf!sspJm`0EK!B|gTN6$-c_@fYRDeZBUJ*E_KB)Bk8zUQ`Cs);hf>KUk zD5^-x9wLzOGrqJ z!AD9&SS{jmLqVTmX{`^=`nCoj* zS-H6g%&7xmEIYap`3V${L;W^BQHWoU^cv(`WC7~%o*X!VSPY=bX+uncgWa`^Y*kPS z&C^3>^zwl~00%IH&Ts6Ts^YY5pUHOV4iNw0a=$czl1~5((MRN zhtpr~&%q=qINb;O+{7z!0E8t6E+O)cln6n|?@B_ivAPiuV?-24RAz>l*_P*(s}J&3 zkzP4f!y1D+`544%1GtpFA}ce*Cq@K4J}xCrEBOaFqerB7oI(XJ;Lo8&1-&#^CKYpa zql6pQLqCP@v%CHbq9=v!h#%MWcAtHbrZGAdR9AJdKupDfI&jr46_}qm-~+8mgtWfK zYfJ+Zz&Zmg$G$%ET+jpfeEev4XXiY%BSULFtGW7W(qn zw}@P42OX3RHR#iz>6vIQWyx##Pd=ILZ(O6oiXZg}$xZW5E-X_83kCFUco%>OX5k3T zf@_8M$=3>>ENkg2LynU4rF|6c3#ekb(CM+E;8>)>-Uka0JjdqwFmKTogiORIB;>d^ zBKZi|R%38!uqN^JFcmmTblA0s&BykVu3hA397&kmYc?a{r`_qST+O; zW9;ad^`agmB^4m(Wzk=Ns(V6#auPEEsu$Jr2$c@~SF?ZRY{)$T(92(&qs4H< z*>ezAX&Y)hdh}>ljMmz9(^1XoA5o#`i=<*gp%MzHpp0& zqj!jF${@_gK&}Q2PV_1ED0tsvuyqn^d{}LuTpmQIF1!d5H%JX#7*q&Z^t^Y!$NmMB z;`6|#ouKo4k3F=u3buGBxm3bG+3wGGKfaAu1b;=YH zL1E3E5e;d)B%EIeN68*3ub{*45)+e+jg6fFF$_t(Ak=e)UDDVFF|or+O0+87g&J1+ zagZ+jG#WN++;ko?3ZO>k{S&%54-g@DZ56D)L?rzH;O?k386OKh8uU--Nj|22KnOu~ zK;lw?pny6}bR>Cyes>UQvZ-Fp`@i#CgdhRml%_s3K_j28+l4kw8I!cz{fi^7f&~=uLXl&^|Y_xl7U*llnf#RLHTd{^!5SdH3qNSQ}fNvf%@vG zk-Jz3TNe=omT7B>WaJYfj16Klh_#6T2HN~f9dvQ^r(aapS7*oJ zmmkA^)YsL$)0cNqTUgm$25HpDer$GV6GqM@qFEsry6yg+<73}GHbIInE1hKk9rq1y zeRFwgWCR5fc@Sj_jNZZ0tG6bHYQD$JfWIMae7|N$H2{T-zG{=Y2`KFq9bQO*moiE| z1f?iWzH!ymqUiELB=c9{Y=mUWz@GtAH^U><9$XMPNJ=Ci4I_*{Z`s=39*=w&FjZ~* z2c359-aRVPiXEq{sEA+5JEv+QJDj4efQP@Yw9o{Qva|Bd3Z>TH?CjqOx9a4YT`Y=S--;#DL zdUm~*^lG=yM8`DWj59Pe^i-y0gTOckAnU^z&E@lesl3`y8b5{s9t76QF0Rdj3u@R@ ziByXlW=;83o>BrI0>o52UoKYwz-jJ(@Ttc@emnKyjb9E*OSklInM<&CKgxQK{Jy~1 zsKZVI0(X#834B8aM4ASqW2dS4A*df&^Q4n*amdDio0a6b8SMztA#x6ofKVNv({dk{ zF+{YU1s+CTF7;0&tt_NZ+p`XtJZc8~C2Pc!ycZq4W14c~n_|F}4dQc#tgA~%oV5#` zzXUla*_Mmnlgw=!cTXLd%{?I{aJv@Ld=zN4GKge?=op~DBB-OMr)LbRYb+9|;Qe~D z^djVk?BhQ{w`dh#`?i^M6@^^I)0yXP$B-|OKL?)vZ(sj^7=lJW<_QRhCT3)KIHo8O zOmQGFc{l=OyM%l2;6c%SUl#_0z&07R_RE~np0Sl{}5F7i9hFyX(M5RN)6;ARu z9E1$iTP`Mr;a=NGfd;X0#9arm?DLl3EIB&{j0EOlf}6H0=LJ43>4k)1$pq|8#qx+P zd=EY#q?4f1B3t2&`2EzcKpix0E7J6s3knIP+ zQBjisPAzcap>r1{XFrK90F@Q7vam?N6l&N*{ECX<*uC@*zkuXpSfK%5+d4WfNjAT5;VBK0@UoHfF4Ms(WlM@&wak?2;O=+Mr4nZaT$GTsS+c*)tLZ1iCX8>o`BsE z(6)~MdwW3I^YFik$rq@QyF^~0YgA)!<-0qUNz0%JuJT5~7K zxqy5po9^{EHMNL_joM3y8UruK%@JDIMI6Zn*T+iWgyy0g3GXxi!W5=u5V$2~Wr6AB zn4O|3u>9L!lMK;XiHzz&E}0kU-`OycjO(LART3G5%qXn&m!7xWvYKbZDG&xIBms1Q zE1aGP&8osR5WD~hNL_Ozb8LKIwu_SJ`xt)gNXot>SR zaD*1}K3>F4cjb4ia$6>d#8EO3PU2$Z$yY^E5*S$0rlgPF>6d|s#@c$m`U%ScbRRhh zIWcn_Y132ss16#ct)nA--URKTqU!qYcalYI*q~-Gi^W>0-)>DzU`!}i(o;MdtccVp zkzYgT{1+TjX}t^d7fs2EH0jDs%^0c7ZX>YC42e{4Ya-c}A%r(-hJ8^u;d$5NzZ>%G~`v#d=@|jyU~**4ModLYB$_l?NL=T3%5Rg$D$L zCCV}Z8OH{`&pUGTXe$L@;sYE$s)KeRraAK)9VlR*4Q?j5dA~~@3B=-(WE^*+wWI;3 z4pcgKc#q2K5S}Ahj85#;!8uEPDqgBwIIvF;QLADHlU;E}8l>4oYr5)N+5j20mu><8 zbXw2l6%|IAvpSgx`hsLI$W471&WJW{?WhDo!$gu6g6@Cr3>mg*1Ra!0_f(O>m)u>j z8v;y#DXjM=>$2!e#<(zdk(7NrN%AJVyKoxLh)9U)u5|drM)%)b)-<05(^+^Bb{SNXhPDM&hEWBcll

;Sf0q(8wHDQC=R22YiC%00NBcFuJ9kvbcC%5;y#U zgkeB>3T0w!tfY_}{L#GJgQ?kpTcK8P{o4g&)kMVf%H7s?Q?A z!WLdb+B334$&O>=&e&;Z!z1Oml65n{U;0DA+NZ>G0T92?AhhaYnw?K4N;hYi6;X}5 zoSc;8=1A_hs@1AQiBO||X3WzTPFw@dtV=7ss!iJ4GAMl7+0k+FF??7eA!C2#N|Wa^ zF%NQ1G-mb#xRCiIx)Pp2odNDzNE(Vs*lFz(K-Bw`7BG@eqia@KoMeW~Mj^3%W1`rp z>!q<8kY>jciK@Xz+<02#U`^#f&_OYU<75t&1phFO$jEHFUVD>9Z~lI|lOt>0qD9(f zT~#7qDMeq1c?QN|v3Ir4*HDRn=9_-s@;}`^nkVla*j17Ewbi9FfyIzKF9<|VjiI&m zCG;UkmQsd_#JS7m2_Mh_O^ar$n8_3Sw?9ai!L!`vA$pTAF52C^k!f@xacrHr-Rldfy*vYIF)< zLMn!kW<{_K5L^*%1InmtA=ppV^&IRv%Bb>ys!TGjEgtOJ?e2b&G#t2pSu`yBI)j$01qhzWfJ$U9DX(cKtC=a&3^{5?t zJj=;RBg3L(KId0K#3798SQuo1^rfIc-2B)1>m}3@u~{;%kaIv#;Dc<#e>pa0WOnhR z+ud&O1ntbf>LS|xkFl8omQEX zDIozo^JF=MVhc&ZyeX7|ys)AU`g6D$5&War!vKFt5IN>SPlHS!T=J51m_3C4p;Enc ziyFoor36e3eF-RzI)m0yB2?|d9N4!nmj*KgJ(S9c1PO^KVU&UbV>;{@ME^1(4Qto# z4T!Y5)esNb9T|*95%t)hU-r@A9Yn02_J;@tJ2-Gu$YKn7jY_J>{Id{%t@+5NjD7#B z&{|J)A=D?5lDayBf;Vy^5eCR?DSOCJU{(ekV)iF-!pv&}G{7G0!!TS_qWp=!SUA{J zF}7637N?W}pEK%oxOOeF2o!~|erytBsB?A@OBzzzM5K{zIoJKnME2~-rg>{^xV<;S z_`e#=1AJ$(W)&OcT=6i)ovJE-QgE*a_Vh=SXgLA~%P z{USuZu%h(fBJh8)MA~T(Wpl8EY9$X1=pV^AmVsdGp5qomNyLNc&Hg)ZL)B%mejw%% zsa?;>{6f@lJy;u5dgI!BiSEQ(RZH9z8HsWbvm`6T7~~x8%^u+zMs$FziJsm?T+{sZ zl1aQ#B@@EZlI`v7W;pG@jH|UJCg;yz@FCXJ`fp=kanyor8t~&@3cmBHD!GXX@h9pk z5^XL=RBJ2;xNlUE#K^7MrAg5uriq9)7{yRxUKNnW$=x?FQ#wSYJFj2AzEM?3Xd>In z3xC;kEVbp=9cM$=kZgLP=#;1QKlkF_4N^jHxPbugK_JrrU6?gKxfu3Dc0U%-3Kc{2 z0#ue-30(mz8+HG61})MFARCqg6g3i$xFj*JXrh)lPgh*D2q52YDj(AQjmuEIeZqnV z5X?bBb@h2GliY4Zlqt54`KL?RaI57#bPC7UPA&ySO`}` zeCC^{B>|X2zWJ%GG(PGYY2`P0EU7z^+#O3kB`4QKslL0M0Vy4!LFj>f^t<9=0~Fw- z&uDkpq#Xjsekg{)+`s?)&!ec@19n2m=%#?JA^y#ugtCJ~PcaP}2Jh>+*Y2OxePl*K}?RBYt|S@LWJxhoKMA+y`bdS5@;xz2xt zTz^jc3uqmeW<}hqUr`V>31|(OBSae!alb^wP$}THJfndl1TKhQyUwxh6$AC1$jA(l z8YJM_f0Chu=WCrLV(thibwN>$`fbU~o@%QOPxP3Q%z4kBWg-;s&^yeGe zP>+!|3=5uW%#a7mqf_1QtD_@E@swaJ66EKHJhnn&hBmlUPPjD;Fh)rcKo1ypPHPhF zwD}ubNdw~5r^Ht~kL_a|)>2gLrS$an!b#g-LOfHFl2eLNEc;Gi>4BXz!&7}xJ+B`V zlhQcJm7qbu_Gi%sk}I+O;tZ4?PCpG{&)`Pyw}MP@oA9;Ml@lo!FJ8nF{W$}bZt<8} z_hB_ad)FTPxVENmXb7z0PBB@k1fy*d+csQh<`67f*-ViL((Z@hvK8Cf@bxgu(JhZs zVjj@>u7KRB7;7^t;s|Y<7fgfdItO!^kRjGp0_&5MfZKd54iQ`aJ_-wygT0jEnh9aR z>&XSS9y)W~L~?gI-LLHF)0bR~b?CEeYG0yFpd|$uS|1#Lo!xa4XQ6=}G&pdw=c~cgUflIT1 zJ)pP?9*gc3*0>)bgQ=uYV3;5qYLAbUacUmT9kLM=dX+~BtpQ>tx-<~(NqcXM+-|4I zc*A&)E*YlENHqTu+6)M6c_busUJkZS0ZBzpTKZfkslUr#j7-pejtX-JT!kq_xe-D3 zWOg6UR8Fh?T2RS2w!#U-{nd-vx+jHZGw9#w4?ZBO z|10UvYY7QRLng)!!e;8cOv)*g_~_N`j7vv`uo@Mti&0tR{~*rhw{Q1b!AZqH#sme4 zkFa`7Fw7-DrxXzQDDuAslvU?XBslPuJW?E=U5 zz@GT94@>S{i563jl+n-_=F(xm6_Sv2$qBW1PAL1YD+Kj-26-th3@oCb6v0Rt0PXiK z70#WJGMbtr+_Fn(`dXhb?!jl)VTS5YYvHsKj9{Tn^|`fE1*hoSgDWkeLp1 zl8`tTEjnFm(N1cCchY5WEv#I5LUuzB=;Vu_*C3M7lP6C~i%6mVzf{sJJQ#Nt2LF)w zlbip8XN=-MpkCmAeDc8Mruw+|w5AH89;6g7k_-@cF)0}tT%HjAt~n@>kwqYEVgaBN z{?-XjJjIhqSXMVEY5;>~gKLqqT}+GzI&DHi@~&Z8_N4=~$?d*rCX6t9h{DCXaZLmR zxH=5A7zp9$(x3wZvY%CliAEx+er<~!Vc3Ge;g`=qHxfxAX8b9FVQymtB7T zWxxo``eqi(=icWQ%y-lV6zivxn|{oo?bAb#f!DI5ZPpDZ#)u|CotLbbA9}ATGVqm< zvGLEr^`EvVlSy1s_hyJ_h4s@l?IF3jWLr2663AS`abO4-)1rBBV5!4li3(!C{O=MjwfM7#oZ<#HG4A;C!jMCgK1#hVGfCOI^Y^ zh!XGRM^OI!X)6$92R&l!lZf+(dR7FoBvzKIb6b+(cMMJf1)@TL1GXmSEFa~c)qza?oHa7=pN?mWKy)?o_pI+9~pU4!Fu;gaKt+)X9opJ zPq`ZXMY?lKLIMW(loW_Zi4o^Pu81lE&ksw8IiL|K(-*a6!{?~*p_55_1rc4J+1(F{ zu%yTzS8iaep<_2zvF|LXmq74?n5Grp5bNaPQXA9&4mg~dqj|)Su1DOqm%>aJ5j2b~ z#EY(0l{m70YQ*PGf*B$wwe>u-sqG)E4Jg6X0w|O0oyymlTlqs?v(1%p9%;kCA@Po2 zXI{XWnVR<1L5x_}!pbgK)J0v65LHIXDMiFy9O)Dcn-e=*TTdu3=1;d1I0ZwF85o7|f93$mnM@MkfKoUK{2y@}gCZ=Gl zwa;}u7kK?M^S^w+N=|;>HyBxu!b1iUNR)Xu&Cu*QDoOBt$`g8W?xhK5IZUsbV7=Q% z*zbK9>)ldBK@%7f=%a&zyFZCov!gAiK8Nh=4^>a09I$Kw2~g^6@HV>Bu|BS(yxe2@ z6O!%)2??-Obe(bK13<$ix89XX*b~d~8-XGji#&w_OH6St`VNG_-AT z7Iwo@u}e7`1*pVHu;t(cJ8wg1EU3S@o#NJ0k8EaHJJIVog;91rqSrK=FQu(Y|6Ge}yyq7sn@yyq(cd z`E!5wu8)7*xe~3-a0kTdrGDphNjEt#fX|@;P{3E1E$1qS9Fgj~8U5#Y&w{~Yv8qMxXk7?Eb-3`uuv0|Fyc)B}p)`^v72 zL^_5|?*D8aqA^rT+)1o&1a=MT7cIQc6;}sE0W`AYhh)DN5~>a6bn6>8Flgi<5E4OC z3ZVs=iJrQCf#~Pc+E4qq=RLEV?DyPi>#_<%H2}d*&eqbl>MS}L5OD7MbfaLkVnQc%GJ+y}5(Kum#h#`}{v z(g`}B(fRX#l$%Y56_)odC)PuV1BFf3%^N9H66{x&X`0q3s#weo=jBiUlm zs5@9H42Bu*{sN?*3P>0;6a&{^tLiQ;-xCU?^u72i&3D`o>DB zR}vB+u_Mjjm6fa!ya3W!{M+x=3OtDdy7OU9C>Zk_NfzyFq_#tFVUyAyI|q_k{F!!n zUFX^^SJofa4srmn;6(OeiUnKTqRe&BVDdXSVjP?VSNwEw_*0%APLqJbQ`R~;S6n?Bww=L8U61t9Jj z9l{VGIN5a76nGz%kumq-q?^>PL+yo;m}J~Mkkak|ct8Zun;BZQ+cCDki2IMYwzG_4 z&Z%d^T8ycD(hx1xx}88eapJ_8!8?Rnz$^0r(^NPApz_#j(~til4FC2n9q17j?@C4) z5UI(*HCJ(`Gf~&eQO58Thnm<+2~u{?a_Xb-QGbw}{UxS^Z@XX{S~23MeEkhIl# zjN}s0O7$thyHQeU{)EX6P5a@l` zw4OsJ7Au2eKs3uIk#WCI;yb-ay5r=DaZGwfMhOkeqryF_AzCoVoS{4_y%~gsDcf6m z>iag&R#@l=-`Y3oIeT5c`NITVc+VauM{;)&hDg-BOd^;4REU5{Y&y6!;6SNM{KNJB z)zhh5lfORe=rEKlgombJQXW41b@JosXQK(M%Bvq>1JzQKLk5HwK_WHjBy{Fp zalx6-LDp)260Oo0?J-5I4-O!aVbolAZ&7m`S?UGy)P`i7(N;pI%coDDB0Fe?6-YM7 z8TaAtw=%@Ps6zSKz@uz{kGZ+?$& z?BGDap*!tRipp|_hpK=j43rB(Bt^7MY_*_cJ<)sq#sT&u#49g=9vJue?KulLOgL|k zcDUb7qhCfuLm+55sFGz(p4 zpDJQA%GG^4OHz8oe%T1b9_wz+u(me2PI-6`OC;L`nYvmXH8e zCZ~JXGn05V7{>8QN=VJd^ZhC@41WTz5#!Dl%TD8_hpz>Kdpkj&Iw21!TS@l2XSXng zWy6*~vF%zH?E2sX`P3vJUHb@$Y$pWH6v+;+&G5+m#Fr8HQRKgeY)5o(QimjvC+kRB zBj*E$yFY%1)>iMQdeB;iy?tt^!Y4DJk%2T-q@%05tX2BQGt|u$nDc@bz26qXmVJo#m|sJ@iFsP- zTtH@O<9aZV6NAQASAcSzzfb$|8>Fn^js^e7SSf^#`|4>y-?`wE&R^H$0saaV~EobCXFbBWghcp}G&o!mZx((UH;{m|G$|gQ5q(#&K zT*VR-?luL>r2^tFT*8&qL*4`)po3w*onL~Je6l>n{e>Q}9)z99N${jhakurd#K@CA+8YDh^bIalfHxmbX-(9GWtafg=x>IA|Urpk);s}gRl}x~0y)+A% zdZ8p5TD1?)av@HCh39X<7I~IQ^Sy-50_{#tm!-uxQ4KnUf%hr>jAB2!#uJX@4O(>-GWhg8BC~3a z9}zynU_V3s0p+p^2*fp-uqwmbdLza2%1UJBa6Ck@0HICg(EPi;Tfrm(!-7~3k8T4F z_5|;s-iXDoY!|4zRvYFvdjSHPpkYk3oVCIMWTBJm2i!}skbKIVfV*MlQ{A*j=%23l zuO3X9oD<|aQWvPJ6uuVHDDHv#M1?T|Xmy{E(ZJZhaJSS`PZ3o=KuVwxq=bR*eBKV? zB)S&xT&Tq7TMc2RAUPbQaa}MIlt>FORsz1dWGUo62PrTrl&PRABuu`Oi*c|Pj0J`z z41(zZVni9LcR!seLmdM(KQ-u;P?1yRAN8(SYv}lf({EdbzbE&QTk!v&)QN4` z#lXOv-D(9h5at#!3>a9H6j5-DKyb$ukxUjocQ--yGmOFHk;o(w7(=`UT}pk8A{irO z1@x9mhfQA)__VU$9i|AeobOT)xtWE`-_?P>DW_|>1_L*)e`n?3Bw!ukDQ*{V1YF%F zoU9?i)|A6Pn#mg}t#|)emtN|RXN+`XJa!W@?nS^j%WDeq%pY&xZ%EWM)+k9qhd2xm zgovd=5|pR`^KOwHA79Sq8M#WlklVu+;qwft>( zp4N9>4g&^xB&3_?i1j;Z*gwUy)Csan@L(R2(*MQTyT`?t_y6Opm1AfvQfSq^a;BI< zDu;?)N<@e0fGw%HnxqsJIVY61&0(9)BGoj-)HO;aL^5^<@AvEVJpTCOoi;L4s86Jp2R0Mnw;gF8b)}y^lwfg@^gQso z{(8vIJ!@TBO19pkuaCiO*!+R;Bf3{J(Wk8I6 zgC-x2uBu>)%FR86ve$-B@GZ4{H;VRrXITYYMZcDIbSBei6VN70pByXy%+|l&n2~=X>Pt)CdmYY0>qY-aI`*~z7be}nXWVcTy znJ|0cAHvZxgPld>5MwIoUH$>VY`;eAgB}_e==;jf0G=`z#~{drumvpcV_CR8Tgeta zd`qe--445ym9a`ew~)UX8(~!`kc5j&@JcH^`@>h@51YuUf#f*e)a<~d%DD3$%-~uT zV=zjkG18k^7F#}YYhI=jv7@k$DfOtDsMtft&ZD~yDweb!1(c^wl#C7GS2=B!f^6~@ ziF_+wT2ZU(2?lRX={n)%FN`1YIf--f`$wBUvuh$S!A?jM$l7)C(a}?i0yiony-urI zEzjK_s|<){>=-=$B8PbcpLV%*eIsukibeP*Au&}Dp-XcG&}rWVkN`+kJ=pK*ntv?t zzw&CL`>A?8xN*vEL<{%-`e!!uZ$uk-hjDRC&TDo|rh_+1t}Y`omsWVitf>|_PK$@$ zJICPX+B5Tfn+D%FB*bCw+dF2-oNXg^vq}u&KEc=FK|%L}|ME#=CB=&n_oXiet&hEU zWfo}CRU$qjR3c(eNHq`NVHUZ;;%e3jy*!@XCK8}EUu?ARBZQz{)ep)^&}9U9FfNc0 zHK^>zbE<@6X?XTK1nXP_2*)9;TeT`oZJP_0Q64{mAh=CLDI}njuhYSoHE&XLQzmD^ zA%yL%s-ZLPcvu)vnYZ;9*GvGx!>5S}B%xS9bHjGR!AvSp1_g6YdNb}gtUaj z2+odr2Qo<zU?Y@LgjNk8vIF;1`*yB zEcaKd1X5nJwLLDYlYA0}D3WF5N?PWJ?HV}1(@XZ(xAV2T@*4*yr#Qhp$7_|P&`X1~ zmlk;7?D@q7kDv{KFMI1f7cBx^Bv==vd#4ne@C61}|Gm=e;7gjC_z^#io*U|J-hmk; zncPlhrzWK`W~){W0V3gM?qzC1>}a^mW*88y4L84I=#s z`1Ai$rBn!zg0mlbo3Q(SL5v_Z2;&Wp4+V2&zV2lX zzaD~!h?>{#*=EfWr6|vw#Y(_bw)ca#{I>OTs$N$;Ii>vOm?A&3PG4?x(k))*5#Nwq z9t!g!@}y$ZTh8@Kx=;Vc>-}T!wQ`r$4G6|%djWf!fhWSA zDgF36d0aC@Tfx@b(0W9M+C0Jrgu{k*VhWU!*v8plvqdDGD8ikJurZNXJ%)7;H%XHx zLCrm0K1{?LmL3K>nv)j%M_mvOEur9%q9YJ*fdg`Qsb4P)n_q;}q9k?X$5r2$siKg- z1yh0nsv#6^9Nd>3(^k5Z$@Ejr_IThzF$M_n(DKQu@4=l}*$X&KPmDZFnuHtZh;jIS zG*r5p?Yp1$k%W}KdvOon)D(#9EBc{s{^e8ggGY={=>|Ey-9_Sjo`uuleE@H}`NE?I zYp}auZKxjscsa0dP+y8`;Qrj248P48ldCi}fk5iv zrF}i^YF)*Vm6^X9PfE$>nKx)7i7w$ae0k7Q)egdP3r@HHBN&PgUB~;F4^iFxD z(296VPaBg$4X-Ta+CGy-m42`dN)LDEHf}@`@L&3zuZp5ha8Emy?dVRq0pMLi6vtQM zqs_u4!6q2IacyOZzDN#^GQYlr70`xabuf|!+KhslOkKZozt^}>=0XwUvJ>uUUJz2p zu%P)nEh@#~BSydljt4bm%G}a)rqjx;_Jg7U`An>VsRoLKGE0*qpSpgj&0Sx+0~%QF zvuiNjq|s{jRsyViTG$hQWtH^6>XiyT`E}Q1rS<;JlW8OldvgmwFt+P1flV5`<3vIuwY^3#fIX$5V6 zR%HTkQa)#D0v~f&I@!_qm))u++CSSYs(A}8V9=Dq3c=~KXI)(+$zplS_oK{DuQQc| zAC+?+`t>4=wG^^|tu)u(Q%G|%D%`3bZQ1vI=N|}mDTX&Kv=uu9@VYKHSmG+>Fqb?i zW$k*1se&0HUQ2TWA%3Uq5RQA)c4pQe`=C0ky!n6l5~2KoFM{BsbnqVTv|o0#9($IZ zEGE|tR`a#OM}k1*NsBB+L`T?AE1C_XhBBLXzRx%P1|)_if(| zx#n0aIlPJLF?9RRQRl7lzpDyx6AUk}88t&RgMk*eQjXo|V?iC>IMo`v?XhI;JM6aX ztuayo^~EGA8|%^5Q&SANB0iq^ErUi76=iBJ^Sw1S|3}Toxc}!J`+gU81FLq-&~>G1 z3*8bJd?}AhfjoYruDaL5d~yTmcHCCY6Ak>*1t29`o(~ys0-=Oe`_=k@du@CNU|c*; z>gSF19?cq}0t5m|0rwXNyvimzYUH+YHAt{wqk)Uvu*T#_GTo34^p5@?k>PvJH1yg zzY6UqXFtrIvR*lr$q{?mE_f1#H!-an@kgPvVNVei;E$K(V=vG)zO3s;Ij)OcvPo12 zH5OhmW8^hJPrqYLPDN)p->?_nWwj_~^Bob0B6W6anEV5nO+3x2>) zLIi=O9xX5AIk{K8+t=&ac6rGCe`+b&0`N9)y*hqbiq0MnF)=kwT|8jGqEr9c*-`mJ z7DuyE?Vt#mVj{f8(Gj`swmfP~C4m|+hevXw$qB2X(pxaCI=jhTQxj-jY6Rfql_CY0 ziwI>z28hCtjI49*4F~Rat!N$RU~XWAx&A~uz*x=B!}UbnH9qBrM5?1Xi|e!8evstM zESt1$-0z|3s5KDD=AP`os(qXn=|85UkW(KaA{=}HQY1oW<0);|@xSAjo)5pU*?2-} z;z?ynXUbdhVMgLqsimKIS=d1QB!q8@?Y-e3cAW6J?eixFJhjmUP)bONVLv-Aqk{y7QnkzPZr^Q) zisK{dJZx%%qZM)psWH}_GQY=fUy=AELnJw0mzm_fwfOtL#`Av#3`tzdzGL5V&=%Yj z&S5d0$^O^*?H0IZwUq6Xt|Jv=y>vgBjNuu@2|{M*5!))Rz4L<0 zS1XXnDCNLTRcoLwz!-T1~Jb z>ss^`cbsi{wW?1%Y=pk;dAW7Le*65|1NU5Ugy=aZS1CXzOl_3(3@~@1ZTvbu->D3- zgR)XM^#SL#2=T0Nn)xlUbDi>SrF_bRm+ku_(LFOrka<*^Z#&vLkeY3Kd6}pW4#wX4 z*NDPRZITCMobjJyUYkk+%z4-0(9_C8>Lkky#rNL0bsHIMvb}_(4tf@*ujI36D$8{d z0tHedjUq{Kp2Yf^V$mZekjToQ6>t=FjJX`f2Wi4n!0EcfrSb8l<@Q6`5vsk3+HvjG zG_9-xGXX5*oYB4-hXDR)1tJ{+T$!x_;HaeB#)FUKLE*3#%7-OaSN6aHxz@dfRiX=$yb`cKHG+MqSe}7MHL!}%T4>=#b!vFpG zIDA>)aTW+ip51&giLSv@wZPqczljM6pVrDl;);w2UQ&suJ7Tc#$_Cg+1<3y?D$RC{ z(fnBLQ5X#&)6AJ^p(=4)C?zQujlFLUas!cin&w{~XJ|MXpOIi_hFzAKsGu=e{gC0L zbv1K!%nN$D^M%lPZo;71}fF`WyIbaCPyltB2 z^=Djl%o;I#cx5kAR`kT=8We>cKfb8i&Z8U==L957L{#ZfOK<`%bq|Upo(*wvkfcNtp+l}3yjjWS_tJbn;`Sk6| zA{L4%{?Flxq)tWu{(A~zggkcgVL!nRK+t@aj053<2@pZ$pqU4JUovj|cznC_rk>Zo zLUTN28NQkyfvg*TM0__^!WnMc5;=kR{n4yP5Nag9!xu5d@Zx^^?H3oE6jlU|OKR%Z zXt}sk-p3vq09F;06JG;Du@5DLIg<;b6R}#Dqe{Z{#W*d~=ri3@mQHe04l;e;67Fa2 z6J5)zTe|r&kM3Dn>uU?4Z6K|z?_9xSfsR9)X8mDae>5LKy*3L4s*6lj^qvK z`Yk1{`e!bdS;ChQ!HR|WAW`r;_Q9$4t={D^S)32Z?1aJVZB$4poReYqCG$SNJ68x4 z(GBDX)W<8$idSUL!2O_Z~Bylh=e8LrdH;XlEvXrkln8z)(lj?guadSazLl&3H!{S7^o+c=Ub;Zx0Ki@LC z`9h7FF(KCR40xt;^sXc39NU{a!EGw#$mHQ1)Avy3cD2?xyO8|@x^2CFSGH1tWZG^u z#gms!NpTb6*Jby3*DfwQOI307X%-50aBx^gLlCivDo2R~KDwAd_~T>_J*|j3otbf0 zXU)(rui3K2&VR#o|6aIeTVxmtSV-87F#%}O**3CZ1Q{tVW|G+h)Vh5?8*UG}x3FXk zPp+0D@pTO++p1iirKyRbS=nRD^5?FOo%q{{HAtTpF$gsIc43BBq9_cmOrR3_b-N-X z*t>lnT5dvHckJ(p=29&kV}6#bxrt;PHy0Al#O*=Gf+`t9Cp^q~V@#s51mT2Ex&G-R zMKjQY@D;BtNij>rKIDY(6flFrY&J!GwBh?-1)q_@z7RI_#gp8co57yhiTFSuBa}6a z97M|2>!OG#0|V23PZvr3JZuGe;*)c)t;YYA`73Fr;$0`^+pLZe4;fd9VzkW|39m zKFONQ5Ff7?cqH%_;CxibicH-Z*L&Zs!O?gm8z)TMsaGygc}Pn=3XgRz!3b$D zLZC=OgnQTu(-jS^^G*|cX276l7#J~6P#YOZ-?ltg=!RH@9mwm3%=>3+1@_jrdw6@E z!I8h-M|86n4n`p6RUQ#<+?<>qRX-Rj?=JDP@V2tIv>fx$FPsGrbNP8r9yrmbCny5e z3&WPvA3n#skTPBXSui|Vo-_qKitf?KZT)c)nz_*yPxs|oe(kD6liB5A1upWzyiJ@;f- z*e1e*gnA%Hj>pHY8-a(!LZrabEC3B?C7pE`K3p7~=gF-jpnBR_FfS=7$uTtJ-QDtX zn|82YPx|dsq>Bmj;t5Sn7L({h7WiD}BaN>B%$RlJrpCu~U6tq>aBSAzPzsJDnY3CY zNg4qMdnTy7f_4W-uL^4EZYH1zr+$&c! z0_d-l6YMui;q(-N$`Jdszw%11i=KnELsXZuGby6RvydixGmnoeB#brG@@ zUzbO8!!^jAy1-ZvW(xl^nL*lAwAtBTf3;-B%(_UHm3S6pK$1VZwTclawpm1iLry+Q zJR(tgHFn)n#M4lE=$C@D$KoK8s1mq=V1O|(tvaNRY7`wY&TplB$7nK?_v5XdSj6;5 zI*h$2Ead5qoEM2XIn|{eh9jKdh~QK)#zc`eNX;gt075gK5h7VRyR*#t5aq;rYIzDk z7`^ow>LmLt!acJfq(1z|N=nEp7;N&s;|<@?16Db{3wTRQ$d5ifVjfHw_WEOY;hCr? zEPh7ytnm-Z#dRecZ}};EAP+6Vz2GpE&22xZ1XK@zfwV3A`T)(3{8PH$@ub_gUhHIt6%FI320+y&ctYuwR1FYc!%LnDLu0{UeGxbFzKe+;pmcMML};4 zO|Z(97x>vNezMi?FCFfHuR$*kro5Z7Y};elW(sxZRSTlAc{h}L<|!lzp;Ie8q>Zf2 z8=+9^sVoGE%%1u4es$6eQHtbACuU6JLDCE$-CiEYciG>4Z*!#_Z#%q~+(8c^#X{)M z!qqa88d-X%X5l94#&&9^kQ1J`n78MV(`fsOc!GZWW1_p{JaaT5umo87D}bw>N?(jg zI;=HvozZ#<-Bnv%NPZXG1Ee-(Vht9gN;#sVZj=JByTs^$4ZeKPj#NCgJz?JeL@oV{ z7ZLY^&JOA^`iHiw+Og_q6cY-&5$%XGF-QL)wTf6P^MPvwZM*40EiFXMi58lP&LMf^ z0aAA%jfzSv%y*lg9P7hxW)Nsx=tB(2L&!ijr|R7a3K^Paoe-Mfbjx~==?-gv5}z95 z2&STk^!ffxEI8t83Ur}cufzf4_~PakYUxGJ-R~Yn=YfZ?7D?~j!$C0i260ic?q?W6 zXPJ|L0r#*16BAD4r4%SuHR=dk)m2t+?S?WbzWQY{E+R{eP)vh z*+ofeNC-+iyJKs4(5OG(%||a;ggass`nuj6QuL+2J%3y@p?2s-^f^V;WccBUq^IHewK_R#F<+D{pGaox)5cgwCeCNn_Fg}y%dg9cd4`5L(A z?_ZA~*?IuiDhaVSX{->ZKVk{-e`eOe)V+5lW5i0yWuEZC?BF3u{Iw9el1oh_`55}W zGdJfE_Jy0EzxeS3mud=ih z>Gr7%a!0ew;I7le99F$9scsg>quNr$Cov4}g@;2{v-gYYoBi2TtfKzT$v`#eA?Qtc z$7W8SZb{WWmvHT~D038-L~P1*a>V#?wCVZt6k5LBthRYI|8w?S~+6!3Xd;=0Bdc(fPvLIaBJ1>dct3WKZ6r&`ren%r|4rvYMzNxRuVS8mG$2u z^U9rgL#@z(!dI`p;k6;VDhanMk59m-Dr7EH=o}quzvCcrDAcfvgP%e^cwsPH$t$Is zk!lRlS|nkGhb&ZzM#BNFr@iGENhoZS3;I=1a^%!&8DOMCPLl1Apj$_V@iLHw zG|({n(^Aa{_-p3&V zU!_#&aqQHbDm6Qvxs$2MH9rLp!opcGF@uJTO6eA6Ugx=B5wN6ie!07N3NEn{lFvO2 zpVRyi?iu0e|KbeMse0xFKu;Rlx^DkRtA}x!#Cl9_a@r3j8#6uscP?~i#HuO7+#D7y z#>90w!ZG00MIIlSn*s_{YO=?fpVqIBh%oGa9?4S-8od;zg%57Zso=A{y+d1}fVQTJ z5+`O$34ZPY1ce7a#U58h$YlZ!u|z90(8u5WLOm36c9E_QBE>3xM1~{cKznVL(6(OR z+~aV^`f`b*Xg%FI@dn?Mvc`%hc+K;_3^CqJ98u%OJ=6nCeb2-MLtohJm`v>f1CA{C zn!)OC+TsKCI)k;heG#Mf;%gEhb5l5p|?bi4SxFi3CTJIbLH`Nb+-N zzZMzCOc*H#xqL8pqk}_w6A6)y*yiGrLKC5N1on&`!(g-lm`c%6VxYBV%^E8TnU>xh z;&1;VLM?s*@i{F4n#-H=GdD@d$`ZKkwpX*8oZ#c;@gZmoZN-rVusQjZ=P8ZT=Cy^I znyjhJe&wH}_(e+2zeo++!52BlvN#h-0UOYrpNH_EQQ%z%pQ07`GVxfYoIU4Z#F+9h zC!e&NXsH_pWH*EpL7af9YR)YD#D#!jhrC)%h1XNz=STqrjo9fqJ6aUw3LJRz#Jk~s z#%UZ1cus;$06WYpHYW4_v|gq1I`;A)v>!JRJtxp;53NADAHJ(? zT2y69#1~6Z+Yg$L5x>Q0BRVU0X%~p(9OPkGQM+5Kx4Mu}hW{@1o2a^nf*+t8GZpm} zX?z;UR-9mrZr@~rEAdE<{rvNyYMbMVH z?#io8-xn94)^pf9x1X~(v4Krd+e2Fsa67uwE9e|Ea-GR@qz~(gfgi!p6ns(A-kn;^ zSnkAsSkN}f6GpXGSy5jE@*0P-7CweJpweTn%D_OZksnqheG6#{d5P3FK5Dki%1nl4+8V)kLOEWi#JM zd{@vNrI~rJm#`#$o6Zq|q=Cf~t?k#a=dUQ5W5tT@B{V~KI3Pe-9p0J1k0d6z;n{GS zl|v!@-qi&eU{(}>J8YX8rLJ;F#SDI}Wt{LF7SS12)4rksDvbq2RLWVb?I3g-f4N-}} z%Tw0I51njajbx;>cU3rpgiUgabb8~@9JvQlQ9*f_zw9ejc`V!*}_ z&kD39!I6@E8q-BH$abI3d}}&j4(RgWeJP4xOjbie)VWiiOQ&+ znvCY7@zq{gOOHD;>M^%d>C-U3Qc0oJ}VMC6x9B97bkz<}k9MT8*lIsvUlbaZb(!hrHEewYmoIZqd?8rBqW zKghzW+7Zyp=?AQFj;3Oxn9cL(T8Q{~u<71&XR)b{_C6o1-qsI)BM_}m@9dssWMniQ zZbj89L0PS!rWV;uBL^&V%ZXB>WlGn=EI|w^j-NR3E>QjQv#-&u{*6C)xR5?1=8OV5 zrZ0wDTFHOmCnA>?L#=@~WyvK(wV*t2zOLxtZ&EaARQ7_C))yluE`@H`*A*La5iP(F zjiP2Wv=xl_`u;lyN-a#b-OouZ*w#OuyGe~rO-Qb$mQU^XyD-?A`Q4jyHHF4exRX{a zt5ypYIpjWue9(ITr|#`q_W66RaH+rsva*(DC;!T(#ppnZbT*YHjh1kOUL#7j3S^rT zka(ArQ=p-E}`+|L~<&`6;Erakv9>0-3Q0VTO` zq4v7G_=oi;H8s&yH($)YoqR~KBWgOsnfq1D0c+|P9%Y?Y7w#4obMNi~UEO|3xU!8T z*jAqV$nSck+QSnew~LE|)Ad+vR!yFlda;JThZIW)!ZnQRONmOF?o2#3MORnxyZ8zx ztm@PmuN=KWsIV)F{c8dGf0<HWs;uo%(4oWnw8%+gaYkTTUOt3hh#6G)kmgZxkI5z+iB$J~bVNrt4 zo<-YXfQWTG*^6fKKA^_riDBxHBdky5DQ$>lD;Bvtzs*w141f0}AzbJ-f zJ_eqM27ml~m2&+5YIZ~~ob}?~IrSQH#mHAp@i&pGIQ(rXg2)!grfBLLQc$^D0Ybsm zg~+nQr&j9f>Q?T>JT{Pj70(BvvV2YmP&R>D-K}%&DI!GjBKEzxIRy7p_WB(mmHNYuoq7acu-eCRW{F2yXY@<#G^jqtZ$XI8qqiO3VTZ{OZS5^D$W zX>!7e*{CdT(K3ByDX4;wm?xTozNJ8kWJv5J-%kiaCvZyVS^US?A3!68$I z-c`*`J_eZ{nV^YFQzWv>N{)y{iW85I@hoh%gCGp}b0(D9csaTVZ#m_SD)73kF04$a zKVJZTa@s5fBwPpXDKsy0rSWXWR^J0s{mTlCNme>;pxvXk%R9Vr0rC`hk-iDK4#){B z;b=x}My+60RjO4hr|`|K5n-4q z9=9oO*<+LMpUtiB)m451XU0>o_G3xQMvUEI9v|K`^7s(zh2HOs8+I%(#cJnBPp8pv zk;r%@XB4&-lC8BF(NI8#-F2YGjw)}yv!@_sbkm~zpuIUBhjsSkDHmJ%7ys~`(X;70 z8ZT?CFbpOkgZ^ADcXi2nJDohzfk%G*V`ykUTz_7aN!j~M7&?wWc|OA%Jtpz8H3Ct) zB3jT$_4lWs)~msJHBo$KXD>uX4n_h9Q+=FC zBb!Pj#&vPk*ro%Toog8T1nFzR;)`;lX zq9+fLfc}zNc~dVdmjFn@Q?}-yZ_0P&mVe_pfYBye39zP?$Dx>I@LTa&HHUf+=i6j$g=~<*;daqWP7CxrI%gfx3i<2WyE*STpd z53KTYl9R|Va0u%~X!lEr7)Al+D4;lCNu1+=)5{KWcVpoT)46xy9z z`R^wUnF;*$DRL|2#LrAeX$CeM|^Ze4knUKv{p@b`;YC)L^ZR+aJWF zHgOju^k;W~atNDUDV%n#h$8=>~h@Akxz!dIRWt zquNMzfE+{84JD=N**)tOhI7yBUuIrM@@aC8V>@(OMsr>7wYRrpMQKZafglPT%@63h zwjnLO>BElcR6|p%;}+jxVnX1=!mI1ylH?SUIMn;hUhddYnXBfPz^c$Vzd+^gv&Y3J zn@8;0EH6$#YV^v!y&#?vYLz?mZfzY|8RtMmAdWBo4;>AKdgd8xTO>A z8xc+1Rr_Pc4xpDL$dyo(#9>&WY+tchr1AnAL?#4CCqLfvJKjy2Up>$g4Xs%|@&n@r zhRyoj!~8g_tBw*yT=WZ4cFhvuyudQIhd?%=vo$pr?JxX{xlHC@u!Cyu^19?GblTH6 z_)FjnMlrC%c7T2`plZ6|aFI0)S@!@H-!xjdCWUH1tv5_7`C!@CfjNjg$QB<}|X zOz&Dhx}m5uuf|(ps5Wt8Did5p9ed`{HG@^rvRZQj(p4_CjmOQnto!Rsz`I9}!zgQa znW1Bs`iljhAtlliYsc^1AeyZ6i^($Q4@5MSPxA2VacKb@x^|irI*8dw3xa3p*2>?= z18&Keyw|*msKsXh(TzWMhey!v6=wa77qZMZ*`#nm+nN?4dqdhlJv)bRbqk$xahW7hQOqDY836BCTnCFxa zQ6_~}us@WO7Zb%xtq@Lncy?NzE$MxXACBkv(sI60HM;~SM7 zj7d02P=^UsNK)9$2wq!Ajs5OBB*8D6Px@LABH~qlb%5oS>SVLJwNX4eu^vM-#ADuP z{u_ezIkTW=RA$=UPsY~|EE{@Z+3J@CyMH~kao}K+D~Ur-49-hRGQJnOz$oJoWJL1p}<`MOQI}$HOwD%NgPkiPy>q%swr}xm78mOU3_+#~Q5zmR8x0~QFIVWpS-@$) zbs1?FHe1^w=A}!d_Bv|{oe&n<$m6G$ubizb-~JKUM+%MF>4sPjct7#dw7zBAvcSzf z#EyTvEM2Jpx7*GO$E?n~S5>hzGyLKDkBiEhLB#rrN#i%k&*j=?ZmVl~VA$oL9r)_v zxk@=;0Nr$*4`v+Ev#BiiWA?1M zw;);L(MNxiBGnTClOD~775~y7^ub$?9*i??4&P*dx`f_EeA-FdM9CMP{m(@7)n5&2 z_Zs^{Txi$d*=StI0%KaQwPaXPxEm;KHuH ziivA~$zn36>VdN`_bKLt*j6@J<0`+l$pxeA2CS5wTKYV9}+KqVCHf^JSH9MpwX&hs~-!tzDA)hn^Gg7+K<4j zh>GAFWzfZMcsQp0ZN;S7-0PhmCi;NniG*4wl?KT$az>W7f=-tYA2$=C4xMzau|H@i zAc|K{AW5--M`GygFLpT#wJ+0q#p<0{M2i$(JC zD%M_&-)P~=u|Dy=BIY|4oU)&uxnTOhXAN{xyWPja7B}1Tep6XsyHwwR_#wG4v&fr0 zIGav}hws)EzRHLcv7qeVJ?W6VWG+c-GgT;{KzJuYz1`K#!@;`LiKYz}KPa?{}H&^b(`E4OVXcrCSjpoIjIkV}*!Q%xD zTaXhRv$nR#-sC^%sVO7&7zTC<{R@TjG~eYl^v!*)V{(Ev&Xi=5W(%1d&$K~QeBTC< zp^OmE+U;4*`K#ymJUB){lwffd5=f@=RfYERXE-N&EL;_5Ce4t?^=gtl2R~i@W>1xf zAsTzwV54(uBIm4k1k3+PvL6w29ZPQVv>WNq>d{e_asZ zTerG-bYD4a_C#SxcP+N$x;Lz1TOa0JZ5pPClCBeV+;6_bd^EZsvuF8>NLDQ(>fCpM zV4(^Oelh7-Au-K;zH)ulc;B|cilFB0BbUz(KVlI4gRSwZ^{2GdinlbzOuxSKwCf|U zecg#2b7oIJX51V6Ki9{Wn}5X#9~f}?>8LL+%(4Nt|BZwGVZcIj(~Wn_%65w5_kXez z#To`mA}6!OW&&GV^KbDLw7B5K+(@la6RuBZMz$BL?|_!URS*R6ytx!3nr47jE+Um| zMRV-+bU)8|i?hwbHFj*!gEJ`dlb6AS`ry~kL1VIYLP91P_}wo{56%FiHhkCGp<&F8 zk1%RjQaD2DFK^xfqTixFz@AF*gSX>PF%h_CbKJl&Ne@ZMf92RS5#R+kPL736BJ?ZKdWSha`?O zEqGUe&QS}tBqz!ig zMm3TuOw;_G*6S^9rvOD*Fvza`MRnM0dGi%W7(xo_*|~sO`Ur9w?OJs7fvA2;&`#3B zbL<;4Td|$_aoQw$ zO2hbdf20|`7ZfK?B>O&l`kmV^H*e1l^dsB>cTOfNuQ1%rEmtMSWV_p*@g`*#rI`?A zZKRApeQ?&!YFa;Fz?eyKoqwI_|NHFze@sV+Fn;EO%}co_2QLXeGVc7SgM{%6`^Ps2fwRBOnETzqEE(|<5SKh2rmK=qZ#a9fB1L%+- zAQ;i(PFwr>+_u&kkflMpLha}Ya--`#)QJschISEliGn5am5a4=E&PUe*ojV#k7QAQ z0~R(UuJq(@9gBCsq*4YYP8ySe*wixMUNWw67166j$}%?t>3V&V>$8W55RUv>GT_Gb zIJ)T(D@)YVe}JBQ)|L?2@v35#XfpbFBkdX{(A#Z<10|gcsQrZrPs(+&xh?zV-Ibqr zt&2P%z7nu7^rqSn=jm}fF*dz1CYZ>XA`NTv|KD%MvN%g`{ff$mokd6rJ;u$01zDT5 znIK1CJd=}dXhRoBpvl|y>JJwPo41A~{zu&DycZ>=F&?bRn4EcQYm?q?yr?kjWj%#> zTJs`tJI!g;aqIc{6zS#L*ZtyL>})i#i0ZESQl-uxNNig#JYKuRh-enl0D!!7sd!71 za7>yTq??i86OvyKbvJnahJCwDoaPDK!#6SXe%K@zMfr|aK1av5VsyRK1hJT}7!ppX zQGwhy4zV5yc)!Vokjva264;#^Uto)arNssJ8RCVm8*t}ooF2&(I0Pz@mOE(lNQ4A6 zTEl1(rVDR4MzsxC`)l7MHRGN)N^dy}xm~7`Vsg-Ms;=AEHPG2kqnUllxQQ%WrN$^G z->EB{V0(1$(S+grFV8eLej z7B#|?U;gebjWwt$OSXtjV@S-36e(=uUj9COWng%-H2Ma!&D+z ziEC8b@Z^1dEbq?_!PbZ0Krn&%ds$`pYQxXA%DUJGW7blh?k{jS@c6ikRs_sZi9nr& zw$LG0%)Qq=#Sy`0tuBbD-9X{=^Vf!^+3u7zdqJKNm|2}~(n>g>c zSlNLAcw*MD@yM#*mH zIa?~!dQZGmKA1_WmPo>n#o5?c5mUdb!rY=0UhOp6I_no>cHRU4xsjTO5M=Ev(<1wx5Ju51I5Wdc+8|#~y3{#zQPsa)x<<^|d#HNJX*C4$r5a|Gw`8ZH5 z#+&$5;*VTZ^SQ6#Gm8N3B5oPuR-JE`=NYpaKJ#_!cI&ppUEqXVRkJ=jUf#C_brd{N z=k*-~i=|(0QZtsCMMg%-@*$M4u*RYSG<>=zXUv>AVNVbK;WB4j%%YvQ%Fr}HMtmMp z?p7ED$8#yCic?!B+Zd3)9ofj3z3a#>uYnsUKR=~;yJG3wInHlTRL!b{(acHSd_7hF+IicEDC6+*h>X{acY z6Q+(I)*>cp){)Y9@CpSG$H&YLDL!C22ga>3HuDY-inp$)F*T$VpN|HU!xCXv1x}<} zD!nR8Z5fgrs>?{Prku>8={gBsQ}#R^sNJ7%2TA|2y$)2|9=KRzSOsHu&hm%Fu8!(V zHD-}PldUXq$tA%<-oi3tcwl)6&Ud%f4I>VO`t26tbiIgM*)A9?y(qOIZ~#=ES4}Y(ltqSFQ%|0Ny9!#Oc;RJke#R@^=7L z7xz2+uVclsu+H^#ad>YnjAKexm^92ojPxh`4-I)Po1Ueo*0jE5 zJ?aKOo{QX+y1`T=`{?@ZO#xMpW?^miZWD%?*DhGfMfXT~nJchnQYyAwO7Dvh6||$V z=XrnUh{*8x)~t+7#3mZl5XM5s(tUlgSl=Y2iw~_r1GM?4Htj5aP4qIfvC5b zsBp=yX4Eoqx$r7a)OP{?o)cpW|J!@|RR_-ibE`oM0fYYvpDq$z`ww(<@%m_^P$L<` zkJ*a%rT6b|Y=_qHepwL2PHg3qg&(jAAt_x*96fg}_b`4p2};MzzLT8F?dO+X#YQ80aCPv>=u#+PbF~DuUF@B?mS?!9T?d z0v5Ey4yN0ElMT>0Rn{MEa8Jv3--BrVbyCbu3Kv|5$4gave_pf3=L?8Q#uwAHvKIJ4 zE1w9gvaewNF(&g=XUH|;DCxw^gctEkfjI$K}O`oFAabEa{9Zn88p*Cz*29KnW4qNrq9P6q^#K4KKwA2C$={sDW) zCxshrVA~U2&N=!;aY-6u{f)gJpo*6Dvh9rx0K9RqkA3XrE}dp-g7EvBuP^jZ zXD-{D?6_=yx?DA6F4uXvN?t?;v-cw_Q$1^s;|S@ZM;#~*KL~z~803h0<92eGtLcr{ z!o_T9BiH<=o}b$;UAce-FTFfz#nIsyg_bkkiZ*+i*-0<1DpyT+w(VM`P_-7tKjY!{^AXW({DrJ3?%j=FnQ26A2SQ)5urH4@>zmRWEfgl%SbQN1U{(c?uw#f6j_ ze|kH*A8s^oDgAX>$wpPAnC%o3BO=XRut_-MH;7g{S^kvhT{E4J{Ru&xkC@dMV?f&7 zpF}d}Zny4l*|iER^uPeae#Aok6aG7ToH;fY78ZVDU}OMGjMIyELnfCKY1sRwh{qoz zo!|Gn(LVe%VY7EYOQ1b#jyX;ClwNE(yTm|Z(rAPu_~{C3+%EonW^d?R-R$5>&5!va z$5on|Ko@rDwiwA^I?!hGU2BnUh%aC5+*$vHYHsB{q}PnXbfWJ4`Vw<(e9}R`47=vd zFYcZ})BUPWeK+?LNc;1XS8YtrwK;rmY>aM+m{`#5{ ze!ub$fJkfOlmz6$EUAG_6!FbH68peiFs$7w3+l>iU{#O4{o+hg-McT;;v9jpNo+XR z0Ol}lDBfY$QG`*7=xQ=4XLZ&Xk5e=hHk4sX{+vQXUTfjUl1CBpW4i&h@iJnK$)dxx zKOOjO8{*ZZY=T)C84+j+9>}SMah!4!-n`BHbv3N#Qr5X!(s@JH8B_If>GwkvhM$1V zR|5Sewh5UWZdd?jaS=ae)V~PS0_)X= zJ-N10PIBjSnYFV+lE-k{M~e=MLQ0W25qqB}xyVTst4-o5cl?}(U1xC(t{@=u(%blA zlNf?ncY_>>1@Y_(7Nys>_rqKKb+(wr{V%w+y+C@Wkl{)-}_zBK4N6G!?XkskNgt;_FpTps>poH5;)&z~lSh5(A z1hz&Os84Ziwq(G&{N+qXy3vOA)tA-c-KA#d=GZ4Q8TMBnV46EF- z-Lt;?M_)~e-u=x*mH)$oFcFcT@LvE-M%iLnM$R9@v8ueuLTe|@@LY4i+Hk6Fmy{UP z^!p5z=hDR*LGEGhY%?=Yd5~~p>UoA6W+QS9zj%;2pg`qk6m8sfMD`uS6Z{C(-l2@I8s7~4^Hy+;1k5jo4eF!PrbwCwr z->jqVLp5MXXVhYGSX_g#* zi=t%Tj=G7|qYdo@;EwW@x;3Bh{p6M_b670scDG37RLfp>TO)48kG2k+B5Rtb62V$0 zKKJbZTwa#mro@fhDU6yHHhSQI=~MnaFs=L$xxiS}_iCTlzraKF1-BOa3$BJ=&Wz_) zBtu+iA?m}5gQso3XJMZoe)pD zFJG*)`?Uk@2SC9B`#Fd1JTzjim#%TU&jrZ(QgS;zw9hwePhZ7TIAp1v#eb`;EWPX9 z#?w(zuUzEqk!N0~9`Ey}$Hc_6x(pjOjK^Qt z-~;^7(S*9y$L5Gc@Fb&54(T=6DaT=%lRkJbYDN|&*pFpNiOjX~@3)CI?U<~kt*!lB zetv02XV)C2UErH}vhp|g3vt@LFTX6;{Qt(b{v)G+3v?^yI-7P3t&96D$bifjN73#a;c$VT^WM& zgbWgEmqgL?^61T}X0-;L!232*r2fj~oP#%zs?-Ac^^bqf;*e&>*j53Rv7S2VJuiU2 zdACXg8j67aT)G)Bk1j6~tfHrU$2eptCb&t%U4>UVxQ=+q8YrhUUv1)oIeV%%l{@ za#rNgv4E;t?*1w>$#5N7bAD!bBmot8(Y{Ccak0(abMxBzt0-ZmAG=}N`39|YL)p$h z#Z9Ln&$?Fz7XA`pc{fVuU3;miUGZSI%044vKLxlS;=4v#F)Otr=sQJ5L;M z7~dBqK??R>*g4) zwv4gW`K#;jYYEg#2Z&OHq#Z`ialE!sRLANFq?zefKU4X*M%Uq}JTN%A!+&kOQC-=1 zVq@aPM=-a4y6riCf^v4#Nm7Kswa;`i)Xsw@0Wfyhp$T)i&--1eC_}N;t}r^8;HK<` zh9X}aDf2Qxys^E99jZ#~4d&-LEMsWPg- z8Wg->b_K{0^gO#FTtpAMXQ+iKhT-+?5RMc|1G5JCQ$o9wD=Wfkd>c$tQVvrqXEzOg`b6_>i`i6uIAc-B(oUWF&9pi?WNO9 z>Aisc>B%Mnzzfm@xP~-{ZU2Z|}$b_}8u@#M(&-?X$y`Hb<0rz2e=uk!j+5p^p3F!>Hb4c%V*Aj}e!77T{_H@t4 z_4G_5q>|x6_Ns-aHs>*v;i$R#%V<>l0(j~uGua7 z;b!Z3hAS2?Uff*QYkRLHE(;nSU8-d3(xA%Y0Z(|VQ(hRJk9lNe?_cR=14W{5%Qr!# zb^Twk*PP*h-?IK4AMQRDq{?g9gVdN~LzyMDMo;|ug?3f7sEc}5Tee)n{4mQmf41j+ z4sReRl&4wCQKlSyk&bIJ}XT6u#=o{ ztG=n$4D48&vzO0q30FjqSONmC~O6p5*wCvS$(FM=d+Mu!{1EEO@;7`5N2+vJ!`sW0HjbAT>+V_=ZI~pGZ=cD$ zLa(ApRE+H(cGxlB&}W+z_ba{RzL#EpZq9Z$`_tP-_&!AOL&8tPgcYCP{WWs_(=r=Z z0^4d_<&pScH>wK}yoJ+q{GFoQrT63Cr&}&1nH@xc77AIS6`ONKJ{euQevQn~3)&%l zE6muHLsVb5g?zO?IX{3m^8_J3;;Xh+W#i2=JDhWUea$$eylyO&vB0SIt7J)lTyp&g z=t{Lc4+7Vky1u!CpfC9Zn6;)HN9$0H_;GwLod6Bc5Isyk(NbgZl%oAF4W*)*_B1_Dt*a+PqZ+aYx zo&OYWVuhVvg&);1uNGWw!RfT5EEfoa=$i|2x z0q%KK{2)Mr4>$w`PTZ zgX>>=ez~wYe?Q&-AN(UKY2o1&x`z$lk*uM~r|aFr#TMJosLqF!p%j9)j}EdNAt*?O z4qgs$@TesgqL&!!t9*#qDwkHZ2$!HB>i8Q4R6*M1^IW}A$em8SNW#FQ+OBS0wv(<_ zb#jlr&Q~e6qj-{(6Mef?RegJZ9M=-2RhN}w(#QT3b1x8^U9$crO|kLz{#u({X1^E5 z1M3E}$GB>T$o&lnT~tpiQ*kNlhwo-(t?aJh$z`o_5bv(|zo$o%B>^o#HF!-{kPLZ}19!U~RYq6Q<2w zUys^;bJJMDu0VIJJp_FOecBak__TwV&etO;xgcw|H};k)cLT<`OxU_*3q(d6N+|D+ zEv{A!pmJ(CDhZB_AP(N|AxyLq+J-^mnUz(wWa^q96&-!VDTE!q(Zpp^{=?|cQYCDd z+-*oTXV=j#&+ZWR=pCIzvLh*Cr=DC&#rOYsk)*Q*N+7o(zzgai4=r{=xPRV;`&8{; z5)~48-?r0tEI6n;H;}^frc@~UQ%j9ymzRa)PY)IrtA9W;<VctS$64i|*)FfUL=)(#t!Hc{+D>nzBBgL9lz`Li>4p zOHVH_k51x)r*Sv5tNp_sb~{jp(Dkj%P9gxxTImYQL+!TeG`?bc|0BiSbb%=t@=%U4 z=sS(=oj&(tUdfZ;okc+h_%UMBzH6=6JO)>)ki z#`)j0SJKB(k5+AH&0MQwf*`fZ{4Ps+)LF`ef7X~?@LqV=HeK zg|WI1E*uZBp2(rrUGref6zs}Qrpg@ELuv&(^#vfTB=Bg0Y);I>#~E?F#p_I)$rvQQ z`Z(orw-U+9;81Q_Vw_<&jAqW8H*b{{>OB@;)%*h?SF8Q*uSn~#<0;qG`W!9&PE9ua zU`0N+rC0k*E<81NkL?y-2?(%sbD5AHJu%&WZ$9Tl`+EwT7gPA4D%XwXXJ?vMeXU!0 zmfYzV|2bKA(Qrqdr8eNphAy>AHD#BUlmK+z#fE7WL9MqQwB$CSgdNZsBo*@rZWt7Q zg?-4>q!G)@pz>);+m(nnx-1D?-%953ku!thvh$tdYqOgxw-1%4{3=Cr8CkxH^@vt# zv)=S7E;Xj1anij+XJ==#dyv!&0KFHmsv;j^I!5`;0HQB17)juQFB0mLs0I^fl|A%29KyV+juaG2c!D!dPb{|U5g4>(X)9!vfC z^XHlKdy~Mkt92`v1v@2vioJ*3hZzqxJ@|kEIBr}1d=sl~Z}^mk&6e^LU>L!4ctwA9 zu(GoHb^N2fR>;fM%;@-ydem?$Z73*Er|fe0$cS2wt6{vU*kIHgpIYBHtcgJRP09kE zP-eNUsH8Fg*^0cGR}yExd_a7XS=Nok{}WVpXA?AL^@X|p-PSTklew^UdR9$na3r1H zZ2Ho`Yj^(WR`7*K9jzU_HQ3vZ(<2M}ZZbKfF0{ONpMwm=$D!Aj&WaeEo}i-*@#YF= zivkYeXuGlJ9z>5#K2rAbPDEv(>K>@WC|6mFRc&Hc%)R5aoJ1X^spU7>R)N+Ww@hNt z>=IkH);KBu?El>i(6(QcC0x(~ZSQ{a^`FOf?f_RVnFqSpIWtPy;nHXMVO!}1$eD{l zQ|WU^r}Z7{CN*$JK&KH+C!vBhJHWq$uv^kM+z1B)D1m{yBTBZ?cEN7Lgqc&Z&N~P$ z;OMTnK0LQuF-Y#I`y#Qa>X=PE%UGO|?92Y-1+I`!;P`S^f+r1e5N6eZpAJgo56__5Fr5-0XINW4GAt zm*b*Q*Q(yu^%_~``t$?`-6n`D0T5ygSagoaoZJ)j{&d z=qU?U4HVI)nq0Fu!q0m@*xyK_HwNHil%r0_iE zQG1{m2J7#5SoFOx2p=}Ri z_vD~Up*4{8j;smU%90UfK%uUpE+*>m&|kkBu!4g>I$#yDi%#;DhY%k~Yt!ckx|>(9 zY?Td8?O?;(ZO0}nd=~EWCNrmOkq;rAbq(3&Vb~qzQo5V!)&WJ>d4pxfU&q)PJ{$eE-t$(%!!N$+kJQ zh0rkE=AprQSt#{+h3yVr!O2v>VGlS72?=xa8WNm{j(q?d|J4zXgR=c|tB(*rOzKk2 zrG3Ni#m6Ty@TfQF0KplU(Dpn!0R1lyp0buJ(F?E4_tYuad8@71Woi>}3#31_K2n^yc-vTB;M z#790P!7?7N#q*K>Celfi)cWoFFhzeN!JHy;n{e%1xS~^B#|US# zWRXpnk3SEs#=Ut~j(QPY*>U>>wLWuHQ{n#x5~_+Z_e?F5WI&*?6qv~8{3d63Zj3r% zC?t7b@Q4A!5RBOt8M%xt)U#ohjTS2Ly5EAB3CpMUeMj3Jm5;i>osv51RnBf<)LW8Q zPPy4f927V!p{Y(fK5Uhal{l^2a3M+a1Yv;3J^qqCzG)^#48U|IlQ`78S@I$1u@m*A zpFXVk>uCMMrSf_ss{I1ko^yxFzFyoLT6nCE^A{8}D*CMYV7rv`w~9wfK(b(?(M?7N zsEzBUg`{1PoH{3_Q|UKTQ-GiM`7#21V)-|)xLX}4p^fl(SRGNds~fZr&r})qUZr^1 zs_S)2 zqDjGjTxDwgRNbm{!`<6Ev$`3Vz61thb35r%`BcsJzFN{uV}0e}d|;m)3MTGph3da3 z0ccDBt?FmFk7I-K!E)Q!npL~{Xe`UAuSf5UQ!RKQwaYI(i8!^>Pr25UCS=|*9HcfD za*eexw%Iwn7HSB>WB(hHeV&Buh;in7q>2`C&AKrm$=<08z<3?) zvs{M^A0Oa)+#wxvtsw0cRWvO`i2fP+u781`iyqeYVIy+KVI9HgK zqK#+s(QZuad0)Q8+i$%ojL2uHKSiz?8LPs12H(%ku!Rw6kh078N3YTvJ_9IgC`@wG z$K>B!J){w`a)CZFatXm%t6vN{mHy7z@LIK3C+$d$7KdkkSBL%SmVd*oGTNVBi&oOb zCiHX(_9AEo@0uqTM(}<-CDMGCSeAx$(DhpG?RquSHaA;KkT4-H+Z^D(;>i2Ah0^Fm z8OeIc`LycU@?E^h9Ef(*t#f^{Fn?a_QiGLLDQ>V^eB62NsiZP-R?Hn=1|Cr4wmzon z9XmUK>!Y9Yyv)jfW_2WOXaIva9e~bdj$=C%ED0RA1)b0m=H53H?%kfp7M+H!s}^ln zqMlsj15g3lbDea~WSlV0e+z5B)#rE5O89*5-n|D5a!~&vn{%Q>4mG=|knDiKRh$_29O?&5sOqroAJ4G)snV`Zg|R4A-@E&WPIY&Fx{;$xiYzCJ*ac9; zO(eNgC!<@+>sDB{CmAY-_I&4d%cORC9e61mo>xvq8+NEr8jVkBpX~#`w`ciNx2w93 ztxEPy{uH%CxJ`#Rad@4=T5frUs~u-0 z%loEN-$7_!_W~we^z&={{(Tv>zPp5RbMF|Bjl5(yJ$+!NYOh}Qq2lSXj(CU}$>R#z zF1U-zqoF#qz>M8Up=<6jCOW!Z;$t9fsH)0{J&^q&Q4bY6vZU4gwB>ajbHJTg7ig|Y ztV*3jJG<(9)nZd&;r=e?w z_d~MquMQ?sBsaz$P%#RVE=O?6843(+7_>z=H6>;xIuEA6aoPLf&vOfjXqL}kVdq#|PYon76_JW#rj zniE46_FeY?x0ZU;H-DkC;7=7^S6saxzzUVGpX4+){O8;A^|!6!%g9A$L$|o6b99<~ zAvV4YCF%%8_S!`M0_XTBzC#EtY1d?Ab)Rv1L&f5|=Qt4sKu0HvDlyll1XR7+PUlr4 zQw%?i;%{@blK2d4<~X4+$5XZZZ^*?Se5>==4HXp? zozO}=fLMX8QAcnN4+O3CUf_%r3~FN39#RJBcYACWZ{bOk>MvxtBBYTzp3iZdop{?S z)+xq~s96*1C2Yq(2)GnPFAa=5s}Yz)x4B7|X&jBSVrnm6zWflJaYYlEI@{eQk=GPI z`a~vBihF$GPFs*qYFFwltElxDIpzB!d=8^#E>CiRP%p!+ z?VUh`WI@tFDg9@dLie$W!H)&WocstZFEA&cQJy^91ItPjeJ-y%V8$a!>N}a@1^mK} zA)?dE`Tz*6ogoW-i6p(yhqlFllrQA^&0OUP%#nOyz`o{f>yZ+%Sm-g-o>j6$g+i#lPXiLP<`j7 za~o?ja?N9mh-kI6;pJi}dcs>h9-B))~oEYigNFdvB`O zJg5GJNzv0jHRwyT^LV~C!nJn}sd}VDU>&F*!O2@B=a()zgqh5O-d{4B%8rSfDpahF z{*^5-q1#rp+S}W|Ovdb(&*AA31bl-`Uu|rdpn8aK5t#@A)t5ohwJ?sTD8x6N(eO-e zYF1NB$X|Vu#;^Zwv-$Vk2MFk~Iwz=^$8Mv%9xDNfh~DpGO1(RY-4pHK@QqDuDA-l6 zehHB&P^wuYlF86eRThJ#5@vGy3>fp64bjVoLY^S-yu~lyLeEtnVgkQY)Sh;7Tp;fw z=}T#(RRRw5j6!9J=00%>jM)RfEgslSb%p8PasEbotOO4|27!wrBTOe|gM$@!g=|(7 zTEWT81QbhN5*u}f=0do3OBOENO!Q@mEV_gsLk~DSLtPst@bS-8tclh@lbN_GlK4~; zr^L(vnZZ2Wy(wC5!jATv_cq%jPyxsC)H|+jFG@nkg4npNyKV4xTiE*MVV+< zh7!;qo^Kmz_~`*Txz5{#Np%mZk_DEJ3h4lt(7#_xI(!#~A``!g0^W~5Cp8%3v^|}( z;GSx)jV&~MobFvxDF{gl){=f1C&%5^nPBmtJ$J|$;I&fAN`RKsvz3JONZ!zxzV$JD^^dnXR2f9)>tz>gKb^Ch9^ut2zw|5fUM)5?lp|LfvEzpl9W`T>p zu~hA~`R5)>mvOvRNrI{E`teeFq(1#O2Jdd& z{~t(**7M;|j@Ns-vJ>6QIm7c<+^n*aDcFa)iKBH3Rj(4NFpl^W>IaAy)xiJ&sYhoW zht&gzffdbQsIKMB^@ZH`<>m+^))6~RmOQ6okc5w<3(h1cwXp470n2Ht%L)d}p@Wp$~N{7kC zPhh_M?`7$2pRQOIVFd(5Xz^}S2bk%hOtw6D)V<~CyL*8w&o6JE7g~V$#x#_2;i(>V zhf)-cm2xNjqW?+avXV@6ctm*D?SABAwX|(# zE|K$mAdv`2LhV|pDpMXsbS3SI+cHf(%}cts-+cvd55*;S>!wYk7)Ma6U~FX5*QeSm zg#%Rk)BS08Ws6EkcYwIiP5y)-X>I{+0oVZ$iDOM|l%{;Irj|I{<)Z>nf? zNoIH&3^|V>h8dFA^Ju}R_wOA~;hgtE!krPjC*BS?<-dAnLex)na>|`iD)VP0t@%A2 zCuA$59EMt1ro|k7K-T&s{cn{O7S1Ngfk8nN8ROQhlG*({%}vU3$NJ<>8)ClqBry}d|dRSG$;g5XivOtu`B=k_U_RQm-Ba=Ku4RiCRk0IVO6fw~|J%z

2`e@TNJ``D~A%o1Q%Z-r7wC)0#&HLJClQeaHUtC>|^U+&K#q-@&1{aDJ#!A zF;t|NO}srg(T}_#lC0CL`hezukb<=&JE3tVYJP9n>F2yXoLp&--a*{gIUf9%PM-?UZfk^)X z9854ie~1OZ&pwSWiFb0kGi7}Gy*H|=*g!DLC%n3VL$3$bEiyqNblUp}t7JU-d?W0f zc0>qM$=NBT84Nm?T}qxNXft*cts{h0e*RV zV%cx(=NURGm5F;m@D*6GM;~&|T1m7XK5)}E^MFfN0`X|+vpIKrpC>OzjffW4PG(;n$H|n2Y{8w(%uG157+8?lajfh? zd2CQw96$H>(@oE&{1@-ypJJkzgRWFfg|uY1*<<2_(v1!p7ybsilA3A-hJ9%Bf4S(7 zR`6xvow$Xdn?40}wwI=J>*AlNZx4uJTT~m~SPGqeK9bqs&F+b)+Od zQ48w7=fu{6D9E+gqa$C_nq+Dgnfnjf-FFJ-_F4&A(ELUo!GS`Z`eI=~nrqv5dP#<3J76!s?g~XneRsQCD$=jXhQp!vfN#v^ZQD+!5@i-Uib!ra zPURTxiNjOdgT!R0zbNch2b?1c9o(i42b_NFd9_FQ+w!!JQz#S|CBZc+4RW=$rzYk5 zpQpBqar<>Gmk$AA_yCaeKXE})?$EfFWVnsv+YGxwED!3k09n0TrbbseMsGBA(d?1k z-@0|j&W83Qs*BbR&$h^<^tQr7?J76`puihBvV%@@(CvP;_>i9}^Er9^Tk_*Uw*Mwn zdK2XlJ9Z_}O@z9)+bZ8T-w015ffKM@LU&< z;)(z4?tk{Ao8v3&uf#fp(8&7q&hJiak$Et1HlDmMHOTMT_oCCyk9TEXrElFOuW_G@ z_FP|@IH>GO+(n9#>b!VYcClmXdiBzwq2`^>e^q@&(@68` zqRH~sLUDHCILDf}lra6P6c6kje{ld-dBF0&q}{)nAGU&Ol18>89JC{&vOsH8t+Lrj zuaNC1Bf+*{!&xiw({cc$qJ-OG}#B7CzYylHtfJ^2_TpOoX83@HK${{oz5?~sq0FiXB??%g5$_Z z`KP1z&wGUp7XklF%GlnC;rWOMnmPLtVh?9yVFvp)DVh(HWKOiaR7uyOxNVoeT6B#F*gTVzN28Sv^Wq35y=OQJc5m`(MDu3@%ml8DcY38 zwNX5|LR#>}k4nZ&%q7IF8&C(_pq}4GjU#+F>P?dAi2bjdR(p0jR(v4$0_*@{t4oE` z<7^Z9vIXl*5-rblJ2~ov+dMjWj+H`?&!qFum`>y8V8_Ge$;4`AuLV;BcLImIPrw3WUus)`-SKrI$eH0i%~>oi|H0G89j5SlnLM zEnc!8#B-4N))nA)`hDenOV;{GdSC(`)z%cCiLxklMfP&2mGMUBZ^T!-2R&vApAx!T zu6(Qa6{yIl%BE}`&oF)uN8^7&ssf&LJT=QraNgI3U1KLJlx&3>B1k>aZXaZLj|cmk zEYKEAtubw~xGbH;NuR0Pr?U^=rn;?S@4W9{098s<68hx1LG70oC+`rW#;>kfno)O$ z*Xw-eB%mSn53&$V1pmp*5YSj_^}kh2p~i%CGgcg}+slq)$RDF^f!{$Y;g@j;yDJs* z2q=j5^8;2I!|i+{o1+*mlj57bUJypHcV~aP?-4UuzJ{>modp-|Y6VG#A1?X>6DYts zF$!Q`#Jv^oSmy)2ls2vI+~W{&c(#+Q;-j7<5^Y)LT!Py zm@oUQ<@xt^3KJ!h*L(;lsh!eEB-p9KdF&L|ZoTZFXx|W_vHL8iJMx`VpMMUtH?(%Lz)Au*LTiWVL5l;~MF%aWI`#c< z_7-FLMKovWISgnqMyl!6Pj4B3q6v+4joq~MEtu!c5EbUd;T6dW3lFS@+NxgN6)v^A z0Iz#i64#uirPbG=ZUbK=#dEqh18A9AE-}u)LSXPmMTOwyla<|s6H}`L#DQE} z@1i%Fwjn3tdGBQ`O{ZBbI4G$u?=I9_D)>d!9MH39B-ubM6k8*u0G#-4TE>aQ$M?Mz zet8sga^7VXW7|?TW0&`15wZSA?D9X289UrL2^ z9Hla;{~L$1kZ#Uo^IEg+LUc^rs03SZ)mKu(m?cX8{pa&HA28&sghi0muS~n!4&VFF z4rp$2sj~nLbk0mVJcT-9Nn%74FVcd3RdC(oi8YL~_>M#w*0X!(O5Q^MZf)yQ+C-v{ zA#@rT=w*_~)V${liNl4>th6pSS$8Ond|6(?N=53tXeff7NO&o1k7)ld+mBu9T|JYy z9a{$qw~S!#WOXrUf{V}}*^@h*M2JF_gIHw73)aLWo0~7U6dT-rWE6nP`XGxJc@nn+ zgcRyOdkolz9jGJ7q8A4-tqbk)IqVc~>jZNY{b}2uvNtr;b{+BEu+}DnI>o)cVaXl4 z09opl^Ag4Wbn!;|!-WSML(`?Qa53x%YdtSIxv&-<4B9^H0&lN{>Abmf(bze zqPbRPk%#ToXWID1>+cA>t6Z%hZ`o1qMX6w|h3yZnR~9?K-^Q=M%j|HyHRnw_#RSEd zc0>rUf0e=mO#akT0;lq8dk*Vdt7_=G17%fqG-Xz)+clk)?9DkdiiZjn`r624={$c{B_I>(2_mHsg z@Oyl!+N#8_9e5idl`~aWtsum6NIBLFQ+t*0g-99Q*nc?1Do(S?ptE;U3I2sh$X7W_}%DJZBzq_S~U()V5*N3L}nGd;!WzaZ|E{Tuk-3jo>Lwy%qIysKXvZR&T zvF~v~)})p`yO|1T(=BtbTI$6U${*%7=Z^o_vj(PJ>kkfxaqWa%&FDLi!Z==6eyMO1u@J|@~ z|HgIhf8YE6eeY#;VUo^38#O@^BA@!A|fJn|MTH6`ge7}@O+}}{i7!3$+9mRWr>m*3xC-PAYWL|jSUd3 z8NKU`*dQhIw_$TmVmWaY0x9d2N8Zm-RYjC-Fo5GtsF!h2-do(;7I9E{?$GzSCSc&j zECU%b7}<~oXpc-~Q*-C5Ddq@SwpboC>9h(?!Tf@h86P%Yo;eqw)OCz6(gsg zZpNh2p!sQ-Ka+gB(*g!?u<7Jwy?XU(>R+!{9t*}0AoC;x@1-3PuoBVL^cg{+dz4@)nH^lLOmHRdw>LS=J?L7qemOUjPSF>;0t= zea~0ha9N}BcnTZ@vhWF;Q;oqm?SXQ}0aINn7$IOUUKyvLWx63qxinA9pU^skiLFPt zrrk31f)$V?_tcA+>QHUW?e7QarVtNSsj(j{oZ}EIz!)5aSThU&-?URDWJiXOW0qtP zi_rx{PPqge67ZMXL2zUgsBfxLWU2*ZG}6nH`7o0S;d^HPpi}rbDp{j`B2E-nq+MC{S@4= zvf< zh`Nur1%_Ky3(U+5181416p^W}1b^~H)>Jm}Hrkzsp;2@B^74f7UHzA)V|wp~O6DWO z)=B&Z`8C4!_m9-R9iPhYAJ>%4`TfGk0KFAIKmW`*EG;X?1JM9hZ!+)An>Svd%X{SZ z9^+QS)JfCziYs2BSilr1giKG+YXYn6hv}=E28tTmDdkniHG1WV zU%5uLJ<%-bUrD-W{^nIKf2ZE8>mpH@Ee_2 zKbcX--uek2o-n!irZauW^v=eV|6uR~L^HR8W)&SQ51wm6tOFUuY)FE~{uH7SzbSjS zE!V^|Jw;w5$s6=Nz)U~*oqSW(rtMLyQAZ|c!v5|Q4nVa3sXhDLuj#^8QG_%I2_ZF_ zn`UDVa_(eg-Rnr?Z$A)xz`r}IQuaNiu)PsCY$*R7&tQ1UKzl}GH)5bW`dc*pzC#NA zr8H9Soj2S^bFh$0v|C3k%ka&x<~v35S|xZZy^w(L1au>P{5p(a7bo?i@STD!tz_f` zr7wX9U<3$VwK=cZ^d>$iFVq8Z2TVJ-;vWo{ohdY+UF8SD^c`Lz77f>L-J0RupBu9_ zDq}kT?f&H#Mw0jYa-&`^T)sL@Uj+mNh?U{jKTUZ2btOuHd4-XZiXWEyWlJh4aht=zCio@O#jrk{eO(zsVE%!0M0zbg@ji% z>uBcf%nMCp#irlHe>Ms$Tyq*3P1WnNI{F7l;WFy8S{HF)T@M2+3^2h*Z6fq{sQ|e> z3yTM0VYK*ajGhKTV8j4~w;*pcc3Xs&y5Sr6M5%l&zk9(4U*8%d$h9NJ4!J&fWKUpI zR0xZqxsK6{ds2iN2Lpp$KoZOz_%9k_rGAiG4B5nT6gMmAbDX55YB9F4BA9&$^8AL9iDl`*Y_ZL1+Fji z@t|noys0W|MgBJKk--owc=b@t#r;;`?t7K(!XLzKwg9)W#pAZYqxnF_gRxa~RLRG` zzc%DNB~c=WxzYQ+^rEfVdhp=Ey~eIPz?#<}fyv{P4faBN946vIin$Cc(ojTLJ#(I* z!{~HKz{0t}TUi&pAh7O|+FiV8kkYK3$&w){;J<%R6!t zcP$n=)8)zKxZ00on#hOv^nIV+?GuGWI^vSh2@m_0oWu9WJaG)$MJ`P8F#|_>n%!0{ zkm4n_oS$_x7?E+s{_<)LFxcxE7#Ocx7c8;$frg4v{lQhp3}mQwUZO{T^WKL;u5aEv zrt7~BeEjG`%450&zG%2!iw&}1{tySHM_J5Zw`fCeO`#~w^8nYaV}#t8b=8Y*O=ZC= z^|F$lR^wSI)>KPD_PS(%H}?bx-=w!9+5^yV7K3ba4Pq*O6~DQ86Zj*fB?3qKrcZt} zS`cEuqXpbI`!@^u5I7eUK@#5#H@PsRTiC!aRy@!K&gV6vbAnIWAEO2;Lv+z+eK#;K zTP;iqC6NFd-&~o!7Z<4A+*!DQ6-Z38fGDuztm0gZMloI&K}!OuHnyB&}@JngY9+7a`8 zql)i5+)}3+RGmP*8SA5o=0puo*}{kXYA;F0Qgg$u%FRO1Xy&S_0><(fSRxr)kmA=7 z8i6b@8|VyWts$riGz?1j1p~K zi*aEd97*7g+-i_5U_J+Yn-$66N1S^Qv|#sxT_LD3Yd4_1Cl{g5kMfPGoyB@y$OJEt z=-u*nmy=V{+-$mbSEHY%wqsdI^~^;uU_-TVQ_wr%uxV^Y7A}VQSX^I6Nh}8Z6^8|~ z>f|i(JBu4)4^S)^)h?UgC{b4n-rf=%+b2T1K2K}Nmz$pk>U`_0?8Pm>RUZl)L* z;Q~U^emXGL;%yJ>+O_$3I&y40Y7S|kIyP3vH+pZ_OblMg8-k>eIhw_W0^`0mZ3cXC zo3XNG_;sTLDA=l*Gmm_wzduY$wqaL()iViCBhnktYn4_zME{JjJQV%SO=aQz+~382 z#t0ikTw#Whzhho#sR@(WK>R{XP00#60-t*}3K()gl$~qS6KsyZp4O9`_+nI(bm5np zr@!Y5jO0GXUTXIg4*Ro&8?J@rO4lMV!ZVEPXSrs7BK^Qkc+cqK<%`GyM8JqfSEr1^ zj?||VSjG{@2?4Om#VMcOsSJGk4Zl-axyuzEa1AhP$cFn@71`^nt2UqzhKStVB$F>+ zy!ie6M3s&lkZ>E|Vv|Ec^8)aT*q(o0vGQH>fTaMeQExoOdj|L1;2-=nFr}5;e%SJL z5o$z3$8E^|$fX|Xr>uvVdHkh~{T-f+8dy_#;(y@lbqXR7$vyL!4qsIN2Fxri*EH=K z67ld|4+#m`Gl-onZr0t&HZ^@nA^+mrS*R|1EhPOV5ws)EkI#mI53#!eJyOR-e+ine z=JpwxkRfx$F9t6YLy1y2bL0Km_lM{uq)3J#XJ)1M_xj!Lu-}UdSQAvUepu|>!(Ces zBWra-v$f-Uh%r3O5hStst8iTz%I_RhXiv$n%<=Y2K~rH1XOV2JLq(*kj`l<-k&ipv zUWz~1=}KZgM#Dwg8?RFQ#vOL;)1C}u+&Qo{qRy|@@MzsCT;Ye6)r!=19dKi{mZ&6N7F5_{84P@ z))a0JLVHgUHxymOLyCaLcA7G4{Cd%WMGF`Wn5VMQdUL19yF!|cij0SOtj|9FMZ2(W z#tX5uaibYUhcvkCCRYIVZ*je2kA=V&_KV)uNa!ELnwY2*8j|wUe+!PhFGo$zbLNCfAy+> zOy9VQ%Zd%Sp-@_G!jsgDrB0D#mNF*WU^KtQ=+uY@eg&~@&ezAA2+g!nVc($1`Eenb zRf_OfEF*x1|NJvqb!4D&1$_d}ppYQfZpT!@?eL}!SX`fS;uX`FP0WZGx!Rd&CJ5_v24aO(Af#W?-uBHF?<=~hS;V66G7bYcu<3J z>>`YOy>eYn<2F$xzI$PscD4``U6oi{q7@HQHuP$)Iww|`ID7SqMn@klRJH45uV~}i zpZ2k_sH`mf#?1be;Wr%*9XfY1iJ$|!_w1XGY3zDi+Yu`$1q|?H66hxD)A?D=B%*qd zP!|v3a8_Vu>53`m6E{g*ahjq*sBiX>i6dd}ql39mh*@$j9zO>B)tk}5Uj^r~80`E* zpovyI^>mFe^!CVYyz|{!B@n-(ZY=$FR*JVU9AbuopWi>Xz$Pvj$j^s_C|ChtMP3M9 ztWTaNhV) z2Qb&Yfdjn;Lf*r-F3U1qwCnyHk|9a1`OfQk()A-JDklw$WN3`>9{97jtzGgnuEj`h zPAcH?EfJu3UG#76tN2dO>vz0>fQN#N_scqquRlZ!u^IPul%E;7k8x$i8uT=WrlJlB z#=amiCE0vfIxZvvrzM168Dn2^WBCbmF^PUKBV`8%O-aUVPddLt&(Hi?W~^frfkRq= zl#fM-*)HfafaqiaqS3CLY^~h9+M`WFHBb8PD;}gx;QKcN@R|~0mmAB7R#(kyb6cvK z3d#j}8gaHv2zZ8$!z)+wbQZI3Qo?9~c5Yj0@jB*2Q)Z82%5CQHZZ)KlBDifK%4IMn zl9s--y8dUJeqFyrkX!IWRQTktf)SMidbtWHj|ha+j71gy`a4`4yV0(bL;P!Q8D?aH zB3=y%nG3t05I8*Nbs{~Z2tW2sSGxj?&xN>1T42b04a%SbsI%tbzhM`Yy*A;wRYMwL zneOzwu5t|sy)fr$#7B9s47w^Ual9=BF;W3b>(HffN~?CjxU0F(oxEcFxW`$GEd=rN z?~A(~ZkR-vm@l~Rw!A`+-l*q=-d+o;W}NGLWaWv=N*!$6>j+OSBD!YG2A8C`V1V3x z%%*4vgy=)(z_uV51!zXAV00Hor1g3mZIIAz#={y4y8Wy0SvSWRX7R;d+gy5Q1$PQl zq;|WqFG^i%D`EQC=5>8C>Wey}+}S7Q=b8f&OU_0g$>_lwL$D?-+yM+s_G5EC+P)X7 zR}!E{bE#yQTnK>?i=c%H*fj8K+!?${`GqI^wm$dTQC#X~C#**FTI3RZNa%awdDb)x z_OSu`S>!;Hw;cChCz1B|ot+*F6z4?Eq3eZEIBKH%3q|oRMq!_ih=4{{o0bk|FLGg( zzF{uTC=)p*;bGvFMVv9E*_C6@TL8Gu0oAaq;T}Mq>GC-WJlB?i4fU=%*jK|fe4(As z_j8aXZ1zn#;pff9-=*&R#S8!z#249ven2FO@p_u^cXRcPPmISWMUX`BYQo9+KqSw6 zPzYQ#%Nhq(UT*AlB5VgekWKyl33!JT8Ot;rm>LlMq+iYbI(?-W8jG*a-x`Y%nqYbe zU634`*qUvqz~3>$&55}-Dj>utzQ3%Tw0RDWj>UM)7okLQ6IDQGo;QDf;fRR_b4b@; z=kdX%=gN$to?aMe7U0r|MGbH5f>L(@nF&|8HrUu=929W->$Fwb8iG;ns|)MXR@E)w zk!r%0Rg?RuCKq4W;A3uhk!^g=w_Cr)VAqWpIE|c#X8UTk-|S90***gyT$WP3_Q2F` z>FBPS58Urt-}%a|aUj@|7W&s2A$H0mG5hVlZ(o^YWr(_?{Ycx6H6hM8DS{ASN&o$WENMU;#^T7oT$oI&5N&iB@{evOMVt2I^kRM8BVB zi9)xh6`npzaBqcxcaSfk*C7E1iDXaeIh+hEMNN5zm;U8xkfc5JA^V0?K zmF3uopyLGjSU<(;J@@Aa*SxMSv5KMBij<3cH3o@o<)-{n7k>%_TmW6yGkQ{P-f3xW zj{LC-U23cZC#SiXcw+2>*E9YKJj=R4+Q6FeO)&|+Fc<*;IUCx}Wp>DgX(woyEiep> z6j+US4jch`)&PEgh$P}vv|y=C=39DQ<|F(r))hBJdznJN#fq$Z4LGRy-bA;19WHF1 zO!LT9%kB2zYje=u=p!Xc=#37d0c>NyqebCMg=DB{jQP!%8Qs=Du9YCmS{J5wDJgcq z+r0E=)LpRJVyZtb%ZRvz-WJvxV#VD?m0 z!NbCFZES#_2f$TtJZ6Sm{hl*@(jIXROgsTDlX(bqim2kbt5tL}a3;gSOKQ|lnwx)~LHA0?StcD<-K{EPkoq?U4$ z(I=LD2hBH;A1%q#yqz^Ml4vX~)4*U#LCL}g102d0*GdjRrBeXeO1-&${ga-c+eiW7 z1-}oHuPy3)&UARG<}_mE_sxJSMubsh#@qJ@G$Vg~0~*;DhV3U*9lPObUttX?F?~g5 zhHCN$@ZuSRegqeyRYSn(E^4TMip5c93xISW|G=ZKR>Ph@1-&{$v=uvv9N@h>eA{us zFvyDo#+3sS=neZe80t2B$Kcmas=UZ+s=Nrxqmn&&Lx3l0qqhqv?tPu}RBiK^{nn2Bw&930!vd{#J+T&Y3N=9x9f6%{4d68mK0A=TJ=%Kx#AU66yMO8 zx8SH_1Suvzf&^?9z5KVyBDB*2{TNt=f9waGbGd-~QPTgzt-;IoxwzPMIUdno`BzG< zl2y?H5$n7DM)VYg`1)EQDy#+_4BWy_`?))>m(BJowCui2ZRS&|kbIHx-iY;hvD?tF98n;o`zPZ=H$yd}1v zU+4C2GScty?e6xL;yR0-G2n~j-&+m`uv#4^U6zTtgMpOFHMzfe$$u}yiOC*h`KA8q zi4hhHnw6rAcW#4wFjb2HEFYuc;Uh-7Pg@@(b}BzKeWj1WZesha7!TdsL1Yk}55CeO z$s~Y09tUiNcI@AW*ANf<8M9{H6m>yG z`W2v+W!c$Q(gw^mIp6G^5_335WeRc+}5jc7kS$Lu(Z43Xv`h! zs=T^}dowijvmxRJ8G|8Pny(Me`TcOojqJfyUGxwikIp_a4V`278E8uTApcoYXz@nO zOsi2kecug!WwKEk+gBMrD3zQzae_?dWb;pE_>6pKV3bSHe*hYa0~!8TWk*z+RAhc3 zYe!=l* z$O^Dsmkr;pVB#uDh!U73Egm1SieCUg6DD+;a9)|LqN0f#wNxUw?ehkj@lY~-LF)OU z_QLYXh!R#M-wq2OXI@f7uQIS$8{)*V87uphF14%tqA?VaKY>P%Y>8`{msCRm?SP?? zAt)`xw!Z+FdNbzhx%*~7x(RWiB0%8FaPXLy^4w-p7co5~Ty3fNotgf2q;ZWM_+$7( z_%qhP}cyQGF#g09gBGv!A{EZG49v!A>kS(;Mn?a%&1-oY6l$*%_^hmTNx4AT$(J4E_u(48{?*N`i$v2rMWK*K+@SVeR|y=ljpHKPe18x zO+18^6Q3El7W4ygWX^IO2z3H}?xm(X$$zhwJ3VLlh2a{TR+P%C;?++or4N&{AwR(y zd?>P9+oT&C4<>@yfiWSzz*bX7XE%;qKwFpGtrZ9GiYM_$$@wqKq7TcWkC3}#{blL( zVN-9SSAdc{6ixSx|6-fe=K19T-r2luT%PXOuwTgEVT$M70ZI`VY=3G}9wVcrXbgv+ zVCs>Y)ZoXx!zaxqIEgp*R6IzgnR8clVvFXeCFHVjrxE|v`aK+6#A9c?-U?{pi%mPQW z6IvL;FCu_QD24}6nNCl-_T7NHxMQu{sO{LXk@XLt+o{gzJ;%Z9ne0O_lfE__vbUOa z58KxweB6gxD-)0~E%AqbO;vbq%u#+}9il(uF-*csbcD>g%!NEVD0K(@#% zMBXogD|q|MevCP$(SkyB+%4!d$+yE&2q%{;G?6V{o%()4*ze?Rt;8QWG$8Hi#MYDS zHVA(Up_t#Bl&8zS&9{YssYzKv5hJ9Wuehr4HxYu=)Zu^UX!?czXD$+d|JwiM7|Q+o jDDnS&bN+w#=KLHCum9{$pE^UP!rZ*x%rtr3{xkmvh#WyU literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/streamlines/mfs-gopt.pdf b/src/steady_pinball_theory/figures/plates/streamlines/mfs-gopt.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5f10c4c23f9345fc1e8b74e16f927ab30590a6d5 GIT binary patch literal 38152 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

87X?zZYX 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 VI0BLEW)WC40s|2h)!L^G`9BEML5=_b literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/vorticity/mfs-gfit.png b/src/steady_pinball_theory/figures/plates/vorticity/mfs-gfit.png new file mode 100644 index 0000000000000000000000000000000000000000..59974817fbea6b6a358f84127eaa0b8305d665f0 GIT binary patch literal 27385 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 T7>=rb2UsskbX@duZchIK{8xst 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 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/vorticity/mfs-gopt.png b/src/steady_pinball_theory/figures/plates/vorticity/mfs-gopt.png new file mode 100644 index 0000000000000000000000000000000000000000..634c196061192306cf58ce153572d9caefc760a9 GIT binary patch literal 25171 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 Z_qW5fR+|4|LEis_il%br_dopf{{Rk_*DL@4 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/vorticity/mfs-zero.pdf b/src/steady_pinball_theory/figures/plates/vorticity/mfs-zero.pdf new file mode 100644 index 0000000000000000000000000000000000000000..05334b95fda1cb88a9d2e15549fb440e57a32395 GIT binary patch literal 17124 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�v9=&lJ~ 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 XzC@f4ksKD`NEr+UA|j$@pbq&T$}nZQ literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/summary/actuator_CP.png b/src/steady_pinball_theory/figures/summary/actuator_CP.png new file mode 100644 index 0000000000000000000000000000000000000000..82d3488ed1213dd93cf32213795e5693a74f2ab2 GIT binary patch literal 27092 zcmeIbcTm-7)-?*+>U7)abc>j!yTu5CWXaez>QMoaoK1jaLy&$%9Vvfxoae(sE& z<2gI)6F<3FI5Djq9VA7?#YK0C{B-)(c07UbD3~*7NXKt1^DuqjNrLu+=qeWml`p`^u`wKmR=X+arA`nSq8w1CLJ1POr_~ z@;X*LYjwaCw}5x&)TOR$UhA>>-D#mwL(9b~a{E8OSYWm04^Ba9 z{_cTMMagz%MO1ierLv^9How{rcmm%aGq>g9Cl3$rBK*%0`Tr9?cD2upXBVpD9~&E+ zk!K5+-!#==bzYUMcu@0oAfqzGwBpx}KQ{$F$V)x>`s()F^|yX2Ue7#?&!)fIw=USU zbb-A~@tZ}%tL0?{x;kDC#CT}8ca#Ke?O`1fEqT4pF{)^lx#CWv#|Ll&_leJ@@$FaF zNRAY%%!$u(CMthCB%;+@pQxK;qmn5n!z_F_{CZvdHox?;b~{&ouBDZ$r-Is z82$2cdC%-bd*!EhcQYnG`p56Twz1K3v^=BPA=jeb)RmsU@%{qU+V9s$2$8Mx^=;+BS5y|a$sPlfw*FL`1~;GtYQ)`crd9 z<~T!EBb_BvpYC28d4FMfcf-kR>iu;oK|;uljrv9TMK+@;R@ePMfVP;g<>YPaQk#H;x)>enw^sb}yrj75`W z;@*2dT>Rv|l9i8sGI*GE6nh)C>*pow}L`MkqR^2}|H#_9hGvqVx;nMCk@pYh4 z(!S|&$m3K`-yF? z>gy&u`t@q##bxS)`dLl9-O}|Y+W)#R*{1L{O~v6?+|6H`JyI&%Gc#J5HZwm`CYHv2 z@gU`P^NBf5`+NoOlJ(bVq3oNpQka~?HIkO6KE1s?RV3zpqt&H(rx#~jJ=>wRDo#C8 zB>!twqf^<=(V*BF?o$QDb{IS62TN8eN=7<7wSMY46eDBbbkAerv!P@Dm{X0`{w~4! z$^CJM!>c;Gq)#vnz)ZlTu;l5y?5-5dq_kI10kjj=6(b0pnP& zv7_4BL9hzTkj#p*g7loW(9W{@T@3kipLR7j`|I^H+un}m3>9!jQXIX6^F1asIOBsE zeThlkH?=kB0QOy_mm`a?d;D&np;O7`>PIJwlXE{mrA-qr>o8>6U*NMI5V*PYg|bbY zji6xnnAJbB+r1U&kju24?-0r9WLdX9bq+B&aV5E6y06h8chKpb+N!Q#eY5b6r)!S} z^t3g2%(M=9XOGPGR>yCh8p)Whop>@{-|SczE#%gFKeR7X+GT0A#Q0Xzr{_wZ_NPX6 zmQ`x(RpF%nx!pI>4Zg!)C^#*<&D}QewGZ5(8Z3E7$CBk6P0}itdw;obkaPX#y?#NO z$~hJCR^9;{m7Z?%yL0~2?aOQJ=KJ(RMNR!UpK~2U#?+(bGj|U@uJ#MrX&28>y`yg)^}~7cDI@ z6dk&IO?k)k#E?pJz195egxKqAg6;1mTw0y$4;D7cz4u+X!>bSh!ce&o{#rm~Zupu% zws2qn^oQj>yUWJ%VXQ^i*QQUCa6>DvDUKXC3pb!&FwtlgTR!e4Wx1!pTMS2JOYOtw zi`Uf{noGAAyLoNs9+%@+bI$6OYju>a{e65&>GPA09bRp)LHEI+t(v0pE&~R=)i_>@ zLq~^;1@)EVFAI8~zmTbS(!9}RsLU$XOYiaNcXtjPwR=<~kTGbUQaPnR;o8n=n^730!j!8S@0uiHAbHRSFyD(@zko3|E}w#7!Bt6~I?)6>MX zEiIU1-}2p&I9q>1SKm}xIQij=^#SI1r1ajnNSP;jm&nCBTiVsg#IIVrR?_nDc$00~ zzIoOWezj%0-}}ydTvhns-bDF_hcB0v&Cdz<^7^H}&SF>IT=V{VmtXDO>DbuW z0jq$Rh0_QKR(ShzMAf!WlbXs?LY#pNP36h=7u-@^HAJ>GJ2qNQ$g>l=8{(33+7s>f zOwN49BLx>r4w-2+!$6F3&O5OVhf8dx{mu7YuJ}c@i)rK$o~i3$Zdg9i)f*q1dbRO< zM?lZ%fn;{c_-vB-?2b?~ck8=@clQO9k~0-6nEZucgPGS@?LH3OdupoEN4eR#qF-jx zS#Pl8Wu8O3W8thz;O>uqPC50LE}Cj+(6JcOv>DnOgYdgWhyCKPDzB~%XI!Iw^0jQY z&6>>Oa)*QOGwaPF;ljEBt}6V+3c|2?dJdYIovcG!rbgsfuXD^hTcI*Pqd4>BrQ7US z{U|L4Lhc$EMk*YUU3$qDM!^j4EWYn>#9zrTfCS(?7o(X19o3GNl&ihs^kdv*Q)9sV~vvgxz7ch&+^(QD{<32fVZ*N zvCIlNaxE-Rx1Nw8&mIN0?rK1JVD=qCmSE)2{&%Drk zYO>>6lFRL+MaMa_pIr+h?`#{%h@DLy$-lhO{lSP~GsfY*X0LT zwR*<(S+hxFa%qEUKC`y+uAigKaU$GC%Vj0qMmqE0S>TZmRUzyPnYXohlp%%ybA@}) zPIpx(46);5y(5M@imecr8<~|#!eyL6M<0degr3o-d=)8+jtlCRa}PGcr{0SzbUw-R zl8b>Q-%mH4?NOO8A;=1dkim%0VPETM3o8@NO&(FMXeqYKZgm-J>u56fn*PdQC1=(d zjWyY{zc{z2AvXEZ>$Snfl`txk{Cy(7MOa%d7GYKF?zmdYpLsG+&N4M*xH@+3ar)K0 z%atCRc?@npx6?RFgrHQVZDY~b-fDkSm&W_)>@Na`=726Oh`t{o>eJ!3g0uO6eA)8Ne+>_6NS6{@Wmal+faP=(W2xucB2k!5pX zQ+2$Rl}p-QEp{XGLAOlndQM83sOz4o83&kc@N9#AvrN_BC& zX?}(u4s5QOvGhc6`B*_sOrSURRmUP+y|KVnB~~L^ekB&x^FrCvkAA{^19!99y*cij zyzqV#t7zvPvum4t^laCO_~ob+os3H#*Q!-i*0JTJ&KfBag!1xcCN&kmj*I$EVN~iW zFug-aW_ims+Pr{q!z1Hc0Wsg*X$jxjo7Yt4c9(=oDvH7s-KK5#?%n7!GhF)p&1wyWox&-PkKXmNMVbe6 zbZcb3(ezeY0(tm>N5vcYvNG+PW%NzXs&#GrNNHF9W0jFNn}QRXjU93<0+q%a_SG{> zHiznnddi-7^=G1bacuMojom*}=5xUwW@tyqO{fHEi}0%Yh~5vE1ydCZ4f8dCz!OI0 z%a;R%<^B}b+P^D4!ZtFs&bvQJ;AZ6zyYR60*LVA!i-1?1pEh38{y`R7ixWj#;Ju-Pb>nCVp?^Qh{rwN7pNPlD?rPwZ)ot%=dq z@|b^q$NKs7&1dx{gMzQRU6v?pRcVlR`N{6hh2_d&C$A~Vth0N#C&a|51W+ZeVr4V{ zZu`OZiFTjDiiY?Y_r#G&L?GJ`^UvG`?~tt6y(z^g^I(!*N>#c=S*gCiz|JacnY(^T znwL#^UIP$;Wn)32zwEaSCyn`xcZm=~Lussru&3PIWXEW{%ItPZ zRutQanb63Cy z1sUXV&(=pzOd{UZPtCInmA97kC8f1>cCoK4SDAS@a$ZC1jUMN6p1MrqsgP9$?uZXn zxvoQtoApf27B!~Y-VfGG%-c_Cmb`P{&Car=$7(-IDrBZj9r3VZ_SK~{i!>_$q`4`M z&h<*x7UY|2o5zRy?2K7u9y*wvqub#erd^)-&&UA7jEi)L2;87R*)HYQqw{m^^M^)! zetvanorA$t*At)lIr?)ZFlf))y~|Uo)6^qnf|&)jNp%GyNr_VhH3gRrX=lCcZYZ#F zZM_;Uxy7jLQX5? zX@O|-P+ml9zwTiDaSh#3XWLTmB!rnt$H8OA-`?624(HFBk6feWq4$biEZH2V85@Hb zyR9U&IH;*`ePxXar_`oEj45xLJ22?sZBr`qRe-*;_e z^pcI|e+o5mVvOS)J+`eEooHcdj)V6gUo_g~Ajns1khRFdr)qut#o@8d0If#I#QSF~ zQXUzLNOuFlCkj=;P!pKTx?0YE>3Flj8#0g;kh=h`9-3L$;&%S|v{F4t-sKl-zZu z6;+4COx;>c>JL50M;7|zWQcy;TwguXCBrowfQZU;$CDXbS)D1_Z4vg-FE1}oQ%v>x zdy106apb%irW%9F=FyFB6Km(y9U^xfe<2boS!iiqGk5W%hIxF>m~)f&x}zx*kBrh@ zMkRL3D5;2Si*4_m*ANTCve6>}SLI5?jVI_yF7#WjJo%GY-j`ov-1`zrt-lFqHG6Et zDeczbJpQwB5x<3fd--u-ehD30E+}Byw^M=!2OFxbsU(ffWfCBr`Ept1FslUs!TGbV z#MaW?GJ4g&r>i97$A-C0{2*Yu;JXLuK^pQ2Ba^a)Q|i&99Lp}eTB%%5l=jp-mRX_F z=Ut-L=h^$AW)Xt3pY}JN@ZXuvmMFVNW@@avIYZgX^KO7lqGCaJgl$BZ7*FQQFa(49 zePxb*P1(2Y-XO~F$SyQ;>k95aTyE;x>MVTCN`D>+JrgcmXKuchc@&($aA^mgIOAQ{ zRlvN0RDtlracFfwC``>xwdty(6euYMRftT<#Tg@cL1Jc<;>E&fI27DHScN5(_ z!_1pqffAS>F0Rtk$c`{=4cOk%V4%LVbnf1`;Bw%}=&HVB&wqk#DIn4b_YT2W=peGk zzpD}}oN>wm1SHf7xSdoAq%2XH$&NCLIu)WH2wM!LXeiZG0N5Q5IszZEt+$Sk)*HKi zA}J*+QE18sjE2)-W_^VV7X~_d^&9IZeSkYI!&22AYeu9TjUMuhmq$r^Aoo#-IM0p2}K6Y#`2$OfVxjUPf<5gKQ+6#6U z*LW>kAYSI3sUlej0>Lt;!mV|&mFv|gQx8MVgF6pC58qzfJOLbOCbV78+-vNk&-{ds zKiIFh)nF#Xt*h>R#QE3`xL3HcKRH9gVgrf+_IJ~&2XsbrDnBcU`rX0)SlqbR0AkG2 zP(N1L%TK7t$Tmf~%zNpJxl`ReC&9%;cFC08*`vx^-kF;FIdNiP?LdK1rj4!%_AtZb zbJThs@SaDLA6FezH=5Aezd^c8a0WcS7P4<;b#GBFm9_Kk_9bnIZFYfX88(agC4Fv( zwbox;W!CUM9qg1j!FlymFStYzM9jAL>6BbI2AUtgxYBQfOT+OH6)8Q*Tl7wkaK0$q}5b-8_r~3K*DQ|K{>*6?B2|*-l-psh#ZJ*$2u3z zbcv0<&I3U_Hl2@x$=I|hd{l63adep+QH5J!_4a4X7WyG4 zQPY~`k{Jj~ao(+nCVX}8_-j2sTYST>ruBKQ6K|R{bKBvWFR%K>;umGxH@-bg?E3c` z6?X$Vss&A_WmL$!z5mA&qKb7>F4d(N_YivOTGWpt5e>tATru0Vj`-5T`PreVwuu7S zGV3R!ePTXSheY$fypYdMuw~mMrRdfA$9c_j+ACcPMxzbKiDhPjJdkOqgMBH&_1Az~jMeW>1A2tfl+(Vd=JFn}TJ`>Gg>@>ay93dPgH`3NQUO)RwaHzdm_H#GgI^`V+bHm5YvWH@4I=9MoUf*k(t7221 zYU+)5utGW>Iq1GtvhZ3!`EB-W2@XP3f_D5C#xjM0hlx8w)5LfeN!>*qK=#67zEWBk zI_6V25;qW!2DRTI=wgzxQqc4_oi>A_;P64NNNXFU_Sx6~Xx-1XIB?l5V9pq0u(kG&h-M@ai0op>0?f|CL zhds6@j`Akt+M`(E9^8UWs3S(nBMy~?UKpaDsdMdml+xDhK6A_rCYBgeY>b^1PJQwV zT-tsY5bgi0yD-ws@|}<+bmHY4y-_2nbXo&rIJXg5YYQ@nMxXiF3><~~*rHyzLOmnv z`*dYEq`4queUF|S|E;1XUNe?zdT^yK)8m7Y@b6rX-(xV72}Zgn+$yGIt!=VaW>1?A z=*(YZz*CzbX!q8qnG-{U&!5Vy)hkPgkBNX4={YE#chOY1y*YZQyg`<%xJt#o3t` zvgba%mDjI{_q?VwZXg3LMabMt^-Nm+_>P=AeHnZ&TGol5_>FQSl=<3cx@F~tU#%z; zy|T!64L=W$PAi?z4X!QX3@%yLY2&-7Ty2%<%{$vDsao&#^_@lN%LTux^75!=Jo$9T zpK@2lu^MgK_Qo!rrGMVow7;7UFsl;H!hR=WUPu0Qm5T5E7PaJUIf7rjjY@Q0%v}v0 z)!uKgDE~u#7zLZ+UDTPQ;+#;^1w5ngy!BgjT)rI*rj7p}@{a%Z+l5U~U9&|qCQ9q> zzQ5|iC~9XhI{fauAs!f#u3Q5}YGqZ3K7jnh0lr3}HLRM0Y> zaFK>5u57N#VfJ_;p_oE3Fx1hrW8E6ST1ma{@%5#JYCCSNR`K=>RG$9y*rs*|!qZDT zj%L(uagWbARzQtGT_MJz6r@m^lXMwq0EpamNHpgZG1CJ`YPb8HP*z-sOBw9md6c(k zIm+x;SBw7=AMIj9IacF1D5Nq;r_MJuH8q`7{S`2_)3R>HdN@IIv6Vp{passaTvrAc z5&0?*?t21?2JW*4>ltl_=D;E7HQ{asi#%3;O14@4IC3ays%o=lz@jIaJ;GNX{%I(* zz>i8F5AFt*f_!!YD7c3YWo(f2o|z;DnZb&7X-atKjdBH()p`5!#zYP7H~(gYZvr-n z!G9VpLk324y87BtfM@+w;YW2ww$e?G<Dkw9!k+# z1{DVisuYZz*NguHZvFPi`IaYVnfmajJR%>-l$g+z_>Ul$umFr?LsX!+|D^Hb$-)6k zY*4^>QfnPZ#w}t#F4>!<{r`C6(#hJyp3XgjB+lpJ1T(N{gOu>{gkH zHV;S8qJdGaZEj;B;@~aGE*a_AMEy)}da0Wtk9ms*v)h%+#)2lbL*-@t-C5j}`o%I0%_La(%mH>>3`y}6f0RA-^)Qa`u@A@y)U;fFDDQ&Ou?&n*hv7K< zgRT?2gH=jqoy|iks**}d5^|cw&A91M%bAyaC|{K;)*Bl`G08ghv$qG2uiUx+4JxW1 zO=&k@)u*ip`XZK6R6rK@)WW&x@7GFg+k5Hz5~YcjAjmA_DYvB520%p)B$n-&HMqGs zk=;mex{@<0N>^wq-gtgtNzc6?jf1!&n3ybrFQZf806x!NSlo`;BYyVdDO_%+L}Go9+W`z3ZPW5uLO!$o=1fR+>aFK{HGLw$IS9k&k-8wg&AneY#YJ)( zk8hg9g$2jnomgD->nT0RDM_LjTukDI{PCpJr#l!`*^ce*_(haUlQof0fMcNl<*wBt zW*IwPSH%5E$Zf5a{bc>CL_ z4wE<)0PHZ!4)UT#FgJaV3n7N!)=N%Z;FCFhPL2{kRww+n!&i9$eDPWG&ac^PqOI}U zH;`FKg8uZx%Z2Yc{_9hh!3d)HRi;Wbcl5B?Qh-jS9ROje@471Ng#CWmv_CLeb_F4> zuza;Gx6XrClmNbwZ|_G4q5K?dK&sh16fAc}ob2H&^%xh8k$o~V2U>oz1 zQ0vdxZ%i(nfV!j{b-EZnnTDT8rQ`7A!=)D3OhQ6J30^mbq^r);t}w-s^WabeL|tF} z@ojK1;gFzyK*tbsJkrB$hNl+zT^az%(FkS$Id#jKz0p}9LY|JCuX&&qAbNLvkP(XL zy+i+R_`LrmHThdmWayhKF-AaN*G|n536P`ls!Xh~<#*wz6M|h`aOL>`<0Q}O=zmVaIW^#B)u>r9V;xO`44)UzZu+H=y&|(C9dv~bq}S! zv8E;8uf8sngF{5TOO0(IN&A4uHZ!Q~Y?(}{m4L%id(~lRi@LAxT~>lK5e`LPoi%Dj zztZ6$;|Sk<_C!;*V=VSJvrR$+n4icJNlW&d?1Hfr5(NZjL1en?@&*?J)+rcUIZ9W} zd7AXn0w<)4eswSV6QusF3hAH0iC>4{!V0xwHxwa-vws)_GfR$R;BmDEpJ>mOtub$i zyn*IqD+6m04xvB~PVGU~xuG_t3rm()928E`shzemn?Lch7yLlZng7-gG_BzWRa6!r z+ZMKWnVgW4$2j}dl@*ex-@x%GkRX?Aj_{)!@ccTyt*lcduqJ2)#kR^|b9N>4JR_)M zTF}DZ*uOCxkUq8V0~w=;jR3B1E)Dy?x>kAzPINE$LsC%|ml0!3buKXN60Nzenq?t7 zBX3uU5g*`5$*g~fn*Cz6Bpd!w=eNL=K#W!~A@80#_mjX^H<8vX%=)%c5uKFD>AzFX z&vSppe}4S`YYBvR-lB+Vm_!{T0=q_)ZatYDZ>~llcnrY{iQr;9K8LR|JAd3e6mE@2 zM77&ibr__U6-e%KBxpBNO>^U*9Y%dqU#9h3HR#Aw-XU-+|NJNv?mOuOBesP=526BP zeF`zI(f4kI3lK6(E;okrsD5TEm>442`v z4}HVZc#BXUgh)@`InguCxxbE7%|Sv)Pn%{$xH+4u$ltTq(2-|#qHwbTP`ktiv#11e5E|cf zC=%ihg^G@5NYO=qlP>a%$=U^BSss+Bc>4n}2)o3}Rw{Gs@~ai}Q1SZOUoVCnM}yet zDZ`HoZezu+7;ffyHlH&UHd`jj>pOM2P}pHd?jKtc>W0#=4W|!i@sq-_{|^BaoXfFE z1YLTJ+o$y!H&?hW_>Sj&5_le*@}0LHOmE+aP^Ag!SM?pW>a;>baLy3q?L?{7Xqn=d zXQdPEXa^}>B!w;Xy{NA{^pRi%JrqS6(st#2tvWRNIFA^GLpw8df)i;$1ax$x_Y9Yr z&q<`^jT}T*ixUdHr+}UkyD7%`Ueu|zJVJ4jDpV|?_$a4?%ixl>1bD#3jX)u%g60#` zeSzx@Q=D))-?STvi}(p4L2nxd1xFXMKI@Sux_XA25sptRQ~LULrgDBpGqaRTtzciG zz!6$g1`CCG$R=E(?>-{lgmnr82xa4$2g%L~w%~KbX1bjD3f-mKNDVGj0;0a>yd4Y-O6l0nGGpQdu#$K<@J0tDCU{@M_umxaN+)&6 za=u7wW%{0Y$tQalof{xZDv6Q?Um$69jGHkYd#8=xlmCVaG8nxR&ljy?4^M{IKO_zE z|MHkZB}4!Tl>h>S679^Ca)CIFF*l?`El$VYY1R6kAZ;&-DmR7XP_i9`kWdULC3^4) z^p3*NRhhF+1*yvM_#N6I_e& z8gHc91jT9Uhbo-s6xNE;d7E7OU^@zmsTa+05aob$5c`JMPydXFm>CHzWV;q}TDy02 z*~Y`{8C6%2h<}m(-x*jgtWNUw+iy?dy$z2tg9>%|=iH$f=m=}A9kG%w=);+T5NM?a zz5Fl9hE_*BYZ2Ki<`Ygfcr771Ijm+{qVGa}U*vsMovuu3qH4WFC< z{3&HJIsf5exQx9~bQV!$s|qL8NEnn@M_$-J;-btg!XW6v@!32jai9UYNCt8Z(m}hS zpvr{u*9z23BW#@%FQ?!O?9a$ie+Kn{36*S#v}1ujQUYc!BT-RLtdBDFS{Xe)eS?Iz z1xm8Gk3mBX61khEzcE*%BZS&-&v|S$>c!MS-l8@DUnGD$u=QI&|(DT@2Zw z8FiJBK9Nd@+VF}(^gh(WM0QNwHCVoYui$QN#wtxJf1MuZ;bDI0J~=Ly`wdU`-PzP9 z2?IYy+%qaH6n(s^1nNRlQdiG>+OLwhN<*k5!ZtO0v{FTdF#B1Rp{YEscEG(zE3hV%8<$@PT}p4CcItDPl+NHU!{!u$X&yTJvwQ#6mD1p zXaTW?<>!y1?!DtLVivW>*vmHXX~*7W;oIus2%M!IU{q_Z*MYfKhT9M-LAuiPNkRsG zU#Nt_G^(q5g$HOszY(e8EkYLLXp&KL@xWNevPrEv(UF10gf=QV*V9 zoRjV23>B&%xi_YegeT5qe0X&jhuD?XiTtb_=GULOe4UI4q%DO(+;)yJKL9dcH8vRW z7O3?aVZ#y#*|a)Lepuc_!9+eGG!*mIsAev|>eYH^B$lDjP63%>c%XdWgYNUhYd$<+ zaC+$DFkEsc;RkAEKpGKmRT(3PqUE|l75IDVym2n52g^!bE~HqMJoEk;NjoU#lmxtK z!2?rM1GVuHT>xOeufhY7(`>!-6U;l z9+;p$9h?RFT{+a;+YMwxe4hYWn|~Ot^9hmLdo;3LDhHY6>^ge|m>tP!xrOpe%LQYo zI)v5-uKxgyY;%)aYIqz0okzO=t%C69m$R4fg!TTnhqz`{2|aMZ#((<~*?%7JUsY$S z*qZw&M4e?eZsyq~*y{7n+aeU{#UF_4_~+o(|NQv>*b>wy4lL-7N0ZymmzVesY4ICE z?3IoxV)?sCYO#X0nAnUApjz@#6(A%8tSZfQc_g9@U4{eatuC-&Hs%}((CAnlt z*%RR93_O|zYHSpEDLJB=Bx!~yf>4K<8@gslvhiQu^+DPm>ig+hqB6PXGeV5#%y2OY z8moXvwp^P>(a(t*ZE(p(=nEwfuPNlYp|xWa?4TvFghX?~4U@ufP3*Vy!Yz2=6G*m7 zNqItO4WTo#W0-o{Bv5E3?@v4=u&kD~vGx66C*&tW3?Q%+6M%5tq;#lRq-?j z=x~KfD3hl;yBTM?KP?uLD@BG=wYqG1eG@);?D#LYPQOAV8igWfGlSH<`#2~ix-eK! z&5NjMu|xm**d}}oRP<4|JoM|zG&x!}KRMe$_(#Trlobzm{dh#`&iGD-mGklPruzF2 zlq_A4D_BlZn(zN3ui7TWz$0!g2(kM(nIN{g)!cHU75KGCGS2$5-xHD02Nx5S`q+H1 z*&pqIStVt$tz$db1lf;iomi~42{IuQH$^PNK8_bszrQHcj5=;K62?uayjt4v!=`;w zctT@pFF|CpOr>Zjps~PjA8D0>*ZhF)$y0Y{sVN0bY2|mv$F|`EzHuw?3Q&4cbuvhZ z7MVniX_a_U2?Rx<61=Ulc|X8`@5L*=Cj_V}EMy+@n%gL5#+m2%%!|eP%(+oD7L=m9 zcPOP8O9L*>iEgBBON2?Csd)hJAkQ`OB!LYcn&_?GiY(0~`Vnc^D2$sRD?>$;NrM0^ zf#Kg!o`c*+X@0U;1sbBs=gU#{NMc{MqEvlpe8dTtiQJipe#n-U(b>~DuFxHJ(h1pI zJ!cLQBW|ZUXx*gxI=q_akVktNm=Ke(=HDw!+Uh?HHh#Do$>kwF&H0ZD=l-Eq_up1Z zKUp1t0%F+|6rPsNj?vC_)?YX@MS%J?aX96uDer#`(wKe_i>x!LX)_l}S>0Z~Efp+H zqDVY?6G?`q8$yOr)AdU@e*BM88vQ4N|0{z3XC?lvS3>;@y2^T}@xkW!lf{9C za6e4UOR#`c--7GE%so;{MUU-~MQMYIH6)UX9#TPPk{cR~DEN?Kh*VgI690~~OwIIR z7m;9D(6oy;H#Svg+SXHvl~SnJfg2)86pI#@H%OpkFD#RPFmM#9+Iw4dRq>_NCqIII zq|FQmP#Yxbzy}ZXR76ut$X05@WObtSQ-%tPxn%-w_9b%*ZUzS`!>B@|2!x|DV@)Up zy{80*!J>L)K^;-tOIJ_?LYhMSE+ZW}Qke#@QgKz5i^&hMmGEooP@w)mMmiKGvJ~Nn zuhdkTJy%e}y~aA%;nS}`wd}Zt)|S@Og-!O<7Y{*lni`!%yHMGOhN3FE4oKo!Ja|*dxmn0tf*X z#mm-*2{j(SyrJ9Jo_nnyj<8?g|Aq*0Q43nUlgv1%Fh+lPdAYuqGB9>d#EY&o>!gt> zCL;>Cp|2<%7>hWNvW*@CH>kcwg=-NMMcte9`Iq=ky%b+1uwj8; z<9QI>L}%()9`vjQoCyW_&`v_VZl;B5_{_s^ct$Uu6cv&GhF^V`L(3D&S974#rkWcS z!;+HI4=zSMlKO8EnzrZuhNqh}`e$8-d4u!;x6Xk;|9|xZXMo3dQ885!P`~WTCr7wjna4+g}%q~-eXDTUHKDjhma31LM@c7zu-IHMbFsb zOJRQw2{g#+W|1@(di+atB3HEVw2PWnCswNhW*tHudum$uFf4|q(~uZy%gzo!IQFeQ z7bK8UKXz!9M|IaTtKoz{(OHJC5oK-HNS!{ytq}q%(is4IkW1z7=W{C4@2*K;t4LB# zx`+`#!XBL8Qk;vMn?nqKq4x6&@eX7WZa}k=XebdXX$L`}2zEDk946BZ_CDcYfMft# zlNT;o#{Tl*B@Jo$I@l~r#4*5+QrTG^5k)XFPl?7SIX8?UmzX1J4yFAf+Map?(wl6O zbf-0O=+Gkj8x>GI#~ZC^W)YX)#0(fz%o8%ehRqHUxtM|L^`MR%Zm~f!?fGLYqa~1R zO1<*desva1vIlCg`* z5IYU+w0bG8|Jkgf24B}7K&aji8}it|GTZ{)Ip{Te`$+=T+GcR7{z66Qx;skNuT~tm zp@01<$~+FXV?crc@VV24Vs3BRc_6@k5f13wlQ-^tLP3lwKl^OYV^4+4;OO-GGAn!C z{qJm}*0O`K81s?v39u~sEQU&n`Q6!u;Za81At@ab`i1UeecTo=zB(mYXI}M_ix<63 z1{N-WMs;f=7_kfxca*YWz|!GM%Qi%ilch#KDsOk0&rj>;KcZq5%rFwO5$+Mh2D!v# zjko!IFQ}|YgfwX)5(7MFmr=vAfHf0uO4=UkrKacsui?`P#94+I5Q!a=BP#7eVf$fbMq64Fc=k~mDn?pYIMgr%Y%4^`L#!y2XHbaq4ici_Eg2{QSz!?? zu_ET-UQ@4DXm&z|lk9H#Oyp+tb)Kc!kagaohPey&)Cu_xlR18245PgyL!%i9gCA;v z2?w}iD^|;&JDop_DpX3-69n{?m#Hr&b4*M9*en?F|Z_s&&R~j%86fXRheR37$g}KdO$RFQbccA zf5WeuK&6gf7-w-#>Zj(Y19FPD17>VLGScnRf~HO#q3vKo4Y`vy#)(tz;{OxpE?uLU z?Rx@;P7FnsmiLqJ1SyznggF{xO%XpHVIK-WEo^9qN;2Ys2VWqK_}PZ~)NkzXx4~SE zF`8fr-}qF8Yk@ZU`jEsfUU(Hgfy$T%jzW3NPmR}}^Eh;=QF>E&p4xS;Fa*3l7~NHZ zJ~L)v=SbsvV&L0lsdcDAnKM9b z^$b?Mxlg{ve0cmZ8oR}3CY2=4RB(9z>>mskPK640nuQmJIfebz8w1;xY9MV_va8YS z!~55t{f*U$R-#e@Hl0n0S{*bUqO+_wHQ#;A=F9-JEpo-uykEw$aIWtII`L(dD}E+) zhdRE^Lruu~)4{RF!4<5PdN6{vsL@D6xHlS8H-l<&nyf>2?*^)YK*ge$IacQaT3Bjw z7L{b(z>D1Zbr3o)=6LC5_AOZ3vzA{qV=ZP!pj~c=plO6fAsj&6)O=D}K}2WSt>YT( z!6)!{+e%IKUCxY1eNI z_gRf11xj(p1N#=d@3)1b-tG$r5U(5_2_w%=zDW*LkgQeyOsxYnp$)jHpV)7?-g`ki z?4gB7FuB%C0}}e&BS%_TozNz6o3ZH3rQ4ITK>Uf#2Ssdovgc`*ex2V>I*-1}2GH$e*;T*hSi|p3~9TO_T>1te^K@g2e4- zb+bx+Ousl05SY*^11KezC>EZ*w)mQ$O7pa3*3xY}0vkZS*ni#x01#_=J)kSCp_v25o*Wap=y-CW(KTO z%BVt#R)J2W8W^Ji)`O;eIaM*X>N-dpl|S`;{p~hi%hAg!Ge7?mQ-|-lu-GC%y6!=J z&+kh`-{9C74{=a?&^S7=uw2W zyQeL6%|Bk=&QqYn;lDIL6+3TTwP8E0sQi38+D3_b?1GxElt>KfRzyAiYanuqLbE@Q z1dPe3K`Edi-+OO8Xd*X^>ybdCC<)Nra8|jEfVu6n4pbXQm#I&9n)CBJ=*E(Y#F>>~ zI3dtWuhtNncWrv1pMnWhT!9EQo^nP#ErG@upEZiaizfC_)x77lojq4IV$3T4%GJ*y zm}ogRS>p*Z>YjiQ?V&+z=s9gZ9gDNtI`AzIO9&3J9LZ8NZx4Jlnz<(RP{Z1r#cH->$Fz0JM2+ z31RBaSZIv96rh=VB-bTsjKLzU3LTA%6jz5#>*_7k&)qc-|7iYG-|uP{eHWaTk+f1L zO~V@W`bB5a^5E#{Z_$Wqc;5g7APYy}&Js&|(fao4pEMx=1+wH)(m#ozEvEdBZ&y%$ zsP|cPL>IBIoRZC{e{>~LnzbHH4r8f*n}aqc-D$_6!KD|=YoI$2nwKrR^YiG@4#NIm zI4w(WZl~dn{m~2HYbQDZe{IjT@`$+8d?~1Ul?ein?8SZ6;}~n4OqxBmZsvYI;e13y zmQcM3Q+@NT$-W}-r2IC+DYQyZEnQ09_6rJ!DT>r%+GA|0dQ`inphiS>Wj=5*W$rX` z3#~FgQrt7sj!S&&LQ=Atc2K+|q%$|mAuq|ubs6NMJgibBskjMiVZ*Ix`kmhE zEcibpEtP;vq3DgYq<&vOqAS z`4EAWDn4cW%3nd(Ec?^zHpE3qqQ0gPzY#CjD7QoLz3P}Eq?C6)pN+U+QLv=$vh7q=ZE2)aR-hPU&B}T?Xwrhan5(L_#yEs zwc{wGI$Q+vta~rMmGKU=&PNQk6-A7E_kNOe)t?}+x<8M}5^eX^_E_dGSNeM7z85qF ze4-OH!~$Ag$CVWFzwUO2po|}W#UZ4A;pwO~h}i3Zq&~yRleZ#bnIsArjktxRi1>00 zHvT8TiBf=x#!nI$b8!Rlp$l6=Z$o*p9W=f~7Fgzd&e<>lKurclWEI&2HsT(&CexG$ zQjPSWy~2C(G9Ke8yfyhnIq#Q9Vn`> z2zq_h!fb_L>Ly1b+=!L0MsI^*U_N&9uK~JQ$db`*RalZ)QQ{8G%V4SLuNCtB$%bZs zxPzvnLCuoLW(h-*Vv*XL=`2$kt=qpKVxKDSkwxZw;2C`7I{sU}y=7wYt?y{QBAo%$ z_-z{RgPp2p`JY+MHh7{M>xQAUC5!x1X(qo4!&N0UoVU~*P! zr~;5VW#<`#*?2oEWKgNo=XoZ%83X)6UgNkiyjTXZfr>GAswYt2Cb=ACL>dt!1BUSA z)nNL-d$^~DE|rRIzPdo_J$3Y9V%|-H46wJcCX91S$KrNEfM$wmwBd4Qb134ZgCr@> zYRB-5m_o>xbOo35n6H97;T!92zwz#bD%ZsI>NFAh6r?h?Og~5##m|PJ? z5F)(8Vj=VO_uu(0=2{PyoSIL$(`vz4R^h*?2)IV^{24PquNK6NHOQhUDMnnV7<)?T z#n-;tq~}@Gaayjtk*7d3P_8>{pVclZkT5gZ$g6XI)F90sQ9c>3emryva;hBI+bE^e zm?zCmb`e-yQ*D=6R?@T3sX_ncabiu7E!5b~zZ9Iij&q~T7`ZDr`+%XXX`7_9@FSsg z_{QDl#S5R+s|~K*_btjoNFPX(di9)V zpUsP3SYYr|K9YWVPcG4fm{ul|aTvo06zY98glp5(0ZL=`HDALEbH#v=8c85FO&wjq zbMpiGOG@59zd))Gn$kcDE<&*+N*bt2{78~C_{QdA#@99~jnGbzq?Ni0K`IGD4B9la z^X~#bFZk}*Ke*9{S_=??+K+KS%0(kjje933)Ey7^i1DEMoSV_W9S1t4-c?|W+l4SPP5Bu5G>0C`P#sda6lF2P0TSQSn3A4sBMkAyu)>D=Xk#-uV7n5F9bTQT5@ z@{Npl%$m9SBZ|d9&e(iDzC^cn!RZSC`beHZ=l>M>(+v{5i4DAFF2O4?#vRhx{*5F@s_-SbK8Oln*C_Q*9yNG#^Ww#C*_?SO<*-0miB zItQj$vA*Bo4U%VW8xR&evcEZOfjUGR0;>U6EB%C1!-TlqtZ#n4EM?sSDFBmP&6v9^ z1oeyOC8VmUy@aG`ghPQ#XjnK>&~*$JCYWtU4r|@z&aW;FAVYZxxr_cx;umO$$S775 z#(()$+IVFBFwZVwWV#vVIvWsHccf!fA&rA0ZL3Isf-tOXE^iUP) zikB0NVDr?-9UbcABPT;0!`ODal3FioMARwFSG|c=IB`OV+@iFwJ4`{ISWGYz#QM&W zpt-02JP*;QBwETVR2)g*3&5JNy^_?c4-@EtJ?0G8sl~tuvGvJ*C2Fhv5fDXkfM16ag+W zA^JNAC=co3oaYg+2Zj5FhR)(qC9ttc)ma#e-HFVt93>B}qt4E=q-Rfk+Ls7lFN`qP zrns}8o)((D>)`#iKydyBgJpGcHZFOaN6%&roXAzN5O+$*8wCH3dR@x>m^49XT4q8` zVjUAW!V)uw7zKID_GP9Gc+tcbE6j9VA3JZHGR$+`)9vs^_~hu5BkX=<8q<%^aZF7ae)I=n?sc1ay=!XD!YiNK?jEq z#bYIAR@g8%L>04R4N4fZ{xIf8@mA{uW7Y zz4aS~nqjyj8vIm7!_$URSF361h{oh#HlWUnE1hM6mxxbGtaBpKGnLg~M17fbo`~5d zS@c#$0Vp`iXq~5PVm>~_VXDi$Gf6#hG%b!~-T7Tuhvr6%&?c>qP|3GjqmHCi<^?YC zHKh5`@I$e5?XWKK9B>E0XMSOzan5|~^ z>HT53H>u^H;q-cqm6XR$@}7ie>F@DC&!h?J1;Nzoir7|8p9RnSQ%PusSOr>S-8*bG z&)UOf=KFr6URYw~;F0eG`w~e`{RME+Jt#T3c745p)Nd;)5^32pZX1^KWQ<@=To)u? zF4PW6ejI-V1%Z|w#hvI(+#Ie_+(|PVsR&6zEt=EXi@6Duu+kK5?#T1731FjLROiYc zCT%jasYHLFA1Tr?;r=LifkV#V-eruaYA0MDyWp?j!wtCr)l>#0BdW7ChwB`rzb*nm z(=MYv9iSD1w^BmPc)93li$l%1 z9IiVo7&V_x7;ZB2FwKq6z`>>Fs?p34^q2iic&RIlhC5LCI76u$Q>*1D2j;ezHev!= z-(zz~ug4tjHib#o8Ek@8SGK5pdo1Li@)9F<0o9>ZM*-F-Tlu$dJWig02oJO$d73fwa4Fm)R zxmcf~k&*&Q82Y+mK@tj9o>n*)dys^#l|9x21O*D{gJfiAu+Fylg6J(TD7!d&f?$LK z5~e!Vr?57jAk@!WB_B@}15YbYEC~LSpljvniFJ1dA@H{}5(W-dwvNvBAmqkVcNZH2 ztS87EXjV}f=nB@y6C|PL1av`u<5ywhR}Eyjr8|(F1Hkti-+Ol~(7T`Am(a(0xOlnS z0OP^;A820-YwKtw@8Scr2nPNl5lC?u27`ctU{HiOgm7gE@B$bhP>Tl$^Rt_B&dx5t z9R&Z%R;J(|Z*ox+>um4o0D^3^tn7#b#to8C#sSPw#M-#nV)5Pg@N~yoInnrJyfig; zF+?#=4Aj)eKT3JmKl-RpMppPnl^ov}l5dRR3GyuB)Z|9f@w4_>cl|$%dJN>IsPl`} z-yNMpjn2IY@c+K@u4QQ90*4OI9FI=_+#SgpY;?_&$s~<6`m7R*xq=l7==qljk6!Bi z*9D7;qf-tZHe4HKgSWhNiK(_~Vz7G0?tc|(mjO=9xnMylr>`<~674kiG+aHvC|a14 zDT9ALfk9csP38m3aNypm{Y8o6W7k0!lpcn1BTwm@zOwjyV#Qyayke~#Cj25O#O2kU z@`@t(*QA3sNE)_`d|lrnDe9XUG>_-Y8Ix({>!aa>+Ll%@>-I7XKFRHj?|+<_EWBm0 z|1emYc?9&as8GVlk@t3Su1WaCD)#8yMDBO>%7VlGKHn261u7Ng`7lbdetdaJ=Y+B0 z$)BJ1$%!{8uk0sVqQb1D1lHFi@u>A*5GY!fQ{vfOuh@?zdE#(x;rkV7NosR*Pgm1E$n|hWNG(gp##(*+&}5qlV#7r-S3Ay%k~UD9eX_yNkTRJevnu1*5JH(YAR`Q z08flAa|S)K=dx}z$85+wjyfR;Cs~nwK}@Kj+{4uwG+)wA83lVMTTGWk#VU9}SbU)B zijFr_e09f6cDrzp>g=kYQPt_wQ{aos>vp5Covx4G3+Ym~UFY+wh|(43rM;{?|P4SM%o~K**{eM zD0E+`r^;hhj#_Lx^0m=9?4#v$!`(A+3mnHBI8vI!HO??PP>#6uQr!?5qkD6UZeP>% ze%-7Tp~Kk7^G9dwT3@xzn0e+mXtf7@u=R_oy1JjQbX5C^L*5C~V^VT<>y?R0<00c^ znuqc_)jFPF`&NXX2YDNvckKCi99PjPgtQgQm!q``GaX-%QM`%zUgEK z&wW};WRAH=1*LeUXY6q1d#BfPd3U2B^ibJ#_a7LPfyx^}&c~Pq1r#G2&FtOqc`BI) zZmFo0+OJeAN=SXlU}NN`tAQ7bl$VMkcoUW2y*DLEGtNtg3A3C`Fn(y!?=YZx#e$MN zux~13{|ndz7xih*^U5`~=m@KaL1vxS=2VsW0^yvWtn@pS1s_uK=dGNW_q*)AuT~9L z*z?9w?Mv&aL%P~^ccyRcZ(v&$DtZ-`axGS%kY!w`E!@YATUm0?&Ad5P+>e@UL5g;R zDbASI8#UC&trg}K5{rG+gpXHI=R)YggOZ~?s1}W)C$iR-@AcLWRoUj}oQmwluPy>_{ym7L;j&q#+uM9#JEY`sR)*(?@$50kjgzL`5md3m=F_h<*#=amz7wcOA?96DoPVgKqwI3zdhI1{Xixxvt3IUr(wYJGo0=n!!5d z^NZfLDH4`N>r=YbSN9sSC{?ypna`NS*sq;qs}Fm@qVKD@AR^cpa&B@m;*CYTqdY&S zK~6vz|6!M=fC!0&%c+k0VvQab&!r7Nq_q@tm=YF2g?omQ1v(na*b3#fX({yeuJnIR z6?1Q}ThD@pQBFuD2Hl?P&%-j-?bXoW@atOXrm#{(76^%(&pmwIJ+Vv2I2Bdx!Z&o~ zYk#hC%Ndmsr`DhYHjd0AXZICjzK)Z;xu@#VB-?A?xHu|jlkGPC(ryv@RASr@_ipr9 z9Q^AMXvbPk=hM5@YhES?T?A_`jvji@9^^^k8v7$2CviBJ;T!!CsnmqQZ;xATzl;kw zWvwsA<~Dyp=CB-nSR^>5&bI$`r;rcsN9My$r{v1pFT_5Z43z~)+Xs^dc?n1375;{n z+ED!jm4;Vy5F`e&i3bR}5KlA*S^lDJ1qmDa5Q74A;9qnhBBqY67EDFDt~o+3LP8?H zbhA*V>qm`N*F>1k1Gn4|x0Nd1kYk($y5|*NMnsDG>J>2Z$1{Qg z+^^m&6whBC?zPQz4kfJ%YRClE;*?zX(NWXrRxUL-2l z7IAqEe}g74IQQ?%Mnp(?9tT@>^B_mD9qOJ?|SfHW}W2_LQ7BZL^Rbv$IN-i zVx2KL%HY%NieJ%E>x+VXZK2H9?zgXtn#JsGvrTJQa7e9ueTBxjB$8tkCt02}gna03 zzO3B2PeZ2s9Jk8si`3BzIEp}YNLa10%DFS)qLFT)agPzBk7Y1ntz#p&?1H@egXd!= zKL0TMj`h_<#SO1eEdKcJAEV$*QPfrhK1w;ChT|$PUL*~f7!x5KdVls)^%3f`bz;_2 z+;q0GLdbiUHEJ9O!acb?pl)x$Ey|o;uWM~aO0LxVHMOkSrDx6@$g+AhWNCG=qEh{p zChw>+8R*8{-ZafNNXkpLCTsb@^nEpTovAkK+J_Qc8jm{elI~m1dK>)JI)_fgAh`B; z?dms@gTmg5J0}H#2g{q2@)MmCAh(3Pl?V3cm4cR%lBV`yMeHdnV=n_MXAdzQYn-E- z7l4439o;=V6&$SG0dz|vp=q^o0|A49X8^EO#Cq7cJGy$hxPu@YAl<;r+LK@e;2VR{ zNN8I*;VpvyXalH6{wItUgMcAOkQfXB0YQ*RFaVN~Xh0+on$oiJbay0RZE-LdkJy2~ zzpn5&8|bAjU;+TpnqUynNGLf2NEvS+{5DK}kt7ry?d-4syvO5tb6|8J2{{nZn1mwG zC@?tNpB93IiKDHj15o9Lg<|Mp1>R~K;RpUxG$YY)5E9@G{vW>3=Jo&hOY=XLC*BSWu|-wj z=X;a$av%u7JR{8HhRJ0MB8aA~))ryzlcpnXaI^(+H zPIp=UnnfCI^ftedaD+wq~D{eE64n z-eUy0gDi(65$!WlZ%}&`Y}vASy0iUm?G!4|tsLJpRx!X=_c!h#bk*X>AXJYg+16@R zt#sZb>z$^TUaxs@p-@Iqw)UjInUy@*QRW*?R1)8x>$(MD)>J-fW533YYZvg@8G z7auBp#xiFIT<_RqeQS)?Vr5FJVWLs%LF%f@sU?w)FQ<>+#u*vSKNIy34aJ<{V$E@) z;JW$x!J=P(s<9$n>8efJr{F-TQI{$i?*WB%BFxxaBEQAVb_uJhsj8@>@fQgTtkYit zcBgoSZukO-i`V~Z;Qw#&3MB~o|4F<8!*OxK+FKEXDri%vLh(`@@T2?|s!)PwXN&kD zjCymK{?=Z^h3bDX;s3EvMZ-{AN44p2G6&%w{KC8h&TfwOC&LIUZL8oSuxPW)rr?4C zitBGn&oV*oG$}7*`0QFV=3wO8gBUhNp=KCgNA{8EnFCA1CR&x@^l0$o zLYig zZGz*5m>KE4-W=s~baACow=sl+ShU2c>nDJGBh!|IuUrpGJQ4oYXwUJr zO1o~47>u!{YO6sKy57saE>b>af%Nqw_a{4-CICKvYlaPGA^t(g!^+@BVBI_Sb}>h! zPS8v|rJxaxu#kORk(ehh&S6UX>^aF@+Ou#|M|w>qdJ_s0?p@Vi=(LG6zg049&egvF zV(A3AB)~Kvon4@juA?AX^0zyEIC5;gk4?KQEwPYOv895P)PE}3Oo(UYGKU(PuH*uj zD}$?GfO7*?zxFE=)B5L37u`Wn$a1g1IK@?yF|;~)yV1w@U>#kx)IG%l<~?y~;&Iux z#9!KeejnIs*(4o5Q>Eaai)$%wjlce2P>&3ubuYZ=)G_f~Zl%H}2V63>hT>lHv){-c zAur53Xpq_1n1`ZjS~mJL<7TRVxdb)*%{{=vJNfj1LN={|-t_Ndi;v3Y-=~k3!xwo< zeb2ZfRSI%%NZxl@%IsaudMBJSeDuAU2`3ST;YG`~j~n(cT3IZq#R<^L#rX}w2bbfbOT-)nwGCzyl_=I522ROHrswf{LDl*+k~BKMzP-R$ z(52CdDXDj(WVe2xr@EZjr$i~LBvEztLuQfqfosAxhIudh<#j64K2X4(q!t$zoN;3G zdtNy^2{)|uZlhGEyVK~<#Uma2GSN+}7S_vj&nf0C%cs3F3z_d|JIxA*zSuqcv2+Ai zhF(c;OH+8hV&C^V!XK&e%1hm^;KjZYc|{s-|Rt*7B^1EC#SWv!CkH8a`n z3l*wVovjhO3BL<|cIc=A?fWLf$>l?{}HFK3lGEJ+_B=zZ<+W^ZAMoy*YLK z*|`>b#GuIQsHup0B*O>Jw()SC$i@0vnIwKG71QJ!v4KpHmZD}ly;fmKD*|i7xLb9 z^T$uFXg}mu7ZJG9<$DNr?6be0Zph~rjWe1DWSAe@L{-x%k4L_iAC&uc5M|3C)en1k z4;`(L?vHXW{%SJ9zR`sGzrp}>qYd?tUuwS4LRYlk8Wf-sp~c>wZk*e*UraM0+hu zSi@A|{*~_i_V4C=yDG`kr(Ri72xm@KT!#23*-k5337#smEm>dn|McZikc`o!;XWcW zM#QHD1(3>LrwpOnoCtu7RhDpOS2isk@LbI4(>ycZYYvA@3U)^3=1X-Zo=+2m?!GJe zrk9UYFQna0WbJ-I;3eH^%09+y3kxb(%(=T~Mx3w4nbdvE(K`7e%zN)dy4mqNBzMoN z_u3~)G?pRAZ6sR++SJb26iM%IG41n{3>QwL6(Z%${0J6&w(p3ZU+MKI4DBIE%45pm zj}Og?KCWPjbWFJvMB3(z78`Qd!Uq(BJtnv1uZvw3f_SfS9r|8Y zeSP7EQlik>UWCm!lBp}B*qSDrx>527jR+fg+O$V>+qbWjnQ|6XJGllY;{SpI+kt=O znzSw^jub*W^MfV`bk@sk-rtT1m-r)i@AG6F1jI|HrLVD@g~=zO0U8v_!&S;!$+70l z9^J<{e1e@~fF+5>Ev)VAvj*VnGwYzywf{udcjuLs1?%ZLOxxRjnBHQ>-bEUY$JQCB z?i@Xrh7mO;Y_v*AAp3&0sbr_s1BR}vb63V+_!O`&Da2b~G+{^c^w012Pi6H8;7DSeBq&R^|yo6b4k zzEZ%tx0r5pvQdAU(oDo9zc=kt)tTXUZE8=C*E6TaK5YLoyOOiIK!+1PWHU|%)c;EU#o3Dglec=xLh{xbNZN6$+sS@*_zvQE|r{h0#7+J=92{PkEi9^?jIPL zH|Oc&KOh*)GcnO_UrcNGZ~dC8Z*n2P|xleM(GY&UT<+#NR1^;U|;DV zA6f7bOx{KD&}w;4e9^%uzG|-w_RMTyCf2$uiAu~gf``Iut_NH_8ZWFnc~Vq~r{*MG z&+hC80@kEnoz7|dJ}BH)kc>-YUGqvY+|7Wq{D?StI#oBh|EkwfWzBG4!o#9GY7kSm z%%JzpxC*rFrRIj9%#UM=%X`)NT@Ew6mfqtX;t0_ZHw_QWwX)ued@rvedD@Z1KllZ! zxjK$QeB9l!Rd0o4z3u{M7^mZ_Pnsz9Q1!j&gYsX}W{!S+IMnG}Jd<+$s+jJ>`)~W` zk6mx#J?KCOD>4IoQaz68yrC^*k#dUt&uqp>k9oLPGg-9tC_3C#q(9vh6=d;@{$n=v zAY$Am^veQs*0kDyHvrw5&?3R_jO#jqD@y3m<#y80l46;08Wq&b%Xsr!E<)G(Ey<8Jw0b z^unE6(pi&9f`d zQ+x5Uf70L|5$vdr`XIzpCDFn;!TQCbdlv3~BAdh}*c|Gs+q!yAGt_RtEg)Ck)O(s; zG+J-p75jwgC3Ca=`k*79)el4+*~8ddh61HGDqlW%nD?|?jLn{;@KaovYJNXGU3sp| zT7hY;q9KP^Z?FZ=Bj?V`MT4o)sSF*TDgpEYt`oDOAv|{Dx0XRZ7TV*{`-NhpB}`n9J)8lFoeUpxEx&%gO^z`k9Ld zHF9}MTguYAzAb;m#?e{Jyqf09>?1wi%MT~gPhy}I4*C0ZOY3X6H-f2#CRr^&unGGQ z3su?$7Z%rs)Y08qy0lc({(jFBG%K8N%~Z`d=krW#qi*xo#7gP&83yp5QZ0WzId8;# zx4}cTh?Qq>&cn=)zxxA?<;=%UUsJg8U8p-fRPly=c-w~q_qC82&Kya-m-YA6mwu0= zu@#=VXdpyA82Y$W<-3I^n!|$WRcg|Nd-qFd1>)&Y@ZleZZW0OiKkjk}sq~nj%kOs$ zMN(oOei|s2EzORyP%@*FTeLWI!B{Lxw=rmm;?CP${FKkc2BtfX&+IZ?lI-9}j=nve zuy^lS9Hol!kW!%yH_NV$#cO=nck?}D%7IpSTG3MC3aI0uY&8}Yyr=39*~(kFDUuAm z^Uy1z9Vud~Ep@Sda{CtPE7zE%T#|%wsj(Q&o0M*z@&fmBb)vDiN2KLW%OV<^V)~So z>r{?*2cMe>aJ@SmY_{**8zQqq1l9hNk&c8J0`Ra@7Ys!jgOOxbEa9vQ;w&2A!)Y!3 z9aJv>BRwWYPV|~U21#PeTXoW1WS#VcEyq81B;iERDe52e4Gj8F7w{3lNth$p^JymR zHhcs(&sWHcr)86$OCh!6+U2N$CTD8j1(6#BMazjsS;JUhQIcp4Ue=ENfouGd8RMg$ka{{_ht<&{iS zN(j!n$j6t|wB5o-pV(^e zw(Qhwkw`X7WTWp(pbO8mRXgPHfvoYlZ!mAw_gib=ru1c9<)fbZT7^!IJy~U$`~BtE zG3IwJEg#46OsJZrFVx0feQe{-+YcVKA3rm@&RsIM%CLCSZj1;!iGVB!eh=(#CYe&g z5#}c#T19{DQk9OhcHfNVT-Q&-cHvEKB&!`XY8}!b(|R!*-be59Zg*IIel37DAG_{6 znqSKJf+~~h@R@yL=L(LCdvPDO^n<6LPR@hc)V^SPGxc8moPeiD)lgp9b6%s#FKIE; zC*~qUz1!@psf?lNs+J#M36CDP#%Z=$2RLx}wB63=^)&EQ4lVA{mz;V$)63I?TQ1r6 zvHQ(Y!Tck;iHw#A0)YZMLVq2tw62;nfXg4XA6^OBmCru3aFsgx__y`bN?grqWr}Wd zxmF++3A>cojE3~I`1AcCH7%!ZwBbN@p$~a+BNb@UAOPWO=atYsRtS z*tw?%MLF{2M2xPsz`j|&x*wZlO_Fuk8YS1Gf6mfeK2tILbKr7osUR~KTR}{4j#QsZ z({qeSYM-K|;`oxHVM5q+n*Wcdq3s6o`I6JcjJeBNLmbr9ZjXIfjSf3w^qVl`*9I`A zx2UIw(RiUVKs5^@@dU1ha=8XZdPl5;}LjOY)gHj9t)4){Z{yKBY zZ|$vTS(Jn`ehlr>e@CG$NpC_K;`sD~9r~iHJK+0i?6zGzXY^Jw>=L#1Qs=$0MD=5_ zGg>JV!#qMq1|BuMF6P*s#BE1p{)oT~DEuE5zm_h>ne3-sb#j+RYCx5JC`f5(-AT2T zLQQZm$JZxLv1zKjif0Tt1`jZW)qnJ1d+R>>D05xNhRIXi7YkZ-zDzliKG1L!5lH70g-dQX=Re_Mryj#MkuZVP z6Tjk}T$12!aW`~-BVQ+rj&oJ|@W)%^FUP-#z$ubH!~12djYY0-xlA_bu4mdRY2CLB zmpTyfsAjmoSwAtw5Rs)FE;*WPb@|IvoLa0%p?0U^IP{BjnV>F>Guuq|;TvRy@+Veq z=N!vAD%)lGg$V12ARoxTNNj1HIy%4uy=qS*;i^x2F2PsdD9~bgon2i2glT`jsfmgT zt%YGo(j}Xb#{3Tq-;s0F3}H9wJPsSuX7Y#~JGQ5IUmh zd)y{R|LU0aSnZJ#!~n@Lkt0H(M#YD_L>cKJy=W_PYd*7u>jw(IoWoSy%g`D zLBY?-012O~X!3IYe0cVbDJnXxOVhH0UO3pk zEL>bq*&EQaCon9?A59hlrv!_c59OW|>v^S>q=z+nL49A!C+mnP^T*Hbp0@qdnqHb# zo|Cjqv%%?a7QgKt76tbanLQ%V><~s9a< zN#R18hsL>~YJ1AUmnZ7Z7!14~J@6&$vr^Z>(FH?j=7)L#BNd@#MUZH_U77BsC4+w9 zQP5EF?73KmPq}xG3G>^Gs;P)B4uzfXo8|a4$KB4Ll7bo{GEyS228Iu!_?tRJBvm*8 z0!GQhsE&d*DlN|MDR^K1kAk4F;xH1##T5x*Ev$M(fP*?N%|awglFzjAxl0LO>i3uq z{zQ}Sg$L4CdJ*n48L8m=2)YixqQ+?Mnl69b;&xc^=q-v$pYi# zOt_WQy`qaH(_xR!A8Js|7QxNNU7dcLy<3z9aj4B>+&KSsOrh8ZT!^9L0sDH}b@O^9 z-lVF=oBBcb*y)c8(kI_tsv zz!BWA=l48IXgXUMaxx-z094OeH9E#V`q?j?N>EzO?}kC{Q6s-YcNfRWQo4oN zt5=h!OlK#`4qKkesF0Cy*%wHpe?)K;4EisAQvIKrX_D{(*K6)1o+I#6_oOH_+_y$ zNztaurKMl_E~+siJ>|`hk=C_pCP@dhuH3U9B2j(3M|Z9m&6QTDAOQDpq*hc67k`4Sgcd_|W;G)%%rn`dv>@EtCTlscrdP^w~Fy-s3tFd&A=d=No;|Gd+% zOWsn$hTH};^r~N$w=tpRS&w4ft7rPWX?sMeY{y;AIKzy_UAbf(FXikjrY(l=`i7+E zCej5WI0}eJ`l~1*$n3LESQUVp_fL=#*?L0~fk6=1KUjuZ@hx~=t~hH55&S$C@3&9M z-}PG!Mb#jhV}itbmj}6mIoavBwurO@+C7E=$d_HE&jwencO{qkt5O`bML;86Bg<;{ z9K6X&8*;4ZX2%=-i8Fi3ow`9s%xy05B5+-LOkv6A_8tpYQS;QmWsbG;4l=x&tla;s zpm(-fiKDuvzzf1agi%DG2@L)Z!x7t9J3nXw0dM)x>;Oo$^lR{5{kx5_`!ZR_=aa-N z=ktUwi|rR5uCz{D@%n0>C>~_-&Up^1rquAT%9!uvCpok8-o$3~-FP9~UU5@X2Q>+(?hvIz*W&Xo@@a>8Cq|VzYTeBPz5`?QFM`t`}9BaKA!- zjDDHzD^^DF**TxwZt8%sl|!lA+%=WBz$MO$pIy5>1Xz!0o{KJj=p!UUi;-r3gxkA# zfc5e=*^qNAK=BRUe;5+k|>JN9|dLLatgCJbw%gTSZ#U?k&U{vg+__uC5_qQOSD->efKBG4UPKPd&+@x~eGdqcR+&c?wX9yoW z+dyQ3h@dOzzrYVcy+>|^A~xNWKPG(n(w@#T%FSZ>6RFXIVqHwu#x%GDNAlNU7QORS3b2}uVgL0VVIQj&g9N{{wZ zI?<+;cE5d9#mq~xtXA`*d*G%^Mjq^Li3p2w=tNu-!7y-zI^odNMKJQ13lTH z@sK#K@=MQLZJAEsU{<2vou6^~z~k0!EhMb9bRRnG>CJoXhPvCpc}LT**4U{cy$Q4G z850hYJM(p94=rEUOVPM1@s>=|HPTZuJ$a9ojHQ{;iPK$sj9tmmucZ%)XCmGyZ@0pyWuB^iQqx4nO$0uo{=uLW`xU@n zM@8Mhh>zb-`cb146(3lJ<3C5Kkz0GQG$Tt*GFn_qu9KH~w3;Q=R|V{-?{mObP4CUB z0#EhPOI6G(L^?zS<)Qz%1m#1VA;lu{==HVunn_mt7>va54Du` zxn$n=V-#jHPDTFGTDz>LY;JySe~T4+?w5M|&B;P|rdm;a5M#n!zt4Ob546Z<&jjwG z+W%o^2Z5N{9cTygPj2dV4SK*UL)IZ(aA^-{1oCu6>Sm63*Q(2D=E2v=M{VwaxH)g& zNcPgq#HFzc>S=uzrd46%x@ND23k^IN@J=ZAppCq|v2r~!?%mw`O2I;5y*0-*-2j32 z2^A9!#;)ddx5JW}+|Qo6QIT=Gim{^PV-Sv_^8qI*->rej*(-F;Kh```yfHN|aT2^l zMnwc8L4h=oziLE;ZiSN)V5AMR9(zlg>NT(+K-Fctj?6u0az4Sg*-=;nI(D5`Pvg1P z<1Y~Dq^bGk4@JuUC)6I5rKx2cJ`vxWSgXwI4Mx+kNXVw|1uw=Z$8uM?${D0-XV=a% zuSf=X`A;3Nd7J0-48x>ID;Oqt@srxm42mw@in=#Z1hcc zzoEVxwl@n57RyH@k+(vW>&e;{zrPo7e`gUOk(ioz?Sb+xb8g!QJWt7XffKWZWS0zc zG6Wr)x@NhgrY3pvBn(q_G6#s;{ypWt;~PO+qx0ppO>`8t#E#-Qw;7d>4<`E+Gzx*j ze+G?j36BIK1Mz955`Tt`f;OY_x7WQr=o|>q6oVsSAP5Qr2hvetFd%~SAENPTwnXCt zQ5J+K&tIYUzr$oVNi^G{@$sYbaJ8}l5`O_Nohv>I7l*a;+_-cnM72u*xd>QyM~~AW ze0-RLud4&r87KgdTx@~2aaJA)npA_fPB~xfk1_XW@&&mN!U*Uo&skHY&7Wt@aSh%cyWQ)7^N!+ z0K9|-eoG->ZxWyYeo?$!`YDVEj!2-o4e^86ShemT#75g50M~!kvqidW2u8dF0zO+p zD+IX(0yegO-VtOVAbtsVo*;q+2sHCki~;*KKk0yELlVYK0|*u5M%!ob*-V7z-XP>g z+rA(I!~kj_2u9R)Q9_U{o0I-4_U0e_V3zt?r=Ngnt0zrX%J-{Z$uC7wg?C!I_fyWC z;XWepK!5iImRE}%!AGTAW=@7oXCG>w%@!F(#mDlnr_@9=A8^q7@z(NMw6(sCoX)UGwx%?xKu!S20QoOVI4EeTi;_Z6bM@Mw1%ZiR<>T$|El52N)c>`;#m#T zja-ll?p6)bo54Lai1Q2jbTcz+DADjhq)F`Pw>uWbQcHbvL6_B>tdBGYq-p=dz z#*h7Sr6#k`f9(vH?{dj;2dD z!NXX8>W@q14x}CjtDPEd zGBGGiahfG{?$&!F`$oW*Wt=XTkq>+MUGUnn#8alX)+HQv?Yy7e8t=xLg!^+#SxN+7 zwbL9~CPi2GRPKZrs7;BwC7=ol29(X;oSRySN9aj;@q2wE{3pYLCkKSoODlr+4&lh? z7INk6q@pmMplF3hVd{|_$dAS=V$3$>=?!^GAF87SrMynsF*22Nx0gR5^`WBj6+Tjs z3`b1%OF5j#aMklXU5Vn}#)qEt%4Viw=4UXhnKKbZsX+DpEy?GJS{h|5U zjg-W2k;De}!=vkcpOzeFc?OD(Js`rAt-h4sN^>jjQc^l5XQK9hz+C_=`31Xxyq#^S zkN{dBtUThNYe&WZq&St62oR5FX&(SSC^#siL`U@K>UqLsCH<{_8=UfM}q190GSywZawOYn_UGQ*n zQh7(1zpLNuew{-)AIoBWr$c5J^meto6SDp<%`=ob({$Z?{6=iETXSE(8`Gss|Sl{!0hlm1% zUsjX9h{qIK=mzea5^FS0`&q@{P5Kcd^_;Ay*on{J(2PdQq&v(H{GB;2HSK++v076Q z13InXOOwKKd%oOlwNyeu_?FCdYovr-`I4tFDqDZG>IdbkmZwWoZXp^TyR_OrtbbkV z`(`#AJh4ZsW~a15Z*>g(USC_Km9nmxs*cGPX{G4s;fk~J#j|qLSp4qMw>7mf%(aMqtrq zv0no0UqE02#N`QyG2A<-F?NbE5zL<}VksqXd)h8q@+4X`m$QS5VQrZ_sZw9(UG8W# zgLGV0*h z&BGs#JMH@%PO>Zb(1o!lRF7tE23vg5Q1{LN+oHjFwK<2|GrcO`Q-`2@h6i$1t3K^n znp`=?66&xp$JDHN!J~^pEt2W7)J1)erEnv-KlocR_bWSzi9u(5D#(r5=idw2N`haP zT@Js|aB7dE?0syX+;UMS+0#Js42reEx z6#)W_Gr|&6hJgr6dMn$v0unjM)*}mkoq{HzAP2lJVPge?;HO(c4*GvA2DlV9if#EY z@R(p@Vt;=vTh!HW;ugsGo4BbKfBSEKp6({0;b@CLLxFIN8o*j$HM@8L=MWG&xq0H- z*5N4t$Clwwj1U5(f-BC&6X$3RIs+4jK*YhKAO}xRR}V=E38!Dr#9iF&g=r*!vmI=` zY=C3Xw!Y?SYX`EnvN;Vjvss1kmJ$27W9?`Fs~$lE{`Chq>j426tahMZH2irH_&*@$ z4I2LJHb5?HqoMHm%G+sxCulnj4TL~%r(y8t4QzWCgSUtOpaC~{qi!1whPQ+NqyhfZ z?fnCTp+Fkmj&eI`Fa+L={Ifn73~vzsNrPel@Ux8uL*f02f0l!x@Za*EG$=mCXgdw> zm)TB30FkZRXmI>t7Takk{My3*`87viI1F#?tB+;oo(j<7!5SC<6Sgf5&c;o zFy%Y?hk@_p0S1A0bZmQ<2(K_`yu0X+a=^(lfPZW|4Zd^jgHhle^9x4r{5Bv&z5`&2 zwvP=0LE=;P|LhB}|F^Ro2EC&k6b886x4jER;9XLG)(5a}2Mx%|-BBM5zwx;3T^J0n z@&Bw3h5~%s+h}kI{w#t&%fVrIm9~wBfb4u1xkE-k;OL!WLqm4X8w!K>ApY3~3JJK| zx6#m$9r6Hzh64WhZRJp~o#Vj3h{$`Ohuhypqj%0PAjWs}g~+!HK_kH1`3D6KGTOo` zPj@Rv9M+w1j;ev99~RJCz^m IN15jT10La$R{#J2 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/summary/near_wake_diagnostics.png b/src/steady_pinball_theory/figures/summary/near_wake_diagnostics.png new file mode 100644 index 0000000000000000000000000000000000000000..19cd210dcc8fad97b9e13ba8dc374a25ee2131d6 GIT binary patch literal 59480 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 R?a^78-=F{9Pwy_@@-KDqtE2z` literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/summary/profile_Einf_vector.csv b/src/steady_pinball_theory/figures/summary/profile_Einf_vector.csv new file mode 100644 index 0000000..2e542ed --- /dev/null +++ b/src/steady_pinball_theory/figures/summary/profile_Einf_vector.csv @@ -0,0 +1,25 @@ +case,label,family,parameter_name,parameter,x_over_D,E_inf_vector,source_sha256 +mfs-zero,"potential MFS, zero circulation",potential,g,0.0,2.0,0.5585889991095836,10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c +mfs-zero,"potential MFS, zero circulation",potential,g,0.0,4.0,0.07496228937634444,10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c +mfs-zero,"potential MFS, zero circulation",potential,g,0.0,6.0,0.028540754496172927,10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c +mfs-zero,"potential MFS, zero circulation",potential,g,0.0,10.0,0.008684020133851821,10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c +mfs-gopt,potential favorable g_opt,potential,g,6.1479442395622,2.0,0.8357535097075087,10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c +mfs-gopt,potential favorable g_opt,potential,g,6.1479442395622,4.0,0.01764351179814099,10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c +mfs-gopt,potential favorable g_opt,potential,g,6.1479442395622,6.0,0.0031010238407214014,10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c +mfs-gopt,potential favorable g_opt,potential,g,6.1479442395622,10.0,0.0018631935376256777,10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c +mfs-gfit,potential finite-Re fitted g,potential,g,-12.200554143243473,2.0,1.8806692067937432,10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c +mfs-gfit,potential finite-Re fitted g,potential,g,-12.200554143243473,4.0,0.25872808255979135,10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c +mfs-gfit,potential finite-Re fitted g,potential,g,-12.200554143243473,6.0,0.08704644916141394,10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c +mfs-gfit,potential finite-Re fitted g,potential,g,-12.200554143243473,10.0,0.022840097461030467,10aba0798dea28b7803318c912e310aae385b0e7e8886e2f1bf533dc37f0a74c +cfd-stationary,stationary CFD (unsteady reference),CFD,s,,2.0,1.0319734275621697,c2edc9e4173fb6bbde7937314e4984c1c501de75f0dd4916b67aa68388dde8f3 +cfd-stationary,stationary CFD (unsteady reference),CFD,s,,4.0,1.070730895778441,c2edc9e4173fb6bbde7937314e4984c1c501de75f0dd4916b67aa68388dde8f3 +cfd-stationary,stationary CFD (unsteady reference),CFD,s,,6.0,1.186555850771337,c2edc9e4173fb6bbde7937314e4984c1c501de75f0dd4916b67aa68388dde8f3 +cfd-stationary,stationary CFD (unsteady reference),CFD,s,,10.0,1.0456532677804014,c2edc9e4173fb6bbde7937314e4984c1c501de75f0dd4916b67aa68388dde8f3 +cfd-accepted-s3p55,"accepted CFD, s=3.55",CFD,s,3.55,2.0,2.0237952766768776,b6c70b76c7cf2a2e4330b27fb0d4e82a914b40fde8171076704e825a79ac72db +cfd-accepted-s3p55,"accepted CFD, s=3.55",CFD,s,3.55,4.0,0.24530522875344987,b6c70b76c7cf2a2e4330b27fb0d4e82a914b40fde8171076704e825a79ac72db +cfd-accepted-s3p55,"accepted CFD, s=3.55",CFD,s,3.55,6.0,0.08731133530155989,b6c70b76c7cf2a2e4330b27fb0d4e82a914b40fde8171076704e825a79ac72db +cfd-accepted-s3p55,"accepted CFD, s=3.55",CFD,s,3.55,10.0,0.0231672176752314,b6c70b76c7cf2a2e4330b27fb0d4e82a914b40fde8171076704e825a79ac72db +cfd-reverse-s5p2,"stable reverse CFD, s=5.2",CFD,s,5.2,2.0,1.433940096214287,760c1e84dd9b7784151ed180d3f16d17619465a08ddb767ce23a87517cc28ec3 +cfd-reverse-s5p2,"stable reverse CFD, s=5.2",CFD,s,5.2,4.0,0.7483488865602846,760c1e84dd9b7784151ed180d3f16d17619465a08ddb767ce23a87517cc28ec3 +cfd-reverse-s5p2,"stable reverse CFD, s=5.2",CFD,s,5.2,6.0,0.6696111083824693,760c1e84dd9b7784151ed180d3f16d17619465a08ddb767ce23a87517cc28ec3 +cfd-reverse-s5p2,"stable reverse CFD, s=5.2",CFD,s,5.2,10.0,0.6898418411784105,760c1e84dd9b7784151ed180d3f16d17619465a08ddb767ce23a87517cc28ec3 diff --git a/src/steady_pinball_theory/figures/summary/profile_Einf_vector.pdf b/src/steady_pinball_theory/figures/summary/profile_Einf_vector.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8575cd7b9a41fe470b1cce062190853001ed7573 GIT binary patch literal 29062 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 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/summary/profile_Einf_vector.png b/src/steady_pinball_theory/figures/summary/profile_Einf_vector.png new file mode 100644 index 0000000000000000000000000000000000000000..f1b03cc0e1f022ee4b142b89583ad87142b4ca56 GIT binary patch literal 150363 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 #4;^&G1`w23 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 p~aq-01fr-r@k?^ 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 _y(-u`<8&7B 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 KEbHR+JO2xE*+^Lc literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/summary/signed_gap_Qstar.csv b/src/steady_pinball_theory/figures/summary/signed_gap_Qstar.csv new file mode 100644 index 0000000..8205368 --- /dev/null +++ b/src/steady_pinball_theory/figures/summary/signed_gap_Qstar.csv @@ -0,0 +1,7 @@ +case,source_case,s,gap,Q_star,normal_x,normal_y,orientation,ledger_sha256 +cfd-accepted-s3p55,accepted-s3.55,3.55,front_lower_rear,-0.6838239993696138,0.49972245348957717,0.8661855860486004,"center_a to center_b; normal=left(tangent), frozen by argument order",c5d1395dd438e0f9c1f98489fd94fe309349ee554d0a21752ddfa571fe4d66cb +cfd-accepted-s3p55,accepted-s3.55,3.55,front_upper_rear,0.6838263694770106,-0.49972245348957717,0.8661855860486004,"center_a to center_b; normal=left(tangent), frozen by argument order",c5d1395dd438e0f9c1f98489fd94fe309349ee554d0a21752ddfa571fe4d66cb +cfd-accepted-s3p55,accepted-s3.55,3.55,rear_rear,-1.358293459788561,1.0,0.0,"center_a to center_b; normal=left(tangent), frozen by argument order",c5d1395dd438e0f9c1f98489fd94fe309349ee554d0a21752ddfa571fe4d66cb +cfd-reverse-s5p2,reverse-s5.2,5.2,front_lower_rear,1.1521326295486622,0.49972245348957717,0.8661855860486004,"center_a to center_b; normal=left(tangent), frozen by argument order",c5d1395dd438e0f9c1f98489fd94fe309349ee554d0a21752ddfa571fe4d66cb +cfd-reverse-s5p2,reverse-s5.2,5.2,front_upper_rear,-1.1521326793028515,-0.49972245348957717,0.8661855860486004,"center_a to center_b; normal=left(tangent), frozen by argument order",c5d1395dd438e0f9c1f98489fd94fe309349ee554d0a21752ddfa571fe4d66cb +cfd-reverse-s5p2,reverse-s5.2,5.2,rear_rear,2.3088703284212944,1.0,0.0,"center_a to center_b; normal=left(tangent), frozen by argument order",c5d1395dd438e0f9c1f98489fd94fe309349ee554d0a21752ddfa571fe4d66cb diff --git a/src/steady_pinball_theory/figures/summary/signed_gap_Qstar.pdf b/src/steady_pinball_theory/figures/summary/signed_gap_Qstar.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b177e577bc00054bd28678d664ab15ecbf86152b GIT binary patch literal 16007 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 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/summary/signed_gap_Qstar.png b/src/steady_pinball_theory/figures/summary/signed_gap_Qstar.png new file mode 100644 index 0000000000000000000000000000000000000000..e4122d4e472e63857b29d290e2e5086f481bc39b GIT binary patch literal 54153 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 dict[str, float]: ux=np.asarray(ux,dtype=float); uy=np.asarray(uy,dtype=float) if ux.shape != uy.shape or ux.ndim != 1: raise ValueError("profiles must be aligned 1-D arrays") @@ -19,3 +26,870 @@ def two_window_change(samples: np.ndarray) -> float: n=a.shape[0]//2 x=np.mean(a[:n],axis=0); y=np.mean(a[-n:],axis=0) return float(np.sqrt(np.mean((y-x)**2))) + + +def common_exterior_error(reference_velocity, candidate_velocity, centers, radius, *, + bounds=(-3.0, 6.0, -3.0, 3.0), shape=(181, 121), + exclusion_factor=1.1, u_inf=1.0): + """Fixed rectangular tensor quadrature over the declared common exterior.""" + c = np.asarray(centers, dtype=float) + if c.ndim != 2 or c.shape[1] != 2 or not np.isfinite(c).all(): + raise ValueError("centers must be a finite (B,2) array") + vals = np.asarray([radius, exclusion_factor, u_inf, *bounds], dtype=float) + if not np.isfinite(vals).all() or radius <= 0 or exclusion_factor <= 1: + raise ValueError("invalid exterior-error geometry") + if len(bounds) != 4 or bounds[0] >= bounds[1] or bounds[2] >= bounds[3]: + raise ValueError("bounds must be (xmin,xmax,ymin,ymax)") + if (len(shape) != 2 or any(isinstance(x, (bool, np.bool_)) or + not isinstance(x, (int, np.integer)) or x < 3 for x in shape)): + raise ValueError("shape must contain two integers >= 3") + x = np.linspace(bounds[0], bounds[1], shape[0]) + y = np.linspace(bounds[2], bounds[3], shape[1]) + xx, yy = np.meshgrid(x, y, indexing="xy") + points = np.column_stack((xx.ravel(), yy.ravel())) + mask = np.ones(len(points), dtype=bool) + for center in c: + mask &= np.linalg.norm(points - center, axis=1) >= exclusion_factor * radius + points = points[mask] + if not len(points): + raise ValueError("exterior mask retains no points") + wx = np.ones(shape[0]); wx[[0, -1]] = 0.5 + wy = np.ones(shape[1]); wy[[0, -1]] = 0.5 + weights = np.outer(wy, wx).ravel()[mask] + ref = np.asarray(reference_velocity(points), dtype=float) + cand = np.asarray(candidate_velocity(points), dtype=float) + if ref.shape != cand.shape or ref.shape != points.shape or not np.isfinite(ref).all() or not np.isfinite(cand).all(): + raise ValueError("velocity functions must return finite aligned (N,2) arrays") + def wrms(a): + return float(np.sqrt(np.sum(weights * np.sum(a * a, axis=1)) / np.sum(weights))) + absolute = wrms(cand - ref) + disturbance = wrms(ref - np.array([u_inf, 0.0])) + return { + "weighted_RMS": absolute, + "relative_to_reference_disturbance": absolute / disturbance if disturbance > 0 else float("nan"), + "relative_to_uniform_speed": absolute / abs(u_inf) if u_inf != 0 else float("nan"), + "bounds": [float(v) for v in bounds], "shape": [int(v) for v in shape], + "exclusion_factor": float(exclusion_factor), "retained_points": int(len(points)), + "retained_weight": float(np.sum(weights)), "reference_disturbance_RMS": disturbance, + } + + +def reflection_parity_defect(velocity, points, *, u_inf=1.0): + """Polar-vector reflection defect: ux even and uy odd across y=0.""" + p = np.asarray(points, dtype=float) + if p.ndim != 2 or p.shape[1] != 2 or not np.isfinite(p).all() or u_inf <= 0: + raise ValueError("points must be finite (N,2) and u_inf positive") + reflected = p.copy(); reflected[:, 1] *= -1 + v = np.asarray(velocity(p), dtype=float) + vr = np.asarray(velocity(reflected), dtype=float) + if v.shape != p.shape or vr.shape != p.shape or not np.isfinite(v).all() or not np.isfinite(vr).all(): + raise ValueError("velocity must return finite aligned (N,2) arrays") + component = np.column_stack((v[:, 0] - vr[:, 0], v[:, 1] + vr[:, 1])) / u_inf + return {"Linf": float(np.max(np.abs(component))), + "RMS": float(np.sqrt(np.mean(component**2)))} + + + +def affine_profile_sensitivity(base_velocity, direction_velocity, *, u_inf=1.0): + """Analytic derivative and optimum of smooth RMS profile disturbance.""" + u0 = np.asarray(base_velocity, dtype=float) + v = np.asarray(direction_velocity, dtype=float) + if u0.ndim != 2 or u0.shape[1] != 2 or v.shape != u0.shape: + raise ValueError("profile velocities must be aligned (N,2) arrays") + if not np.isfinite(u0).all() or not np.isfinite(v).all() or u_inf <= 0: + raise ValueError("invalid affine profile") + disturbance = u0 - np.array([u_inf, 0.0]) + a = float(np.mean(np.sum(v*v, axis=1))) + b = float(np.mean(np.sum(disturbance*v, axis=1))) + c = float(np.mean(np.sum(disturbance*disturbance, axis=1))) + if a <= 0 or c <= 0: + raise ValueError("nonzero base disturbance and direction are required") + optimum = -b/a + minimum2 = max(0.0, c - b*b/a) + return {"J0": float(np.sqrt(c)), "dJ_dg_at_zero": b/np.sqrt(c), + "g_opt": optimum, "J_opt": float(np.sqrt(minimum2)), + "quadratic": [a, 2*b, c]} + + +def one_sided_profile_error_slopes(base_velocity, direction_velocity, steps, *, u_inf=1.0): + """Declared forward quotients for nonsmooth E_inf_vector; not derivatives.""" + u0 = np.asarray(base_velocity, dtype=float) + v = np.asarray(direction_velocity, dtype=float) + hs = np.asarray(steps, dtype=float) + if u0.ndim != 2 or u0.shape[1] != 2 or v.shape != u0.shape: + raise ValueError("profile velocities must be aligned (N,2) arrays") + if hs.ndim != 1 or len(hs) < 2 or not np.isfinite(hs).all() or np.any(hs <= 0): + raise ValueError("steps must be at least two finite positive values") + e0 = profile_errors(u0[:, 0], u0[:, 1], u_inf=u_inf)["E_inf_vector"] + values = [] + for h in hs: + uh = u0 + h*v + eh = profile_errors(uh[:, 0], uh[:, 1], u_inf=u_inf)["E_inf_vector"] + values.append((eh-e0)/h) + return {"definition": "forward quotient [E(g=h)-E(g=0)]/h", + "steps": hs.tolist(), "slopes": [float(x) for x in values], + "last_change": float(abs(values[-1]-values[-2]))} + + +def gap_flux(velocity, center_a, center_b, radius, *, samples=2001): + """Oriented flux across the shortest open gap, normal=left(tangent).""" + a = np.asarray(center_a, dtype=float); b = np.asarray(center_b, dtype=float) + if a.shape != (2,) or b.shape != (2,) or not np.isfinite([*a,*b,radius]).all(): + raise ValueError("invalid gap geometry") + d = b-a; length = float(np.linalg.norm(d)) + if radius <= 0 or length <= 2*radius: + raise ValueError("gap must be positive") + if isinstance(samples, (bool, np.bool_)) or not isinstance(samples, (int, np.integer)) or samples < 3: + raise ValueError("samples must be an integer >= 3") + tangent = d/length; normal = np.array([-tangent[1], tangent[0]]) + t = np.linspace(radius, length-radius, int(samples)) + points = a + t[:, None]*tangent + trace = np.asarray(velocity(points), dtype=float) @ normal + return {"flux": float(_trapezoid(trace, t)), "normal": normal.tolist(), + "gap_length": length-2*radius, "samples": int(samples)} + + + + +def tensor_trapezoid_weights(x, y): + """Physical composite-trapezoid weights for a rectilinear tensor grid.""" + x=np.asarray(x,dtype=float); y=np.asarray(y,dtype=float) + if x.ndim!=1 or y.ndim!=1 or len(x)<2 or len(y)<2 or np.any(np.diff(x)<=0) or np.any(np.diff(y)<=0) or not np.isfinite(x).all() or not np.isfinite(y).all(): + raise ValueError("x and y must be finite increasing axes") + def widths(a): + w=np.empty_like(a); w[0]=(a[1]-a[0])/2; w[-1]=(a[-1]-a[-2])/2 + w[1:-1]=(a[2:]-a[:-2])/2 + return w + return np.outer(widths(y),widths(x)) + + +def quadrature_l2(field, mask, weights, *, normalizer=None): + """Explicit weighted L2 integral norm, never an RMS.""" + q=np.asarray(field,dtype=float); m=np.asarray(mask,dtype=bool); w=np.asarray(weights,dtype=float) + if q.ndim!=3 or q.shape[-1]!=2 or m.shape!=q.shape[:2] or w.shape!=m.shape or not np.isfinite(w).all() or np.any(w<0): + raise ValueError("invalid aligned L2 field, mask, or weights") + if not m.any() or float(np.sum(w[m]))<=0: raise ValueError("L2 mask retains no positive area") + if not np.isfinite(q[m]).all(): raise ValueError("L2 field is nonfinite on mask") + value=float(np.sqrt(np.sum(w[m]*np.sum(q[m]*q[m],axis=1)))) + result={"L2":value,"retained_measure":float(np.sum(w[m])),"points":int(m.sum()),"definition":"sqrt(integral |q|^2)"} + if normalizer is not None: + n=np.asarray(normalizer,dtype=float) + if n.shape!=q.shape or not np.isfinite(n[m]).all(): raise ValueError("invalid L2 normalizer") + scale=float(np.sqrt(np.sum(w[m]*np.sum(n[m]*n[m],axis=1)))) + if scale<=0: raise ValueError("L2 normalizer is zero") + result.update(normalizer_L2=scale,normalized_L2=value/scale) + return result + + +def conservative_masked_vorticity(x, y, ux, uy, valid_mask): + """Centered curl only where all four axial neighbors are valid.""" + x=np.asarray(x,dtype=float); y=np.asarray(y,dtype=float); ux=np.asarray(ux,dtype=float); uy=np.asarray(uy,dtype=float); valid=np.asarray(valid_mask,dtype=bool) + if ux.shape!=(len(y),len(x)) or uy.shape!=ux.shape or valid.shape!=ux.shape or len(x)<3 or len(y)<3 or np.any(np.diff(x)<=0) or np.any(np.diff(y)<=0) or not np.isfinite(ux).all() or not np.isfinite(uy).all(): + raise ValueError("invalid vorticity grid") + usable=np.zeros_like(valid); usable[1:-1,1:-1]=valid[1:-1,1:-1]&valid[1:-1,:-2]&valid[1:-1,2:]&valid[:-2,1:-1]&valid[2:,1:-1] + omega=np.full(ux.shape,np.nan) + duy_dx=(uy[1:-1,2:]-uy[1:-1,:-2])/(x[2:]-x[:-2])[None,:] + dux_dy=(ux[2:,1:-1]-ux[:-2,1:-1])/(y[2:]-y[:-2])[:,None] + interior=usable[1:-1,1:-1]; values=duy_dx-dux_dy + omega[1:-1,1:-1][interior]=values[interior] + return omega,usable + + +def absolute_vorticity_moments(y, omega, mask, weights): + """Absolute-vorticity weighted transverse centroid and width.""" + y=np.asarray(y,dtype=float); o=np.asarray(omega,dtype=float); m=np.asarray(mask,dtype=bool); w=np.asarray(weights,dtype=float) + if o.shape!=m.shape or w.shape!=m.shape or o.shape[0]!=len(y): raise ValueError("vorticity moments shape mismatch") + use=m&np.isfinite(o); mass=float(np.sum(w[use]*np.abs(o[use]))) + if not use.any() or mass<=0: raise ValueError("vorticity moment mask has zero absolute vorticity") + yy=np.broadcast_to(y[:,None],o.shape); centroid=float(np.sum(w[use]*np.abs(o[use])*yy[use])/mass) + width=float(np.sqrt(np.sum(w[use]*np.abs(o[use])*(yy[use]-centroid)**2)/mass)) + return {"absolute_vorticity_integral":mass,"y_centroid":centroid,"y_width":width,"points":int(use.sum())} + + +def recirculation_observables(x, ux, mask, weights): + """Area and occupied-column streamwise extent where ux is negative.""" + x=np.asarray(x,dtype=float); u=np.asarray(ux,dtype=float); m=np.asarray(mask,dtype=bool); w=np.asarray(weights,dtype=float) + if u.shape!=m.shape or w.shape!=m.shape or u.shape[1]!=len(x) or not np.isfinite(u).all(): raise ValueError("invalid recirculation inputs") + use=m&(u<0); occupied=np.any(use,axis=0) + if not occupied.any(): return {"area":0.0,"x_min":None,"x_max":None,"streamwise_extent":0.0,"points":0} + indices=np.flatnonzero(occupied); xmin=float(x[indices[0]]); xmax=float(x[indices[-1]]) + return {"area":float(np.sum(w[use])),"x_min":xmin,"x_max":xmax,"streamwise_extent":xmax-xmin,"points":int(use.sum())} + + +def wake_deficit_observables(y, ux_profile, mask): + """Frozen station momentum-deficit proxies using line quadrature.""" + y=np.asarray(y,dtype=float); u=np.asarray(ux_profile,dtype=float); m=np.asarray(mask,dtype=bool) + if y.ndim!=1 or u.shape!=y.shape or m.shape!=y.shape or len(y)<2 or not np.isfinite(u).all(): raise ValueError("invalid wake profile") + if not m.any(): raise ValueError("wake profile mask is empty") + deficit=1-u; positive=np.maximum(deficit,0); indicator=(deficit>0).astype(float) + def segments(v): + total=0.0 + for i in range(len(y)-1): + if m[i] and m[i+1]: total+=0.5*(v[i]+v[i+1])*(y[i+1]-y[i]) + return float(total) + return {"momentum_deficit_proxy":segments(positive),"positive_deficit_measure":segments(indicator),"signed_deficit_integral":segments(deficit),"points":int(m.sum())} + +def bilinear_sample_velocity(x, y, ux, uy, points, *, valid_mask=None): + """Sample a rectilinear (y,x)-ordered velocity grid by bilinear interpolation.""" + x=np.asarray(x,dtype=float); y=np.asarray(y,dtype=float) + ux=np.asarray(ux,dtype=float); uy=np.asarray(uy,dtype=float); p=np.asarray(points,dtype=float) + if x.ndim != 1 or y.ndim != 1 or len(x)<2 or len(y)<2 or np.any(np.diff(x)<=0) or np.any(np.diff(y)<=0): raise ValueError("x and y must be strictly increasing 1-D axes") + if ux.shape != (len(y),len(x)) or uy.shape != ux.shape or p.ndim != 2 or p.shape[1] != 2: raise ValueError("fields must be (y,x) and points finite (N,2)") + if not np.isfinite(x).all() or not np.isfinite(y).all() or not np.isfinite(ux).all() or not np.isfinite(uy).all() or not np.isfinite(p).all(): raise ValueError("sampling inputs must be finite") + if np.any((p[:,0]x[-1]) | (p[:,1]y[-1])): raise ValueError("sampling point outside grid") + ix=np.clip(np.searchsorted(x,p[:,0],side="right")-1,0,len(x)-2); iy=np.clip(np.searchsorted(y,p[:,1],side="right")-1,0,len(y)-2) + tx=(p[:,0]-x[ix])/(x[ix+1]-x[ix]); ty=(p[:,1]-y[iy])/(y[iy+1]-y[iy]) + def interp(a): return ((1-tx)*(1-ty)*a[iy,ix]+tx*(1-ty)*a[iy,ix+1]+(1-tx)*ty*a[iy+1,ix]+tx*ty*a[iy+1,ix+1]) + if valid_mask is not None: + m=np.asarray(valid_mask,dtype=bool) + if m.shape != ux.shape: raise ValueError("valid_mask shape mismatch") + if not (m[iy,ix]&m[iy,ix+1]&m[iy+1,ix]&m[iy+1,ix+1]).all(): raise ValueError("bilinear stencil intersects invalid cells") + return np.column_stack((interp(ux),interp(uy))) + + +def ccw_contour_circulation(x, y, ux, uy, center, radii, *, samples=2048, valid_mask=None): + """Geometric-CCW circular line integrals on explicitly ordered contours.""" + center=np.asarray(center,dtype=float); radii=np.asarray(radii,dtype=float) + if center.shape!=(2,) or radii.ndim!=1 or len(radii)==0 or np.any(~np.isfinite(radii)) or np.any(radii<=0): raise ValueError("center and radii must be finite and positive") + if isinstance(samples,(bool,np.bool_)) or not isinstance(samples,(int,np.integer)) or samples<16: raise ValueError("samples must be an integer >= 16") + theta=2*np.pi*np.arange(int(samples))/int(samples); normal=np.column_stack((np.cos(theta),np.sin(theta))); tangent=np.column_stack((-np.sin(theta),np.cos(theta))) + values=[] + for radius in radii: + velocity=bilinear_sample_velocity(x,y,ux,uy,center+radius*normal,valid_mask=valid_mask) + values.append(float(radius*(2*np.pi/int(samples))*np.sum(np.einsum("ij,ij->i",velocity,tangent)))) + return {"orientation":"geometric-CCW","radii":radii.tolist(),"circulation":values,"samples":int(samples)} + + +def preregistered_outer_mask(x, y, centers, radius, *, bounds, exclusion_factor=1.5, wall_margin=2.0): + """Frozen common-exterior point mask for endpoint-field WLS.""" + x=np.asarray(x,dtype=float); y=np.asarray(y,dtype=float); c=np.asarray(centers,dtype=float) + if len(bounds)!=4 or bounds[0]>=bounds[1] or bounds[2]>=bounds[3] or exclusion_factor<=1 or wall_margin<0: raise ValueError("invalid preregistered mask parameters") + xx,yy=np.meshgrid(x,y,indexing="xy"); mask=(xx>=bounds[0])&(xx<=bounds[1])&(yy>=bounds[2])&(yy<=bounds[3]) + mask &= (yy>=y[0]+wall_margin)&(yy<=y[-1]-wall_margin) + for center in c: mask &= (xx-center[0])**2+(yy-center[1])**2 >= (exclusion_factor*radius)**2 + return mask + + +def outer_wls_effective_circulation(observed_delta, unit_model_delta, mask, *, weights=None): + """Origin-constrained vector WLS for one geometric-circulation amplitude.""" + obs=np.asarray(observed_delta,dtype=float); model=np.asarray(unit_model_delta,dtype=float); mask=np.asarray(mask,dtype=bool) + if obs.shape!=model.shape or obs.ndim!=3 or obs.shape[-1]!=2 or mask.shape!=obs.shape[:2]: raise ValueError("WLS arrays must be aligned (y,x,2) with a (y,x) mask") + w=np.ones(mask.shape) if weights is None else np.asarray(weights,dtype=float) + if w.shape!=mask.shape or np.any(~np.isfinite(w)) or np.any(w<0) or not np.isfinite(obs).all() or not np.isfinite(model).all(): raise ValueError("invalid WLS arrays or weights") + use=mask&(w>0); denominator=float(np.sum(w[use]*np.sum(model[use]**2,axis=1))) + if not use.any() or denominator<=0: raise ValueError("WLS mask has no model information") + gamma=float(np.sum(w[use]*np.sum(obs[use]*model[use],axis=1))/denominator); residual=obs[use]-gamma*model[use] + rms=float(np.sqrt(np.sum(w[use]*np.sum(residual**2,axis=1))/np.sum(w[use]))); data_rms=float(np.sqrt(np.sum(w[use]*np.sum(obs[use]**2,axis=1))/np.sum(w[use]))) + return {"gamma_eff":gamma,"weighted_RMS":rms,"relative_RMS":rms/data_rms if data_rms>0 else float("nan"),"points":int(use.sum()),"weight_sum":float(w[use].sum()),"denominator":denominator} + + +def outer_wls_total_model(observed_delta, base_model, unit_model_delta, mask, *, weights=None): + """Fit observed=base+gamma*direction and return the complete prediction.""" + observed=np.asarray(observed_delta,dtype=float); base=np.asarray(base_model,dtype=float) + if observed.shape!=base.shape: + raise ValueError("observed and base model must have identical shapes") + fit=outer_wls_effective_circulation(observed-base,unit_model_delta,mask,weights=weights) + fit["fit_model"]="observed = base_model + gamma_eff * unit_model_delta" + fit["prediction"]=base+fit["gamma_eff"]*np.asarray(unit_model_delta,dtype=float) + return fit + + +def fit_two_point_affine_closure(s_train, gamma_train): + """Exact affine closure from the preregistered two distinct endpoints.""" + s=np.asarray(s_train,dtype=float); g=np.asarray(gamma_train,dtype=float) + if s.shape!=(2,) or g.shape!=(2,) or not np.isfinite(s).all() or not np.isfinite(g).all() or s[0]==s[1]: raise ValueError("closure requires two finite distinct training endpoints") + slope=float((g[1]-g[0])/(s[1]-s[0])); return {"intercept":float(g[0]-slope*s[0]),"slope":slope,"train_s":s.tolist(),"train_gamma":g.tolist()} + + +def predict_affine_closure(closure, s): return float(closure["intercept"]+closure["slope"]*float(s)) + + +def strip_modal_projection(y, velocity, H, *, modes): + """Project a station onto exact downstream Neumann-strip velocity modes.""" + y=np.asarray(y,dtype=float); v=np.asarray(velocity,dtype=float) + if y.ndim!=1 or v.shape!=(len(y),2) or len(y)<3 or not np.isfinite(v).all() or H<=0 or y[0] < -H-1e-12 or y[-1] > H+1e-12: raise ValueError("invalid strip station") + modes=int(modes) + if modes<1: raise ValueError("modes must be positive") + rows=[] + for n in range(1,modes+1): + k=n*np.pi/(2*H); c=np.cos(k*(y+H)); sn=np.sin(k*(y+H)) + rows.append((n,k,float(_trapezoid(v[:,0]*c,y)/H),float(_trapezoid(v[:,1]*sn,y)/H))) + return {"through_flow_zero_mode":float(_trapezoid(v[:,0],y)/(2*H)),"modes":np.asarray(rows),"normalization":"integral/H"} + + +def strip_mode_parity_sector(name): + """Return the allowed Neumann-mode parity for each affine field part.""" + sectors={"base":"even","rear_opposite":"even","common_rear":"odd","front_only":"odd"} + if name not in sectors: raise ValueError(f"unknown strip parity sector {name!r}") + return sectors[name] + + +def propagate_strip_modes(projection, dx): + rows=np.asarray(projection["modes"],dtype=float).copy() + if dx<0: raise ValueError("downstream propagation requires dx >= 0") + rows[:,2:4] *= np.exp(-rows[:,1]*float(dx))[:,None] + return {"through_flow_zero_mode":projection["through_flow_zero_mode"],"modes":rows,"normalization":projection["normalization"]} + + + +def _karman_labels(strengths): + k=np.asarray(strengths,dtype=float) + if k.ndim!=1 or len(k)<4 or not np.isfinite(k).all() or not np.any(k<0) or not np.any(k>0): + raise ValueError("Karman metrics require finite opposite-sign rows") + return k<0,k>0 + + +def karman_observer_mask(initial_positions, spacing, *, half_width=2.5): + """Frozen initial-label mask for a central two-row observer.""" + x=np.asarray(initial_positions,dtype=float) + if x.ndim!=2 or x.shape[1]!=2 or not np.isfinite(x).all() or spacing<=0 or half_width<=0: + raise ValueError("invalid Karman observer inputs") + mask=np.abs(x[:,0])<=float(half_width)*float(spacing)+1e-14 + if mask.sum()<4: raise ValueError("central observer retains too few vortices") + return mask + + +def aligned_position_l2(reference, candidate, mask): + """RMS position mismatch after one best global translation.""" + a=np.asarray(reference,dtype=float); b=np.asarray(candidate,dtype=float); m=np.asarray(mask,dtype=bool) + if a.shape!=b.shape or a.ndim!=2 or a.shape[1]!=2 or m.shape!=(len(a),) or not m.any() or not np.isfinite(a).all() or not np.isfinite(b).all(): + raise ValueError("invalid aligned-position inputs") + delta=b[m]-a[m]; translation=np.mean(delta,axis=0); residual=delta-translation + return {"translation":translation.tolist(),"L2":float(np.sqrt(np.mean(np.sum(residual*residual,axis=1))))} + + +def karman_propagation_metrics(initial, final, strengths, observer_mask, *, spacing, separation): + """Frozen central-window geometry metrics after best global translation.""" + x0=np.asarray(initial,dtype=float); x1=np.asarray(final,dtype=float); k=np.asarray(strengths,dtype=float); m=np.asarray(observer_mask,dtype=bool) + if x0.shape!=x1.shape or x0.ndim!=2 or x0.shape[1]!=2 or k.shape!=(len(x0),) or m.shape!=(len(x0),) or not m.any() or spacing<=0 or separation<=0 or not np.isfinite(x0).all() or not np.isfinite(x1).all(): + raise ValueError("invalid Karman propagation inputs") + lower,upper=_karman_labels(k); fit=aligned_position_l2(x0,x1,m); translation=np.asarray(fit["translation"]); aligned=x1-translation + def row_spacing(points,row): + values=np.sort(points[m&row,0]); + if len(values)<2: raise ValueError("observer row retains too few vortices") + return float(np.mean(np.diff(values))) + lower_spacing=row_spacing(aligned,lower); upper_spacing=row_spacing(aligned,upper) + h0=float(np.mean(x0[m&upper,1])-np.mean(x0[m&lower,1])); h1=float(np.mean(aligned[m&upper,1])-np.mean(aligned[m&lower,1])) + phase0=float(np.mean(x0[m&upper,0])-np.mean(x0[m&lower,0])); phase1=float(np.mean(aligned[m&upper,0])-np.mean(aligned[m&lower,0])) + center0=np.array([np.mean(x0[m&lower,1]),np.mean(x0[m&upper,1])]); center1=np.array([np.mean(aligned[m&lower,1]),np.mean(aligned[m&upper,1])]) + delta=x1[:,None,:]-x1[None,:,:]; distance=np.linalg.norm(delta,axis=2); np.fill_diagonal(distance,np.inf) + return {"best_translation":translation.tolist(),"vortex_position_L2":fit["L2"], + "lower_spacing_drift":(lower_spacing-spacing)/spacing,"upper_spacing_drift":(upper_spacing-spacing)/spacing, + "a_over_h_drift":float(spacing/h1-spacing/h0),"phase_stagger_drift":float((phase1-phase0)/spacing), + "row_center_shift":(center1-center0).tolist(),"minimum_pair_distance":float(np.min(distance))} + + +def normalized_invariant_drift(values, *, scale): + v=np.asarray(values,dtype=float) + if v.ndim!=1 or not len(v) or not np.isfinite(v).all() or not np.isfinite(scale) or scale<0: + raise ValueError("invalid invariant drift inputs") + denominator=max(abs(float(v[0])),float(scale),np.finfo(float).eps) + return float(np.max(np.abs(v-v[0]))/denominator) + + +def _adjacent_fluid_to_bodies(fluid_mask, body_id, body_ids): + """Boolean mask of fluid cells with a four-neighbor listed body cell.""" + fluid=np.asarray(fluid_mask,dtype=bool); body=np.asarray(body_id) + if fluid.shape!=body.shape or fluid.ndim!=2: raise ValueError("fluid_mask/body_id shape mismatch") + ids=tuple(int(v) for v in body_ids) + if not ids: raise ValueError("body_ids must be nonempty") + solid=np.zeros_like(fluid) + for registry_id in ids: solid |= body==registry_id + near=np.zeros_like(fluid) + near[:,1:] |= fluid[:,1:]&solid[:,:-1]; near[:,:-1] |= fluid[:,:-1]&solid[:,1:] + near[1:,:] |= fluid[1:,:]&solid[:-1,:]; near[:-1,:] |= fluid[:-1,:]&solid[1:,:] + return near + + +def near_wall_tangential_speed(x, y, ux, uy, fluid_mask, body_id, centers, radius, *, + body_ids=(1, 2), body_labels=None): + """Sample fluid tangential speed on cells adjacent to listed body interiors.""" + x=np.asarray(x,dtype=float); y=np.asarray(y,dtype=float) + ux=np.asarray(ux,dtype=float); uy=np.asarray(uy,dtype=float) + centers=np.asarray(centers,dtype=float) + if ux.shape!=(len(y),len(x)) or uy.shape!=ux.shape or centers.ndim!=2 or centers.shape[1]!=2: + raise ValueError("invalid near-wall velocity grid or centers") + if not np.isfinite(radius) or radius<=0: raise ValueError("radius must be positive") + near=_adjacent_fluid_to_bodies(fluid_mask,body_id,body_ids) + labels=list(body_labels) if body_labels is not None else [f"body_{i}" for i in body_ids] + if len(labels)!=len(body_ids): raise ValueError("body_labels length mismatch") + xx,yy=np.meshgrid(x,y,indexing="xy"); report={} + for registry_id,label in zip(body_ids,labels): + solid=np.asarray(body_id)==int(registry_id) + mask=np.zeros_like(near) + mask[:,1:] |= near[:,1:]&solid[:,:-1]; mask[:,:-1] |= near[:,:-1]&solid[:,1:] + mask[1:,:] |= near[1:,:]&solid[:-1,:]; mask[:-1,:] |= near[:-1,:]&solid[1:,:] + if not mask.any(): + report[label]={"availability":"unavailable_no_adjacent_fluid","points":0} + continue + cx,cy=centers[int(registry_id)]; dx=xx[mask]-cx; dy=yy[mask]-cy + rr=np.hypot(dx,dy); usable=rr>0 + if not np.any(usable): + report[label]={"availability":"unavailable_degenerate_radius","points":int(mask.sum())} + continue + tx=-dy[usable]/rr[usable]; ty=dx[usable]/rr[usable] + speed=ux[mask][usable]*tx+uy[mask][usable]*ty + report[label]={"availability":"available","points":int(usable.sum()), + "mean_tangential_speed":float(np.mean(speed)), + "max_abs_tangential_speed":float(np.max(np.abs(speed))), + "rms_tangential_speed":float(np.sqrt(np.mean(speed*speed)))} + return {"definition":"fluid cells adjacent to body; geometric-CCW tangent (-dy,dx)/r", + "radius":float(radius),"bodies":report} + + +def wall_vorticity_production_proxy(x, y, ux, uy, fluid_mask, body_id, centers, radius, *, + body_ids=(1, 2), body_labels=None, min_pairs=8): + """Fail-closed wall-vorticity proxy from radial tangential gradient when supported.""" + x=np.asarray(x,dtype=float); y=np.asarray(y,dtype=float) + ux=np.asarray(ux,dtype=float); uy=np.asarray(uy,dtype=float) + centers=np.asarray(centers,dtype=float); fluid=np.asarray(fluid_mask,dtype=bool) + if isinstance(min_pairs,(bool,np.bool_)) or not isinstance(min_pairs,(int,np.integer)) or min_pairs<1: + raise ValueError("min_pairs must be a positive integer") + near=_adjacent_fluid_to_bodies(fluid,body_id,body_ids) + labels=list(body_labels) if body_labels is not None else [f"body_{i}" for i in body_ids] + xx,yy=np.meshgrid(x,y,indexing="xy"); report={} + for registry_id,label in zip(body_ids,labels): + solid=np.asarray(body_id)==int(registry_id) + mask=np.zeros_like(near) + mask[:,1:] |= near[:,1:]&solid[:,:-1]; mask[:,:-1] |= near[:,:-1]&solid[:,1:] + mask[1:,:] |= near[1:,:]&solid[:-1,:]; mask[:-1,:] |= near[:-1,:]&solid[1:,:] + iy,ix=np.nonzero(mask); pairs=[] + cx,cy=centers[int(registry_id)] + for i,j in zip(iy,ix): + dx=xx[i,j]-cx; dy=yy[i,j]-cy; rr=float(np.hypot(dx,dy)) + if rr<=0: continue + nx,ny=dx/rr,dy/rr; tx,ty=-ny,nx + # One lattice step outward along the discrete neighbor closest to +n. + candidates=((i,j+1,1.,0.),(i,j-1,-1.,0.),(i+1,j,0.,1.),(i-1,j,0.,-1.)) + best=None; best_dot=-np.inf + for ii,jj,sx,sy in candidates: + if ii<0 or jj<0 or ii>=fluid.shape[0] or jj>=fluid.shape[1] or not fluid[ii,jj]: continue + dot=sx*nx+sy*ny + if dot>best_dot: best_dot=dot; best=(ii,jj,float(np.hypot(xx[ii,jj]-xx[i,j],yy[ii,jj]-yy[i,j]))) + if best is None or best_dot<=0 or best[2]<=0: continue + ii,jj,ds=best + u_theta0=ux[i,j]*tx+uy[i,j]*ty; u_theta1=ux[ii,jj]*tx+uy[ii,jj]*ty + pairs.append((u_theta1-u_theta0)/ds) + if len(pairs)= 8") + near=_adjacent_fluid_to_bodies(fluid,body_id,body_ids) + labels=list(body_labels) if body_labels is not None else [f"body_{i}" for i in body_ids] + xx,yy=np.meshgrid(x,y,indexing="xy"); report={} + for registry_id,label in zip(body_ids,labels): + solid=np.asarray(body_id)==int(registry_id) + mask=np.zeros_like(near) + mask[:,1:] |= near[:,1:]&solid[:,:-1]; mask[:,:-1] |= near[:,:-1]&solid[:,1:] + mask[1:,:] |= near[1:,:]&solid[:-1,:]; mask[:-1,:] |= near[:-1,:]&solid[1:,:] + if mask.sum()6: + report[label]={"availability":"unavailable_ambiguous_topology","points":int(mask.sum()), + "sign_changes":len(flips),"angles":flips} + continue + report[label]={"availability":"available","points":int(mask.sum()),"sign_changes":len(flips), + "angles":flips,"observable":"near-wall ux zero crossings; not proved separation line"} + return {"definition":"fail-closed separation/reattachment estimator from near-wall ux","bodies":report} + + +def control_volume_streamwise_momentum_ledger(x, y, ux, uy, rho, fluid_mask, *, + x_left, x_right, force_history=None, + viscosity=None, cs2=1.0/3.0): + """Incomplete streamwise momentum ledger between two stations; never a closed balance.""" + x=np.asarray(x,dtype=float); y=np.asarray(y,dtype=float) + ux=np.asarray(ux,dtype=float); uy=np.asarray(uy,dtype=float); rho=np.asarray(rho,dtype=float) + fluid=np.asarray(fluid_mask,dtype=bool) + if ux.shape!=(len(y),len(x)) or uy.shape!=ux.shape or rho.shape!=ux.shape or fluid.shape!=ux.shape: + raise ValueError("invalid control-volume fields") + if not np.isfinite([x_left,x_right,cs2]).all() or x_right<=x_left or cs2<=0: + raise ValueError("invalid control-volume stations or cs2") + def station(xq): + ix=int(np.argmin(np.abs(x-xq))); rows=fluid[:,ix].copy(); rows[[0,-1]]=False + if rows.sum()<3: raise ValueError("control-volume station retains too few fluid rows") + yy=y[rows]; uu=ux[rows,ix]; vv=uy[rows,ix]; rr=rho[rows,ix] + pressure=cs2*(rr-1.0) + return {"x":float(x[ix]),"points":int(rows.sum()), + "mass_flux":float(_trapezoid(rr*uu,yy)), + "momentum_flux":float(_trapezoid(rr*uu*uu,yy)), + "pressure_force_proxy":float(_trapezoid(-pressure,yy)), + "pressure_model":"LBM weak-compressible p~cs2(rho-1); not incompressible NS pressure"} + left=station(x_left); right=station(x_right) + body_force={"availability":"unavailable_no_force_history","total_Fx_mean":None} + if force_history is not None: + force=np.asarray(force_history,dtype=float) + if force.ndim!=2 or force.shape[1]<8 or not np.isfinite(force).all(): + raise ValueError("force_history must be finite with Fx columns") + tail=force[-min(10,len(force)):,2:] + total_fx=float(np.mean(tail[:,0]+tail[:,2]+tail[:,4])) + body_force={"availability":"available_from_force_history_tail", + "tail_samples":int(len(tail)),"total_Fx_mean":total_fx, + "normalization":"Celeris force-history mean; not certified CV body integral"} + viscous={"availability":"unavailable_gradient_unsupported", + "reason":"face viscous stress requires supported wall-normal gradients on both stations"} + if viscosity is not None: + if not np.isfinite(viscosity) or float(viscosity)<=0: + raise ValueError("viscosity must be finite and positive when provided") + # Even with nu known, this ledger does not assemble a complete NS stress integral. + viscous={"availability":"unavailable_incomplete_stress_tensor", + "viscosity":float(viscosity), + "note":"viscosity present but full face/wall viscous stress closure is absent"} + residual_proxy=None + if body_force["total_Fx_mean"] is not None: + residual_proxy=float((right["momentum_flux"]+right["pressure_force_proxy"]) + -(left["momentum_flux"]+left["pressure_force_proxy"]) + -body_force["total_Fx_mean"]) + return {"definition":"streamwise momentum ledger between rear-gap plane and observer; incomplete", + "balance_status":"incomplete_not_closed", + "left":left,"right":right,"body_force":body_force,"viscous_stress":viscous, + "residual_proxy_if_partial":residual_proxy, + "claim_limit":"NEVER a closed momentum balance; pressure is weak-compressible proxy"} + + +def torque_power_availability(force_history=None, *, torque_history=None): + """Torque/power are unavailable unless an explicit torque history exists.""" + if torque_history is not None: + tau=np.asarray(torque_history,dtype=float) + if tau.ndim!=2 or tau.shape[1]<1 or not np.isfinite(tau).all(): + raise ValueError("torque_history must be finite 2-D") + return {"availability":"available_torque_history","samples":int(len(tau)), + "mean_torque":np.mean(tau,axis=0).tolist()} + if force_history is not None: + return {"availability":"unavailable_no_torque_history", + "note":"force_history provides Fx/Fy only; torque/power not inferred"} + return {"availability":"unavailable_no_torque_history","note":"no force or torque history provided"} + + +def fit_linear_composite(observed, components, mask, *, names=None): + """Unweighted vector least squares on listed component fields. + + Each component must share the observed field shape (...,2). Returns + coefficients, predicted field, residual, condition number, and dof count. + """ + obs = np.asarray(observed, dtype=float) + m = np.asarray(mask, dtype=bool) + if obs.ndim != 3 or obs.shape[-1] != 2 or m.shape != obs.shape[:2] or not m.any(): + raise ValueError("invalid composite fit inputs") + cols = [] + comp_names = [] + for item in components: + if isinstance(item, tuple): + name, field = item + else: + name, field = None, item + field = np.asarray(field, dtype=float) + if field.shape != obs.shape or not np.isfinite(field[m]).all(): + raise ValueError("component shape or values invalid on mask") + cols.append(field[m].reshape(-1)) + comp_names.append(name) + if names is not None and list(names) != comp_names: + raise ValueError("names must match components") + y = obs[m].reshape(-1) + A = np.column_stack(cols) + coeff, _, rank, sv = np.linalg.lstsq(A, y, rcond=1e-12) + pred = np.tensordot(A, coeff, axes=(1, 0)).reshape(obs[m].shape) + residual = obs[m] - pred + full = np.zeros_like(obs) + full[m] = pred.reshape(obs[m].shape) + res_full = np.zeros_like(obs) + res_full[m] = residual.reshape(obs[m].shape) + cond = float(sv[0] / sv[-1]) if sv[-1] > 0 else float("inf") + return { + "names": comp_names, + "coefficients": {n: float(v) for n, v in zip(comp_names, coeff)}, + "rank": int(rank), + "condition_number": cond, + "dof": int(len(coeff)), + "prediction": full, + "residual": res_full, + "weighted_RMS": float(np.sqrt(np.mean(np.sum(residual * residual, axis=1)))), + "relative_RMS": float(np.sqrt(np.mean(np.sum(residual * residual, axis=1))) / + max(float(np.sqrt(np.mean(np.sum(y * y)))), np.finfo(float).eps)), + } + + +def profile_station_errors(delta, x, y, station, *, fluid_mask=None, exclude_outer_rows=2): + """Full-profile E_inf/L2 at one x/D station on common fluid rows.""" + x = np.asarray(x, dtype=float) + ix = int(np.argmin(np.abs(x - float(station)))) + d = np.asarray(delta, dtype=float)[:, ix, :] + if fluid_mask is not None: + rows = np.asarray(fluid_mask, dtype=bool)[:, ix].copy() + if exclude_outer_rows: + rows[:exclude_outer_rows] = False + rows[-exclude_outer_rows:] = False + d = d[rows] + if d.size == 0: + raise ValueError("empty profile at station") + return profile_errors(d[:, 0], d[:, 1], u_inf=1.0) + + +def held_out_improvement(baseline_residual, candidate_residual, mask): + """Relative held-out L2 improvement of candidate over baseline.""" + m = np.asarray(mask, dtype=bool) + b = np.asarray(baseline_residual, dtype=float) + c = np.asarray(candidate_residual, dtype=float) + if b.shape != c.shape or m.shape != b.shape[:2]: + raise ValueError("held-out fields must align") + # unit weights for relative comparison on same mask + w = np.ones(m.shape, dtype=float) + lb = quadrature_l2(b, m, w)["L2"] + lc = quadrature_l2(c, m, w)["L2"] + return {"baseline_L2": lb, "candidate_L2": lc, + "relative_improvement": float((lb - lc) / max(lb, np.finfo(float).eps)), + "significant": bool(lc < 0.9 * lb)} + + +# NS-first dimensional diagnostics: resolved CPU arrays only. +def torque_to_actuator_power(torque, angular_velocity, *, torque_ownership, rho_ref, u_ref, diameter): + """Convert raw 2-D per-span torque and return actuator-to-fluid power.""" + from .contract import NondimensionalContract + tau=np.asarray(torque,float); omega=np.asarray(angular_velocity,float) + if tau.ndim not in (1,2) or tau.shape!=omega.shape or not tau.size or not np.isfinite(tau).all() or not np.isfinite(omega).all(): raise ValueError("torque/angular_velocity must be finite aligned samples[,bodies]") + if torque_ownership not in ("fluid_on_body","actuator_on_fluid"): raise ValueError("invalid torque_ownership") + contract=NondimensionalContract(float(diameter),float(u_ref),float(rho_ref)) + actuator_tau=-tau if torque_ownership=="fluid_on_body" else tau + power=actuator_tau*omega + total=power if power.ndim==1 else power.sum(axis=1) + torque_scale=.5*rho_ref*u_ref**2*diameter**2 + power_scale=.5*rho_ref*u_ref**3*diameter + raw_c_tau=tau/torque_scale; actuator_c_tau=actuator_tau/torque_scale + return {"torque_ownership":torque_ownership,"raw_torque":tau, + "raw_torque_interpretation":f"{torque_ownership}; Celeris reads are lattice cut-link sums, mean per accumulated LBM step when normalize=True", + "sampling_semantics":{"normalize_true":"mean per accumulated LBM step exactly once","kernel_reduction":"sum of cut-link lattice loads","normalizations_not_applied":["force/torque coefficient","body count","density","dynamic pressure","span"],"span":"two-dimensional per-unit-span"}, + "sign_contract":"omega>0 geometric CCW; power>0 actuator-to-fluid", + "actuator_torque":actuator_tau,"raw_C_tau":raw_c_tau,"actuator_C_tau":actuator_c_tau, + "power_per_body":power,"total_power":total,"mean_total_power":float(total.mean()), + "torque_scale":float(torque_scale),"power_scale":float(power_scale), + "C_P_samples":total/power_scale,"C_P":float(total.mean()/power_scale), + "nondimensional_reference":contract.convert()["metadata"], + "dimensions":{"torque":"M L^2 T^-2/span","power":"M L^2 T^-3/span","C_tau":"1","C_P":"1"}} + + +def _masked_line_trapezoid(y, value, mask): + y=np.asarray(y,float); v=np.asarray(value,float); m=np.asarray(mask,bool) + if y.ndim!=1 or v.shape[0]!=len(y) or m.shape!=y.shape or len(y)<2: raise ValueError("line fields must align") + use=m[:-1]&m[1:] + if not use.any(): raise ValueError("station mask retains no complete segment") + shape=(len(y)-1,)+(1,)*(v.ndim-1); factor=(np.diff(y)*use).reshape(shape) + return np.sum(.5*(v[:-1]+v[1:])*factor,axis=0) + + +def station_flux_metrics(y, ux, uy, rho, pressure, mask, *, normal=(1.,0.), q_in=None): + """Mass, vector momentum, kinetic and mechanical-energy flux across a frozen station normal.""" + y=np.asarray(y,float); ux=np.asarray(ux,float); uy=np.asarray(uy,float); rho=np.asarray(rho,float); pressure=np.asarray(pressure,float); mask=np.asarray(mask,bool); n=np.asarray(normal,float) + if y.ndim!=1 or any(a.shape!=y.shape for a in (ux,uy,rho,pressure,mask)): raise ValueError("station profiles must be aligned 1-D") + if n.shape!=(2,) or not np.isfinite(n).all() or not np.isclose(np.linalg.norm(n),1,atol=1e-12,rtol=0): raise ValueError("normal must be a finite unit vector") + if np.any(np.diff(y)<=0) or np.any(rho[mask]<=0) or not all(np.isfinite(a[mask]).all() for a in (ux,uy,rho,pressure)): raise ValueError("invalid station values") + u=np.column_stack((ux,uy)); un=u@n; speed2=ux**2+uy**2; momentum=rho[:,None]*u*un[:,None]+pressure[:,None]*n + out={"mass_flux":float(_masked_line_trapezoid(y,rho*un,mask)),"momentum_flux":np.asarray(_masked_line_trapezoid(y,momentum,mask)), + "kinetic_energy_flux":float(_masked_line_trapezoid(y,.5*rho*speed2*un,mask)),"pressure_work_flux":float(_masked_line_trapezoid(y,pressure*un,mask)), + "mechanical_energy_flux":float(_masked_line_trapezoid(y,(pressure+.5*rho*speed2)*un,mask)),"normal":n.tolist(),"retained_points":int(mask.sum()), + "dimensions":{"mass_flux":"M T^-1/span","momentum_flux":"M L T^-2/span","energy_flux":"M L^2 T^-3/span"}} + if q_in is not None: + keys=("mass_flux","momentum_flux","kinetic_energy_flux","pressure_work_flux","mechanical_energy_flux") + if not isinstance(q_in,dict) or any(k not in q_in for k in keys+("normal",)) or not np.allclose(q_in["normal"],n,atol=1e-12,rtol=0): raise ValueError("q_in must be matched with the same frozen normal") + out["matched_q_in"]={k:q_in[k] for k in keys}; out["delta_from_q_in"]={k:out[k]-q_in[k] for k in keys} + return out + + +def volume_viscous_dissipation(x,y,ux,uy,viscosity,mask,*,density=None): + """Integrate 2*mu*S:S over valid centered stencils of a masked rectilinear grid.""" + x=np.asarray(x,float); y=np.asarray(y,float); ux=np.asarray(ux,float); uy=np.asarray(uy,float); m=np.asarray(mask,bool) + if ux.shape!=(len(y),len(x)) or uy.shape!=ux.shape or m.shape!=ux.shape or min(len(x),len(y))<3: raise ValueError("invalid masked rectilinear grid") + if np.any(np.diff(x)<=0) or np.any(np.diff(y)<=0) or not np.isfinite(ux[m]).all() or not np.isfinite(uy[m]).all() or not np.isfinite(viscosity) or viscosity<=0: raise ValueError("invalid grid, field, or viscosity") + use=np.zeros_like(m); use[1:-1,1:-1]=m[1:-1,1:-1]&m[1:-1,:-2]&m[1:-1,2:]&m[:-2,1:-1]&m[2:,1:-1] + if not use.any(): raise ValueError("dissipation mask retains no centered stencil") + uxx=(ux[1:-1,2:]-ux[1:-1,:-2])/(x[2:]-x[:-2])[None,:]; uyx=(uy[1:-1,2:]-uy[1:-1,:-2])/(x[2:]-x[:-2])[None,:] + uxy=(ux[2:,1:-1]-ux[:-2,1:-1])/(y[2:]-y[:-2])[:,None]; uyy=(uy[2:,1:-1]-uy[:-2,1:-1])/(y[2:]-y[:-2])[:,None] + if density is None: mu=np.full(ux.shape,float(viscosity)); kind="dynamic" + else: + density=np.asarray(density,float) + if density.shape!=ux.shape or np.any(density[use]<=0) or not np.isfinite(density[use]).all(): raise ValueError("density must be finite positive and aligned") + mu=viscosity*density; kind="kinematic_with_density" + phi=np.full(ux.shape,np.nan); core=2*uxx**2+2*uyy**2+(uxy+uyx)**2; core_use=use[1:-1,1:-1] + phi[1:-1,1:-1][core_use]=mu[1:-1,1:-1][core_use]*core[core_use]; w=tensor_trapezoid_weights(x,y) + requested_area=float(w[m].sum()); usable_area=float(w[use].sum()) + return {"viscous_dissipation":float(np.sum(w[use]*phi[use])),"dissipation_density":phi,"usable_mask":use, + "retained_area":usable_area,"requested_fluid_area":requested_area,"usable_stencil_area":usable_area, + "usable_stencil_fraction":usable_area/requested_area,"omitted_fluid_area":requested_area-usable_area, + "near_body_omission":"partial_centered_stencil_omission_at_mask_boundaries", + "points":int(use.sum()),"requested_fluid_points":int(m.sum()),"viscosity_kind":kind, + "definition":"partial CV-fluid integral 2*mu*S:S on usable centered stencils", + "balance_status":"partial_not_closed_energy","dimensions":"M L^2 T^-3/span"} + + +def gap_mass_momentum_flux(velocity,density,center_a,center_b,radius,*,samples=2001): + """Frozen a-to-b orientation; Q_g=int u.n, mass=int rho*u.n, J_g=int rho*(u.n)^2.""" + base=gap_flux(velocity,center_a,center_b,radius,samples=samples); a=np.asarray(center_a,float); b=np.asarray(center_b,float); length=float(np.linalg.norm(b-a)) + t=np.linspace(radius,length-radius,int(samples)); points=a+t[:,None]*(b-a)[None,:]/length; v=np.asarray(velocity(points),float); rho=np.asarray(density(points),float) + if v.shape!=points.shape or rho.shape!=(len(points),) or np.any(rho<=0) or not np.isfinite(rho).all(): raise ValueError("density must return finite positive gap samples") + un=v@np.asarray(base["normal"]); base.update(Q_g=base.pop("flux"),mass_flux=float(_trapezoid(rho*un,t)),J_g=float(_trapezoid(rho*un**2,t)),density_min=float(rho.min()),density_max=float(rho.max()),orientation="center_a to center_b; normal=left(tangent), frozen by argument order",dimensions={"Q_g":"L^2 T^-1","mass_flux":"M T^-1/span","J_g":"M L T^-2/span"}) + return base + + +def control_volume_mechanical_energy_ledger(left_station,right_station,*,viscous_dissipation=None,actuator_power_to_fluid=None,lateral_mechanical_energy_flux=None,storage_rate=None): + """Report resolved energy terms; compute residual only when every signed term exists.""" + def e(q,label): + if not isinstance(q,dict) or "mechanical_energy_flux" not in q or not np.isfinite(q["mechanical_energy_flux"]): raise ValueError(f"{label} station lacks finite mechanical_energy_flux") + return float(q["mechanical_energy_flux"]) + left=e(left_station,"left"); right=e(right_station,"right"); supplied={"viscous_dissipation":viscous_dissipation,"actuator_power_to_fluid":actuator_power_to_fluid,"lateral_outward_mechanical_energy_flux":lateral_mechanical_energy_flux,"storage_rate":storage_rate} + for v in supplied.values(): + if v is not None and not np.isfinite(v): raise ValueError("ledger terms must be finite") + complete=all(v is not None for v in supplied.values()); residual=None if not complete else float(right-left+lateral_mechanical_energy_flux+viscous_dissipation+storage_rate-actuator_power_to_fluid) + resolved={"left_mechanical_energy_flux":left,"right_mechanical_energy_flux":right}; resolved.update({k:{"availability":"available" if v is not None else "unavailable_not_supplied","value":None if v is None else float(v)} for k,v in supplied.items()}) + return {"definition":"right-left + lateral_out + dissipation + storage - actuator_power_to_fluid = residual","resolved_terms":resolved,"closure_available":complete,"balance_status":"residual_available" if complete else "incomplete_not_closed","residual":residual,"claim_limit":"No closure/residual unless every signed term is supplied."} + + +def fit_conservation_model(features,target,*,feature_names,feature_dimensions,target_dimension,feature_scales,target_scale,held_out=None): + """Dimension-audited low-dimensional scalar closure fit; never fits velocity fields.""" + X=np.asarray(features,float); y=np.asarray(target,float); names=list(feature_names); dims=list(feature_dimensions); scales=np.asarray(feature_scales,float) + if X.ndim!=2 or y.shape!=(X.shape[0],) or X.shape[1]!=len(names) or len(dims)!=len(names): raise ValueError("features/target metadata dimensions mismatch") + if X.shape[0]<=X.shape[1] or not np.isfinite(X).all() or not np.isfinite(y).all(): raise ValueError("finite overdetermined scalar data required") + if len(set(names))!=len(names) or any(not isinstance(d,str) or not d for d in dims) or not isinstance(target_dimension,str) or not target_dimension: raise ValueError("explicit names and dimensions required") + if scales.shape!=(X.shape[1],) or np.any(scales<=0) or not np.isfinite(scales).all() or not np.isfinite(target_scale) or target_scale<=0: raise ValueError("positive dimensional scales required") + A=X/scales; z=y/target_scale; beta,_,rank,sv=np.linalg.lstsq(A,z,rcond=1e-12); coef=target_scale*beta/scales; pred=X@coef; residual=y-pred; dof=len(y)-rank + sigma2=float(residual@residual/dof) if dof>0 and rank==X.shape[1] else None; cov=None if sigma2 is None else sigma2*np.linalg.inv(X.T@X) + result={"feature_names":names,"feature_dimensions":dims,"target_dimension":target_dimension,"coefficient_dimensions":[f"({target_dimension})/({d})" for d in dims],"coefficients":coef,"rank":int(rank),"condition_number":float(sv[0]/sv[-1]) if sv[-1]>0 else float("inf"),"prediction":pred,"residual":residual,"residual_RMS":float(np.sqrt(np.mean(residual**2))),"coefficient_covariance":cov,"uncertainty_available":cov is not None,"model_kind":"scalar low-dimensional conservation closure"} + if held_out is not None: + if not isinstance(held_out,(tuple,list)) or len(held_out)!=2: raise ValueError("held_out must be (features,target)") + Xh=np.asarray(held_out[0],float); yh=np.asarray(held_out[1],float) + if Xh.ndim!=2 or Xh.shape[1]!=X.shape[1] or yh.shape!=(len(Xh),) or not np.isfinite(Xh).all() or not np.isfinite(yh).all(): raise ValueError("held-out dimensions mismatch") + ph=Xh@coef; result["held_out"]={"prediction":ph,"target":yh,"residual":yh-ph,"RMS":float(np.sqrt(np.mean((yh-ph)**2))),"samples":int(len(yh))} + return result + + +def predict_conservation_model(model,features,*,feature_names,feature_dimensions): + """Predict scalar observables after exact feature-name and dimension validation.""" + if list(feature_names)!=model.get("feature_names") or list(feature_dimensions)!=model.get("feature_dimensions"): raise ValueError("prediction feature names/dimensions do not match model") + X=np.asarray(features,float); c=np.asarray(model["coefficients"],float) + if X.ndim not in (1,2) or X.shape[-1]!=len(c) or not np.isfinite(X).all(): raise ValueError("invalid prediction features") + return X@c + + +def weak_compressible_pressure_proxy(rho, *, rho_ref, cs2=1.0/3.0): + """LBM weak-compressible pressure proxy p'=cs2*(rho-rho_ref); never a missing-pressure sentinel.""" + density=np.asarray(rho,float) + if not np.isfinite(density).all() or np.any(density<=0) or not np.isfinite([rho_ref,cs2]).all() or rho_ref<=0 or cs2<=0: + raise ValueError("pressure proxy requires finite positive density, rho_ref, and cs2") + return {"values":cs2*(density-float(rho_ref)),"model":"weak-compressible pressure proxy p'=cs2*(rho-rho_ref)", + "cs2":float(cs2),"rho_ref":float(rho_ref),"availability":"available_weak_compressible_proxy", + "claim_limit":"Not incompressible Navier-Stokes pressure; zero values mean rho=rho_ref, never unavailable pressure."} + + +def rectangular_control_volume_fluxes(x,y,ux,uy,rho,fluid_mask,front_center,diameter,*, + rho_ref,cs2=1.0/3.0,viscosity=None): + """Four-face endpoint spatial flux ledger on the nearest body-enclosing lattice rectangle.""" + x=np.asarray(x,float); y=np.asarray(y,float); ux=np.asarray(ux,float); uy=np.asarray(uy,float) + rho=np.asarray(rho,float); fluid=np.asarray(fluid_mask,bool); center=np.asarray(front_center,float) + shape=(len(y),len(x)) + if any(a.shape!=shape for a in (ux,uy,rho,fluid)) or center.shape!=(2,) or min(len(x),len(y))<3: + raise ValueError("invalid control-volume grid or front center") + if np.any(np.diff(x)<=0) or np.any(np.diff(y)<=0) or not np.isfinite([*x,*y,*center,diameter,rho_ref,cs2]).all() or diameter<=0: + raise ValueError("control-volume coordinates and references must be finite and valid") + targets=(center[0]-2*diameter,center[0]+10*diameter,center[1]-3*diameter,center[1]+3*diameter) + il,ir,jb,jt=(int(np.argmin(abs(x-targets[0]))),int(np.argmin(abs(x-targets[1]))), + int(np.argmin(abs(y-targets[2]))),int(np.argmin(abs(y-targets[3])))) + if not (0=1: raise ValueError("invalid branch margin/hysteresis") + den=dr*dr+da*da + if np.any(den<=0): raise ValueError("branch order undefined when both endpoint distances vanish") + value=(dr*dr-da*da)/den + state=np.zeros(value.shape,dtype=np.int8) + prior=0 if previous is None else int(previous) + if prior not in (-1,0,1): raise ValueError("previous branch state must be -1, 0, or 1") + for i,v in enumerate(value.flat): + threshold=margin+hysteresis if prior==0 else max(0.,margin-hysteresis) + if prior==1: prior=1 if v>=-threshold else -1 + elif prior==-1: prior=-1 if v<=threshold else 1 + else: prior=1 if v>threshold else (-1 if v<-threshold else 0) + state.flat[i]=prior + return {"m":value,"state":state,"state_meaning":{"1":"accepted-nearer","-1":"reverse-nearer","0":"unresolved"}, + "margin":float(margin),"hysteresis":float(hysteresis),"definition":"m=(dR^2-dA^2)/(dR^2+dA^2); state uses margin and Schmitt hysteresis"} diff --git a/src/steady_pinball_theory/plot_results.py b/src/steady_pinball_theory/plot_results.py new file mode 100644 index 0000000..46a1a74 --- /dev/null +++ b/src/steady_pinball_theory/plot_results.py @@ -0,0 +1,229 @@ +#!/usr/bin/env python3 +"""CPU-only, lattice-exact reader plots from authenticated steady evidence.""" +from __future__ import annotations +import argparse,csv,hashlib,json,os,shutil,tempfile +from dataclasses import dataclass +from pathlib import Path +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt +from matplotlib.colorbar import ColorbarBase +from matplotlib.colors import BoundaryNorm,ListedColormap +from matplotlib.patches import Circle +import numpy as np +from PIL import Image +from steady_pinball_theory.metrics import conservative_masked_vorticity,tensor_trapezoid_weights,profile_errors +from steady_pinball_theory.runner import load_validate_artifact +from steady_pinball_theory.theory import affine_velocity,strip_basis_affine + +HERE=Path(__file__).resolve().parent +DEFAULT_STEADY=Path("/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-contract-v5-torque-d20-20260808") +DEFAULT_STRIP=Path("/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/steady-strip-modal-analysis-20260804-v4/analysis.json") +DEFAULT_LEDGER=Path("/home/frank14f/optane/DynamisLab/steady_pinball_theory/authoritative/ns-ledger-v2-oracle-bound-d20-20260809/analysis.json") +DEFAULT_OUTPUT=HERE/"figures"; STATIONS=(2.,4.,6.,10.); DPI=100; PRIMARY=0.0231672176752314 +@dataclass +class Case: + id:str; label:str; family:str; pname:str; parameter:float|None + ux:np.ndarray; uy:np.ndarray; fluid:np.ndarray; vort:np.ndarray; vort_mask:np.ndarray + source_path:str; source_hash:str + +def sha(path): + h=hashlib.sha256() + with Path(path).open("rb") as f: + for b in iter(lambda:f.read(1<<20),b""): h.update(b) + return h.hexdigest() +def discrete_colormap(name,lo,hi,bins,*,center_white=False): + if not lo=1.8)&(X<=10)&(abs(Y)<=1.5)&(c.ux/U<0); near=c.vort_mask&(X>=1.8)&(X<4)&(abs(Y)<=3); diag.append({"case":c.id,"label":c.label,"s":c.parameter,"recirculation_area_D2":float(np.sum(weights[rec])),"immediate_wake_abs_vorticity_integral":float(np.sum(weights[near]*np.abs(c.vort[near]))),"definition":"ux/U<0 on 1.8<=x/D<=10, |y/D|<=1.5; vorticity on 1.8<=x/D<4, |y/D|<=3","source_sha256":c.source_hash}) + write_csv(root/"near_wake_diagnostics.csv",diag); f,aa=plt.subplots(1,2,figsize=(9,4.4),constrained_layout=True); labs=["accepted\ns=3.55","reverse\ns=5.2"]; aa[0].bar(labs,[r["recirculation_area_D2"] for r in diag],color=("#4477AA","#AA6655")); aa[0].set(title="Recirculation area",ylabel=r"area/$D^2$"); aa[1].bar(labs,[r["immediate_wake_abs_vorticity_integral"] for r in diag],color=("#4477AA","#AA6655")); aa[1].set(title="Immediate-wake vorticity",ylabel=r"$\int|\omega^*|dA^*$"); f.suptitle("Selected endpoint diagnostics (amplitudes differ; partial ledger)"); summary_save(f,root,"near_wake_diagnostics") + sources={"strip_analysis":{"path":str(strip),"sha256":sha(strip)},"ledger":{"path":str(ledger),"sha256":sha(ledger)},"steady_root":{"path":str(steady),"files":{}}} + for n in loaded: + for fn in ("manifest.json","endpoint.npz"): p=steady/n/fn; sources["steady_root"]["files"][f"{n}/{fn}"]={"path":str(p),"sha256":sha(p),"bytes":p.stat().st_size} + command=f'PYTHONPATH="$PWD/src" conda run -n pinball_math python src/steady_pinball_theory/plot_results.py --steady "{steady}" --strip "{strip}" --ledger "{ledger}" --output "{out}"' + readme=f"""# Unified steady-pinball figures + +Regenerable reader-facing visualization, not new evidence. CPU-only; no CFD/CUDA ran. + +## Redraw +```bash +{command} +``` +Defaults permit omitting all flags. Existing output fails unless `--overwrite` is supplied; replacement uses atomic staging and affects only this generated root. + +## Contents and definitions +- `fields/error`: six raw `|q_case-q_in|/U_inf` canvases (dimensionless, not percent). +- `fields/vorticity`: six raw `omega D/U_inf` canvases. Potential exterior values are the analytical irrotational value zero; CFD retains conservative masked numerical curl. +- `fields/streamlines`: total-velocity streamlines, arrows enabled. +- `colorbars` and `annotations`: family-named standalone legends and separate metric assets. +- `plates/{{error,vorticity,streamlines}}`: publication-friendly PNG/PDF companions with titles and framed metrics. Plates are presentation assets, not pixel-exact arrays. +- `field_metrics.csv`, `profiles_long.csv`, and `summary`: direct redraw data; every summary PNG/PDF has a same-basename CSV. + +Crop indices x={ix[0]}..{ix[-1]}, y={iy[0]}..{iy[-1]}; exact x/D=[{x[0]:.12g},{x[-1]:.12g}], y/D=[{y[0]:.12g},{y[-1]:.12g}], canvas={len(x)}x{len(y)} pixels. Arrays are yx, x is horizontal, y is up, origin is the front center. Potential uses these exact CFD lattice coordinates and analytic cylinders; CFD uses solver fluid masks. Scalar images use nearest mapping, one pixel/cell, no axes/titles/padding. Bodies are white with thin black outlines. Streamline paths are vector-rendered, but their PNG canvas has the same exact dimensions and lattice-edge extent. + +Potential and CFD errors use separate pooled-family 97.5-percentile limits: potential `{elims["potential"]:.16g}`, CFD `{elims["CFD"]:.16g}`. Both use the same discrete Greys style, but grayscale darkness is only comparable within its named family colorbar. Shared CFD-only symmetric vorticity limit is `+/-{vlim:.16g}`. Potential displayed/exported vorticity is analytical zero. Values beyond limits map to end bins and raw maxima remain in CSV. Vorticity uses discrete RdBu_r with a forced-white center and no zero contour. + +Crop L2 is `sqrt(integral_common |q_case-q_in|^2 dA / integral_common dA)/U_inf` with tensor trapezoid weights. Profiles are direct differences, not deltas misused with a uniform-reference helper. Accepted x/D=10 direct vector E_inf is `{PRIMARY}`. + +Potential `g_opt={g['theoretical_rear_opposite_g_opt_layer40']}` and fitted `g={g['actual_wls_g']}` have opposite signs: do not infer a potential mechanism. Body order is front, rear_y_plus, rear_y_minus; accepted is `[0,+Omega,-Omega]`. Stationary is an unsteady reference. Accepted s=3.55 and reverse s=5.2 have mismatched amplitudes. The NS ledger is partial. No mechanism, causality, stability, or closure is established; no CCD numbers are used. + +## Sources +```json +{json.dumps(sources,indent=2,sort_keys=True)} +``` +"""; (stage/"README.md").write_text(readme) + man={"schema":"steady-pinball-unified-figures/v2","scientific_scope":"CPU-only regenerable visualization; no CFD/CUDA; not evidence","crop":{"requested_x_over_D":[-2,10],"requested_y_over_D":[-3,3],"x_indices_inclusive":[int(ix[0]),int(ix[-1])],"y_indices_inclusive":[int(iy[0]),int(iy[-1])],"x_lattice":[float(q["x"][ix[0]]),float(q["x"][ix[-1]])],"y_lattice":[float(q["y"][iy[0]]),float(q["y"][iy[-1]])],"x_over_D":[float(x[0]),float(x[-1])],"y_over_D":[float(y[0]),float(y[-1])],"pixel_dimensions_xy":[len(x),len(y)],"array_order":"yx"},"render":{"one_output_pixel_per_lattice_cell":True,"scalar_interpolation":"nearest","raw_axes_titles":False,"plates":"presentation companions; not pixel-exact raw arrays","streamline_arrowheads":True},"masks":{"potential":"analytic cylinder exterior; displayed/exported vorticity analytically zero","CFD":"case/q_in common solver FLUID bits; conservative centered curl stencil"},"colormaps":{"error":{"name":"Greys","bins":12,"family_scales":{family:{"edges":color[0].tolist(),"limits":[0,elims[family]],"limit_statistic":"family-pooled 97.5 percentile","colorbars":[f"colorbars/error_{family.lower()}_horizontal.png",f"colorbars/error_{family.lower()}_vertical.png"]} for family,color in ecs.items()},"comparison_warning":"grayscale values compare only within the named family scale","clipping":"end bins; raw values retained"},"vorticity":{"name":"RdBu_r","bins":21,"edges":vc[0].tolist(),"limits":[-vlim,vlim],"limit_statistic":"CFD-only pooled absolute 97.5 percentile","potential_value":"analytical irrotational zero on valid exterior","center_bin":"white","zero_contour":False,"clipping":"end bins; raw values retained"}},"definitions":{"error":"hypot(ux-qin_ux,uy-qin_uy)/U_inf","vorticity":"potential analytical zero; CFD conservative omega D/U_inf","crop_L2":"sqrt(integral common-fluid |q_case-q_in|^2 dA / integral common-fluid dA)/U_inf; tensor trapezoid weights"},"geometry":{"origin":"front center","coordinates":"x-right_y-up","body_order":["front","rear_y_plus","rear_y_minus"],"centers_over_D":centers.tolist(),"radius_over_D":radius},"cases":[{"case":c.id,"label":c.label,"family":c.family,"parameter_name":c.pname,"parameter":c.parameter,"error_scale_family":c.family,"source_sha256":c.source_hash} for c in cases],"primary_identity":{"case":"cfd-accepted-s3p55","x_over_D":10,"E_inf_vector":PRIMARY},"sources":sources,"exact_command":command,"overwrite_contract":"default fail; explicit --overwrite atomically replaces only output root"} + files={} + for p in sorted(stage.rglob("*")): + if p.is_file(): files[str(p.relative_to(stage))]={"sha256":sha(p),"bytes":p.stat().st_size} + man["files"]=files; man["payload_sha256"]=hashlib.sha256(json.dumps(man,sort_keys=True,separators=(",",":")).encode()).hexdigest(); (stage/"manifest.json").write_text(json.dumps(man,indent=2,sort_keys=True)+"\n"); publish(stage,out,a.overwrite) + except Exception: shutil.rmtree(stage,ignore_errors=True); raise + return out + +def main(argv=None): + p=argparse.ArgumentParser(description=__doc__); p.add_argument("--steady",type=Path,default=DEFAULT_STEADY); p.add_argument("--strip",type=Path,default=DEFAULT_STRIP); p.add_argument("--ledger",type=Path,default=DEFAULT_LEDGER); p.add_argument("--output",type=Path,default=DEFAULT_OUTPUT); p.add_argument("--overwrite",action="store_true"); a=p.parse_args(argv); print(f"wrote unified figures to {build(a)}"); return 0 +if __name__=="__main__": raise SystemExit(main()) diff --git a/src/steady_pinball_theory/runner.py b/src/steady_pinball_theory/runner.py index ae7e82f..9e9d574 100644 --- a/src/steady_pinball_theory/runner.py +++ b/src/steady_pinball_theory/runner.py @@ -1,67 +1,2676 @@ -"""Serial Celeris diagnostic/scan runner; outputs live outside this package.""" +"""Strict serial Celeris endpoint campaign; artifacts remain external.""" from __future__ import annotations -import argparse, json, os, tempfile +import argparse, csv, hashlib, importlib.metadata, json, os, platform, socket, subprocess, sys, tempfile, time +from contextlib import contextmanager from pathlib import Path import numpy as np -from .contract import CanonicalContract -from .metrics import profile_errors +from .contract import CanonicalContract, NondimensionalContract, REVERSE_PRODUCTION_S +from .metrics import profile_errors, two_window_change, conservative_masked_vorticity + +SCHEMA="steady-pinball-endpoint/v5" +LEGACY_FORCE_SCHEMAS=("steady-pinball-endpoint/v3","steady-pinball-endpoint/v4") +FLUID_BIT=np.uint16(0x0001) +FLUID_BODY_ID=np.int16(-1) +STATIC_NONFLUID_BODY_ID=np.int16(-2) +PRODUCTION_T_END=250.0 +PRODUCTION_SAMPLE_DT=2.0 +PRODUCTION_SETTLING_WINDOWS=10 +SETTLING_THRESHOLD=1e-4 +ACCEPTED_S=(3.45,3.55,3.65) +STEADY_ROLES=("qin","stationary","accepted","reverse") +PROFILE_HISTORY_COLUMNS=("lattice_step","tU_over_D","E_inf_vector","E_L2_vector") +FORCE_HISTORY_COLUMNS=("lattice_step","tU_over_D","Fx_front","Fy_front","Fx_rear_y_plus","Fy_rear_y_plus","Fx_rear_y_minus","Fy_rear_y_minus") +TORQUE_HISTORY_COLUMNS=("lattice_step","tU_over_D","Tz_front","Tz_rear_y_plus","Tz_rear_y_minus") +MIN_LAUNCH_COOLDOWN_SECONDS=30.0 +RUNTIME_ROOT=Path(__file__).resolve().parents[2]/".runtime" +LEASE_PATH=RUNTIME_ROOT/"steady-pinball-cfd.lock" +COOLDOWN_PATH=RUNTIME_ROOT/"steady-pinball-cfd-cooldown.json" +ARRAY_FILE="endpoint.npz" +MANIFEST_FILE="manifest.json" + +def _canonical_json(value): return json.dumps(value,sort_keys=True,separators=(",",":"),allow_nan=False).encode() +def _sha256(path): + h=hashlib.sha256() + with Path(path).open("rb") as f: + for block in iter(lambda:f.read(1024*1024),b""): h.update(block) + return h.hexdigest() +def _git_value(root, *args): + try: return subprocess.check_output(["git",*args],cwd=root,text=True,stderr=subprocess.DEVNULL).strip() + except Exception: return None -def _cfg(c: CanonicalContract, D: float): - scale=D/c.diameter; nx=int(round(c.nx*scale)); ny=int(round(c.ny*scale)) - return {"grid":{"lattice_model":"D2Q9","nx":nx,"ny":ny,"nz":1}, - "physics":{"data_type":"FP32","viscosity":c.u_inf*D/c.re_d,"velocity":c.u_inf,"rho":1.0}, - "method":{"collision":"MRT","streaming":"double_buffer","store_precision":"FP32","ddf_shifting":False, - "les":{"enabled":False,"cs":0.16,"closed_form":True},"trt":{"magic_param":0.1875}, - "inlet":{"profile":"uniform","scheme":"regularized","trt_neq_damp":0.5,"regularized_neq_damp":0.5}, - "outlet":{"mode":"neq_extrap","backflow_clamp":True,"blend_alpha":0.7,"srt_neq_damp":0.5}, - "y_wall_bc":"free_slip","omega_guard":{"min":0.01,"max":1.99}}, +def _source_identity(*, celeris_module=None, intended_celeris_root=None): + root=Path(__file__).resolve().parents[2] + identity={"git_commit":_git_value(root,"rev-parse","HEAD"), + "git_status_porcelain":_git_value(root,"status","--porcelain","--","src/steady_pinball_theory"), + "runner_sha256":_sha256(__file__),"python":sys.version,"executable":sys.executable, + "platform":platform.platform(),"numpy_version":np.__version__} + if celeris_module is None: + identity.update(celeris_import_file=None,celeris_import_root=None, + celeris_intended_root=None,celeris_version=_package_version("CelerisLab"), + celeris_git_commit=None,celeris_git_dirty=None,celeris_source_hashes={}) + return identity + import_file=Path(celeris_module.__file__).resolve() + intended=Path(intended_celeris_root).expanduser().resolve(strict=True) + try: import_file.relative_to(intended) + except ValueError as exc: raise RuntimeError(f"Celeris import {import_file} is outside intended root {intended}") from exc + source_root=intended + source_paths=[import_file,source_root/"src/CelerisLab/simulation.py"] + source_paths.extend(sorted((source_root/"src/CelerisLab/lbm/kernels/config").glob("config_*.h"))) + status=_git_value(source_root,"status","--porcelain") + identity.update(celeris_import_file=str(import_file),celeris_import_root=str(source_root), + celeris_intended_root=str(intended),celeris_version=getattr(celeris_module,"__version__",None), + celeris_distribution_version=_package_version("CelerisLab"), + celeris_git_commit=_git_value(source_root,"rev-parse","HEAD"), + celeris_git_dirty=None if status is None else bool(status),celeris_git_status_porcelain=status, + celeris_source_hashes={str(path.relative_to(source_root)):_sha256(path) for path in source_paths if path.is_file()}) + return identity +def _package_version(name): + try: return importlib.metadata.version(name) + except importlib.metadata.PackageNotFoundError: return None + +def _cfg(c): + return {"grid":{"lattice_model":"D2Q9","nx":c.nx,"ny":c.ny,"nz":1},"physics":{"data_type":"FP32","viscosity":c.viscosity,"velocity":c.u_inf,"rho":1.0}, + "method":{"collision":"MRT","streaming":"double_buffer","store_precision":"FP32","ddf_shifting":False,"les":{"enabled":False,"cs":0.16,"closed_form":True}, + "trt":{"magic_param":0.1875},"inlet":{"profile":"uniform","scheme":"regularized","trt_neq_damp":0.5,"regularized_neq_damp":0.5}, + "outlet":{"mode":"neq_extrap","backflow_clamp":True,"blend_alpha":0.7,"srt_neq_damp":0.5},"y_wall_bc":"free_slip","omega_guard":{"min":0.01,"max":1.99}}, "cuda":{"threads_per_block":256,"compute_capability":"auto"}} +def case_spec(kind,s=None,*,branch=None,D=20.0,t_end=250.0,sample_dt=2.0,settling_windows=10): + roles={ + "qin":("inflow_reference",None,False), + "stationary":("unsteady_stationary_reference",None,True), + "accepted":("accepted_controlled_endpoint","plus-minus",True), + "reverse":("reversed_controlled_endpoint","minus-plus",True), + "diagnostic":("nonproduction_diagnostic",branch or "plus-minus",True), + } + if kind not in roles: raise ValueError("kind must be qin, stationary, accepted, reverse, or diagnostic") + scientific_role,expected_branch,controlled=roles[kind] + if kind in ("qin","stationary") and s is not None: raise ValueError(f"{kind} has no s") + if kind=="accepted" and (s is None or float(s) not in ACCEPTED_S): raise ValueError("accepted production s must be 3.45, 3.55, or 3.65") + if kind=="reverse" and (s is None or float(s) not in REVERSE_PRODUCTION_S): raise ValueError("reverse production s must be 3.55 or 5.2") + if kind=="diagnostic" and (s is None or not np.isfinite(s)): raise ValueError("diagnostic requires finite s") + if branch is not None and branch!=expected_branch: raise ValueError(f"{kind} branch must be {expected_branch}") + if kind in STEADY_ROLES and (float(t_end)!=PRODUCTION_T_END or float(sample_dt)!=PRODUCTION_SAMPLE_DT or int(settling_windows)!=PRODUCTION_SETTLING_WINDOWS): + raise ValueError("production endpoints require t_end=250, sample_dt=2, settling_windows=10") + c=CanonicalContract(diameter=float(D)) + if kind in ("qin","stationary"): + action=np.zeros(0 if kind=="qin" else 3); selected_oracle=None + else: + action=c.action(float(s),expected_branch); selected_oracle=c.oracle(float(s))[expected_branch] + branch_value="none" if expected_branch is None else expected_branch + qualification_role="unsteady_reference" if kind=="stationary" else ("required_steady_endpoint" if kind in ("qin","accepted","reverse") else "diagnostic") + body_ids=[] if not controlled else [0,1,2] + return {"schema":SCHEMA,"kind":kind,"scientific_role":scientific_role,"qualification_role":qualification_role, + "branch":branch_value,"s":None if s is None else float(s),"D":float(D),"t_end_U_over_D":float(t_end),"sample_dt_U_over_D":float(sample_dt), + "settling_window_count":int(settling_windows),"settling_acceptance_threshold":SETTLING_THRESHOLD, + "body_ids":body_ids,"body_labels":[] if not controlled else list(c.body_order),"body_order":"front,rear_y_plus,rear_y_minus" if controlled else None, + "centers_xy":[] if not controlled else np.asarray(c.centers).tolist(),"radius":None if not controlled else c.radius, + "action":{"scientific_role":scientific_role,"branch":branch_value,"omega":action.tolist(),"body_order":None if not controlled else list(c.body_order)}, + "action_omega":action.tolist(),"wall_oracle":{"scientific_role":scientific_role,"branch":branch_value,"selected":selected_oracle}, + "history_schema":{"profile":{"array":"history","columns":list(PROFILE_HISTORY_COLUMNS)}, + "force":{"availability":"unavailable_no_bodies" if kind=="qin" else "available_celeris_cut_link_force_mean_per_accumulated_lbm_step", + "array":None if kind=="qin" else "force_history","columns":None if kind=="qin" else list(FORCE_HISTORY_COLUMNS)}, + "torque":{"availability":"unavailable_no_bodies" if kind=="qin" else "available_celeris_cut_link_actuator_on_fluid_torque_mean_per_accumulated_lbm_step", + "ownership":None if kind=="qin" else "actuator_on_fluid", + "array":None if kind=="qin" else "torque_history","columns":None if kind=="qin" else list(TORQUE_HISTORY_COLUMNS)}}, + "celeris_read_semantics":{"normalize_true":"mean per accumulated LBM step only; do not divide by stride again", + "kernel_reduction":"sum of cut-link lattice loads", + "not_applied":["force/torque/body normalization","density normalization","dynamic-pressure normalization","span normalization"], + "scope":"two-dimensional per-unit-span"}, + "nondimensional_contract":NondimensionalContract(float(D),c.u_inf,1.0).convert()["metadata"], + "array_axes":"yx","coordinates":"x-right_y-up", + "topology":{"controlled":controlled,"solver_flags_dtype":"uint16","fluid_bit":int(FLUID_BIT),"fluid_body_id":int(FLUID_BODY_ID),"static_nonfluid_body_id":int(STATIC_NONFLUID_BODY_ID),"body_id_assignment":"none" if not controlled else "registry order 0,1,2 reconstructed on solver-nonfluid circle interiors"}, + "primary_metric":"direct q_case-vs-q_in full two-component profiles at x/D=2,4,6,10", + "config_lbm":_cfg(c),"source_environment":_source_identity()} -def run_case(out: Path, *, branch: str, s: float, D: float, t_end: float, sample_dt: float, half_height_d: float = 15.0, upstream_d: float = 50.0, downstream_d: float = 50.0): +def _reshape_exact(name, value, ny, nx, *, dtype=None): + """Reshape solver storage to exact (ny,nx), rejecting size drift.""" + array=np.asarray(value) + if array.size != ny*nx: + raise ValueError(f"{name} size does not match ny*nx") + array=array.reshape(ny,nx) + return np.asarray(array,dtype=dtype) if dtype is not None else array + + +def topology_from_solver_flags(raw_flags, *, nx, ny, centers, radius, controlled): + """Decode solver FLUID bit and reconstruct registry IDs on nonfluid cells.""" + flags=np.asarray(raw_flags) + if flags.dtype != np.uint16: + raise ValueError("raw solver flags must have dtype uint16") + flags=_reshape_exact("raw solver flags",flags,ny,nx) + fluid=(flags & FLUID_BIT) != 0 + if not fluid.any(): + raise ValueError("solver FLUID-bit mask is empty") + body_id=np.full((ny,nx),STATIC_NONFLUID_BODY_ID,dtype=np.int16) + body_id[fluid]=FLUID_BODY_ID + if controlled: + c=np.asarray(centers,dtype=float) + if c.shape!=(3,2) or not np.isfinite(c).all() or not np.isfinite(radius) or radius<=0: + raise ValueError("controlled topology requires three finite circles") + yy,xx=np.mgrid[:ny,:nx] + for registry_id,(cx,cy) in enumerate(c): + inside=(xx-cx)**2+(yy-cy)**2 < float(radius)**2 + cells=(~fluid)&inside + if not cells.any(): + raise ValueError(f"controlled body ID {registry_id} has no solver-nonfluid cells") + overlap=cells&(body_id>=0) + if overlap.any(): + raise ValueError("reconstructed body geometries overlap") + body_id[cells]=registry_id + return np.ascontiguousarray(flags),np.ascontiguousarray(fluid),body_id + + +def _validate_arrays(arrays,spec): + required=("x","y","ux","uy","rho","solver_flags","fluid_mask","body_id","history") + if any(k not in arrays for k in required): raise ValueError("endpoint missing required arrays") + force_expected=spec["history_schema"]["force"]["array"] + torque_schema=spec["history_schema"].get("torque") + torque_expected=None if torque_schema is None else torque_schema["array"] + if force_expected is None and "force_history" in arrays: raise ValueError("qin force history must be absent") + if force_expected is not None and "force_history" not in arrays: raise ValueError("body case missing force_history") + if torque_expected is None and "torque_history" in arrays: raise ValueError("torque_history must be absent") + if torque_expected is not None and "torque_history" not in arrays: raise ValueError("body case missing torque_history") + x=np.asarray(arrays["x"]); y=np.asarray(arrays["y"]); shape=(len(y),len(x)) + expected=(int(spec["config_lbm"]["grid"]["ny"]),int(spec["config_lbm"]["grid"]["nx"])) + if x.ndim!=1 or y.ndim!=1 or np.any(np.diff(x)<=0) or np.any(np.diff(y)<=0): raise ValueError("invalid coordinate axes") + if shape!=expected: raise ValueError("coordinate axes do not match configured (ny,nx)") + for k in ("ux","uy","rho","solver_flags","fluid_mask","body_id"): + if np.asarray(arrays[k]).shape!=shape: raise ValueError(f"{k} shape does not match (y,x)") + if not np.isfinite(arrays["ux"]).all() or not np.isfinite(arrays["uy"]).all() or not np.isfinite(arrays["rho"]).all(): raise ValueError("nonfinite endpoint field") + flags=np.asarray(arrays["solver_flags"]); fluid=np.asarray(arrays["fluid_mask"]); body=np.asarray(arrays["body_id"]) + if flags.dtype != np.uint16: raise ValueError("solver_flags must be uint16") + if fluid.dtype != np.bool_: raise ValueError("fluid_mask must be boolean") + if body.dtype != np.int16: raise ValueError("body_id must be int16") + decoded=(flags & FLUID_BIT)!=0 + if not np.array_equal(fluid,decoded): raise ValueError("fluid_mask does not equal solver FLUID-bit mask") + if np.any(body[fluid] != FLUID_BODY_ID): raise ValueError("fluid cells must have body_id -1") + if np.any(body[~fluid] == FLUID_BODY_ID): raise ValueError("nonfluid cells cannot have body_id -1") + history=np.asarray(arrays["history"]) + if history.ndim!=2 or history.shape[1]!=len(PROFILE_HISTORY_COLUMNS) or not np.isfinite(history).all(): raise ValueError("history must match finite profile history schema") + if force_expected is not None: + force=np.asarray(arrays["force_history"]) + if force.ndim!=2 or force.shape[1]!=len(FORCE_HISTORY_COLUMNS) or len(force)!=len(history) or not np.isfinite(force).all(): raise ValueError("force_history must match finite force history schema") + if not np.array_equal(force[:,:2],history[:,:2]): raise ValueError("force and profile history clocks differ") + if torque_expected is not None: + torque=np.asarray(arrays["torque_history"]) + if torque.ndim!=2 or torque.shape[1]!=len(TORQUE_HISTORY_COLUMNS) or len(torque)!=len(history) or not np.isfinite(torque).all(): raise ValueError("torque_history must match finite torque history schema") + if not np.array_equal(torque[:,:2],history[:,:2]): raise ValueError("torque and profile history clocks differ") + if force_expected is not None and not np.array_equal(torque[:,:2],np.asarray(arrays["force_history"])[:,:2]): raise ValueError("force and torque history clocks differ") + ids=set(np.unique(body).tolist()) + allowed={-2,-1} if not spec["topology"]["controlled"] else {-2,-1,0,1,2} + if not ids <= allowed: raise ValueError("unexpected body ID") + if spec["topology"]["controlled"]: + for registry_id in (0,1,2): + if not np.any(body==registry_id): raise ValueError(f"controlled body ID {registry_id} is empty") + + + +def _publish_directory_no_replace(temporary, out): + """Atomically publish a sibling directory without replacing an existing path.""" + temporary=Path(temporary); out=Path(out) + if sys.platform.startswith("linux"): + import ctypes + libc=ctypes.CDLL(None,use_errno=True) + renameat2=getattr(libc,"renameat2",None) + if renameat2 is not None: + result=renameat2(-100,os.fsencode(temporary),-100,os.fsencode(out),1) + if result==0: return + error=ctypes.get_errno() + if error==17: raise FileExistsError(f"refusing to clobber {out}") + raise OSError(error,os.strerror(error),str(out)) + if out.exists(): raise FileExistsError(f"refusing to clobber {out}") + temporary.rename(out) + +def write_artifact(out,spec,arrays,result): + """Validate and publish one artifact atomically from a temporary sibling.""" + out=Path(out) + if out.exists(): raise FileExistsError(f"refusing to clobber {out}") + if not out.parent.is_dir(): raise FileNotFoundError(f"artifact parent does not exist: {out.parent}") + if spec.get("schema")!=SCHEMA: raise ValueError("writer requires current endpoint schema") + _validate_arrays(arrays,spec) + temporary=Path(tempfile.mkdtemp(prefix=f".{out.name}.tmp-",dir=out.parent)) + try: + np.savez_compressed(temporary/ARRAY_FILE,**arrays) + manifest={"schema":SCHEMA,"immutable":True,"spec":spec,"result":result,"files":{ARRAY_FILE:{"sha256":_sha256(temporary/ARRAY_FILE),"bytes":(temporary/ARRAY_FILE).stat().st_size}}} + manifest["manifest_payload_sha256"]=hashlib.sha256(_canonical_json(manifest)).hexdigest() + (temporary/MANIFEST_FILE).write_text(json.dumps(manifest,indent=2,sort_keys=True,allow_nan=False)+"\n") + _publish_directory_no_replace(temporary,out) + return manifest + finally: + if temporary.exists(): + import shutil + shutil.rmtree(temporary) + + +def _load_manifest_arrays(out, *, require_payload=True): + out=Path(out); manifest=json.loads((out/MANIFEST_FILE).read_text()) + if not manifest.get("immutable"): raise ValueError("mutable artifact") + payload=manifest.pop("manifest_payload_sha256",None) + if payload is None: + if require_payload: raise ValueError("manifest payload hash missing") + elif payload!=hashlib.sha256(_canonical_json(manifest)).hexdigest(): raise ValueError("manifest payload hash mismatch") + entry=manifest["files"][ARRAY_FILE] + if _sha256(out/ARRAY_FILE)!=entry["sha256"] or (out/ARRAY_FILE).stat().st_size!=entry["bytes"]: raise ValueError("endpoint file hash mismatch") + with np.load(out/ARRAY_FILE,allow_pickle=False) as loaded: arrays={k:loaded[k].copy() for k in loaded.files} + if payload is not None: manifest["manifest_payload_sha256"]=payload + return manifest,arrays + + +def load_validate_artifact(out): + """Load only the current torque-capable endpoint schema.""" + manifest,arrays=_load_manifest_arrays(out) + if manifest.get("schema")!=SCHEMA or manifest.get("spec",{}).get("schema")!=SCHEMA: + raise ValueError("current loader requires torque-capable endpoint schema v5") + _validate_arrays(arrays,manifest["spec"]) + return manifest,arrays + + +def load_legacy_force_artifact(out): + """Explicitly load and validate a force-only v3/v4 endpoint.""" + raw=json.loads((Path(out)/MANIFEST_FILE).read_text()); schema=raw.get("schema") + if schema not in LEGACY_FORCE_SCHEMAS: raise ValueError("not an explicitly supported legacy force-only schema") + manifest,arrays=_load_manifest_arrays(out,require_payload=(schema=="steady-pinball-endpoint/v4")) + if "torque_history" in arrays: raise ValueError("legacy force-only artifact unexpectedly contains torque_history") + if schema=="steady-pinball-endpoint/v4": + if manifest.get("spec",{}).get("schema")!=schema: raise ValueError("legacy manifest/spec schema mismatch") + _validate_arrays(arrays,manifest["spec"]) + else: + if any(k not in arrays for k in ("ux","uy")): raise ValueError("legacy endpoint missing velocity arrays") + if np.asarray(arrays["ux"]).shape!=np.asarray(arrays["uy"]).shape or not np.isfinite(arrays["ux"]).all() or not np.isfinite(arrays["uy"]).all(): raise ValueError("legacy endpoint velocity arrays must be matching and finite") + return manifest,arrays + + +def load_endpoint_arrays(out): + """Load current endpoint arrays; legacy callers must use load_legacy_force_artifact.""" + return load_validate_artifact(out) + + +def _assert_cfd_environment(*, intended_celeris_root, env=None): + env=os.environ if env is None else env + if env.get("CONDA_DEFAULT_ENV")!="pycuda_3_10": raise RuntimeError("actual CFD requires conda environment pycuda_3_10") + visible=env.get("CUDA_VISIBLE_DEVICES") + if visible is None or not visible.strip() or "," in visible: raise RuntimeError("CUDA_VISIBLE_DEVICES must expose exactly one GPU") + if intended_celeris_root is None: raise RuntimeError("production CFD requires an explicit intended Celeris root") + return visible.strip(),Path(intended_celeris_root).expanduser().resolve(strict=True) + + +@contextmanager +def exclusive_cfd_lease(path=LEASE_PATH, *, role="endpoint"): + path=Path(path); path.parent.mkdir(parents=True,exist_ok=True) + payload={"schema":"steady-pinball-cfd-lease/v1","pid":os.getpid(),"host":socket.gethostname(),"role":role} + try: fd=os.open(path,os.O_WRONLY|os.O_CREAT|os.O_EXCL,0o600) + except FileExistsError: raise RuntimeError(f"CFD lease already exists; refusing concurrent launch: {path}") from None + with os.fdopen(fd,"w") as stream: + json.dump(payload,stream,sort_keys=True); stream.write("\n"); stream.flush(); os.fsync(stream.fileno()) + try: yield payload + finally: + if not path.exists() or json.loads(path.read_text())!=payload: raise RuntimeError("CFD lease ownership changed or disappeared") + path.unlink() + + +def enforce_launch_cooldown(path=COOLDOWN_PATH, *, delay_seconds=MIN_LAUNCH_COOLDOWN_SECONDS, monotonic=time.monotonic, sleep=time.sleep): + if float(delay_seconds)=4)") + if isinstance(window_count,(bool,np.bool_)) or not isinstance(window_count,(int,np.integer)) or window_count<2: + raise ValueError("settling window_count must be an integer >= 2") + required=2*int(window_count); actual=int(len(samples)) + record={"method":"two adjacent equal windows; RMS change of E_inf_vector and E_L2_vector means", + "window_count":int(window_count),"actual_samples":actual,"required_samples":required, + "value":None,"computed":False,"qualified":False,"acceptance_threshold":SETTLING_THRESHOLD} + if actual=-2)&(x<=10))[::2]; iy_fit=np.flatnonzero((y>=-6)&(y<=6))[::2] + xx,yy=np.meshgrid(x[ix_fit],y[iy_fit],indexing="xy"); points=np.column_stack((xx.ravel(),yy.ravel())) + geometry=np.ones(xx.shape,dtype=bool) + for c in centers: geometry &= (xx-c[0])**2+(yy-c[1])**2 >= .75**2 + qfluid=q["fluid_mask"][np.ix_(iy_fit,ix_fit)] + model=(affine["unit"].velocity(points)-affine["zero"].velocity(points)).reshape(*xx.shape,2) + cases={}; fitted=[] + qvel=np.stack((q["ux"],q["uy"]),axis=-1)/U + for name,svalue in zip(names[1:],(3.45,3.55,3.65)): + manifest,a=loaded[name]; velocity=np.stack((a["ux"],a["uy"]),axis=-1)/U; delta=velocity-qvel + common=a["fluid_mask"]&q["fluid_mask"] + contours={} + for body_id in (1,2): + result=ccw_contour_circulation(x,y,delta[...,0],delta[...,1],centers[body_id],radii, + samples=contour_samples,valid_mask=common) + result["Gamma_over_UD"]=result.pop("circulation") + contours[spec["body_labels"][body_id]]=result + fitmask=geometry&qfluid&a["fluid_mask"][np.ix_(iy_fit,ix_fit)] + obs=delta[np.ix_(iy_fit,ix_fit)] + zero_model=(affine["zero"].velocity(points)-np.array([1.,0.])).reshape(*xx.shape,2) + fit_observation=obs-zero_model + fit=outer_wls_total_model(obs,zero_model,model,fitmask); fit.pop("prediction") + use=fitmask + numerator=float(np.sum(fit_observation[use]*model[use])) + fit["cosine_similarity_to_unit_direction"]=numerator/float(np.linalg.norm(fit_observation[use])*np.linalg.norm(model[use])) + fit["per_rear_Gamma_over_UD"]=fit["gamma_eff"]/np.sqrt(2) + profiles={} + for station in (2.,4.,6.,10.): + ix=int(np.argmin(np.abs(x-station))); rows=common[:,ix].copy(); rows[[0,-1]]=False + d=delta[rows,ix]; profiles[str(int(station))]={"x_over_D":float(x[ix]),"points":int(rows.sum()), + "E_inf_vector":float(np.max(np.linalg.norm(d,axis=1))), + "E_L2_vector":float(np.sqrt(np.mean(np.sum(d*d,axis=1))))} + cases[f"{svalue:.2f}"]={"artifact":name,"endpoint_sha256":manifest["files"][ARRAY_FILE]["sha256"], + "settling":manifest["result"]["settling"],"contours":contours,"wls":fit,"profiles":profiles} + fitted.append(fit["gamma_eff"]) + closure=fit_two_point_affine_closure([3.45,3.65],[fitted[0],fitted[2]]) + predicted=predict_affine_closure(closure,3.55); observed=fitted[1] + held=loaded["accepted-s3.55"][1]; delta=np.stack((held["ux"]-q["ux"],held["uy"]-q["uy"]),axis=-1)/U + prediction=predicted*model; fitmask=geometry&qfluid&held["fluid_mask"][np.ix_(iy_fit,ix_fit)] + zero_model=(affine["zero"].velocity(points)-np.array([1.,0.])).reshape(*xx.shape,2) + prediction=zero_model+prediction + obs=delta[np.ix_(iy_fit,ix_fit)]; residual=obs-prediction + weights=fitmask.astype(float); wrms=lambda z: float(np.sqrt(np.sum(weights*np.sum(z*z,axis=2))/np.sum(weights))) + ix10=int(np.argmin(np.abs(x-10))); rows=(q["fluid_mask"][:,ix10]&held["fluid_mask"][:,ix10]); rows[[0,-1]]=False + profile_points=np.column_stack((np.full(rows.sum(),x[ix10]),y[rows])); pred_profile=affine_velocity(affine,predicted,profile_points)-np.array([1.,0.]) + obs_profile=delta[rows,ix10]; profile_residual=obs_profile-pred_profile + # Reflection residual parity on paired common fit rows. + parity=[] + for iy0 in range(len(iy_fit)): + iy1=int(np.argmin(np.abs(y[iy_fit]+y[iy_fit[iy0]]))) + valid=fitmask[iy0]&fitmask[iy1] + if valid.any(): parity.append(np.column_stack((residual[iy0,valid,0]-residual[iy1,valid,0],residual[iy0,valid,1]+residual[iy1,valid,1]))) + parity=np.concatenate(parity) if parity else np.empty((0,2)) + upper=np.array([cases[k]["contours"]["rear_y_plus"]["Gamma_over_UD"] for k in cases]); lower=np.array([cases[k]["contours"]["rear_y_minus"]["Gamma_over_UD"] for k in cases]) + wls_upper=np.asarray(fitted)/np.sqrt(2) + sign_pass=bool(np.all(upper*lower<0)&np.all(np.sign(upper)==np.sign(wls_upper))&np.all(np.sign(lower)==-np.sign(wls_upper))) + analysis={"schema":"steady-pinball-finite-re-analysis/v2","fit_model":"observed_delta - (MFS_zero-uniform) = g*(MFS_unit-MFS_zero)","campaign":str(campaign),"common_identity":identities[0], + "preregistration":{"contour_radii_D":radii.tolist(),"contour_samples":contour_samples,"fit_bounds_D":[-2,10,-6,6],"fit_stride_lattice":2, + "exclusion_D":.75,"wall_margin_D":1,"model":{"centers_D":centers.tolist(),"radius_D":.5,"H_D":15,"u_inf":1,"basis":"rear_opposite unit L2","n_boundary":32,"source_ratio":.65,"image_layers":40}}, + "cases":cases,"closure":{"train_s":[3.45,3.65],"held_out_s":3.55,**closure,"predicted_g":predicted,"observed_g":observed, + "error_g":predicted-observed,"predicted_per_rear_Gamma_over_UD":predicted/np.sqrt(2),"observed_per_rear_Gamma_over_UD":observed/np.sqrt(2)}, + "held_out":{"common_points":int(fitmask.sum()),"observed_weighted_RMS":wrms(obs),"prediction_weighted_RMS":wrms(prediction),"residual_weighted_RMS":wrms(residual), + "relative_residual":wrms(residual)/wrms(obs),"profile_points":int(rows.sum()),"profile_residual_E_inf_vector":float(np.max(np.linalg.norm(profile_residual,axis=1))), + "profile_residual_E_L2_vector":float(np.sqrt(np.mean(np.sum(profile_residual**2,axis=1)))), + "residual_parity_Linf":float(np.max(np.abs(parity))),"residual_parity_RMS":float(np.sqrt(np.mean(parity**2)))}, + "classification":{"sign_gate":"PASS" if sign_pass else "FAIL","closure":"BOUNDED","material_usefulness":"NOT_PREREGISTERED", + "reversed_sign_control_needed":not sign_pass,"notes":"Contour radius variation is viscous enclosed-vorticity evidence, not a required plateau or topological potential period."}} + if out.exists(): raise FileExistsError(f"refusing to clobber {out}") + temporary=Path(tempfile.mkdtemp(prefix=f".{out.name}.tmp-",dir=out.parent)) + try: + np.savez_compressed(temporary/"analysis_arrays.npz",x_over_D=x,y_over_D=y,fit_x_over_D=x[ix_fit],fit_y_over_D=y[iy_fit],fit_mask=fitmask, + held_out_observed=obs,held_out_prediction=prediction,held_out_residual=residual,profile_y_over_D=y[rows],profile_observed=obs_profile,profile_prediction=pred_profile) + analysis["files"]={"analysis_arrays.npz":{"sha256":_sha256(temporary/"analysis_arrays.npz"),"bytes":(temporary/"analysis_arrays.npz").stat().st_size}} + analysis["payload_sha256"]=hashlib.sha256(_canonical_json(analysis)).hexdigest() + (temporary/"analysis.json").write_text(json.dumps(analysis,indent=2,sort_keys=True,allow_nan=False)+"\n") + _publish_directory_no_replace(temporary,out) + finally: + if temporary.exists(): + import shutil; shutil.rmtree(temporary) + return analysis + + + +def _assert_steady_mechanism_roles(loaded): + expected={"qin":("qin","none",None),"stationary":("stationary","none",None), + "accepted-s3.55":("accepted","plus-minus",3.55),"reverse-s5.2":("reverse","minus-plus",5.2)} + identities=[] + for name,(kind,branch,svalue) in expected.items(): + manifest,_=loaded[name]; spec=manifest["spec"] + if spec["kind"]!=kind or spec["branch"]!=branch or spec["s"]!=svalue: + raise ValueError(f"{name} role/branch/s contract mismatch") + if spec["action"]["branch"]!=branch or spec["wall_oracle"]["branch"]!=branch: + raise ValueError(f"{name} branch provenance mismatch") + if kind in ("accepted","reverse"): + selected=spec["wall_oracle"]["selected"] + if selected is None or not np.array_equal(np.asarray(selected["action"]),np.asarray(spec["action"]["omega"])): + raise ValueError(f"{name} action/oracle mismatch") + if kind in ("qin","accepted","reverse") and not manifest["result"].get("qualification_passed",False): + raise ValueError(f"{name} is not a qualified steady endpoint") + if kind=="stationary" and manifest["result"].get("qualification_role")!="unsteady_reference": + raise ValueError("stationary must be an unsteady reference") + identities.append(_campaign_common_identity(manifest)) + settings=[{k:v for k,v in identity.items() if k!="source_environment"} for identity in identities] + if any(setting!=settings[0] for setting in settings[1:]): + raise ValueError("steady-contract artifacts do not share exact CFD settings") + return settings[0],{name:loaded[name][0]["spec"]["source_environment"] for name in expected} + + +def analyze_steady_contract(campaign, out): + """Analyze frozen S2 endpoint residuals without launching CFD.""" + from .metrics import (absolute_vorticity_moments, bilinear_sample_velocity, + ccw_contour_circulation, conservative_masked_vorticity, + control_volume_streamwise_momentum_ledger, gap_flux, + near_wall_tangential_speed, outer_wls_total_model, quadrature_l2, + recirculation_observables, separation_reattachment_estimator, + tensor_trapezoid_weights, torque_power_availability, + wake_deficit_observables, wall_vorticity_production_proxy) + from .theory import strip_basis_affine + campaign=Path(campaign); out=Path(out) + names=("qin","stationary","accepted-s3.55","reverse-s5.2") + loaded={name:load_validate_artifact(campaign/name) for name in names} + identity,source_provenance=_assert_steady_mechanism_roles(loaded) + negative_name="reverse-s3.55"; negative=None + if (campaign/negative_name).exists(): + negative=load_validate_artifact(campaign/negative_name); manifest=negative[0]; spec=manifest["spec"] + if spec["kind"]!="reverse" or spec["branch"]!="minus-plus" or spec["s"]!=3.55: raise ValueError("reverse-s3.55 negative-control role/branch/s contract mismatch") + if {k:v for k,v in _campaign_common_identity(manifest).items() if k!="source_environment"}!=identity: raise ValueError("reverse-s3.55 does not share exact CFD settings") + source_provenance[negative_name]=spec["source_environment"] + qmanifest,q=loaded["qin"]; spec=loaded["accepted-s3.55"][0]["spec"] + D=float(spec["D"]); U=float(spec["config_lbm"]["physics"]["velocity"]); center0=np.asarray(spec["centers_xy"][0],float) + centers_lat=np.asarray(spec["centers_xy"],float); radius_lat=float(spec["radius"]) + centers=(centers_lat-center0)/D; x=(q["x"]-center0[0])/D; y=(q["y"]-center0[1])/D + weights=tensor_trapezoid_weights(x,y); qvel=np.stack((q["ux"],q["uy"]),axis=-1)/U + affine=strip_basis_affine(centers,.5,"rear_opposite",H=15,u_inf=1,n_boundary=32,source_ratio=.65,image_layers=40) + radii=np.array([.60,.65,.70]); ix_fit=np.flatnonzero((x>=-2)&(x<=10))[::2]; iy_fit=np.flatnonzero((y>=-6)&(y<=6))[::2] + fxx,fyy=np.meshgrid(x[ix_fit],y[iy_fit],indexing="xy"); fit_points=np.column_stack((fxx.ravel(),fyy.ravel())) + fit_geometry=np.ones(fxx.shape,dtype=bool) + for center in centers: fit_geometry &= (fxx-center[0])**2+(fyy-center[1])**2>=.75**2 + fit_geometry &= (fyy>=y[0]+1)&(fyy<=y[-1]-1) + zero_fit=np.zeros((*fxx.shape,2)); direction_fit=np.zeros_like(zero_fit) + safe_fit=fit_geometry.ravel(); safe_points=fit_points[safe_fit] + safe_zero=affine["zero"].velocity(safe_points) + zero_fit.reshape(-1,2)[safe_fit]=safe_zero-np.array([1.,0.]) + direction_fit.reshape(-1,2)[safe_fit]=affine["unit"].velocity(safe_points)-safe_zero + region_defs={"near_gap":(-.5,1.8,1.5,False),"immediate_wake":(1.8,4.,3.,False),"recovery":(4.,10.,3.,True)} + xx,yy=np.meshgrid(x,y,indexing="xy") + model_domain=(xx>=-.5)&(xx<=10)&(np.abs(yy)<=3) + for center in centers: model_domain &= (xx-center[0])**2+(yy-center[1])**2>=.75**2 + model_points=np.column_stack((xx[model_domain],yy[model_domain])) + zero_domain=np.empty((len(model_points),2)); direction_domain=np.empty_like(zero_domain) + for start in range(0,len(model_points),20000): + sl=slice(start,start+20000); p0=model_points[sl] + z=affine["zero"].velocity(p0); zero_domain[sl]=z-[1.,0.]; direction_domain[sl]=affine["unit"].velocity(p0)-z + cases={}; station_metrics={} + rear_labels=[spec["body_labels"][1],spec["body_labels"][2]] + for name in ("accepted-s3.55","reverse-s5.2"): + manifest,a=loaded[name]; velocity=np.stack((a["ux"],a["uy"]),axis=-1)/U; delta=velocity-qvel; common=a["fluid_mask"]&q["fluid_mask"] + fitmask=fit_geometry&common[np.ix_(iy_fit,ix_fit)]; obs=delta[np.ix_(iy_fit,ix_fit)] + fit=outer_wls_total_model(obs,zero_fit,direction_fit,fitmask); fit.pop("prediction") + centered=obs-zero_fit; numerator=float(np.sum(centered[fitmask]*direction_fit[fitmask])); fit["cosine_similarity_to_unit_direction"]=numerator/float(np.linalg.norm(centered[fitmask])*np.linalg.norm(direction_fit[fitmask])); fit["per_rear_Gamma_over_UD"]=fit["gamma_eff"]/np.sqrt(2) + residual=np.full_like(velocity,np.nan); residual[model_domain]=delta[model_domain]-(zero_domain+fit["gamma_eff"]*direction_domain) + regions={} + for rname,(xmin,xmax,ymax,closed) in region_defs.items(): + horizontal=(xx>=xmin)&((xx<=xmax) if closed else (xx=xmin)&(xx=1.8)&(xx<=10)&(np.abs(yy)<=1.5) + recirc=recirculation_observables(x,velocity[...,0],recmask,weights) + wake={} + for station in (2.,4.,6.,10.): + ix=int(np.argmin(np.abs(x-station))); rows=common[:,ix].copy(); rows[[0,-1]]=False + wake[str(int(station))]={"x_over_D":float(x[ix]),**wake_deficit_observables(y,velocity[:,ix,0],rows)} + tail=np.asarray(a["force_history"],float)[-10:,2:]; mean=np.mean(tail,axis=0); std=np.std(tail,axis=0,ddof=0) + total=np.column_stack((tail[:,0]+tail[:,2]+tail[:,4],tail[:,1]+tail[:,3]+tail[:,5])) + forces={"normalization":"Celeris average force per accumulated stride; not pressure drag","tail_samples":10,"body_columns":list(FORCE_HISTORY_COLUMNS[2:]),"body_mean":mean.tolist(),"body_tail_std":std.tolist(),"total_mean":np.mean(total,axis=0).tolist(),"total_tail_std":np.std(total,axis=0,ddof=0).tolist()} + near_wall=near_wall_tangential_speed(a["x"],a["y"],a["ux"],a["uy"],a["fluid_mask"],a["body_id"],centers_lat,radius_lat,body_ids=(1,2),body_labels=rear_labels) + wall_prod=wall_vorticity_production_proxy(a["x"],a["y"],a["ux"],a["uy"],a["fluid_mask"],a["body_id"],centers_lat,radius_lat,body_ids=(1,2),body_labels=rear_labels) + separation=separation_reattachment_estimator(a["x"],a["y"],a["ux"],a["fluid_mask"],a["body_id"],centers_lat,radius_lat,body_ids=(1,2),body_labels=rear_labels) + x_gap=float(centers[1][0]); ledger=control_volume_streamwise_momentum_ledger( + x,y,velocity[...,0],velocity[...,1],a["rho"],common,x_left=x_gap,x_right=10.0, + force_history=a["force_history"],viscosity=float(spec["config_lbm"]["physics"]["viscosity"])) + torque_history=a.get("torque_history"); torque=torque_power_availability(a.get("force_history"),torque_history=None if torque_history is None else np.asarray(torque_history)[:,2:]) + cases[name]={"s":spec["s"] if name=="accepted-s3.55" else loaded[name][0]["spec"]["s"],"endpoint_sha256":manifest["files"][ARRAY_FILE]["sha256"],"settling":manifest["result"]["settling"],"wls":fit,"contours":contours,"residual_regions":regions,"observer_profile":observer,"gap_flux":gaps,"vorticity_moments":vort,"recirculation":recirc,"wake_deficit":wake,"forces":forces, + "near_wall_tangential_speed":near_wall,"wall_vorticity_production_proxy":wall_prod, + "separation_reattachment":separation,"control_volume_momentum_ledger":ledger,"torque_power":torque} + station_metrics[name]=wake + candidates=[] + for metric in ("momentum_deficit_proxy","positive_deficit_measure","signed_deficit_integral"): + av=[station_metrics["accepted-s3.55"][str(s)][metric] for s in (2,4,6,10)]; rv=[station_metrics["reverse-s5.2"][str(s)][metric] for s in (2,4,6,10)] + signs=np.sign(np.asarray(rv)-np.asarray(av)); nonzero=signs!=0 + if nonzero.sum()>=2 and (np.all(signs[nonzero]>0) or np.all(signs[nonzero]<0)): + candidates.append({"observable":metric,"stations_x_over_D":[2,4,6,10],"accepted":av,"reverse":rv,"reverse_minus_accepted_sign":int(signs[nonzero][0])}) + acc,rev=cases["accepted-s3.55"],cases["reverse-s5.2"] + local_gap={"accepted_flux":acc["gap_flux"]["rear_rear"]["flux"],"reverse_flux":rev["gap_flux"]["rear_rear"]["flux"], + "discriminates":abs(acc["gap_flux"]["rear_rear"]["flux"]-rev["gap_flux"]["rear_rear"]["flux"])>1e-6} + near_wake={"accepted_abs_omega":acc["vorticity_moments"]["immediate_wake"]["absolute_vorticity_integral"], + "reverse_abs_omega":rev["vorticity_moments"]["immediate_wake"]["absolute_vorticity_integral"], + "accepted_width":acc["vorticity_moments"]["immediate_wake"]["y_width"], + "reverse_width":rev["vorticity_moments"]["immediate_wake"]["y_width"], + "accepted_recirc_extent":acc["recirculation"]["streamwise_extent"], + "reverse_recirc_extent":rev["recirculation"]["streamwise_extent"], + "accepted_Fx":acc["forces"]["total_mean"][0],"reverse_Fx":rev["forces"]["total_mean"][0], + "discriminates":(abs(acc["vorticity_moments"]["immediate_wake"]["absolute_vorticity_integral"] + -rev["vorticity_moments"]["immediate_wake"]["absolute_vorticity_integral"])>1e-6 + and abs(acc["recirculation"]["streamwise_extent"]-rev["recirculation"]["streamwise_extent"])>1e-6)} + downstream={"qualifying_observables":candidates,"discriminates":bool(candidates)} + near_wall_status={role:{"availability":{body:info.get("availability") for body,info in cases[role]["near_wall_tangential_speed"]["bodies"].items()}, + "wall_vorticity":{body:info.get("availability") for body,info in cases[role]["wall_vorticity_production_proxy"]["bodies"].items()}, + "separation":{body:info.get("availability") for body,info in cases[role]["separation_reattachment"]["bodies"].items()}, + "cv_balance":cases[role]["control_volume_momentum_ledger"]["balance_status"], + "torque":cases[role]["torque_power"]["availability"]} + for role in ("accepted-s3.55","reverse-s5.2")} + s3="PASS" if (local_gap["discriminates"] and near_wake["discriminates"] and downstream["discriminates"]) else "BOUNDED" + verdict="PASS" if candidates else "BOUNDED" + neg={"present":negative is not None,"use":"negative/nonsteady context only"} + if negative is not None: neg.update(qualification_passed=bool(negative[0]["result"].get("qualification_passed",False)),settling=negative[0]["result"]["settling"],endpoint_sha256=negative[0]["files"][ARRAY_FILE]["sha256"]) + source_files=[Path(__file__),Path(__file__).with_name("metrics.py"),Path(__file__).with_name("theory.py"),Path(__file__).with_name("DERIVATION.md")] + analysis={"schema":"steady-pinball-steady-residual/v2","campaign":str(campaign),"common_cfd_settings":identity,"source_provenance_by_role":source_provenance,"preregistration":{"outer_fit":"corrected total strip rear-opposite affine model; uniform WLS","fit_bounds_D":[-2,10,-6,6],"fit_stride_lattice":2,"fit_exclusion_D":.75,"contour_radii_D":radii.tolist(),"regions":{"near_gap":"-0.5<=x/D<1.8, |y/D|<=1.5","immediate_wake":"1.8<=x/D<4, |y/D|<=3","recovery":"4<=x/D<=10, |y/D|<=3","observer":"nearest x/D=10 column, outermost two rows excluded"},"recirculation_window":"1.8<=x/D<=10, |y/D|<=1.5, ux/U_inf<0","gap_endpoint_exclusion_D":.05,"mechanism_chain":"wall→gap/shear→recirculation/force→downstream","control_volume":"rear-gap plane to x/D=10; incomplete ledger never closed"},"cases":cases,"reverse_s3.55_negative_control":neg,"spatial_sequence":{"interpretation":"ordered spatial coexistence/association only; endpoints do not establish temporal causality","qualifying_observables":candidates,"preregistered_chain":"wall→gap/shear→recirculation/force→downstream","local_gap":local_gap,"near_wake_force":near_wake,"downstream":downstream,"near_wall_availability":near_wall_status},"classification":{"S2":verdict,"S3_mechanism":s3,"common_outer_potential_explanation":"descriptive fits only; favorable circulation cancellation remains rejected by known sign contradiction","mechanism_association":s3,"causality":"NOT_ESTABLISHED","comparison":"different s; not equal-amplitude intervention","incomplete_ledgers":"control-volume/torque terms remain unavailable or incomplete and are not closed balances"},"source_hashes":{str(path.relative_to(Path(__file__).resolve().parents[2])):_sha256(path) for path in source_files},"reproduce_command":f'PYTHONPATH="$PWD/src" conda run -n pinball_math python -m steady_pinball_theory.runner analyze-steady {campaign} --out {out}'} + analysis["endpoint_hashes"]={name:loaded[name][0]["files"][ARRAY_FILE]["sha256"] for name in names} + if negative is not None: analysis["endpoint_hashes"][negative_name]=negative[0]["files"][ARRAY_FILE]["sha256"] + if out.exists(): raise FileExistsError(f"refusing to clobber {out}") + if not out.parent.is_dir(): raise FileNotFoundError(f"analysis parent does not exist: {out.parent}") + temporary=Path(tempfile.mkdtemp(prefix=f".{out.name}.tmp-",dir=out.parent)) + try: + analysis["payload_sha256"]=hashlib.sha256(_canonical_json(analysis)).hexdigest() + (temporary/"analysis.json").write_text(json.dumps(analysis,indent=2,sort_keys=True,allow_nan=False)+"\n") + _publish_directory_no_replace(temporary,out) + finally: + if temporary.exists(): + import shutil; shutil.rmtree(temporary) + return analysis + + +def _strict_json_value(value): + """Convert numerical output to strict finite JSON-native values.""" + if isinstance(value,np.ndarray): return _strict_json_value(value.tolist()) + if isinstance(value,np.generic): return _strict_json_value(value.item()) + if isinstance(value,dict): return {str(k):_strict_json_value(v) for k,v in value.items()} + if isinstance(value,(list,tuple)): return [_strict_json_value(v) for v in value] + if isinstance(value,float) and not np.isfinite(value): raise ValueError("NS ledger contains a nonfinite scalar") + return value + + +def analyze_ns_ledger(campaign,out): + """CPU-only endpoint spatial partial ledger for a torque-capable v5 campaign.""" + from .metrics import (bilinear_sample_velocity,gap_mass_momentum_flux, + rectangular_control_volume_fluxes,station_flux_metrics,torque_to_actuator_power, + volume_viscous_dissipation,weak_compressible_pressure_proxy) + campaign,out=Path(campaign),Path(out); required=("qin","stationary","accepted-s3.55","reverse-s5.2") + missing=[n for n in required if not (campaign/n).is_dir()] + if missing: raise FileNotFoundError("analyze-ns-ledger requires torque-capable v5 campaign roles; missing: "+", ".join(missing)+"; v4 torque-free data are not accepted") + loaded={n:load_validate_artifact(campaign/n) for n in required}; identity,sources=_assert_steady_mechanism_roles(loaded) + negative=None + if (campaign/"reverse-s3.55").exists(): + negative=load_validate_artifact(campaign/"reverse-s3.55"); m,_=negative; sp=m["spec"] + if (sp.get("kind"),sp.get("branch"),sp.get("s")) != ("reverse","minus-plus",3.55): raise ValueError("reverse-s3.55 optional role/branch/s contract mismatch") + if {k:v for k,v in _campaign_common_identity(m).items() if k!="source_environment"}!=identity: raise ValueError("reverse-s3.55 does not share exact CFD settings") + sources["reverse-s3.55"]=sp["source_environment"] + _,q=loaded["qin"]; ref=loaded["accepted-s3.55"][0]["spec"]; D=float(ref["D"]); physics=ref["config_lbm"]["physics"] + U,rho_ref,nu=float(physics["velocity"]),float(physics["rho"]),float(physics["viscosity"]); centers=np.asarray(ref["centers_xy"],float); radius=float(ref["radius"]) + contract=NondimensionalContract(D,U,rho_ref); x_D=(np.asarray(q["x"],float)-centers[0,0])/D + indices={str(int(z)):int(np.argmin(abs(x_D-z))) for z in (2.,4.,6.,10.)}; cases={} + qin_cv=rectangular_control_volume_fluxes(q["x"],q["y"],q["ux"],q["uy"],q["rho"],q["fluid_mask"],centers[0],D,rho_ref=rho_ref,viscosity=nu) + def nondimensional_cv(cv): + totals=cv["outward_totals"] + converted=contract.convert(mass_flux=totals["mass_flux"],momentum_flux=totals["momentum_convective"]+totals["momentum_pressure"], + energy_flux=totals["kinetic_energy_flux"]+totals["pressure_work"]+totals.get("viscous_work",0.)) + return {"mass_flux_star":converted["mass_flux_star"],"momentum_flux_star":converted["momentum_flux_star"], + "mechanical_spatial_flux_star":converted["energy_flux_star"],"reference":converted["metadata"]} + qin_cv["dimensionless_outward_totals"]=nondimensional_cv(qin_cv) + for name in ("stationary","accepted-s3.55","reverse-s5.2"): + manifest,a=loaded[name]; spec=manifest["spec"]; action=np.asarray(spec["action_omega"],float) + if not np.array_equal(action,np.asarray(spec["action"]["omega"],float)): raise ValueError(f"{name} exact action provenance mismatch") + for clock in ("force_history","torque_history"): + if not np.array_equal(np.asarray(a[clock])[:,:2],np.asarray(a["history"])[:,:2]): raise ValueError(f"{name} {clock} clock mismatch") + stations={} + for label,ix in indices.items(): + rows=np.asarray(a["fluid_mask"],bool)[:,ix]&np.asarray(q["fluid_mask"],bool)[:,ix]; rows=rows.copy(); rows[[0,-1]]=False + qp=weak_compressible_pressure_proxy(q["rho"][:,ix],rho_ref=rho_ref); ap=weak_compressible_pressure_proxy(a["rho"][:,ix],rho_ref=rho_ref) + qin=station_flux_metrics(q["y"],q["ux"][:,ix],q["uy"][:,ix],q["rho"][:,ix],qp["values"],rows) + station=station_flux_metrics(a["y"],a["ux"][:,ix],a["uy"][:,ix],a["rho"][:,ix],ap["values"],rows,q_in=qin) + station.update(x_over_D=float(x_D[ix]),pressure_term={k:v for k,v in ap.items() if k!="values"}); stations[label]=station + torque=np.asarray(a["torque_history"],float); tail=torque[-min(10,len(torque)):,2:] + power=torque_to_actuator_power(tail,np.broadcast_to(action,tail.shape),torque_ownership="actuator_on_fluid",rho_ref=rho_ref,u_ref=U,diameter=D) + power["qualification_status"]="runtime_oracle_qualified_actuator_on_fluid" + velocity=lambda p,a=a: bilinear_sample_velocity(a["x"],a["y"],a["ux"],a["uy"],p,valid_mask=a["fluid_mask"]) + density=lambda p,a=a: bilinear_sample_velocity(a["x"],a["y"],a["rho"],a["rho"],p,valid_mask=a["fluid_mask"])[:,0] + er=1.1*radius; pairs={"rear_rear":(1,2),"front_upper_rear":(0,1),"front_lower_rear":(0,2)} + gaps={k:gap_mass_momentum_flux(velocity,density,centers[i],centers[j],er,samples=1001) for k,(i,j) in pairs.items()} + for gap in gaps.values(): + gap["endpoint_exclusion_radius_over_D"]=er/D + nd=contract.convert(Q=gap["Q_g"],J=gap["J_g"],mass_flux=gap["mass_flux"]) + gap["dimensionless"]={k:nd[k] for k in ("Q_star","J_star","mass_flux_star")} + cv=rectangular_control_volume_fluxes(a["x"],a["y"],a["ux"],a["uy"],a["rho"],a["fluid_mask"],centers[0],D,rho_ref=rho_ref,viscosity=nu) + cv["dimensionless_outward_totals"]=nondimensional_cv(cv) + xx,yy=np.meshgrid(a["x"],a["y"],indexing="xy"); b=cv["bounds"]["actual"] + cv_fluid=np.asarray(a["fluid_mask"],bool)&(xx>=b["x"][0])&(xx<=b["x"][1])&(yy>=b["y"][0])&(yy<=b["y"][1]) + diss=volume_viscous_dissipation(a["x"],a["y"],a["ux"],a["uy"],nu,cv_fluid,density=a["rho"]); dv=diss["viscous_dissipation"] + diss["dimensionless_energy_flux_star"]=contract.convert(energy_flux=dv)["energy_flux_star"] + partial={"definition":"same-CV endpoint spatial partial ledger; no residual closure", + "outward_face_fluxes":cv["outward_totals"],"cv_fluid_viscous_dissipation":dv, + "actuator_power_diagnostic":power["mean_total_power"], + "storage_rate":{"availability":"unavailable_endpoint_only","value":None}, + "body_adjacent_gradient_terms":{"availability":"partially_omitted_centered_stencil_mask","value":None}, + "time_consistent_terms":{"availability":"unavailable_endpoint_arrays_only","value":None}, + "residual":None,"balance_status":"endpoint_spatial_partial_not_closed", + "claim_limit":"Same rectangular CV for four-face fluxes and dissipation, but storage and body-adjacent gradients are unavailable."} + cases[name]={"scientific_role":spec["scientific_role"],"branch":spec["branch"],"s":spec["s"],"exact_action_omega":action, + "endpoint_sha256":manifest["files"][ARRAY_FILE]["sha256"],"qualification_passed":manifest["result"].get("qualification_passed"), + "clock_verification":"profile/force/torque clocks exactly equal","torque_and_actuator_power":power, + "legacy_station_fluxes_vs_matching_qin":stations,"control_volume":cv,"gap_fluxes_separate_orientations":gaps, + "control_volume_viscous_dissipation":{k:v for k,v in diss.items() if k not in ("dissipation_density","usable_mask")}, + "same_cv_partial_ledger":partial} + neg={"present":negative is not None,"use":"optional negative/nonsteady context only"} + if negative is not None: neg.update(qualification_passed=bool(negative[0]["result"].get("qualification_passed",False)),endpoint_sha256=negative[0]["files"][ARRAY_FILE]["sha256"]) + analysis={"schema":"steady-pinball-ns-ledger/v2","campaign":str(campaign),"execution":"CPU analysis of existing endpoint arrays only; no CFD or GPU", + "common_cfd_settings":identity,"source_provenance_by_role":sources,"control_volume_contract":qin_cv["bounds"], + "matching_qin_control_volume":qin_cv,"legacy_station_x_over_D":[2,4,6,10],"cases":cases,"reverse_s3.55_negative_control":neg, + "claim_classification":{"same_cv_endpoint_spatial_ledger":"AVAILABLE_PARTIAL","mechanical_energy_closure":"NOT_CLOSED", + "pressure_work":"AVAILABLE_WEAK_COMPRESSIBLE_PROXY","storage_rate":"UNAVAILABLE","body_adjacent_gradients":"PARTIALLY_OMITTED", + "torque_ownership":"ACTUATOR_ON_FLUID_RUNTIME_ORACLE","causality":"NOT_ESTABLISHED"}, + "claim_limit":"Stage 2 supplies a same-CV endpoint spatial partial ledger. Missing storage/time-consistent and body-adjacent gradient terms prohibit a closed mechanical-energy balance or residual.", + "endpoint_hashes":{n:loaded[n][0]["files"][ARRAY_FILE]["sha256"] for n in required}, + "reproduce_command":f'PYTHONPATH="$PWD/src" python -m steady_pinball_theory.runner analyze-ns-ledger {campaign} --out {out}'} + if negative is not None: analysis["endpoint_hashes"]["reverse-s3.55"]=negative[0]["files"][ARRAY_FILE]["sha256"] + analysis=_strict_json_value(analysis) + if out.exists(): raise FileExistsError(f"refusing to clobber {out}") + if not out.parent.is_dir(): raise FileNotFoundError(f"analysis parent does not exist: {out.parent}") + temporary=Path(tempfile.mkdtemp(prefix=f".{out.name}.tmp-",dir=out.parent)) + try: + analysis["payload_sha256"]=hashlib.sha256(_canonical_json(analysis)).hexdigest(); (temporary/"analysis.json").write_text(json.dumps(analysis,indent=2,sort_keys=True,allow_nan=False)+"\n"); _publish_directory_no_replace(temporary,out) + finally: + if temporary.exists(): + import shutil; shutil.rmtree(temporary) + return analysis + + +def _evidence_root(): + return Path(__file__).resolve().parent/"evidence" + + +def _load_legacy_endpoint(case): + case=Path(case); contract=json.loads((case/"contract.json").read_text()) + with np.load(case/"endpoint.npz",allow_pickle=False) as loaded: + arrays={k:loaded[k].copy() for k in loaded.files} + if "ux" not in arrays or "uy" not in arrays: raise ValueError(f"legacy endpoint missing velocity: {case}") + return contract,arrays + + +def _profile_vs_qin(ctl_ux, ctl_uy, qin_ux, qin_uy, centers, D, *, u_inf=0.01, fluid_ctl=None, fluid_qin=None): + """Full-profile E_inf/L2 of q_ctl-q_in at x/D=10 using matching-resolution qin.""" + centers=np.asarray(centers,dtype=float); cx=float(centers[0][0]); ix=int(round(cx+10.0*float(D))) + if fluid_ctl is None or fluid_qin is None: + rows=slice(2,-2) + dux=(np.asarray(ctl_ux)[rows,ix]-np.asarray(qin_ux)[rows,ix])/float(u_inf) + duy=(np.asarray(ctl_uy)[rows,ix]-np.asarray(qin_uy)[rows,ix])/float(u_inf) + else: + common=np.asarray(fluid_ctl,dtype=bool)[:,ix]&np.asarray(fluid_qin,dtype=bool)[:,ix] + common=common.copy(); common[[0,-1]]=False + if not common.any(): raise ValueError("profile mask empty at x/D=10") + dux=(np.asarray(ctl_ux)[common,ix]-np.asarray(qin_ux)[common,ix])/float(u_inf) + duy=(np.asarray(ctl_uy)[common,ix]-np.asarray(qin_uy)[common,ix])/float(u_inf) + vec=np.hypot(dux,duy) + return {"E_inf_vector":float(np.max(vec)),"E_L2_vector":float(np.sqrt(np.mean(vec*vec))), + "points":int(len(vec)),"x_index":ix,"u_inf":float(u_inf)} + + +def _history_settling_legacy(history): + hist=np.asarray(history,dtype=float) + if hist.ndim!=2 or hist.shape[0]<4 or hist.shape[1]<3 or not np.isfinite(hist).all(): + return {"availability":"unavailable_or_short_history","value":None} + tail=hist[-min(20,len(hist)):,1:3]; value=float(two_window_change(tail)) + return {"availability":"available_legacy_profile_history","window_samples":int(len(tail)), + "value":value,"qualified":bool(value<=SETTLING_THRESHOLD)} + + +def analyze_credibility(*, out, evidence_root=None, agreement_tol=0.05): + """Stage-2 numerical credibility from promoted convergence/domain/D20 endpoints.""" + evidence=Path(evidence_root) if evidence_root is not None else _evidence_root() + out=Path(out); conv=evidence/"authoritative"/"steady-convergence-20260802" + domain=evidence/"authoritative"/"steady-domain-20260802" + bridge=evidence/"authoritative"/"steady-finite-re-bridge-d20-20260804" + contract=evidence/"authoritative"/"steady-contract-d20-20260806" + u_inf=0.01; resolution={}; status_flags=[] + + def mark(name, state, detail=None): + entry={"name":name,"status":state} + if detail is not None: entry["detail"]=detail + status_flags.append(entry); return entry + + grid_summary=json.loads((conv/"grid_summary.json").read_text()) + d30_local=json.loads((conv/"D30_local_summary.json").read_text()) + domain_summary=json.loads((domain/"summary.json").read_text()) + mark("grid_summary.json","reused"); mark("D30_local_summary.json","reused"); mark("domain/summary.json","reused") + + for D,ctl_name,qin_name in ((10,"D10-s3.55","D10-qin"),(30,"D30-s3.55","D30-qin")): + ctl_path=conv/ctl_name; qin_path=conv/qin_name + if not ctl_path.exists() or not qin_path.exists(): + mark(f"D{D}-s3.55","missing"); resolution[str(D)]={"availability":"missing"}; continue + c_ctl,a_ctl=_load_legacy_endpoint(ctl_path); _,a_qin=_load_legacy_endpoint(qin_path) + metrics=_profile_vs_qin(a_ctl["ux"],a_ctl["uy"],a_qin["ux"],a_qin["uy"],c_ctl["centers"],D,u_inf=u_inf) + settling=_history_settling_legacy(a_ctl["history"]) + resolution[str(D)]={"availability":"recomputed_from_endpoints","source":str(ctl_path.relative_to(evidence)), + "qin_source":str(qin_path.relative_to(evidence)),"s":float(c_ctl["s"]), + "profiles_xD10_vs_qin":metrics,"settling":settling, + "endpoint_sha256":_sha256(ctl_path/"endpoint.npz")} + mark(f"D{D}-s3.55","recomputed") + + d20_metrics=None; d20_meta=None + for label,root in (("contract",contract),("bridge",bridge)): + ctl=root/"accepted-s3.55"; qin=root/"qin" + if not ctl.exists() or not qin.exists(): continue + m_ctl,a_ctl=load_legacy_force_artifact(ctl); _,a_qin=load_legacy_force_artifact(qin) + metrics=_profile_vs_qin(a_ctl["ux"],a_ctl["uy"],a_qin["ux"],a_qin["uy"],m_ctl["spec"]["centers_xy"],20.0,u_inf=u_inf, + fluid_ctl=a_ctl.get("fluid_mask"),fluid_qin=a_qin.get("fluid_mask")) + d20_metrics=metrics; d20_meta={"label":label,"ctl":str(ctl),"qin":str(qin), + "endpoint_sha256":m_ctl["files"][ARRAY_FILE]["sha256"], + "settling":m_ctl.get("result",{}).get("settling")} + mark(f"D20-s3.55-{label}","recomputed"); break + if d20_metrics is None: + mark("D20-s3.55","missing"); resolution["20"]={"availability":"missing"} + else: + resolution["20"]={"availability":"recomputed_from_endpoints","source":d20_meta["ctl"], + "qin_source":d20_meta["qin"],"campaign":d20_meta["label"],"s":3.55, + "profiles_xD10_vs_qin":d20_metrics,"settling":d20_meta["settling"], + "endpoint_sha256":d20_meta["endpoint_sha256"]} + + order_block={"availability":"missing"} + if resolution.get("20",{}).get("availability")=="recomputed_from_endpoints" and resolution.get("30",{}).get("availability")=="recomputed_from_endpoints": + e20=resolution["20"]["profiles_xD10_vs_qin"]["E_inf_vector"]; e30=resolution["30"]["profiles_xD10_vs_qin"]["E_inf_vector"] + l20=resolution["20"]["profiles_xD10_vs_qin"]["E_L2_vector"]; l30=resolution["30"]["profiles_xD10_vs_qin"]["E_L2_vector"] + rel_inf=abs(e30-e20)/max(abs(e20),np.finfo(float).eps); rel_l2=abs(l30-l20)/max(abs(l20),np.finfo(float).eps) + observed_order=None + if resolution.get("10",{}).get("availability")=="recomputed_from_endpoints": + e10=resolution["10"]["profiles_xD10_vs_qin"]["E_inf_vector"] + d_coarse=abs(e10-e20); d_fine=abs(e20-e30) + if d_coarse>0 and d_fine>0: + observed_order={"note":"unequal refinement; not a single Richardson order", + "log_ratio_D10_D20":float(np.log(d_coarse)/np.log(2.0)), + "log_ratio_D20_D30":float(np.log(d_fine)/np.log(1.5)), + "D10_underresolved_expected":True} + order_block={"availability":"computed","E_inf_D20":e20,"E_inf_D30":e30,"E_L2_D20":l20,"E_L2_D30":l30, + "relative_change_E_inf":float(rel_inf),"relative_change_E_L2":float(rel_l2), + "observed_order":observed_order} + + strip={} + for H in (12,18): + ctl=domain/f"H{H}-D20-s3.55"; qin=domain/f"H{H}-D20-qin" + if not ctl.exists() or not qin.exists(): + mark(f"H{H}","missing"); strip[str(H)]={"availability":"missing"}; continue + c_ctl,a_ctl=_load_legacy_endpoint(ctl); _,a_qin=_load_legacy_endpoint(qin) + metrics=_profile_vs_qin(a_ctl["ux"],a_ctl["uy"],a_qin["ux"],a_qin["uy"],c_ctl["centers"],20.0,u_inf=u_inf) + strip[str(H)]={"availability":"recomputed_from_endpoints","H_over_D":H,"profiles_xD10_vs_qin":metrics, + "endpoint_sha256":_sha256(ctl/"endpoint.npz")} + mark(f"H{H}-D20-s3.55","recomputed") + strip_delta=None + if strip.get("12",{}).get("availability")=="recomputed_from_endpoints" and strip.get("18",{}).get("availability")=="recomputed_from_endpoints": + e12=strip["12"]["profiles_xD10_vs_qin"]["E_inf_vector"]; e18=strip["18"]["profiles_xD10_vs_qin"]["E_inf_vector"] + strip_delta={"E_inf_H12":e12,"E_inf_H18":e18,"abs_change":float(abs(e18-e12)), + "relative_change":float(abs(e18-e12)/max(abs(e12),np.finfo(float).eps))} + + neighborhood={"D20":{},"D30":{}} + for svalue in (3.45,3.55,3.65): + key=f"{svalue:.2f}" + path=conv/f"D30-s{key}"; qin_path=conv/"D30-qin" + if path.exists() and qin_path.exists(): + c_ctl,a_ctl=_load_legacy_endpoint(path); _,a_qin=_load_legacy_endpoint(qin_path) + neighborhood["D30"][key]={"availability":"recomputed_from_endpoints", + "profiles_xD10_vs_qin":_profile_vs_qin(a_ctl["ux"],a_ctl["uy"],a_qin["ux"],a_qin["uy"],c_ctl["centers"],30.0,u_inf=u_inf), + "endpoint_sha256":_sha256(path/"endpoint.npz")} + mark(f"D30-s{key}","recomputed") + else: + neighborhood["D30"][key]={"availability":"missing"}; mark(f"D30-s{key}","missing") + if svalue==3.55 and resolution.get("20",{}).get("availability")=="recomputed_from_endpoints": + neighborhood["D20"][key]={"availability":"recomputed_from_endpoints", + "profiles_xD10_vs_qin":resolution["20"]["profiles_xD10_vs_qin"], + "endpoint_sha256":resolution["20"]["endpoint_sha256"], + "source":resolution["20"]["source"]} + else: + bpath=bridge/f"accepted-s{key}"; bqin=bridge/"qin" + cpath=conv/f"D20-s{key}" + if bpath.exists() and bqin.exists(): + m_ctl,a_ctl=load_legacy_force_artifact(bpath); _,a_qin=load_legacy_force_artifact(bqin) + neighborhood["D20"][key]={"availability":"recomputed_from_endpoints", + "profiles_xD10_vs_qin":_profile_vs_qin(a_ctl["ux"],a_ctl["uy"],a_qin["ux"],a_qin["uy"],m_ctl["spec"]["centers_xy"],20.0,u_inf=u_inf,fluid_ctl=a_ctl.get("fluid_mask"),fluid_qin=a_qin.get("fluid_mask")), + "endpoint_sha256":m_ctl["files"][ARRAY_FILE]["sha256"],"source":str(bpath)} + mark(f"D20-s{key}-bridge","recomputed") + elif cpath.exists(): + neighborhood["D20"][key]={"availability":"bounded_missing_matching_qin", + "note":"D20 endpoint present in convergence but matching D20-qin absent there", + "legacy_result":json.loads((cpath/"result.json").read_text())} + mark(f"D20-s{key}","bounded") + else: + neighborhood["D20"][key]={"availability":"missing"}; mark(f"D20-s{key}","missing") + + def _neighborhood_coherent(block): + vals=[] + for key in ("3.45","3.55","3.65"): + item=block.get(key,{}) + if item.get("availability")!="recomputed_from_endpoints": return False,"incomplete" + vals.append(item["profiles_xD10_vs_qin"]["E_inf_vector"]) + e345,e355,e365=vals + ok=bool(e365>max(e345,e355) and abs(e345-e355)/max(e355,np.finfo(float).eps)<=0.1) + return ok,{"E_inf":vals,"side_degrades_at_3.65":bool(e365>max(e345,e355)),"flat_3.45_3.55":bool(abs(e345-e355)/max(e355,np.finfo(float).eps)<=0.1)} + d20_ok,d20_coh=_neighborhood_coherent(neighborhood["D20"]); d30_ok,d30_coh=_neighborhood_coherent(neighborhood["D30"]) + + missing_tests=[{"name":"outlet_boundary_sensitivity","status":"BOUNDED","detail":"not present in promoted evidence"}, + {"name":"final_window_length_sensitivity","status":"BOUNDED","detail":"not present in promoted evidence"}, + {"name":"initial_condition_perturbation","status":"BOUNDED","detail":"not present in promoted evidence"}, + {"name":"D10_underresolved","status":"BOUNDED","detail":"expected; D10 retained only as coarse diagnostic"}] + for item in missing_tests: mark(item["name"],item["status"],item["detail"]) + + agree=order_block.get("relative_change_E_inf") + if isinstance(agree,(int,float)) and agree<=float(agreement_tol) and d20_ok and d30_ok: numerical="PASS" + elif isinstance(agree,(int,float)) and agree<=float(agreement_tol): numerical="BOUNDED" + else: numerical="BOUNDED" + classification={"numerical_observation":numerical,"mechanism":"NOT_CLAIMED", + "agreement_tol_E_inf":float(agreement_tol),"D20_D30_relative_E_inf":agree, + "neighborhood_coherent_D20":d20_ok,"neighborhood_coherent_D30":d30_ok, + "notes":"PASS/BOUNDED applies only to numerical observation of profile credibility; no viscous mechanism claim"} + + analysis={"schema":"steady-pinball-credibility-analysis/v1", + "primary_metric":"full-profile E_inf_vector of q_ctl-q_in at x/D=10", + "secondary_metric":"full-profile E_L2_vector", + "evidence_root":str(evidence), + "resolution_s3.55":resolution,"D20_D30_change":order_block, + "strip_height":{"cases":strip,"delta":strip_delta,"summary_reused":domain_summary}, + "s_neighborhood":neighborhood,"neighborhood_coherence":{"D20":d20_coh,"D30":d30_coh}, + "settling_repeatability":{k:resolution[k].get("settling") for k in resolution if isinstance(resolution[k],dict)}, + "reused_summaries":{"grid_summary":grid_summary,"D30_local_summary":d30_local}, + "status_flags":status_flags,"missing_or_bounded_tests":missing_tests, + "classification":classification, + "reproduce_command":f'PYTHONPATH="$PWD/src" conda run -n pinball_math python -m steady_pinball_theory.runner analyze-credibility --out {out}'} + source_files=[Path(__file__),Path(__file__).with_name("metrics.py"),Path(__file__).with_name("RESULTS.md")] + analysis["source_hashes"]={str(path.relative_to(Path(__file__).resolve().parents[2])):_sha256(path) for path in source_files if path.exists()} + if out.exists(): raise FileExistsError(f"refusing to clobber {out}") + if not out.parent.is_dir(): raise FileNotFoundError(f"analysis parent does not exist: {out.parent}") + temporary=Path(tempfile.mkdtemp(prefix=f".{out.name}.tmp-",dir=out.parent)) + try: + analysis["payload_sha256"]=hashlib.sha256(_canonical_json(analysis)).hexdigest() + (temporary/"analysis.json").write_text(json.dumps(analysis,indent=2,sort_keys=True,allow_nan=False)+"\n") + _publish_directory_no_replace(temporary,out) + finally: + if temporary.exists(): + import shutil; shutil.rmtree(temporary) + return analysis + + +def promote_evidence(source, dest, *, scientific_question, notes=""): + """Atomically promote a /tmp analysis into evidence/authoritative with PROMOTION.json.""" + import shutil + source=Path(source); dest=Path(dest) + if not source.is_dir(): raise FileNotFoundError(f"promotion source missing: {source}") + if dest.exists(): raise FileExistsError(f"refusing to clobber {dest}") + if not dest.parent.is_dir(): raise FileNotFoundError(f"promotion parent missing: {dest.parent}") + files={} + for path in sorted(p for p in source.rglob("*") if p.is_file()): + rel=str(path.relative_to(source)); files[rel]={"sha256":_sha256(path),"bytes":path.stat().st_size} + promotion={"schema":"steady-pinball-evidence-promotion/v1","immutable":True,"role":"authoritative", + "scientific_question":scientific_question,"source_tmp":str(source),"notes":notes,"files":files} + temporary=Path(tempfile.mkdtemp(prefix=f".{dest.name}.tmp-",dir=dest.parent)) + try: + for rel in files: + target=temporary/rel; target.parent.mkdir(parents=True,exist_ok=True); shutil.copy2(source/rel,target) + (temporary/"PROMOTION.json").write_text(json.dumps(promotion,indent=2,sort_keys=True,allow_nan=False)+"\n") + _publish_directory_no_replace(temporary,dest) + finally: + if temporary.exists(): shutil.rmtree(temporary) + index=_evidence_root()/"INDEX.json" + if index.exists(): + payload=json.loads(index.read_text()); name=dest.name + auth=list(payload.get("authoritative",[])) + if name not in auth: + auth.append(name); auth.sort(); payload["authoritative"]=auth + index.write_text(json.dumps(payload,indent=2,sort_keys=True,allow_nan=False)+"\n") + return promotion + + +def analyze_strip(out, *, finite_analysis=None): + """Run the frozen Stage-4 free-slip strip modal qualification.""" + from .metrics import (affine_profile_sensitivity, profile_errors, strip_modal_projection, + strip_mode_parity_sector) + from .theory import affine_velocity, circulation_basis, solve_mfs, strip_basis_affine + out=Path(out); centers=np.array([[0.,0.],[1.3,.75],[1.3,-.75]]) + H=15.; radius=.5; stations=(4.,6.,8.,10.,12.,14.,16.); layers_set=(20,40,80); modes=12 + y=np.linspace(-H,H,3001); names=("rear_opposite","common_rear","front_only") + results={}; saved={"y":y} + for layers in layers_set: + layer={} + for name in names: + affine=strip_basis_affine(centers,radius,name,H=H,u_inf=1,n_boundary=32,source_ratio=.65,image_layers=layers) + station_rows={}; base_projections=[]; direction_projections=[] + for station in stations: + points=np.column_stack((np.full_like(y,station),y)) + base=affine["zero"].velocity(points)-np.array([1.,0.]) + direction=affine["unit"].velocity(points)-affine["zero"].velocity(points) + pb=strip_modal_projection(y,base,H,modes=modes); pd=strip_modal_projection(y,direction,H,modes=modes) + base_projections.append(pb["modes"]); direction_projections.append(pd["modes"]) + def summary(projection, parity): + rows=projection["modes"] + abs_disagreement=np.abs(rows[:,2]-rows[:,3]) + amplitude=np.sqrt(np.sum(rows[:,2:4]**2,axis=1)) + floor=max(float(np.max(amplitude))*1e-8,1e-12) + parity_allowed=(rows[:,0].astype(int)%2==(0 if parity=="even" else 1)) + significant=(amplitude>=floor)&parity_allowed + relative=np.full(len(rows),np.nan) + relative[significant]=abs_disagreement[significant]/amplitude[significant] + return {"through_flow_zero_mode":projection["through_flow_zero_mode"], + "modes":rows.tolist(),"ux_uy_absolute_disagreement":abs_disagreement.tolist(), + "significance_floor":floor,"parity_sector":parity,"parity_allowed":parity_allowed.tolist(), + "significant":significant.tolist(),"ux_uy_relative_disagreement_significant_only":[None if np.isnan(v) else float(v) for v in relative]} + station_rows[str(int(station))]={"base":summary(pb,strip_mode_parity_sector("base")),"direction":summary(pd,strip_mode_parity_sector(name))} + base_projections=np.asarray(base_projections); direction_projections=np.asarray(direction_projections) + def collapse(data, parity): + k=data[0,:,1]; scaled=data[:,:,2:4]*np.exp((np.asarray(stations)[:,None]-stations[0])*k[None,:])[:,:,None] + mean=np.mean(scaled,axis=0); spread=np.max(np.abs(scaled-mean),axis=0) + amplitude=np.sqrt(np.sum(mean*mean,axis=1)); floor=max(float(amplitude.max())*1e-8,1e-12) + allowed=(np.arange(1,len(amplitude)+1)%2==(0 if parity=="even" else 1)) + significant=(amplitude>=floor)&allowed + return {"reference_station":stations[0],"collapsed_mean":mean.tolist(),"collapsed_max_abs_spread":spread.tolist(), + "significance_floor":floor,"parity_sector":parity,"significant":significant.tolist(), + "significant_modes_absolute_spread":spread[significant].tolist(),"significant_modes":(np.flatnonzero(significant)+1).astype(int).tolist()} + points10=np.column_stack((np.full_like(y,10.),y)); base10=affine["zero"].velocity(points10); direction10=affine["unit"].velocity(points10)-base10 + objective=affine_profile_sensitivity(base10,direction10,u_inf=1); optimum=base10+objective["g_opt"]*direction10 + errors=profile_errors(optimum[:,0],optimum[:,1],u_inf=1) + direct,_=solve_mfs(centers,radius,0.5*objective["g_opt"]*circulation_basis(name),u_inf=1,n_boundary=32,source_ratio=.65,H=H,image_layers=layers) + held_affine=base10+0.5*objective["g_opt"]*direction10 + held_error=float(np.max(np.abs(held_affine-direct.velocity(points10)))) + layer[name]={"basis":affine["basis"].tolist(),"parity":{"base":"even","direction":strip_mode_parity_sector(name)},"stations":station_rows,"base_collapse":collapse(base_projections,"even"), + "direction_collapse":collapse(direction_projections,strip_mode_parity_sector(name)),"objective":{"J0":objective["J0"],"g_opt":objective["g_opt"], + "J_opt":objective["J_opt"],"E_inf_vector_opt":errors["E_inf_vector"],"E_L2_vector_opt":errors["E_L2_vector"], + "held_amplitude":0.5*objective["g_opt"],"held_affine_direct_Linf":held_error}} + if layers==40: + saved[f"{name}_base_x10"]=base10; saved[f"{name}_direction_x10"]=direction10; saved[f"{name}_optimum_x10"]=optimum + results[str(layers)]=layer + convergence={} + for name in names: + opts=np.array([results[str(L)][name]["objective"]["g_opt"] for L in layers_set]) + mode_arrays=np.array([results[str(L)][name]["stations"]["10"]["direction"]["modes"] for L in layers_set]) + convergence[name]={"g_opt":opts.tolist(),"g_opt_successive_abs_change":np.abs(np.diff(opts)).tolist(), + "x10_direction_mode_successive_Linf":np.max(np.abs(np.diff(mode_arrays[:,:,2:4],axis=0)),axis=(1,2)).tolist()} + actual_g=None + if finite_analysis is not None: + finite=json.loads(Path(finite_analysis).read_text()); actual_g=float(finite["closure"]["observed_g"]) + favorable=[results["40"][name]["objective"]["J_opt"] for name in names] + rear_unique=bool(favorable[0]0.2*h)} + core="PASS" if all(checks.values()) else "FAIL"; overall="BOUNDED" if core=="PASS" else "FAIL" + return {"schema":config["schema"],"expected_self_advection":expected,"runs":runs,"window_refinement":window,"time_refinement":time, + "perturbed_geometry_sensitivity":{"initial_aligned_L2":initial_sensitivity,"final_aligned_L2":final_sensitivity,"amplification":final_sensitivity/max(initial_sensitivity,np.finfo(float).eps),"interpretation":config["perturbation"]["label"]}, + "checks":checks,"classification":{"mathematical_core":core,"K1":overall,"K2_authorized":False,"K2_gate":"NO-GO: required source-verified Mowlavi growth/impulse oracle remains publication-held"}} + + +def write_karman_baseline(out): + out=Path(out); config=_karman_config(); result=_karman_run(config) + # Re-run before publication: canonical payload equality is the reproducibility gate. + repeat=_karman_run(config); reproducible=_canonical_json(result)==_canonical_json(repeat) + result["checks"]["byte_reproducible_payload"]=reproducible + if not reproducible: + result["classification"].update(mathematical_core="FAIL",K1="FAIL",K2_authorized=False,K2_gate="NO-GO: non-reproducible payload") + if out.exists(): raise FileExistsError(f"refusing to clobber {out}") + if not out.parent.is_dir(): raise FileNotFoundError(f"artifact parent does not exist: {out.parent}") + temporary=Path(tempfile.mkdtemp(prefix=f".{out.name}.tmp-",dir=out.parent)) + try: + (temporary/"config.json").write_text(json.dumps(config,indent=2,sort_keys=True,allow_nan=False)+"\n") + (temporary/"result.json").write_text(json.dumps(result,indent=2,sort_keys=True,allow_nan=False)+"\n") + source_files=[Path(__file__),Path(__file__).with_name("theory.py"),Path(__file__).with_name("metrics.py"),Path(__file__).with_name("DERIVATION.md")] + manifest={"schema":config["schema"],"immutable":True,"files":{name:{"sha256":_sha256(temporary/name),"bytes":(temporary/name).stat().st_size} for name in ("config.json","result.json")}, + "source_hashes":{str(path.relative_to(Path(__file__).resolve().parents[2])):_sha256(path) for path in source_files}} + manifest["manifest_payload_sha256"]=hashlib.sha256(_canonical_json(manifest)).hexdigest() + (temporary/"manifest.json").write_text(json.dumps(manifest,indent=2,sort_keys=True,allow_nan=False)+"\n") + _publish_directory_no_replace(temporary,out) + finally: + if temporary.exists(): + import shutil; shutil.rmtree(temporary) + return result + +def _json_safe(value): + if isinstance(value, dict): + return {k: _json_safe(v) for k, v in value.items()} + if isinstance(value, list): + return [_json_safe(v) for v in value] + if isinstance(value, (float, np.floating)): + x = float(value) + if not np.isfinite(x): + return None + return x + if isinstance(value, (np.integer,)): + return int(value) + if isinstance(value, (np.bool_,)): + return bool(value) + return value + + +def analyze_semi_analytic(*, out, evidence_root=None): + """Layered semi-analytic composite fit with spatial/s/direction held-out gates.""" + from .metrics import (fit_linear_composite, fit_two_point_affine_closure, + held_out_improvement, predict_affine_closure, + profile_errors, profile_station_errors) + from .theory import composite_model_fields, strip_basis_affine + evidence = Path(evidence_root) if evidence_root is not None else _evidence_root() + out = Path(out) + bridge = evidence / "authoritative" / "steady-finite-re-bridge-d20-20260804" + contract = evidence / "authoritative" / "steady-contract-d20-20260806" + names = ("qin", "accepted-s3.45", "accepted-s3.55", "accepted-s3.65") + loaded = {name: load_legacy_force_artifact(bridge / name) for name in names} + rev = load_legacy_force_artifact(contract / "reverse-s5.2") + qmanifest, q = loaded["qin"] + U = float(qmanifest["spec"]["config_lbm"]["physics"]["velocity"]) + D = float(qmanifest["spec"]["D"]) + center0 = np.asarray(qmanifest["spec"]["centers_xy"][0], float) + centers = (np.asarray(qmanifest["spec"]["centers_xy"], float) - center0) / D + radius = 0.5 + x = (q["x"] - center0[0]) / D + y = (q["y"] - center0[1]) / D + qvel = np.stack((q["ux"], q["uy"]), axis=-1) / U + affine = strip_basis_affine(centers, radius, "rear_opposite", H=15, u_inf=1, + n_boundary=32, source_ratio=0.65, image_layers=40) + ix_fit = np.flatnonzero((x >= -2.0) & (x <= 2.0))[::2] + iy_fit = np.flatnonzero((np.abs(y) <= 6.0))[::2] + ix_held = np.flatnonzero(x > 2.0)[::2] + xx_fit, yy_fit = np.meshgrid(x[ix_fit], y[iy_fit], indexing="xy") + fit_pts = np.column_stack((xx_fit.ravel(), yy_fit.ravel())) + geometry = np.ones(xx_fit.shape, dtype=bool) + for c in centers: + geometry &= (xx_fit - c[0]) ** 2 + (yy_fit - c[1]) ** 2 >= 0.75 ** 2 + + def _component_block(omega_abs, branch): + block = composite_model_fields( + fit_pts, centers=centers, radius=radius, omega=omega_abs, branch=branch, + H=15, u_inf=1.0, n_boundary=32, source_ratio=0.65, image_layers=40, + coeffs={"alpha_vi": 1.0, "alpha_gap": 1.0, "wake_amplitude": 0.0, + "wake_width": 0.5, "gamma": 0.0}) + shape = xx_fit.shape + (2,) + uniform = np.array([1.0, 0.0]) + q0 = block["q_mfs0"].reshape(shape) - uniform + qvi = block["q_vi"].reshape(shape) + qgap = block["q_gap"].reshape(shape) + qwake = block["q_wake"].reshape(shape) + qgamma = (affine["unit"].velocity(fit_pts) - + affine["zero"].velocity(fit_pts)).reshape(shape) + return q0, qvi, qgap, qwake, qgamma, block["gaps"] + + def _predict(coeffs, q0, qvi, qgap, qwake, qgamma): + pred = np.zeros_like(q0) + pred += coeffs.get("q_mfs0", coeffs.get("intercept", 0.0)) * q0 + pred += coeffs.get("alpha_vi", 0.0) * qvi + pred += coeffs.get("alpha_gap", 0.0) * qgap + pred += coeffs.get("wake", 0.0) * qwake + pred += coeffs.get("gamma", 0.0) * qgamma + return pred + + def _case_analysis(name, manifest, arrays, *, branch, svalue): + if not manifest.get("result", {}).get("settling", {}).get("qualified", False): + raise ValueError(f"{name} is not a qualified endpoint") + velocity = np.stack((arrays["ux"], arrays["uy"]), axis=-1) / U + delta = velocity - qvel + common = q["fluid_mask"] & arrays["fluid_mask"] + fitmask = geometry & common[np.ix_(iy_fit, ix_fit)] + obs = delta[np.ix_(iy_fit, ix_fit)] + omega_abs = abs(float(manifest["spec"]["action_omega"][1])) + q0, qvi, qgap, qwake, qgamma, gaps = _component_block(omega_abs, branch) + fit_mfs0 = fit_linear_composite(obs, [("q_mfs0", q0)], fitmask) + fit_gamma = fit_linear_composite(obs, [("q_mfs0", q0), ("gamma", qgamma)], fitmask) + fit_full = fit_linear_composite( + obs, [("q_mfs0", q0), ("alpha_vi", qvi), ("alpha_gap", qgap), + ("wake", qwake), ("gamma", qgamma)], fitmask) + pred_mfs0 = fit_mfs0["prediction"] + pred_gamma = fit_gamma["prediction"] + pred_full = fit_full["prediction"] + xx_held, yy_held = np.meshgrid(x[ix_held], y[iy_fit], indexing="xy") + held_pts = np.column_stack((xx_held.ravel(), yy_held.ravel())) + held_geom = np.ones(xx_held.shape, dtype=bool) + for c in centers: + held_geom &= (xx_held - c[0]) ** 2 + (yy_held - c[1]) ** 2 >= 0.75 ** 2 + held_mask = held_geom & common[np.ix_(iy_fit, ix_held)] + held_obs = delta[np.ix_(iy_fit, ix_held)] + hshape = xx_held.shape + (2,) + hblock = composite_model_fields( + held_pts, centers=centers, radius=radius, omega=omega_abs, branch=branch, + H=15, u_inf=1.0, n_boundary=32, source_ratio=0.65, image_layers=40, + coeffs={"alpha_vi": 1.0, "alpha_gap": 1.0, "wake_amplitude": 0.0, + "wake_width": 0.5, "gamma": 0.0}) + hq0 = hblock["q_mfs0"].reshape(hshape) - np.array([1.0, 0.0]) + hqvi = hblock["q_vi"].reshape(hshape) + hqgap = hblock["q_gap"].reshape(hshape) + hqwake = hblock["q_wake"].reshape(hshape) + hqgamma = (affine["unit"].velocity(held_pts) - affine["zero"].velocity(held_pts)).reshape(hshape) + held_pred_mfs0 = fit_mfs0["coefficients"]["q_mfs0"] * hq0 + held_pred_gamma = _predict(fit_gamma["coefficients"], hq0, hqvi, hqgap, hqwake, hqgamma) + held_pred_full = _predict(fit_full["coefficients"], hq0, hqvi, hqgap, hqwake, hqgamma) + stations = {} + for station in (2, 4, 6, 10): + stations[str(station)] = { + "observed": profile_station_errors(delta, x, y, station, fluid_mask=common), + } + ix = int(np.argmin(np.abs(x - float(station)))) + rows = common[:, ix].copy() + rows[[0, -1]] = False + if rows.any(): + pts = np.column_stack((np.full(rows.sum(), x[ix]), y[rows])) + blk = composite_model_fields( + pts, centers=centers, radius=radius, omega=omega_abs, branch=branch, + H=15, u_inf=1.0, n_boundary=32, source_ratio=0.65, image_layers=40, + coeffs={"alpha_vi": 1.0, "alpha_gap": 1.0, "wake_amplitude": 0.0, + "wake_width": 0.5, "gamma": 0.0}) + g0 = blk["q_mfs0"] - np.array([1.0, 0.0]) + gvi = blk["q_vi"] + ggap = blk["q_gap"] + gwake = blk["q_wake"] + ggamma = affine["unit"].velocity(pts) - affine["zero"].velocity(pts) + obs_prof = delta[rows, ix] + for label, coeffs, use_full in ( + ("mfs0", fit_mfs0["coefficients"], False), + ("mfs0_gamma", fit_gamma["coefficients"], True), + ("composite", fit_full["coefficients"], True)): + if label == "mfs0": + pred_prof = coeffs["q_mfs0"] * g0 + else: + pred_prof = _predict(coeffs, g0, gvi, ggap, gwake, ggamma) + resid = obs_prof - pred_prof + stations[str(station)][label] = profile_errors( + resid[:, 0], resid[:, 1], u_inf=1.0) + else: + for label in ("mfs0", "mfs0_gamma", "composite"): + stations[str(station)][label] = {"E_inf_vector": None, "availability": "empty_profile"} + return { + "artifact": name, "branch": branch, "s": float(svalue), + "endpoint_sha256": manifest["files"][ARRAY_FILE]["sha256"], + "gap_oracle": gaps, + "fit_region_points": int(fitmask.sum()), + "held_out_region_points": int(held_mask.sum()), + "baselines": { + "mfs0": {"coefficients": fit_mfs0["coefficients"], + "condition_number": fit_mfs0["condition_number"], + "near_RMS": fit_mfs0["weighted_RMS"], + "held_out": held_out_improvement( + held_obs - held_pred_mfs0, held_obs - held_pred_mfs0, held_mask)}, + "mfs0_gamma": {"coefficients": fit_gamma["coefficients"], + "condition_number": fit_gamma["condition_number"], + "near_RMS": fit_gamma["weighted_RMS"], + "held_out": held_out_improvement( + held_obs - held_pred_mfs0, held_obs - held_pred_gamma, held_mask)}, + "composite": {"coefficients": fit_full["coefficients"], + "condition_number": fit_full["condition_number"], + "near_RMS": fit_full["weighted_RMS"], + "held_out": held_out_improvement( + held_obs - held_pred_mfs0, held_obs - held_pred_full, held_mask)}, + }, + "stations": stations, + "downstream_ranking": { + "observed_E_inf_at_10": stations["10"]["observed"]["E_inf_vector"], + "composite_residual_E_inf_at_10": stations["10"]["composite"]["E_inf_vector"], + }, + } + + cases = {} + for name, svalue in zip(names[1:], (3.45, 3.55, 3.65)): + cases[f"s{svalue:.2f}"] = _case_analysis( + name, loaded[name][0], loaded[name][1], branch="plus-minus", svalue=svalue) + cases["reverse-s5.20"] = _case_analysis( + "reverse-s5.2", rev[0], rev[1], branch="minus-plus", svalue=5.2) + + # s held-out: fit composite coeffs vs s on train, predict s=3.55 + train = [cases["s3.45"]["baselines"]["composite"]["coefficients"], + cases["s3.65"]["baselines"]["composite"]["coefficients"]] + keys = sorted(train[0]) + closure = {} + for key in keys: + cfit = fit_two_point_affine_closure([3.45, 3.65], [train[0][key], train[1][key]]) + closure[key] = {**cfit, "predicted_s3.55": predict_affine_closure(cfit, 3.55), + "observed_s3.55": cases["s3.55"]["baselines"]["composite"]["coefficients"][key]} + s_held = {k: abs(closure[k]["predicted_s3.55"] - closure[k]["observed_s3.55"]) / + max(abs(closure[k]["observed_s3.55"]), 1e-12) for k in keys} + + acc = cases["s3.55"]["baselines"]["composite"]["held_out"] + imp_gamma = cases["s3.55"]["baselines"]["mfs0_gamma"]["held_out"] + imp_full = acc + ranking_ok = bool( + cases["s3.55"]["downstream_ranking"]["observed_E_inf_at_10"] < + cases["reverse-s5.20"]["downstream_ranking"]["observed_E_inf_at_10"]) + gap_sign_ok = bool( + cases["s3.55"]["gap_oracle"]["rear_rear"]["Q_g"] * + cases["reverse-s5.20"]["gap_oracle"]["rear_rear"]["Q_g"] < 0) + spatial_pass = bool(imp_full.get("significant") and (imp_full.get("relative_improvement") or 0) > 0.05) + s_pass = bool(all(v is not None and v <= 0.15 for v in s_held.values())) + direction_pass = bool(ranking_ok and gap_sign_ok) + overall = "PASS" if spatial_pass and direction_pass else ("BOUNDED" if spatial_pass or direction_pass else "FAIL") + + source_files = [Path(__file__), Path(__file__).with_name("theory.py"), + Path(__file__).with_name("metrics.py"), Path(__file__).with_name("DERIVATION.md")] + analysis = _json_safe({ + "schema": "steady-pinball-semi-analytic/v1", + "model": "q_SA = q_MFS0 + alpha_VI q_VI + alpha_gap q_gap + q_wake (+ optional gamma)", + "preregistration": { + "fit_region": "x/D<=2, |y/D|<=3, >=0.75D from bodies, common fluid", + "held_out_spatial": "x/D>2 common fluid", + "train_s": [3.45, 3.65], "held_out_s": 3.55, + "direction_case": "reverse-s5.2 with minus-plus branch", + "baselines": ["MFS0", "MFS0+Gamma", "MFS0+VI+gap+wake"], + }, + "cases": cases, + "s_held_out_closure": closure, + "s_held_out_relative_errors": s_held, + "classification": { + "spatial_held_out": "PASS" if spatial_pass else "BOUNDED", + "s_held_out": "PASS" if s_pass else "BOUNDED", + "direction_branch": "PASS" if direction_pass else "FAIL", + "gap_sign_reversal": "PASS" if gap_sign_ok else "FAIL", + "downstream_ranking": "PASS" if ranking_ok else "FAIL", + "overall": overall, + "notes": "Composite model targets accepted/DRL wall sense; prescribed circulation remains descriptive only.", + }, + "source_hashes": {str(p.relative_to(Path(__file__).resolve().parents[2])): _sha256(p) + for p in source_files}, + "reproduce_command": f'PYTHONPATH="$PWD/src" conda run -n pinball_math python -m steady_pinball_theory.runner analyze-semi-analytic --out {out}', + }) + if out.exists(): + raise FileExistsError(f"refusing to clobber {out}") + temporary = Path(tempfile.mkdtemp(prefix=f".{out.name}.tmp-", dir=out.parent)) + try: + analysis["payload_sha256"] = hashlib.sha256(_canonical_json(analysis)).hexdigest() + (temporary / "analysis.json").write_text( + json.dumps(analysis, indent=2, sort_keys=True, allow_nan=False) + "\n") + _publish_directory_no_replace(temporary, out) + finally: + if temporary.exists(): + import shutil; shutil.rmtree(temporary) + return analysis + + + +PARENT_SCHEMA="steady-pinball-accepted-parent/v1" +ACQUISITION_SCHEMA="steady-pinball-branch-acquisition/v1" +STABILITY_FAMILIES=("symmetric","antisymmetric") + + +def _atomic_campaign(out, roles, run_role): + """Stage every role as a sibling and expose the campaign only when complete.""" + out=Path(out) + if out.exists(): raise FileExistsError(f"refusing to clobber {out}") + if not out.parent.is_dir(): raise FileNotFoundError(f"campaign parent does not exist: {out.parent}") + temporary=Path(tempfile.mkdtemp(prefix=f".{out.name}.tmp-",dir=out.parent)) + try: + for role in roles: run_role(temporary,role) + _publish_directory_no_replace(temporary,out) + finally: + if temporary.exists(): + import shutil; shutil.rmtree(temporary) + + +def _load_accepted_parent(parent): + parent=Path(parent).resolve(strict=True); record=json.loads((parent/"parent.json").read_text()) + payload=record.pop("payload_sha256",None) + if record.get("schema")!=PARENT_SCHEMA or not record.get("immutable") or payload!=hashlib.sha256(_canonical_json(record)).hexdigest(): raise ValueError("invalid accepted-parent manifest") + record["payload_sha256"]=payload; endpoint,arrays=load_validate_artifact(parent/record["endpoint"]["path"]) + if endpoint["manifest_payload_sha256"]!=record["endpoint"]["manifest_payload_sha256"] or endpoint["spec"]["kind"]!="accepted" or not endpoint["result"].get("qualification_passed"): raise ValueError("parent is not exact qualified accepted endpoint") + checkpoint=parent/record["checkpoint"]["path"] + if not checkpoint.is_file() or checkpoint.stat().st_size!=record["checkpoint"]["bytes"] or _sha256(checkpoint)!=record["checkpoint"]["sha256"]: raise ValueError("accepted-parent checkpoint binding mismatch") + for key in ("action_omega","config_lbm","centers_xy","radius"): + if record[key]!=endpoint["spec"][key]: raise ValueError(f"accepted-parent {key} mismatch") + return record,endpoint,arrays,checkpoint + + +def acquire_accepted_parent(out, *, intended_celeris_root, s=3.55, D=20.0): + """Explicit prerequisite which alone may create an accepted parent checkpoint.""" + _assert_cfd_environment(intended_celeris_root=intended_celeris_root) + def build(stage,_): + checkpoint=stage/"accepted.checkpoint" + manifest=_run_case_unlocked(stage/"endpoint",kind="accepted",s=s,D=D,intended_celeris_root=intended_celeris_root,checkpoint_path=checkpoint) + if not manifest["result"].get("qualification_passed"): raise RuntimeError("accepted parent endpoint did not qualify") + record={"schema":PARENT_SCHEMA,"immutable":True,"checkpoint":{"path":checkpoint.name,"sha256":_sha256(checkpoint),"bytes":checkpoint.stat().st_size},"endpoint":{"path":"endpoint","manifest_payload_sha256":manifest["manifest_payload_sha256"]},"action_omega":manifest["spec"]["action_omega"],"config_lbm":manifest["spec"]["config_lbm"],"centers_xy":manifest["spec"]["centers_xy"],"radius":manifest["spec"]["radius"],"source_environment":manifest["spec"]["source_environment"]} + record["payload_sha256"]=hashlib.sha256(_canonical_json(record)).hexdigest(); (stage/"parent.json").write_text(json.dumps(record,indent=2,sort_keys=True,allow_nan=False)+"\n") + with exclusive_cfd_lease(role="accepted-parent"): + enforce_launch_cooldown(); _atomic_campaign(out,("parent",),build) + return _load_accepted_parent(out) + + +def _new_parent_simulation(record, checkpoint, simulation_factory): + with tempfile.TemporaryDirectory(prefix="steady_branch_cfg_") as td: + lp=Path(td)/"lbm.json"; bp=Path(td)/"body.json"; lp.write_text(json.dumps(record["config_lbm"])) + objects=[{"type":"cylinder","center":z,"radius":record["radius"],"omega":w} for z,w in zip(record["centers_xy"],record["action_omega"])] + bp.write_text(json.dumps({"objects":objects})); sim=simulation_factory(lbm_config_path=str(lp),body_config_path=str(bp)) + sim.initialize(); loader=getattr(sim,"load_checkpoint",None) + if not callable(loader): sim.close(); raise RuntimeError("Simulation lacks required load_checkpoint API") + digest=_sha256(checkpoint); loader(str(checkpoint)) + if digest!=record["checkpoint"]["sha256"] or _sha256(checkpoint)!=digest: sim.close(); raise RuntimeError("parent checkpoint changed during restore") + if sim.bodies.count!=3 or [o.obj_id for o in sim.bodies.objects]!=[0,1,2]: sim.close(); raise RuntimeError("restored body registry mismatch") + if not np.array_equal(np.asarray([o.center[:2] for o in sim.bodies.objects],float),np.asarray(record["centers_xy"],float)): sim.close(); raise RuntimeError("restored geometry/order mismatch") + return sim + + +def _set_exact_action(sim, action): + action=np.asarray(action,float) + if action.shape!=(3,) or not np.isfinite(action).all(): raise ValueError("branch action must be finite length three") + for body_id,omega in enumerate(action): sim.set_body(body_id,omega=float(omega)) + + +def _capture_branch_row(sim, record, action, step, D): + """One-clock field/torque capture; unavailable spatial metrics abort acquisition.""" + from .metrics import bilinear_sample_velocity,gap_mass_momentum_flux,near_wall_tangential_speed,recirculation_observables,tensor_trapezoid_weights,torque_to_actuator_power,wake_deficit_observables + nx=record["config_lbm"]["grid"]["nx"]; ny=record["config_lbm"]["grid"]["ny"]; m=sim.get_macroscopic() + ux=_reshape_exact("ux",m["ux"],ny,nx); uy=_reshape_exact("uy",m["uy"],ny,nx); rho=_reshape_exact("rho",m["rho"],ny,nx) + flags,fluid,body=topology_from_solver_flags(np.asarray(sim.get_flags(),np.uint16),nx=nx,ny=ny,centers=record["centers_xy"],radius=record["radius"],controlled=True) + x=np.arange(nx,dtype=float); y=np.arange(ny,dtype=float); centers=np.asarray(record["centers_xy"],float); radius=float(record["radius"]); u=.01 + velocity=lambda p: bilinear_sample_velocity(x,y,ux,uy,p,valid_mask=fluid) + density=lambda p: bilinear_sample_velocity(x,y,rho,np.zeros_like(rho),p,valid_mask=fluid)[:,0] + exclusion_radius=1.1*radius + gaps=[gap_mass_momentum_flux(velocity,density,centers[a],centers[b],exclusion_radius,samples=1001) for a,b in ((0,1),(0,2),(1,2))] + local=near_wall_tangential_speed(x,y,ux,uy,fluid,body,centers,radius); available=[v for v in local["bodies"].values() if v.get("availability")=="available"] + if len(available)!=2: raise RuntimeError("local metric unavailable from actual field") + xx=(x-centers[0,0])[None,:]/D; yy=np.abs(y-centers[0,1])[:,None]/D; mask=fluid&(xx>=1.8)&(xx<4)&(yy<=3) + near=recirculation_observables(x,ux,mask,tensor_trapezoid_weights(x,y))["area"]/(D*D); stations=[] + for xd in (2,4,6,10): + ix=int(round(centers[0,0]+xd*D)); stations.append(wake_deficit_observables((y-centers[0,1])/D,ux[:,ix]/u,fluid[:,ix])["momentum_deficit_proxy"]) + tau=np.array([np.asarray(sim.read_body(i,normalize=True).torque,float).reshape(-1)[0] for i in range(3)]); direct=np.array([np.asarray(sim.read_torque(i,normalize=True),float).reshape(-1)[0] for i in range(3)]) + if not np.array_equal(tau,direct): raise RuntimeError("torque APIs disagree") + power_record=torque_to_actuator_power(tau[None,:],np.asarray(action,float)[None,:],torque_ownership="actuator_on_fluid",rho_ref=1,u_ref=u,diameter=D) + power=float(np.asarray(power_record["total_power"],float)[0]) + row=[step,step*u/D,tau.sum(),power,sum(g["Q_g"] for g in gaps),np.mean([v["rms_tangential_speed"] for v in available]),near,*stations] + if not np.isfinite(row).all(): raise RuntimeError("nonfinite synchronized telemetry") + return row,np.stack((ux,uy),axis=-1) + + +def _write_branch(out, metadata, rows, norms): + tmp=Path(tempfile.mkdtemp(prefix=f".{out.name}.tmp-",dir=out.parent)) + try: + data={"telemetry":np.asarray(rows,float)} + if norms is not None: data["norm_history"]=np.asarray(norms,float) + np.savez_compressed(tmp/"telemetry.npz",**data); metadata=dict(metadata,immutable=True,files={"telemetry.npz":{"sha256":_sha256(tmp/"telemetry.npz"),"bytes":(tmp/"telemetry.npz").stat().st_size}}); metadata["payload_sha256"]=hashlib.sha256(_canonical_json(metadata)).hexdigest(); (tmp/"manifest.json").write_text(json.dumps(metadata,indent=2,sort_keys=True,allow_nan=False)+"\n"); _publish_directory_no_replace(tmp,out) + finally: + if tmp.exists(): + import shutil; shutil.rmtree(tmp) + + +def _run_branch(record,checkpoint,out,role,initial_action,steps,stride,D,factory,base_field=None,pulse_steps=None): + sim=_new_parent_simulation(record,checkpoint,factory); action=np.asarray(initial_action,float); applied=action.copy(); rows=[]; norms=[] + try: + _set_exact_action(sim,action) + for stop in range(stride,steps+1,stride): + sim.run(stride,zero_obs=True); row,field=_capture_branch_row(sim,record,action,stop,D); rows.append(row) + if base_field is not None: + delta=field-base_field; norms.append([stop,row[1],np.linalg.norm(delta.ravel()),np.max(np.abs(delta))]) + if pulse_steps is not None and stop>=pulse_steps: + action=np.asarray(record["action_omega"],float); _set_exact_action(sim,action); pulse_steps=None + finally: sim.close() + _write_branch(out,{"schema":ACQUISITION_SCHEMA,"role":role,"parent_sha256":record["checkpoint"]["sha256"],"initial_action_omega":applied.tolist(),"clock_columns":["post_parent_lattice_step","tU_over_D"],"telemetry_channels":list(SWITCH_TELEMETRY_CHANNELS),"branch_indicator":float(np.sign(rows[-1][4])) if norms is not None else None},rows,norms if base_field is not None else None) + + +def _production_factory(root, factory): + if factory is not None: return factory + import CelerisLab + _source_identity(celeris_module=CelerisLab,intended_celeris_root=root); return CelerisLab.Simulation + + +def acquire_causal_switch(out, *, parent, intended_celeris_root, horizon=10., sample_dt=.1, simulation_factory=None): + """Legacy entry retained but prohibited from creating anonymous v1 telemetry.""" + raise RuntimeError("v1 transient acquisition is archived; v2 reacquisition requires authenticated accepted/reverse endpoint references and named t*=0 channels") + _assert_cfd_environment(intended_celeris_root=intended_celeris_root); record,endpoint,_,checkpoint=_load_accepted_parent(parent) + if record["source_environment"].get("celeris_intended_root")!=str(Path(intended_celeris_root).resolve()): raise RuntimeError("parent Celeris root differs from intended root") + factory=_production_factory(intended_celeris_root,simulation_factory); D=float(endpoint["spec"]["D"]); steps=int(round(horizon*D/.01)); stride=int(round(sample_dt*D/.01)); contract=causal_switch_contract(checkpoint,s=endpoint["spec"]["s"],diameter=D,sample_dt=sample_dt) + def run(stage,role): enforce_launch_cooldown(); _run_branch(record,checkpoint,stage/role,role,contract["branches"][role]["action_omega"],steps,stride,D,factory) + with exclusive_cfd_lease(role="causal-switch"): _atomic_campaign(out,CAUSAL_SWITCH_ROLES,run) + + +def acquire_stability(out, *, parent, intended_celeris_root, amplitudes, horizon=10., pulse_duration=.5, sample_dt=.1, simulation_factory=None): + _assert_cfd_environment(intended_celeris_root=intended_celeris_root); record,endpoint,arrays,checkpoint=_load_accepted_parent(parent) + if record["source_environment"].get("celeris_intended_root")!=str(Path(intended_celeris_root).resolve()): raise RuntimeError("parent Celeris root differs from intended root") + amps=tuple(float(a) for a in amplitudes) + if len(amps)<2 or len(set(amps))!=len(amps) or any(a<=0 or not np.isfinite(a) for a in amps): raise ValueError("stability requires two distinct positive amplitudes") + raise RuntimeError("v1 transient acquisition is archived; v2 nonlinear-return reacquisition requires authenticated accepted/reverse endpoint fields and common-mask distances") + factory=_production_factory(intended_celeris_root,simulation_factory); D=float(endpoint["spec"]["D"]); steps=int(round(horizon*D/.01)); stride=int(round(sample_dt*D/.01)); pulse=int(round(pulse_duration*D/.01)); baseline=np.asarray(record["action_omega"],float); base=np.stack((arrays["ux"],arrays["uy"]),axis=-1); roles=[f"{f}-a{a:.12g}" for f in STABILITY_FAMILIES for a in amps] + def run(stage,role): + family=role.split("-a",1)[0]; amplitude=float(role.split("-a",1)[1]); perturb=np.array([0,-amplitude,+amplitude]) if family=="symmetric" else np.array([0,+amplitude,+amplitude]); enforce_launch_cooldown(); _run_branch(record,checkpoint,stage/role,role,baseline+perturb,steps,stride,D,factory,base,pulse) + with exclusive_cfd_lease(role="stability"): _atomic_campaign(out,roles,run) + + +CAUSAL_SWITCH_ROLES=("continue-accepted","zero","equal-amplitude-reverse") +SWITCH_TELEMETRY_CHANNELS=("torque","power","gap","local","near_wake","station_2","station_4","station_6","station_10") + + +def causal_switch_contract(parent_checkpoint, *, s=3.55, diameter=20.0, sample_dt=0.1, + frozen_threshold=0.05, bootstrap_samples=1000, seed=0): + """Preregister exact same-parent switch branches without running CFD.""" + parent=Path(parent_checkpoint) + if not parent.is_file(): raise FileNotFoundError(f"accepted parent checkpoint missing: {parent}") + if not np.isfinite([s,diameter,sample_dt,frozen_threshold]).all() or min(s,diameter,sample_dt,frozen_threshold)<=0: raise ValueError("switch scalars must be finite and positive") + if isinstance(bootstrap_samples,(bool,np.bool_)) or int(bootstrap_samples)!=bootstrap_samples or bootstrap_samples<1: raise ValueError("bootstrap_samples must be a positive integer") + c=CanonicalContract(diameter=float(diameter)); accepted=np.asarray(c.action(float(s),"plus-minus"),float) + expected=np.asarray(c.oracle(float(s))["plus-minus"]["action"],float) + if not np.array_equal(accepted,expected): raise RuntimeError("canonical accepted action/body oracle mismatch") + digest=_sha256(parent); actions={"continue-accepted":accepted,"zero":np.zeros(3),"equal-amplitude-reverse":-accepted}; branches={} + for role in CAUSAL_SWITCH_ROLES: + branch=None if role=="zero" else ("plus-minus" if role=="continue-accepted" else "minus-plus") + branches[role]={"role":role,"parent_checkpoint":str(parent),"parent_sha256":digest,"body_order":list(c.body_order),"action_omega":actions[role].tolist(),"wall_oracle":None if branch is None else c.oracle(float(s))[branch]} + return {"schema":"steady-pinball-causal-switch/v1","immutable":True,"accepted_parent":{"path":str(parent),"sha256":digest,"qualification":"accepted checkpoint required"},"branches":branches,"s":float(s),"D":float(diameter),"telemetry":{"clock_columns":["lattice_step","tU_over_D"],"sample_dt_U_over_D":float(sample_dt),"channels":list(SWITCH_TELEMETRY_CHANNELS),"scope":"synchronized torque/power, gap/local/near-wake, stations x/D=2,4,6,10"},"analysis":{"paired_estimand":"branch minus continue-accepted at identical post-parent times","frozen_onset_threshold":float(frozen_threshold),"bootstrap_samples":int(bootstrap_samples),"seed":int(seed),"gates":["polarity","dose","sham"],"claim_boundary":"cross-correlation alone never supports a causal claim"}} + + +def _switch_matrix(name,value): + a=np.asarray(value,dtype=float) + if a.ndim==2: a=a[None,...] + if a.ndim!=3 or a.shape[1]<2 or a.shape[2]<3 or not np.isfinite(a).all(): raise ValueError(f"{name} telemetry must be finite (replicate,time,2+channels)") + if np.any(np.diff(a[:,:,1],axis=1)<=0): raise ValueError(f"{name} telemetry clock must increase") + return a + + +def analyze_paired_causal_switch(contract, telemetry, *, out=None): + """Analyze synchronized same-parent branches; correlation is never causal evidence.""" + if contract.get("schema")!="steady-pinball-causal-switch/v1": raise ValueError("wrong causal-switch contract") + if set(telemetry)!=set(CAUSAL_SWITCH_ROLES): raise ValueError("all and only preregistered switch branches are required") + arrays={r:_switch_matrix(r,telemetry[r]) for r in CAUSAL_SWITCH_ROLES}; shape=arrays[CAUSAL_SWITCH_ROLES[0]].shape; clocks=arrays[CAUSAL_SWITCH_ROLES[0]][:,:,:2] + if any(a.shape!=shape for a in arrays.values()): raise ValueError("switch telemetry shapes differ") + if any(not np.array_equal(a[:,:,:2],clocks) for a in arrays.values()): raise ValueError("switch telemetry clocks are not exactly synchronized") + channels=list(contract["telemetry"]["channels"]) + if shape[2]!=2+len(channels): raise ValueError("telemetry columns do not match frozen schema") + base=arrays["continue-accepted"][:,:,2:]; zero=arrays["zero"][:,:,2:]-base; reverse=arrays["equal-amplitude-reverse"][:,:,2:]-base + threshold=float(contract["analysis"]["frozen_onset_threshold"]); scale=np.maximum(np.max(np.abs(base),axis=1),np.finfo(float).eps) + def onset(diff): + hit=np.abs(diff)>threshold*scale[:,None,:]; values=np.full((shape[0],len(channels)),np.nan) + for r in range(shape[0]): + for j in range(len(channels)): + idx=np.flatnonzero(hit[r,:,j]) + if len(idx): values[r,j]=clocks[r,idx[0],1] + return values + oz,orr=onset(zero),onset(reverse); rng=np.random.default_rng(int(contract["analysis"]["seed"])); nboot=int(contract["analysis"]["bootstrap_samples"]); ordering=[] + for j,name in enumerate(channels): + finite=np.isfinite(oz[:,j])&np.isfinite(orr[:,j]); delta=orr[finite,j]-oz[finite,j] + if len(delta): + means=[float(np.mean(delta[rng.integers(0,len(delta),len(delta))])) for _ in range(nboot)]; ci=np.quantile(means,[.025,.975]).tolist(); observed=float(np.mean(delta)) + else: ci=[None,None]; observed=None + ordering.append({"channel":name,"reverse_minus_zero_onset":observed,"bootstrap_95_CI":ci,"replicates":int(finite.sum())}) + zmean=np.mean(zero[:,-1,:],axis=0); rmean=np.mean(reverse[:,-1,:],axis=0); polarity=bool(np.dot(zmean,rmean)>=0); dose=bool(np.linalg.norm(rmean)>=np.linalg.norm(zmean)); sham=float(np.max(np.abs(np.diff(base,axis=0)))) if shape[0]>1 else 0.; sham_pass=bool(sham<=threshold*max(float(np.max(np.abs(base))),np.finfo(float).eps)) + replicated=bool(shape[0]>=2) + local_indices=[channels.index(name) for name in ("torque","power","gap","local")] + downstream_indices=[channels.index(name) for name in ("station_2","station_4","station_6","station_10")] + def local_precedes_downstream(onsets): + rows=[] + for r in range(shape[0]): + local=onsets[r,local_indices]; downstream=onsets[r,downstream_indices] + rows.append(bool(np.isfinite(local).any() and np.isfinite(downstream).all() and np.nanmin(local)<=np.min(downstream))) + return bool(all(rows)),rows + zero_order,zero_rows=local_precedes_downstream(oz); reverse_order,reverse_rows=local_precedes_downstream(orr); temporal_order=zero_order and reverse_order + gates={"polarity":{"pass":polarity},"dose":{"pass":dose},"sham":{"pass":sham_pass,"max_continue_replicate_difference":sham},"replication":{"pass":replicated,"replicates":int(shape[0]),"minimum":2},"local_before_downstream":{"pass":temporal_order,"zero_by_replicate":zero_rows,"reverse_by_replicate":reverse_rows}} + passed=all(item["pass"] for item in gates.values()) + result={"schema":"steady-pinball-causal-switch-analysis/v2","parent_sha256":contract["accepted_parent"]["sha256"],"paired_differences":{"zero_minus_continue":zero.tolist(),"reverse_minus_continue":reverse.tolist()},"onset":{"definition":"first frozen-threshold crossing","ordering":ordering},"gates":gates,"classification":"PASS" if passed else "BOUNDED","claim_boundary":"same-parent intervention evidence; PASS requires replicated local-before-downstream onset, and cross-correlation alone cannot establish causality"} + if out is not None: + out=Path(out) + if out.exists(): raise FileExistsError(f"refusing to clobber {out}") + if not out.parent.is_dir(): raise FileNotFoundError(f"analysis parent does not exist: {out.parent}") + tmp=Path(tempfile.mkdtemp(prefix=f".{out.name}.tmp-",dir=out.parent)) + try: (tmp/"analysis.json").write_text(json.dumps(result,indent=2,sort_keys=True,allow_nan=False)+"\n"); _publish_directory_no_replace(tmp,out) + finally: + if tmp.exists(): + import shutil; shutil.rmtree(tmp) + return result + + +def analyze_nonlinear_return(times, families, *, decay_ratio=0.1, growth_limit=2.0, switch_ratio=1.0): + """Classify finite-amplitude symmetric/antisymmetric return families.""" + t=np.asarray(times,dtype=float) + if t.ndim!=1 or len(t)<3 or not np.isfinite(t).all() or np.any(np.diff(t)<=0): raise ValueError("times must be finite and increasing") + if set(families)!={"symmetric","antisymmetric"}: raise ValueError("both perturbation families are required") + report={}; labels=[] + for family,runs in families.items(): + rows=[] + for amplitude,values in sorted(runs.items(),key=lambda z:float(z[0])): + a=float(amplitude); q=np.asarray(values,dtype=float) + if a<=0 or q.shape!=t.shape or not np.isfinite(q).all() or np.any(q<0): raise ValueError("invalid nonlinear-return trajectory") + growth=float(np.max(q)/max(q[0],np.finfo(float).eps)); terminal=float(q[-1]/max(q[0],np.finfo(float).eps)); switched=bool(np.max(q)>=switch_ratio); decayed=bool(terminal<=decay_ratio); label="unstable" if switched or growth>growth_limit else ("stable" if decayed else "bounded") + rows.append({"amplitude":a,"finite_time_growth":growth,"terminal_ratio":terminal,"asymptotic_decay":decayed,"branch_switching":switched,"classification":label}); labels.append(label) + report[family]=rows + overall="unresolved" if not labels else ("unstable" if "unstable" in labels else ("stable" if all(x=="stable" for x in labels) else "bounded")) + return {"schema":"steady-pinball-nonlinear-return/v1","families":report,"classification":overall,"claim_boundary":"finite-amplitude nonlinear return only; not global linear stability"} + + +def matrix_free_arnoldi(operator, dimension, *, epsilons=(1e-3,1e-4,1e-5), krylov_dimensions=(4,6,8), eigen_tolerance=1e-5): + """Generic feasibility Arnoldi for callable Jv(v,epsilon) or propagator(v).""" + n=int(dimension); eps=tuple(float(x) for x in epsilons); dims=tuple(int(x) for x in krylov_dimensions) + if n<2 or not callable(operator): raise ValueError("operator must be callable and dimension >=2") + if any(x<=0 or not np.isfinite(x) for x in eps) or any(m<2 or m>n for m in dims): raise ValueError("invalid epsilon or Krylov dimensions") + def apply(v,e): + try: y=operator(v,e) + except TypeError: y=operator(v) + y=np.asarray(y,dtype=float) + if y.shape!=(n,) or not np.isfinite(y).all(): raise ValueError("operator returned invalid vector") + return y + rows=[] + for e in eps: + for m in dims: + Q=np.zeros((n,m+1)); H=np.zeros((m+1,m)); Q[:,0]=np.arange(1,n+1); Q[:,0]/=np.linalg.norm(Q[:,0]); used=m + for j in range(m): + w=apply(Q[:,j],e) + for i in range(j+1): H[i,j]=np.dot(Q[:,i],w); w-=H[i,j]*Q[:,i] + H[j+1,j]=np.linalg.norm(w) + if H[j+1,j]<=100*np.finfo(float).eps: used=j+1; break + Q[:,j+1]=w/H[j+1,j] + vals=np.linalg.eigvals(H[:used,:used]); lead=vals[np.argmax(np.abs(vals))]; rows.append({"epsilon":e,"krylov_dimension":m,"used_dimension":used,"leading_eigenvalue":[float(lead.real),float(lead.imag)],"spectral_radius":float(abs(lead))}) + radii=np.array([r["spectral_radius"] for r in rows]).reshape(len(eps),len(dims)); ec=float(np.max(np.abs(np.diff(radii[:,-1])))) if len(eps)>1 else float("inf"); mc=float(np.max(np.abs(radii[:,-1]-radii[:,-2]))) if len(dims)>1 else float("inf"); passed=bool(ec<=eigen_tolerance and mc<=eigen_tolerance) + return {"schema":"steady-pinball-matrix-free-arnoldi/v1","runs":rows,"convergence":{"epsilon_max_change":ec,"krylov_max_change":mc,"tolerance":float(eigen_tolerance),"passed":passed},"global_stability":"AVAILABLE_FEASIBILITY_ONLY" if passed else "UNAVAILABLE_CONVERGENCE_GATES_FAILED","claim_boundary":"generic time-stepper/Jv feasibility only"} + + +# Stage-3 authenticated transient v2. The v1 format remains readable only through +# the explicitly bounded diagnostic loader below and is never promoted. +TRANSIENT_SCHEMA="steady-pinball-transient/v2" +TRANSIENT_CAMPAIGN_SCHEMA="steady-pinball-transient-campaign/v2" +LEGACY_TRANSIENT_SCHEMAS=("steady-pinball-branch-acquisition/v1",) +TRANSIENT_ARRAY_FILE="transient.npz" +TRANSIENT_BODY_ORDER=("front","rear_y_plus","rear_y_minus") +TRANSIENT_GAP_ORDER=("front_to_rear_y_plus","front_to_rear_y_minus","rear_y_plus_to_rear_y_minus") +TRANSIENT_STATION_ORDER=(2.0,4.0,6.0,10.0) +TRANSIENT_ARRAY_SCHEMAS={ + "clock":{"tail":[2],"columns":["post_parent_lattice_step","t_star"]}, + "action_omega":{"tail":[3],"columns":list(TRANSIENT_BODY_ORDER)}, + "torque_body":{"tail":[3],"columns":list(TRANSIENT_BODY_ORDER)}, + "power_body":{"tail":[3],"columns":list(TRANSIENT_BODY_ORDER)}, + "gap_Q":{"tail":[3],"columns":list(TRANSIENT_GAP_ORDER)}, + "gap_mass":{"tail":[3],"columns":list(TRANSIENT_GAP_ORDER)}, + "gap_J":{"tail":[3],"columns":list(TRANSIENT_GAP_ORDER)}, + "rear_wall_mean":{"tail":[2],"columns":["rear_y_plus","rear_y_minus"]}, + "rear_wall_rms":{"tail":[2],"columns":["rear_y_plus","rear_y_minus"]}, + "recirculation":{"tail":[1],"columns":["area_star"]}, + "station_deficits":{"tail":[4],"columns":["x_over_D=2","x_over_D=4","x_over_D=6","x_over_D=10"]}, + "field_L2_star":{"tail":[1],"columns":["synchronized_role_minus_continuation"]}, + "field_Linf_star":{"tail":[1],"columns":["synchronized_role_minus_continuation"]}, + "distance_accepted_L2_star":{"tail":[1],"columns":["authenticated_accepted_endpoint"]}, + "distance_reverse_L2_star":{"tail":[1],"columns":["authenticated_reverse_endpoint"]}, +} + + +def transient_contract(*, campaign_kind, campaign_id, roles, parent, references, diameter, u_inf=.01, + rho_ref=1., sample_dt=.1, torque_ownership="actuator_on_fluid", action_schedule=None): + """Create the complete immutable v2 acquisition/analysis contract.""" + if campaign_kind not in ("causal-switch","nonlinear-return"): raise ValueError("invalid transient campaign kind") + if not isinstance(campaign_id,str) or not campaign_id: raise ValueError("campaign_id is required") + parent=Path(parent).resolve(strict=True); role_list=list(roles) + if not role_list or len(set(role_list))!=len(role_list): raise ValueError("roles must be unique and nonempty") + refs={} + for name in ("accepted_endpoint","reverse_endpoint"): + value=references.get(name) + if not isinstance(value,dict) or not value.get("path") or not value.get("manifest_payload_sha256"): + raise ValueError(f"reference {name} requires endpoint path and manifest payload hash") + refs[name]={"path":str(Path(value["path"]).resolve()),"manifest_payload_sha256":str(value["manifest_payload_sha256"])} + nd=NondimensionalContract(float(diameter),float(u_inf),float(rho_ref)) + schedules={} if action_schedule is None else action_schedule + schedule_semantics={ + "pulse_end_index":"sample reached after the final pulsed evolution interval; the release action is installed before this sample is captured; null when no pulse is applied", + "release_index":"first sample under the release action and the pulse-end normalization index; equals pulse_end_index for pulsed roles and is zero for unpulsed roles", + "field_distance":"field_L2_star and field_Linf_star are synchronized role-minus-continuation distances on the common fluid mask, never distances from the role's own release state", + } + return {"schema":TRANSIENT_CAMPAIGN_SCHEMA,"immutable":True,"campaign_kind":campaign_kind,"campaign_id":campaign_id, + "roles":role_list,"parent":{"path":str(parent),"sha256":_sha256(parent),"bytes":parent.stat().st_size}, + "references":refs,"body_order":list(TRANSIENT_BODY_ORDER),"gap_order":list(TRANSIENT_GAP_ORDER), + "gap_orientation":"center_a to center_b; normal=left(tangent); frozen by gap_order", + "station_order_x_over_D":list(TRANSIENT_STATION_ORDER),"action_schedule":schedules, + "action_schedule_semantics":schedule_semantics, + "clock":{"columns":["post_parent_lattice_step","t_star"],"includes_t_star_zero":True,"sample_dt_star":float(sample_dt)}, + "torque":{"ownership":torque_ownership,"sign":"omega>0 geometric CCW; power>0 actuator-to-fluid"}, + "nondimensional_contract":nd.convert()["metadata"],"array_schemas":TRANSIENT_ARRAY_SCHEMAS, + "branch_order":{"definition":"m=(dR^2-dA^2)/(dR^2+dA^2)","requires_authenticated_endpoint_fields":True, + "switch_rule":"margin plus hysteresis only; norm crossings prohibited"}} + + +class TransientReacquisitionRequired(ValueError): + """Authenticated transient lacks semantics/data required for strict analysis.""" + + +def _validate_transient_schedule(contract, n): + expected={ + "pulse_end_index":"sample reached after the final pulsed evolution interval; the release action is installed before this sample is captured; null when no pulse is applied", + "release_index":"first sample under the release action and the pulse-end normalization index; equals pulse_end_index for pulsed roles and is zero for unpulsed roles", + "field_distance":"field_L2_star and field_Linf_star are synchronized role-minus-continuation distances on the common fluid mask, never distances from the role's own release state", + } + if contract.get("action_schedule_semantics")!=expected: + raise TransientReacquisitionRequired("missing or invalid pulse_end_index/release_index semantics") + schedules=contract.get("action_schedule") + if not isinstance(schedules,dict) or set(schedules)!=set(contract.get("roles",[])): + raise TransientReacquisitionRequired("action schedule must cover every transient role exactly") + for role,schedule in schedules.items(): + if not isinstance(schedule,dict): raise TransientReacquisitionRequired(f"invalid action schedule for {role}") + release=schedule.get("release_index"); pulse_end=schedule.get("pulse_end_index") + if isinstance(release,bool) or not isinstance(release,int) or not 0<=release=1.8)&(xx<=10)&(np.abs(yy)<=1.5),weights) + stations=[] + for xd in TRANSIENT_STATION_ORDER: + ix=int(round(c[0,0]+xd*D)) + if not 0<=ix=pulse_steps: action=np.asarray(record["action_omega"],float); _set_exact_action(sim,action); pulse_steps=None + row,field,mask,weights=_capture_transient_v2(sim,record,action,stop,D,accepted,reverse,reference_mask); rows.append(row); fields.append(field); masks.append(mask) + finally: sim.close() + common=np.logical_and.reduce(masks) + if continuation is None: + if role!="continue-accepted": raise RuntimeError("synchronized continuation fields are required before perturbation acquisition") + continuation_fields=fields; continuation_mask=common + else: + continuation_fields,continuation_mask=continuation + if len(continuation_fields)!=len(fields): raise RuntimeError("continuation and perturbation clocks differ") + common=common&continuation_mask + if not common.any(): raise RuntimeError("continuation-relative common mask is empty") + arrays={k:np.asarray([r[k] for r in rows],float) for k in rows[0]} + deltas=[f-c for f,c in zip(fields,continuation_fields)] + arrays["field_L2_star"]=np.asarray([[quadrature_l2(d/.01,common,weights)["L2"]/D] for d in deltas]) + arrays["field_Linf_star"]=np.asarray([[np.max(np.abs(d[common]/.01))] for d in deltas]) + manifest=write_transient_artifact(out,contract,role,arrays) + return manifest,(fields,common) + + +def _acquire_transient_v2(out,*,kind,parent,accepted_endpoint,reverse_endpoint,intended_celeris_root,campaign_id,amplitudes=(),horizon=10.,pulse_duration=.5,sample_dt=.1,simulation_factory=None): + _assert_cfd_environment(intended_celeris_root=intended_celeris_root); record,endpoint,parent_arrays,checkpoint=_load_accepted_parent(parent) + if record["source_environment"].get("celeris_intended_root")!=str(Path(intended_celeris_root).resolve()): raise RuntimeError("parent Celeris root differs from intended root") + refs,accepted,reverse,mask=_transient_references(record,endpoint,parent_arrays,accepted_endpoint,reverse_endpoint); D=float(endpoint["spec"]["D"]); U=.01; steps=int(round(horizon*D/U)); stride=int(round(sample_dt*D/U)); baseline=np.asarray(record["action_omega"],float) + if steps=steps: raise ValueError("pulse duration must be synchronized and before horizon") + roles=["continue-accepted"]+[f"{f}-a{a:.12g}" for f in STABILITY_FAMILIES for a in amps]; actions={roles[0]:baseline} + for role in roles[1:]: + family=role.split("-a",1)[0]; a=float(role.split("-a",1)[1]); actions[role]=baseline+(np.array([0.,-a,+a]) if family=="symmetric" else np.array([0.,+a,+a])) + schedule={r:{"initial_action_omega":actions[r].tolist(),"release_action_omega":baseline.tolist(),"pulse_end_index":None if r=="continue-accepted" or pulse is None else pulse//stride,"release_index":0 if r=="continue-accepted" or pulse is None else pulse//stride} for r in roles}; contract=transient_contract(campaign_kind=kind,campaign_id=campaign_id,roles=roles,parent=checkpoint,references=refs,diameter=D,sample_dt=sample_dt,action_schedule=schedule); factory=_production_factory(intended_celeris_root,simulation_factory); continuation={} + def run(stage,role): + enforce_launch_cooldown(); _,captured=_run_transient_v2_role(record,checkpoint,stage/role,role,contract,actions[role],steps,stride,D,factory,accepted,reverse,mask,None if role=="continue-accepted" or pulse is None else pulse,continuation.get("data")) + if role=="continue-accepted": continuation["data"]=captured + with exclusive_cfd_lease(role=kind+"-v2"): _atomic_campaign(out,roles,run) + return load_transient_campaign(out,campaign_kind=kind) + + +def acquire_causal_switch_v2(out,**kwargs): return _acquire_transient_v2(out,kind="causal-switch",**kwargs) +def acquire_nonlinear_return_v2(out,**kwargs): return _acquire_transient_v2(out,kind="nonlinear-return",**kwargs) + + +def write_transient_artifact(out, contract, role, arrays): + """Atomically write one hash-bound named-array transient role.""" + out=Path(out) + if out.exists(): raise FileExistsError(f"refusing to clobber {out}") + if role not in contract["roles"]: raise ValueError("role is not in campaign contract") + _validate_transient_arrays(arrays,contract) + tmp=Path(tempfile.mkdtemp(prefix=f".{out.name}.tmp-",dir=out.parent)) + try: + np.savez_compressed(tmp/TRANSIENT_ARRAY_FILE,**arrays) + source_files=(Path(__file__),Path(__file__).with_name("metrics.py"),Path(__file__).with_name("contract.py")) + manifest={"schema":TRANSIENT_SCHEMA,"immutable":True,"role":role,"campaign_contract":contract, + "files":{TRANSIENT_ARRAY_FILE:{"sha256":_sha256(tmp/TRANSIENT_ARRAY_FILE),"bytes":(tmp/TRANSIENT_ARRAY_FILE).stat().st_size}}, + "source_hashes":{str(f.relative_to(Path(__file__).resolve().parents[2])):_sha256(f) for f in source_files}, + "reproduce_command":f'PYTHONPATH="$PWD/src" conda run -n pinball_math python -m steady_pinball_theory.runner inspect-transient {out}'} + manifest["payload_sha256"]=hashlib.sha256(_canonical_json(manifest)).hexdigest() + (tmp/MANIFEST_FILE).write_text(json.dumps(manifest,indent=2,sort_keys=True,allow_nan=False)+"\n") + _publish_directory_no_replace(tmp,out) + finally: + if tmp.exists(): + import shutil; shutil.rmtree(tmp) + return manifest + + +def _validate_endpoint_reference(binding): + path=Path(binding["path"]) + manifest,_=load_validate_artifact(path) + if manifest["manifest_payload_sha256"]!=binding["manifest_payload_sha256"]: raise ValueError("reference endpoint identity mismatch") + return manifest + + +def load_validate_transient(path, *, expected_role=None, validate_references=True, allow_superseded_power_sign=False): + """Authenticate transient v2; reject superseded raw-Celeris power signs by default.""" + path=Path(path); raw=json.loads((path/MANIFEST_FILE).read_text()); payload=raw.pop("payload_sha256",None) + if raw.get("schema")!=TRANSIENT_SCHEMA or not raw.get("immutable") or payload!=hashlib.sha256(_canonical_json(raw)).hexdigest(): raise ValueError("transient manifest payload authentication failed") + raw["payload_sha256"]=payload; role=raw.get("role"); contract=raw.get("campaign_contract",{}) + if expected_role is not None and role!=expected_role: raise ValueError("transient role mismatch") + if contract.get("schema")!=TRANSIENT_CAMPAIGN_SCHEMA or role not in contract.get("roles",[]): raise ValueError("transient campaign/role binding mismatch") + convention=contract.get("torque",{}).get("ownership") + if convention!="actuator_on_fluid" and not allow_superseded_power_sign: + raise TransientReacquisitionRequired("superseded transient power sign: raw Celeris torque requires actuator_on_fluid and power_body=tau_read*action_omega; use migrate-transient-ownership") + if allow_superseded_power_sign and convention not in ("fluid_on_body","actuator_on_fluid"): + raise ValueError("unknown transient torque convention") + parent=Path(contract["parent"]["path"]) + if not parent.is_file() or parent.stat().st_size!=contract["parent"]["bytes"] or _sha256(parent)!=contract["parent"]["sha256"]: raise ValueError("transient parent identity mismatch") + entry=raw["files"].get(TRANSIENT_ARRAY_FILE,{}) + payload_path=path/TRANSIENT_ARRAY_FILE + if not payload_path.is_file() or payload_path.stat().st_size!=entry.get("bytes") or _sha256(payload_path)!=entry.get("sha256"): raise ValueError("transient NPZ hash/bytes mismatch") + with np.load(payload_path,allow_pickle=False) as z: arrays={name:z[name].copy() for name in z.files} + _validate_transient_arrays(arrays,contract) + if validate_references: + for binding in contract["references"].values(): _validate_endpoint_reference(binding) + migration=contract.get("ownership_migration") + if migration is not None: + oracle_binding,_=load_qualify_torque_oracle(migration["oracle"]["path"]) + for key in ("sha256","bytes","payload_sha256"): + if oracle_binding[key]!=migration["oracle"].get(key): raise ValueError("migrated transient oracle binding mismatch") + source_binding=migration.get("source_roles",{}).get(role,{}) + source_manifest,source_arrays=load_validate_transient(source_binding.get("path",""),expected_role=role,allow_superseded_power_sign=True) + if source_manifest["payload_sha256"]!=source_binding.get("manifest_payload_sha256") or source_manifest["files"][TRANSIENT_ARRAY_FILE]["sha256"]!=source_binding.get("array_sha256"): + raise ValueError("migrated transient source binding mismatch") + for name,value in arrays.items(): + if name!="power_body" and not np.array_equal(value,source_arrays[name]): raise ValueError("migration changed a non-power array") + return raw,arrays + + +def load_legacy_transient_diagnostic(path): + """Read legacy v1 only under a fixed, non-upgradable scientific ceiling.""" + path=Path(path); raw=json.loads((path/MANIFEST_FILE).read_text()) + if raw.get("schema") not in LEGACY_TRANSIENT_SCHEMAS: raise ValueError("not a supported legacy transient") + file=path/"telemetry.npz"; entry=raw.get("files",{}).get("telemetry.npz",{}) + if not file.is_file() or _sha256(file)!=entry.get("sha256") or file.stat().st_size!=entry.get("bytes"): raise ValueError("legacy transient hash/bytes mismatch") + with np.load(file,allow_pickle=False) as z: arrays={k:z[k].copy() for k in z.files} + return {"classification":"BOUNDED_DIAGNOSTIC","ceiling":"fixed; cannot establish causality, branch switching, return, or uncertainty","manifest":raw},arrays + + +def load_transient_campaign(root, *, campaign_kind=None, allow_superseded_power_sign=False): + root=Path(root); roles={} + for child in sorted(root.iterdir() if root.is_dir() else []): + if child.is_dir() and (child/MANIFEST_FILE).is_file(): + manifest,arrays=load_validate_transient(child,allow_superseded_power_sign=allow_superseded_power_sign); roles[manifest["role"]]=(manifest,arrays) + if not roles: raise FileNotFoundError("no authenticated transient v2 roles") + contracts=[m[0]["campaign_contract"] for m in roles.values()]; identity=hashlib.sha256(_canonical_json(contracts[0])).hexdigest() + if any(hashlib.sha256(_canonical_json(c)).hexdigest()!=identity for c in contracts): raise ValueError("campaign contracts differ between roles") + contract=contracts[0] + if set(roles)!=set(contract["roles"]): raise ValueError("campaign is missing or has extra roles") + if campaign_kind is not None and contract["campaign_kind"]!=campaign_kind: raise ValueError("wrong transient campaign kind") + return contract,roles + + + +def migrate_transient_ownership(source, oracle, out): + """CPU-only no-clobber derivation of corrected actuator-on-fluid transient v2.""" + source,out=Path(source),Path(out) + if out.exists(): raise FileExistsError(f"refusing to clobber {out}") + if not out.parent.is_dir(): raise FileNotFoundError(f"campaign parent does not exist: {out.parent}") + contract,roles=load_transient_campaign(source,allow_superseded_power_sign=True); oracle_binding,_=load_qualify_torque_oracle(oracle) + if contract.get("torque",{}).get("ownership")!="fluid_on_body": + raise ValueError("migration source must use the superseded fluid_on_body raw-Celeris power sign") + corrected=json.loads(json.dumps(contract)); corrected["campaign_id"]=contract["campaign_id"]+"-actuator-on-fluid" + corrected["torque"]={"ownership":"actuator_on_fluid","sign":"omega>0 geometric CCW; power_body=tau_read*omega; power>0 actuator-to-fluid", + "qualification":"runtime manufactured oracle overrides falsified cut-link source-sign inference"} + source_bindings={} + for role,(manifest,_) in roles.items(): + source_bindings[role]={"path":str((source/role).resolve()),"manifest_payload_sha256":manifest["payload_sha256"], + "array_sha256":manifest["files"][TRANSIENT_ARRAY_FILE]["sha256"]} + corrected["ownership_migration"]={"schema":"steady-pinball-transient-ownership-migration/v1","source_campaign":str(source.resolve()), + "source_roles":source_bindings,"oracle":oracle_binding,"derivation":"all arrays value-exact from authenticated source except power_body=tau_read*action_omega", + "provenance_only_effect_on_analysis":"return labels unchanged; analysis provenance/source hashes may differ"} + def build(stage,role): + _,arrays=roles[role]; migrated={name:value.copy() for name,value in arrays.items()}; migrated["power_body"]=migrated["torque_body"]*migrated["action_omega"] + write_transient_artifact(stage/role,corrected,role,migrated) + _atomic_campaign(out,corrected["roles"],build) + return load_transient_campaign(out,campaign_kind=corrected["campaign_kind"]) + + +def onset_interval(clock, signal, baseline, *, noise_window=3, threshold_multiplier=5., explicit_floor=None, consecutive=3): + """Strict first sustained onset interval; equality is not a crossing.""" + t=np.asarray(clock,float); y=np.asarray(signal,float); b=np.asarray(baseline,float) + if t.ndim!=1 or y.shape!=t.shape or b.shape!=t.shape or len(t)=len(t): raise ValueError("invalid onset noise window") + noise=float(np.std((y-b)[:noise_window],ddof=0)); threshold=max(float(explicit_floor or 0.),float(threshold_multiplier)*noise) + exceed=np.abs(y-b)>threshold + for i in range(1,len(t)-consecutive+1): + if exceed[i:i+consecutive].all(): return {"interval":[float(t[i-1]),float(t[i])],"threshold":threshold,"status":"RESOLVED_STRICT"} + return {"interval":None,"threshold":threshold,"status":"UNRESOLVED_NO_SUSTAINED_CROSSING"} + + +def _interval_order(first, second): + if first["interval"] is None or second["interval"] is None: return "UNRESOLVED" + a,b=first["interval"],second["interval"] + if a[1]growth_ratio else ("PARTIAL" if terminal<1 else "AMBIGUOUS"))) + rows[role]={"label":label,"pulse_end_index":pulse_end,"release_index":release,"terminal_release_ratio":terminal,"finite_horizon_growth":growth,"branch_order":order["m"].tolist()} + result={"schema":"steady-pinball-nonlinear-return-analysis/v2","classification":"BOUNDED","availability":"AVAILABLE_FINITE_HORIZON","labels":["RETURN","PARTIAL","GROWTH","BRANCH_SWITCH","AMBIGUOUS"],"runs":rows,"claim_boundary":"finite-horizon labels only; no stable or asymptotic interpretation"} + return _write_analysis(out,result,command) + + +def inspect_transient(path): + manifest,arrays=load_validate_transient(path) + return {"schema":manifest["schema"],"role":manifest["role"],"campaign_id":manifest["campaign_contract"]["campaign_id"],"payload_sha256":manifest["payload_sha256"],"arrays":{k:{"shape":list(v.shape),"dtype":str(v.dtype)} for k,v in arrays.items()}} + + + +TORQUE_ORACLE_SCHEMA="steady-pinball-torque-oracle/v1" +TORQUE_ORACLE_ROLES=("plus_omega","minus_omega","zero") +TORQUE_ORACLE_KERNEL_SOURCES=( + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh", + "src/CelerisLab/lbm/kernels/core/obs.cuh", +) + + +def _torque_oracle_config(D, U, rho): + """Small isolated-circle domain retaining the production LBM method.""" + D=float(D); U=float(U); rho=float(rho) + if not np.isfinite([D,U,rho]).all() or D<8 or U<=0 or rho<=0: + raise ValueError("torque oracle requires finite D>=8, U>0, and rho>0") + nx=int(round(8*D)); ny=int(round(6*D)) + cfg={"grid":{"lattice_model":"D2Q9","nx":nx,"ny":ny,"nz":1}, + "physics":{"data_type":"FP32","viscosity":U*D/50.0,"velocity":U,"rho":rho}, + "method":{"collision":"MRT","streaming":"double_buffer","store_precision":"FP32","ddf_shifting":False, + "les":{"enabled":False,"cs":0.16,"closed_form":True},"trt":{"magic_param":0.1875}, + "inlet":{"profile":"uniform","scheme":"regularized","trt_neq_damp":0.5,"regularized_neq_damp":0.5}, + "outlet":{"mode":"neq_extrap","backflow_clamp":True,"blend_alpha":0.7,"srt_neq_damp":0.5}, + "y_wall_bc":"free_slip","omega_guard":{"min":0.01,"max":1.99}}, + "cuda":{"threads_per_block":256,"compute_capability":"auto"}} + return cfg,[2.0*D,3.0*D],0.5*D + + +def _torque_oracle_source_record(root, *, celeris_module=None, source_environment=None): + if source_environment is None: + if celeris_module is None: raise ValueError("Celeris module is required for production source identity") + source_environment=_source_identity(celeris_module=celeris_module,intended_celeris_root=root) + root=Path(root).resolve() + hashes={} + for relative in TORQUE_ORACLE_KERNEL_SOURCES: + path=root/relative + if not path.is_file(): raise FileNotFoundError(f"required torque kernel source missing: {path}") + hashes[relative]=_sha256(path) + return {"celeris":source_environment,"force_torque_kernel_source_hashes":hashes} + + +def _evaluate_torque_oracle(role_rows, *, D, U, rho, omega, parity_tolerance, zero_tolerance): + """Qualify the raw Celeris torque channel's empirical actuator-to-fluid work sign.""" + if parity_tolerance<0 or zero_tolerance<0: raise ValueError("diagnostic tolerances must be nonnegative") + means={role:float(np.mean(np.asarray(role_rows[role],float)[:,2])) for role in TORQUE_ORACLE_ROLES} + driven=max(abs(means["plus_omega"]),abs(means["minus_omega"])); scale=max(driven,np.finfo(float).tiny) + sign={"plus_omega":bool(means["plus_omega"]*omega>0),"minus_omega":bool(means["minus_omega"]*(-omega)>0)} + parity=float(abs(means["plus_omega"]+means["minus_omega"])/scale); zero_ratio=float(abs(means["zero"])/scale) + powers={"plus_omega":float(omega*means["plus_omega"]),"minus_omega":float((-omega)*means["minus_omega"])} + gates={"same_sign_torque_and_rotation_both_directions":bool(all(sign.values())), + "odd_torque_parity":bool(parity<=parity_tolerance),"zero_role_bounded":bool(zero_ratio<=zero_tolerance), + "positive_omega_tau_actuator_power_both_directions":bool(all(value>0 for value in powers.values()))} + denom_tau=.5*rho*U*U*D*D; denom_power=.5*rho*U**3*D; roles={}; actions={"plus_omega":omega,"minus_omega":-omega,"zero":0.0} + for role in TORQUE_ORACLE_ROLES: + tau=means[role]; action=actions[role]; power=action*tau + roles[role]={"action_omega":float(action),"clock_columns":["lattice_step","tU_over_D"], + "raw_normalize_true_torque":[list(map(float,row)) for row in role_rows[role]], + "mean_raw_torque":tau,"C_tau":float(tau/denom_tau), + "actuator_power_omega_tau":float(power),"C_P":float(power/denom_power)} + passed=bool(all(gates.values())) + return {"qualification":"PASS" if passed else "BOUNDED","strict_pass":passed, + "celeris_torque_channel_work_sign":"actuator_on_fluid" if passed else "not_established", + "force_ownership":"not_established","newton_pair_force_ownership_inference":"prohibited_from_torque_oracle", + "ownership_established":"not_established","gates":gates, + "diagnostics":{"sign_products_tau_omega":{"plus_omega":means["plus_omega"]*omega,"minus_omega":means["minus_omega"]*(-omega)}, + "odd_parity_relative_defect":parity,"odd_parity_tolerance":float(parity_tolerance), + "zero_to_driven_torque_ratio":zero_ratio,"zero_role_tolerance":float(zero_tolerance)},"roles":roles} + + +def load_qualify_torque_oracle(path): + """Authenticate an oracle and apply the corrected runtime interpretation.""" + path=Path(path); file=path/"oracle.json" if path.is_dir() else path + raw=json.loads(file.read_text()); payload=raw.pop("payload_sha256",None) + if raw.get("schema")!=TORQUE_ORACLE_SCHEMA or payload!=hashlib.sha256(_canonical_json(raw)).hexdigest(): + raise ValueError("torque oracle payload authentication failed") + setup=raw.get("setup",{}); rows={role:raw.get("roles",{}).get(role,{}).get("raw_normalize_true_torque") for role in TORQUE_ORACLE_ROLES} + if any(value is None for value in rows.values()): raise ValueError("torque oracle lacks raw role telemetry") + actions=setup.get("exact_actions_by_role",{}); omega=float(actions.get("plus_omega",0.)) + if omega<=0 or actions.get("minus_omega")!=-omega or actions.get("zero")!=0.: raise ValueError("torque oracle exact actions invalid") + evaluated=_evaluate_torque_oracle(rows,D=setup["D"],U=setup["U"],rho=setup["rho"],omega=omega, + parity_tolerance=raw.get("diagnostics",{}).get("odd_parity_tolerance",.1), + zero_tolerance=raw.get("diagnostics",{}).get("zero_role_tolerance",.1)) + if not evaluated["strict_pass"]: raise ValueError("torque oracle fails corrected actuator-on-fluid gates") + return {"path":str(file.resolve()),"sha256":_sha256(file),"bytes":file.stat().st_size,"payload_sha256":payload, + "runtime_interpretation":evaluated},raw + + +def qualify_torque_oracle(out, *, intended_celeris_root, D=20.0, U=.01, rho=1.0, omega=.002, + t_end=2.0, sample_dt=.25, parity_tolerance=.1, zero_tolerance=.1, + simulation_factory=None, source_environment=None, cooldown=True): + """Run fresh +omega, -omega, and zero one-circle simulations and publish once.""" + out=Path(out) + if out.exists(): raise FileExistsError(f"refusing to clobber {out}") + if not out.parent.is_dir(): raise FileNotFoundError(f"artifact parent does not exist: {out.parent}") + if not np.isfinite([omega,t_end,sample_dt]).all() or omega<=0 or t_end<=0 or sample_dt<=0: + raise ValueError("omega, t_end, and sample_dt must be finite and positive") + root=Path(intended_celeris_root).expanduser().resolve(strict=True) + celeris_module=None; production=simulation_factory is None + if production: + _assert_cfd_environment(intended_celeris_root=root) + import CelerisLab + celeris_module=CelerisLab; simulation_factory=CelerisLab.Simulation + cfg,center,radius=_torque_oracle_config(D,U,rho) + steps=int(round(t_end*D/U)); stride=int(round(sample_dt*D/U)) + if steps<2*stride or steps%stride: raise ValueError("t_end/sample_dt must form at least two exact sample intervals") + sources=_torque_oracle_source_record(root,celeris_module=celeris_module,source_environment=source_environment) + actions={"plus_omega":float(omega),"minus_omega":-float(omega),"zero":0.0}; rows={} + def run_role(stage, role): + if cooldown: enforce_launch_cooldown() + body={"objects":[{"type":"cylinder","center":center,"radius":radius,"omega":actions[role]}]} + lp=stage/f"{role}-lbm.json"; bp=stage/f"{role}-body.json" + lp.write_text(json.dumps(cfg)); bp.write_text(json.dumps(body)) + sim=simulation_factory(lbm_config_path=str(lp),body_config_path=str(bp)); role_rows=[] + try: + if sim.bodies.count!=1 or [obj.obj_id for obj in sim.bodies.objects]!=[0]: raise RuntimeError("oracle requires exactly body registry ID 0") + sim.initialize() + for stop in range(stride,steps+1,stride): + sim.run(stride,zero_obs=True) + body_tau=np.asarray(sim.read_body(0,normalize=True).torque,float).reshape(-1) + direct=np.asarray(sim.read_torque(0,normalize=True),float).reshape(-1) + if body_tau.shape!=(1,) or not np.isfinite(body_tau).all() or not np.array_equal(body_tau,direct): + raise RuntimeError("Celeris returned invalid or inconsistent one-body torque") + role_rows.append([stop,stop*U/D,float(body_tau[0])]) + finally: sim.close() + rows[role]=role_rows + @contextmanager + def no_lease(): yield + with (exclusive_cfd_lease(role="torque-oracle") if production else no_lease()): + temporary=Path(tempfile.mkdtemp(prefix=f".{out.name}.roles-",dir=out.parent)) + try: + for role in TORQUE_ORACLE_ROLES: run_role(temporary,role) + finally: + import shutil; shutil.rmtree(temporary) + result=_evaluate_torque_oracle(rows,D=D,U=U,rho=rho,omega=omega,parity_tolerance=parity_tolerance,zero_tolerance=zero_tolerance) + artifact={"schema":TORQUE_ORACLE_SCHEMA,"immutable":True, + "setup":{"justification":"single isolated rotating circle is the smallest canonical cut-link setup that isolates torque-channel work sign and odd rotational response without assigning force ownership", + "D":float(D),"U":float(U),"rho":float(rho),"Re_D":50.0,"two_dimensional_per_unit_span":True, + "center_xy":center,"radius":radius,"config_lbm":cfg,"fresh_simulation_per_role":True, + "read_semantics":{"normalize":True,"meaning":"cut-link lattice torque averaged once per accumulated LBM step; no coefficient, density, dynamic-pressure, body, or span normalization"}, + "t_end_U_over_D":float(t_end),"sample_dt_U_over_D":float(sample_dt),"final_lattice_step":steps,"sample_stride_lattice_steps":stride, + "exact_actions_by_role":actions}, + "source_identity":sources,**result} + artifact["payload_sha256"]=hashlib.sha256(_canonical_json(artifact)).hexdigest() + temporary=Path(tempfile.mkdtemp(prefix=f".{out.name}.tmp-",dir=out.parent)) + try: + (temporary/"oracle.json").write_text(json.dumps(artifact,indent=2,sort_keys=True,allow_nan=False)+"\n") + _publish_directory_no_replace(temporary,out) + finally: + if temporary.exists(): + import shutil; shutil.rmtree(temporary) + return artifact + +def _load_hashed_json(path, label): + path=Path(path).resolve(strict=True); value=json.loads(path.read_text()); claimed=value.pop("payload_sha256",None) + if not claimed or claimed!=hashlib.sha256(_canonical_json(value)).hexdigest(): raise ValueError(label+" payload authentication failed") + value["payload_sha256"]=claimed; return value + + +def _load_ccd_publication(root): + root=Path(root).resolve(strict=True); mp=root/"manifest.json" + if not mp.is_file(): raise ValueError("CCD manifest missing") + manifest=json.loads(mp.read_text()); files=manifest.get("files") + if manifest.get("complete") is not True or manifest.get("schema_id")!="ccd-karman-corrected-publication/v3" or not isinstance(files,dict) or "RESULTS.json" not in files: raise ValueError("CCD manifest schema/files invalid") + for name,digest in files.items(): + candidate=(root/name).resolve() + try: candidate.relative_to(root) + except ValueError as exc: raise ValueError("CCD manifest path escapes root") from exc + if not isinstance(digest,str) or len(digest)!=64 or not candidate.is_file() or _sha256(candidate)!=digest: raise ValueError("CCD manifest authentication failed: "+name) + result=json.loads((root/"RESULTS.json").read_text()) + if result.get("schema_id")!=manifest["schema_id"]: raise ValueError("CCD schema mismatch") + return result,{"path":str(root),"manifest_sha256":_sha256(mp),"files":dict(sorted(files.items()))} + + +def _load_sr_constant(path): + import re + path=Path(path).resolve(strict=True); catalog=path if path.suffix==".json" else path.parent/"catalog.json" + if not catalog.is_file(): raise ValueError("structured SR source unavailable") + data=json.loads(catalog.read_text()) + if data.get("schema_version")!="sr-results-catalog-v1": raise ValueError("SR catalog schema mismatch") + text=json.dumps(data,sort_keys=True); hits=re.findall(r"alpha_U = 1\.307782 Cl_rear,s - (3\.431209)",text) + if len(hits)!=1: raise ValueError("SR structured extraction is not unique") + return -float(hits[0]),catalog,{"path":str(catalog),"sha256":_sha256(catalog),"schema":data["schema_version"],"extraction_matches":1} + + +def _publication_metric(qin,qctl,*,center_x,D,U): + if not np.array_equal(qctl["x"],qin["x"]) or not np.array_equal(qctl["y"],qin["y"]): raise ValueError("qin/qctl grids differ") + xd=(qctl["x"]-center_x)/D; j=int(np.argmin(abs(xd-10))); common=qctl["fluid_mask"][:,j]&qin["fluid_mask"][:,j]; common[:2]=False; common[-2:]=False + direct=profile_errors(U+qctl["ux"][common,j]-qin["ux"][common,j],qctl["uy"][common,j]-qin["uy"][common,j],u_inf=U) + ideal=profile_errors(qctl["ux"][common,j],qctl["uy"][common,j],u_inf=U) + return direct,ideal,j,common + + +def _configure_publication_rendering(): + import locale + os.environ["TZ"]="UTC" + if hasattr(time,"tzset"): time.tzset() + selected=None + for candidate in ("C.UTF-8","C"): + try: selected=locale.setlocale(locale.LC_ALL,candidate); break + except locale.Error: pass + if selected is None: raise RuntimeError("unable to set C locale") + import matplotlib; matplotlib.use("Agg",force=True) + matplotlib.rcParams.update({"font.family":"DejaVu Sans","font.sans-serif":["DejaVu Sans"],"axes.unicode_minus":False,"savefig.dpi":180,"pdf.fonttype":42,"path.simplify":False,"svg.hashsalt":"steady-publication-v3"}) + return matplotlib,selected + + +def publish_article(*,steady,ledger,causal_analysis,causal_campaign,return_analysis,return_campaign,strip,ccd,sr,out): + matplotlib,selected_locale=_configure_publication_rendering() + import matplotlib.pyplot as plt + from matplotlib.patches import Circle + out=Path(out); steady=Path(steady).resolve(strict=True) + paths={"ledger":Path(ledger).resolve(strict=True),"causal_analysis":Path(causal_analysis).resolve(strict=True),"causal_campaign":Path(causal_campaign).resolve(strict=True),"return_analysis":Path(return_analysis).resolve(strict=True),"return_campaign":Path(return_campaign).resolve(strict=True),"strip":Path(strip).resolve(strict=True),"ccd":Path(ccd).resolve(strict=True),"sr":Path(sr).resolve(strict=True)} + if out.exists(): raise FileExistsError(f"refusing to clobber {out}") + names=("stationary","accepted-s3.55","reverse-s5.2"); ep={n:load_validate_artifact(steady/n) for n in ("qin",)+names} + L,C,R,S=(_load_hashed_json(paths[k],k) for k in ("ledger","causal_analysis","return_analysis","strip")) + if Path(L["campaign"]).resolve()!=steady or C["classification"]!="BOUNDED" or R["classification"]!="BOUNDED" or S["classification"]["confinement_mechanism"]!="FAIL": raise ValueError("input contract mismatch") + _,cr=load_transient_campaign(paths["causal_campaign"],campaign_kind="causal-switch"); _,rr=load_transient_campaign(paths["return_campaign"],campaign_kind="nonlinear-return") + ccdj,ccd_binding=_load_ccd_publication(paths["ccd"]); sr_constant,sr_catalog,sr_binding=_load_sr_constant(paths["sr"]) + tmp=Path(tempfile.mkdtemp(prefix=".article-",dir=out.parent)); figs=[] + pdf_meta={"Creator":"DynamisLab steady publisher v3","Producer":"Matplotlib","CreationDate":None,"ModDate":None}; png_meta={"Software":"DynamisLab steady publisher v3"} + def save(fig,n): + fig.savefig(tmp/f"{n}.png",dpi=180,bbox_inches="tight",metadata=png_meta); figs.append(f"{n}.png") + fig.savefig(tmp/f"{n}.pdf",dpi=180,bbox_inches="tight",metadata=pdf_meta); figs.append(f"{n}.pdf") + plt.close(fig) + try: + fig,ax=plt.subplots(2,2,figsize=(9,6)) + for a,t in zip(ax.flat,("endpoint performance\nEinf=0.02317","potential sign\nFAIL","NS partial ledger\nno residual","transient / return\nBOUNDED")): a.axis("off"); a.text(.5,.5,t,ha="center",va="center",fontsize=14) + save(fig,"01_evidence_overview") + g=S["finite_re_reconciliation"]; fig,a=plt.subplots(); a.bar(("potential g_opt","finite-Re g"),(g["theoretical_rear_opposite_g_opt_layer40"],g["actual_wls_g"])); a.axhline(0,color="k"); save(fig,"02_potential_sign_counterexample") + labels=("stationary","accepted","reverse"); spec=ep[names[1]][0]["spec"]; D=spec["D"]; U=spec["config_lbm"]["physics"]["velocity"]; center=spec["centers_xy"][0]; fig,ax=plt.subplots(3,3,figsize=(12,9)) + for i,n in enumerate(names): + a=ep[n][1]; x=(a["x"]-center[0])/D; y=(a["y"]-center[1])/D; X=(x>=-1)&(x<=10); Y=(y>=-3)&(y<=3); ux=a["ux"]/U-1 + omega,usable=conservative_masked_vorticity(a["x"],a["y"],a["ux"],a["uy"],a["fluid_mask"]); om=np.ma.masked_where(~usable,omega*D/U); extent=(x[X][0],x[X][-1],y[Y][0],y[Y][-1]) + ax[i,0].imshow(ux[np.ix_(Y,X)],extent=extent,origin="lower",aspect="auto",vmin=-1,vmax=1,cmap="coolwarm"); ax[i,1].imshow(om[np.ix_(Y,X)],extent=extent,origin="lower",aspect="auto",vmin=-5,vmax=5,cmap="RdBu_r") + for xd in (2,4,6,10): j=int(np.argmin(abs(x-xd))); m=a["fluid_mask"][:,j]; ax[i,2].plot(a["ux"][m,j]/U,y[m],label=f"x/D={xd}") + for field in ax[i,:2]: + field.set_xlabel("x/D"); field.set_ylabel("y/D"); field.axvline(10,color="k",ls="--",lw=.5); field.text(-.8,2.5,"U∞ →",fontsize=7) + for cx,cy in spec["centers_xy"]: field.add_patch(Circle(((cx-center[0])/D,(cy-center[1])/D),.5,fill=False,color="black",lw=.8)) + ax[i,2].set_ylabel("y/D"); ax[i,2].set_xlabel("u_x/U∞"); ax[i,0].set_title(labels[i]) + ax[0,0].set_title("u_x/U∞−1; x/D,y/D"); ax[0,1].set_title("ωD/U∞; conservative fluid stencil"); ax[0,2].set_title("profile stations"); ax[0,2].legend(fontsize=7); save(fig,"03_steady_fields_profiles") + cases=L["cases"]; fig,ax=plt.subplots(2,2,figsize=(9,7)) + ax[0,0].bar(labels,[cases[n]["gap_fluxes_separate_orientations"]["rear_rear"]["dimensionless"]["Q_star"] for n in names]); ax[0,0].set_title("rear-gap Q*") + ax[0,1].bar(labels,[cases[n]["gap_fluxes_separate_orientations"]["rear_rear"]["dimensionless"]["J_star"] for n in names]); ax[0,1].set_title("rear-gap J*") + ax[1,0].bar(labels,[cases[n]["torque_and_actuator_power"]["C_P"] for n in names]); ax[1,0].set_title("corrected CP") + ax[1,1].text(.5,.5,"spatial flux + dissipation + power\nstorage/time/body terms unavailable",ha="center"); ax[1,1].set_title("partial terms; no residual"); save(fig,"04_ns_corrected_partial_ledger") + fig,ax=plt.subplots(2,2,figsize=(9,7)); base=cr["continue-accepted"][1] + for role in ("zero","equal-amplitude-reverse"): + a=cr[role][1]; t=a["clock"][:,1]; ys=(a["gap_Q"][:,2]-base["gap_Q"][:,2],a["recirculation"][:,0]-base["recirculation"][:,0],a["station_deficits"][:,0]-base["station_deficits"][:,0],a["station_deficits"][:,3]-base["station_deficits"][:,3]) + for z,yv in zip(ax.flat,ys): z.plot(t,yv) + save(fig,"05_transient_selected_channels") + fig,ax=plt.subplots(1,2,figsize=(10,4)) + for role,(m,a) in rr.items(): + if role=="continue-accepted": continue + t=a["clock"][:,1]; k=m["campaign_contract"]["action_schedule"][role]["release_index"]; q=a["field_L2_star"][:,0]; ax[0].plot(t,q/q[k],label=role); ax[1].plot(t,R["runs"][role]["branch_order"]) + ax[0].legend(fontsize=6); save(fig,"06_return_curves_branch_order") + q=ep["qin"][1]; a=ep[names[1]][1]; direct,ideal,j,common=_publication_metric(q,a,center_x=center[0],D=D,U=U) + if direct["E_inf_vector"]!=0.0231672176752314: raise ValueError("primary metric identity mismatch") + nums={"primary_E_inf_vector_qctl_vs_qin_x_over_D_10":direct["E_inf_vector"],"ideal_uniform_reference_diagnostic_E_inf_vector":ideal["E_inf_vector"],"accepted_settling":ep[names[1]][0]["result"]["settling"]["value"],"g_opt":g["theoretical_rear_opposite_g_opt_layer40"],"g_finite_re":g["actual_wls_g"],"C_P":{n:cases[n]["torque_and_actuator_power"]["C_P"] for n in names},"return_labels":{k:v["label"] for k,v in R["runs"].items()},"causal_realizations":C["realizations"],"ccd_roi_errors":ccdj["roi_mean_target_errors"],"sr_constant":sr_constant} + inputs={"steady":{"path":str(steady),"files":{str(f.relative_to(steady)):_sha256(f) for f in sorted(steady.rglob("*")) if f.is_file()}},"ccd":ccd_binding,"sr":sr_binding} + for k,v in paths.items(): + if k in ("ccd","sr"): continue + inputs[k]={"path":str(v),"sha256":_sha256(v) if v.is_file() else hashlib.sha256(_canonical_json({str(f.relative_to(v)):_sha256(f) for f in sorted(v.rglob("*")) if f.is_file()})).hexdigest()} + command=f'PYTHONPATH="$PWD/src" TZ=UTC LC_ALL=C.UTF-8 conda run -n pinball_math python -m steady_pinball_theory.runner publish-article --steady "{steady}" --ledger "{paths["ledger"]}" --causal-analysis "{paths["causal_analysis"]}" --causal-campaign "{paths["causal_campaign"]}" --return-analysis "{paths["return_analysis"]}" --return-campaign "{paths["return_campaign"]}" --strip "{paths["strip"]}" --ccd "{paths["ccd"]}" --sr "{sr_catalog}" --out "$ARTICLE_OUT"' + res={"schema":"steady-pinball-article/v3","source_identity":{ "git_commit":_git_value(Path(__file__).resolve().parents[2],"rev-parse","HEAD"),"git_status_porcelain_steady_package":_git_value(Path(__file__).resolve().parents[2],"status","--porcelain","--","src/steady_pinball_theory"),"runner_sha256":_sha256(__file__),"metrics_sha256":_sha256(Path(__file__).with_name("metrics.py")),"contract_sha256":_sha256(Path(__file__).with_name("contract.py")),"python":sys.version,"numpy":np.__version__,"matplotlib":matplotlib.__version__,"backend":matplotlib.get_backend(),"locale":selected_locale,"timezone":"UTC","render":{"dpi":180,"font_family":"DejaVu Sans","pdf_metadata":pdf_meta,"png_metadata":png_meta}},"immutable":True,"classification":"BOUNDED","numbers":nums,"inputs":inputs,"figures":figs,"exact_reproduction_command":command}; res["payload_sha256"]=hashlib.sha256(_canonical_json(res)).hexdigest(); (tmp/"RESULTS.json").write_text(json.dumps(res,indent=2,sort_keys=True,allow_nan=False)+"\n") + report=["# 稳态流体弹球论文发布报告(v3)","",f"接受态 x/D=10 直接 q_ctl 对 q_in 全剖面 E∞={nums['primary_E_inf_vector_qctl_vs_qin_x_over_D_10']:.8f};理想均匀参考诊断={nums['ideal_uniform_reference_diagnostic_E_inf_vector']:.9f}。证据支持端点性能和有限时域诊断,不支持完整机制、因果性或稳定性证明。","","## 第一部分:摘要","证据支持端点性能与有限时域诊断,分类为 BOUNDED。","","## 第二部分:方法与恰好四组主公式","### 主公式组 1:壁面定律与符号","(Uw,Vw)=(-omega*ry,omega*rx),x 向右、y 向上,接受动作 [0,+Omega,-Omega]。","### 主公式组 2:格子到无量纲与功约定","x*=x/D,t*=tU∞/D,Q*=Q/(U∞D),J*=J/(rho U∞²D),C_P=sum(omega*tau_read)/(0.5 rho U∞³D)。normalize=True 只按累计 LBM 步平均格子切链和;不做系数、密度、动压、物体或跨度归一化;均为二维单位跨度。","### 主公式组 3:同一控制体动量/能量示意","同一包体 CV 上报告四面动量/机械能空间通量、CV 耗散与 P_act;存储/时间项和物体邻近梯度不可用,因此没有闭合残差。压力为 p'=cs²(rho-rho_ref) 弱可压代理。","### 主公式组 4:权威主指标","E_inf_vector(q_ctl,q_in)=max_y ||q_ctl-q_in||/U∞,x/D=10 完整共同流体剖面,精确值 0.0231672176752314。","","势流 g 与返回 r/m 仅作次级行内解释;g_opt 与有限 Re g 异号,故 FAIL。","","## 第三部分:结果","六幅独立图含定义、方向、单位、事件与图注;场图含圆柱、流向及 x/D=10。","","## 第四部分:讨论","扭矩原始工况经运行时重新解释满足 actuator-on-fluid PASS;不建立力通道所有权。CCD/SR 仅作语境。","","## 第五部分:局限","单次因果实现、有限时域返回、缺失存储/物体梯度均禁止因果、闭合残差与稳定性结论。","","## 第六部分:复现","```bash",command,"```","","## 贡献","统一色标端点场与剖面;修正 CP、间隙、尾迹部分项;瞬态及返回/分支序;全输出哈希绑定且不可覆盖。CCD/SR 仅作交叉参照。","","## 局限","单次因果实现为 BOUNDED;NS 不闭合;返回仅 tU/D=10;势流符号失败;CCD/SR 不证明稳态后体机制。"] + (tmp/"REPORT.md").write_text("\n".join(report)+"\n") + files={f.name:{"sha256":_sha256(f),"bytes":f.stat().st_size} for f in tmp.iterdir() if f.is_file()}; man={"schema":"steady-pinball-article-manifest/v2","immutable":True,"files":files}; man["payload_sha256"]=hashlib.sha256(_canonical_json(man)).hexdigest(); (tmp/"manifest.json").write_text(json.dumps(man,indent=2,sort_keys=True,allow_nan=False)+"\n"); _publish_directory_no_replace(tmp,out); return res + finally: + if tmp.exists(): + import shutil; shutil.rmtree(tmp) + + + +def _display_solid_mask(x,y,centers,radius): + x=np.asarray(x,float); y=np.asarray(y,float); centers=np.asarray(centers,float) + if x.ndim!=1 or y.ndim!=1 or centers.shape!=(3,2) or radius<=0: raise ValueError("invalid display geometry") + xx,yy=np.meshgrid(x,y,indexing="xy"); solid=np.zeros(xx.shape,bool) + for cx,cy in centers: solid|=(xx-cx)**2+(yy-cy)**2<=radius**2 + return solid + + +def _display_fields(a,qin,spec): + if not np.array_equal(a["x"],qin["x"]) or not np.array_equal(a["y"],qin["y"]): raise ValueError("display endpoint grids differ") + D=float(spec["D"]); U=float(spec["config_lbm"]["physics"]["velocity"]); common=a["fluid_mask"]&qin["fluid_mask"] + omega,usable=conservative_masked_vorticity(a["x"],a["y"],a["ux"],a["uy"],a["fluid_mask"]) + disturbance=np.where(common,np.hypot(a["ux"]/U-1,a["uy"]/U),np.nan) + error=np.where(common,np.hypot(a["ux"]-qin["ux"],a["uy"]-qin["uy"])/U,np.nan) + return {"common":common,"vorticity_mask":usable,"disturbance":disturbance,"velocity_error":error,"vorticity_star":np.where(usable,omega*D/U,np.nan)} + + +def _write_display_profiles(path,cases,stations=(2.,4.,6.,10.)): + columns=("case","s","x_over_D","y_over_D","ux_over_U","uy_over_U","velocity_error","vorticity_star","fluid_mask","source_artifact_sha256") + with Path(path).open("w",newline="",encoding="utf-8") as stream: + w=csv.DictWriter(stream,fieldnames=columns,lineterminator="\n"); w.writeheader() + for c in cases: + a=c["arrays"]; f=c["fields"] + for station in stations: + j=int(np.argmin(abs(c["x_D"]-station))) + for i,y in enumerate(c["y_D"]): + fluid=bool(f["common"][i,j]); vort=bool(f["vorticity_mask"][i,j]) + w.writerow({"case":c["name"],"s":"" if c["s"] is None else c["s"],"x_over_D":format(c["x_D"][j],".12g"),"y_over_D":format(y,".12g"),"ux_over_U":format(a["ux"][i,j]/c["U"],".12g") if fluid else "","uy_over_U":format(a["uy"][i,j]/c["U"],".12g") if fluid else "","velocity_error":format(f["velocity_error"][i,j],".12g") if fluid else "","vorticity_star":format(f["vorticity_star"][i,j],".12g") if vort else "","fluid_mask":int(fluid),"source_artifact_sha256":c["source_sha256"]}) + return columns + + + +def _display_qualification(manifest): + result=manifest["result"]; settling=result["settling"] + if not result["qualification_required"]: + if result["qualification_role"]!="unsteady_reference" or settling["qualified"]: + raise ValueError("invalid unsteady-reference qualification semantics") + return "unsteady_reference_not_required_to_settle" + if not result["qualification_passed"] or not settling["qualified"]: + raise ValueError("required display endpoint is not settling-qualified") + return "settling_qualified_steady_endpoint" + + +def _display_diagnostics(cases,qin,ledger_cases): + from .metrics import (absolute_vorticity_moments, near_wall_tangential_speed, + recirculation_observables, tensor_trapezoid_weights, + wake_deficit_observables) + case_rows=[]; gap_rows=[]; station_rows=[] + for c in cases: + name=c["name"]; a=c["arrays"]; f=c["fields"]; m=c["manifest"]; U=c["U"]; D=float(m["spec"]["D"]); led=ledger_cases[name] + weights=tensor_trapezoid_weights(c["x_D"],c["y_D"]); xx,yy=np.meshgrid(c["x_D"],c["y_D"]) + rec_mask=f["common"]&(xx>=1.8)&(xx<=10)&(abs(yy)<=1.5) + rec=recirculation_observables(c["x_D"],a["ux"]/U,rec_mask,weights) + vort_mask=f["vorticity_mask"]&(xx>=1.8)&(xx<4)&(abs(yy)<=3) + vort=absolute_vorticity_moments(c["y_D"],f["vorticity_star"],vort_mask,weights) + centers=np.asarray(m["spec"]["centers_xy"],float); wall=near_wall_tangential_speed(a["x"],a["y"],a["ux"],a["uy"],a["fluid_mask"],a["body_id"],centers,m["spec"]["radius"],body_ids=(1,2),body_labels=("rear_y_plus","rear_y_minus"))["bodies"] + force=np.asarray(a["force_history"][-10:,2:],float).reshape((-1,3,2)).mean(axis=0).sum(axis=0); scale=.5*float(m["spec"]["config_lbm"]["physics"]["rho"])*U*U*D + case_rows.append({"case":name,"s":"" if c["s"] is None else c["s"],"label":c["label"],"status":_display_qualification(m),"settling_value":m["result"]["settling"]["value"],"oracle_bound_C_P":led["torque_and_actuator_power"]["C_P"],"partial_ledger_status":led["same_cv_partial_ledger"]["balance_status"],"residual":"","recirculation_area_D2":rec["area"],"recirculation_x_min_D":"" if rec["x_min"] is None else rec["x_min"],"recirculation_x_max_D":"" if rec["x_max"] is None else rec["x_max"],"recirculation_extent_D":rec["streamwise_extent"],"total_force_x_lattice":force[0],"total_force_y_lattice":force[1],"reported_C_D":force[0]/scale,"reported_C_L":force[1]/scale,"force_ownership":"Celeris reported cut-link force; ownership not established by torque oracle","immediate_wake_abs_vorticity_integral":vort["absolute_vorticity_integral"],"immediate_wake_vorticity_y_width_D":vort["y_width"],"rear_y_plus_rms_tangential_speed_over_U":wall["rear_y_plus"]["rms_tangential_speed"]/U,"rear_y_minus_rms_tangential_speed_over_U":wall["rear_y_minus"]["rms_tangential_speed"]/U,"source_artifact_sha256":c["source_sha256"]}) + for gap,gdata in led["gap_fluxes_separate_orientations"].items(): + gap_rows.append({"case":name,"s":"" if c["s"] is None else c["s"],"gap":gap,"Q_star":gdata["dimensionless"]["Q_star"],"J_star":gdata["dimensionless"]["J_star"],"normal_x":gdata["normal"][0],"normal_y":gdata["normal"][1],"orientation":gdata["orientation"],"endpoint_exclusion_radius_over_D":gdata["endpoint_exclusion_radius_over_D"],"source_artifact_sha256":c["source_sha256"]}) + for station in (2.,4.,6.,10.): + j=int(np.argmin(abs(c["x_D"]-station))); common=f["common"][:,j]; direct=profile_errors(U+a["ux"][common,j]-qin["ux"][common,j],a["uy"][common,j]-qin["uy"][common,j],u_inf=U); wake=wake_deficit_observables(c["y_D"],a["ux"][:,j]/U,common) + station_rows.append({"case":name,"s":"" if c["s"] is None else c["s"],"x_over_D":c["x_D"][j],"E_inf_x":direct["E_inf_x"],"E_inf_y":direct["E_inf_y"],"E_inf_vector":direct["E_inf_vector"],"E_L2_vector":direct["E_L2_vector"],"momentum_deficit_proxy":wake["momentum_deficit_proxy"],"positive_deficit_measure":wake["positive_deficit_measure"],"signed_deficit_integral":wake["signed_deficit_integral"],"common_fluid_points":int(common.sum()),"source_artifact_sha256":c["source_sha256"]}) + return case_rows,gap_rows,station_rows + + +def _write_dict_csv(path,rows): + if not rows: raise ValueError("diagnostic CSV requires rows") + columns=tuple(rows[0]); + if any(tuple(row)!=columns for row in rows): raise ValueError("diagnostic CSV row schema mismatch") + with Path(path).open("w",newline="",encoding="utf-8") as stream: + writer=csv.DictWriter(stream,fieldnames=columns,lineterminator="\n"); writer.writeheader(); writer.writerows(rows) + return columns + +def publish_results_display(*,steady,strip,ledger,out): + """CPU-only immutable publication of steady displays and quantitative CSVs.""" + matplotlib,locale_name=_configure_publication_rendering(); import matplotlib.pyplot as plt + from matplotlib.patches import Circle + from .theory import affine_velocity,strip_basis_affine + steady=Path(steady).resolve(strict=True); strip=Path(strip).resolve(strict=True); ledger=Path(ledger).resolve(strict=True); out=Path(out) + if out.exists(): raise FileExistsError(f"refusing to clobber {out}") + if not out.parent.is_dir(): raise FileNotFoundError(out.parent) + strip_json=strip/"analysis.json" if strip.is_dir() else strip; strip_root=strip_json.parent + S=_load_hashed_json(strip_json,"strip"); L=_load_hashed_json(ledger,"ledger") + strip_npz=strip_root/"strip_arrays.npz"; entry=S["files"]["strip_arrays.npz"] + if _sha256(strip_npz)!=entry["sha256"] or strip_npz.stat().st_size!=entry["bytes"]: raise ValueError("strip arrays authentication failed") + if Path(L["campaign"]).resolve()!=steady: raise ValueError("ledger does not bind steady root") + names=("stationary","accepted-s3.55","reverse-s5.2"); loaded={n:load_validate_artifact(steady/n) for n in ("qin",)+names}; qin=loaded["qin"][1] + spec=loaded["accepted-s3.55"][0]["spec"]; D=float(spec["D"]); U=float(spec["config_lbm"]["physics"]["velocity"]); origin=np.asarray(spec["centers_xy"][0]) + labels={"stationary":"stationary unsteady reference","accepted-s3.55":"accepted s=3.55 (qualified)","reverse-s5.2":"stable reverse s=5.2 (qualified)"}; cases=[] + for name in names: + m,a=loaded[name]; cases.append({"name":name,"label":labels[name],"s":m["spec"].get("s"),"manifest":m,"arrays":a,"fields":_display_fields(a,qin,m["spec"]),"U":U,"x_D":(a["x"]-origin[0])/D,"y_D":(a["y"]-origin[1])/D,"source_sha256":m["files"][ARRAY_FILE]["sha256"]}) + tmp=Path(tempfile.mkdtemp(prefix=f".{out.name}.tmp-",dir=out.parent)); made=[] + def save(fig,name): + for ext,meta in (("png",{"Software":"DynamisLab steady display v1"}),("pdf",{"Creator":"DynamisLab steady display v1","Producer":"Matplotlib","CreationDate":None,"ModDate":None})): + fig.savefig(tmp/f"{name}.{ext}",dpi=240,bbox_inches="tight",metadata=meta); made.append(f"{name}.{ext}") + plt.close(fig) + centers=np.asarray(S["preregistration"]["centers_D"],float); radius=float(S["preregistration"]["radius_D"]) + def cylinders(ax): + for cx,cy in centers: ax.add_patch(Circle((cx,cy),radius,fc="white",ec="black",lw=.9,zorder=10)) + try: + x=np.linspace(-2,10,481); y=np.linspace(-3,3,241); xx,yy=np.meshgrid(x,y); solid=_display_solid_mask(x,y,centers,radius); exterior=~solid + affine=strip_basis_affine(centers,radius,"rear_opposite",H=S["preregistration"]["H_D"],u_inf=1,n_boundary=S["preregistration"]["n_boundary"],source_ratio=S["preregistration"]["source_ratio"],image_layers=40) + g=S["finite_re_reconciliation"]; panels=[] + for label,value in (("MFS zero circulation",0.),("MFS g_opt=+6.147944",g["theoretical_rear_opposite_g_opt_layer40"]),("MFS fitted g=-12.200554",g["actual_wls_g"])): + v=np.zeros(xx.shape+(2,)); v[exterior]=affine_velocity(affine,value,np.column_stack((xx[exterior],yy[exterior]))); panels.append((label,x,y,np.ma.array(v[...,0],mask=solid),np.ma.array(v[...,1],mask=solid))) + for c in cases[1:]: + X=(c["x_D"]>=-2)&(c["x_D"]<=10); Y=(c["y_D"]>=-3)&(c["y_D"]<=3); ix=np.ix_(Y,X); mask=~c["arrays"]["fluid_mask"][ix] + panels.append((c["label"]+" CFD",c["x_D"][X],c["y_D"][Y],np.ma.array(c["arrays"]["ux"][ix]/U,mask=mask),np.ma.array(c["arrays"]["uy"][ix]/U,mask=mask))) + speed_lim=max(float(np.nanpercentile(np.ma.filled(np.hypot(u,v),np.nan),99.5)) for _,_,_,u,v in panels) + fig,axs=plt.subplots(5,1,figsize=(11,13),sharex=True,sharey=True,constrained_layout=True) + for ax,(label,xp,yp,up,vp) in zip(axs,panels): + im=ax.pcolormesh(xp,yp,np.hypot(up,vp),cmap="viridis",vmin=0,vmax=speed_lim,shading="auto",rasterized=True); ax.streamplot(xp,yp,up,vp,color="white",density=1.3,linewidth=.45,arrowsize=.7); cylinders(ax); ax.set_ylabel("y/D"); ax.set_title(label,loc="left",fontsize=10); ax.annotate("flow",(9.5,2.55),(8,2.55),arrowprops={"arrowstyle":"->"}) + axs[-1].set_xlabel("x/D"); fig.colorbar(im,ax=axs,label="total speed |u|/U∞",shrink=.7); save(fig,"01_total_velocity_streamlines") + dlim=max(float(np.nanpercentile(c["fields"]["disturbance"],99.5)) for c in cases); olim=max(float(np.nanpercentile(abs(c["fields"]["vorticity_star"]),99.5)) for c in cases) + fig,axs=plt.subplots(3,3,figsize=(14,8.5),sharex=True,sharey=True,constrained_layout=True) + for row,c in enumerate(cases): + X=(c["x_D"]>=-2)&(c["x_D"]<=10); Y=(c["y_D"]>=-3)&(c["y_D"]<=3); ix=np.ix_(Y,X); a=c["arrays"]; f=c["fields"] + d_im=axs[row,0].pcolormesh(c["x_D"][X],c["y_D"][Y],np.ma.masked_invalid(f["disturbance"][ix]),cmap="magma",vmin=0,vmax=dlim,shading="auto",rasterized=True); o_im=axs[row,1].pcolormesh(c["x_D"][X],c["y_D"][Y],np.ma.masked_invalid(f["vorticity_star"][ix]),cmap="RdBu_r",vmin=-olim,vmax=olim,shading="auto",rasterized=True) + mask=~a["fluid_mask"][ix]; axs[row,2].streamplot(c["x_D"][X],c["y_D"][Y],np.ma.array(a["ux"][ix]/U,mask=mask),np.ma.array(a["uy"][ix]/U,mask=mask),color="black",density=1.3,linewidth=.45,arrowsize=.7) + for ax in axs[row]: cylinders(ax); ax.set_ylabel("y/D") + axs[row,0].text(.02,.94,c["label"],transform=axs[row,0].transAxes,va="top",color="white",bbox={"facecolor":"black","alpha":.45,"edgecolor":"none"}) + for ax,title in zip(axs[0],("velocity disturbance |u/U∞−eₓ|","conservative masked ωD/U∞","total-velocity streamlines")): ax.set_title(title) + for ax in axs[-1]: ax.set_xlabel("x/D") + fig.colorbar(d_im,ax=axs[:,0],label="|u/U∞−eₓ|",shrink=.7); fig.colorbar(o_im,ax=axs[:,1],label="ωD/U∞",shrink=.7); save(fig,"02_cfd_disturbance_vorticity_streamlines") + profile_cols=_write_display_profiles(tmp/"profiles_long.csv",cases); made.append("profiles_long.csv") + summary_cols=("case","s","label","status","qualification_required","settling_qualified","settling_value","max_velocity_error","max_abs_vorticity_star","fluid_points","source_artifact_sha256") + with (tmp/"summary.csv").open("w",newline="",encoding="utf-8") as stream: + w=csv.DictWriter(stream,fieldnames=summary_cols,lineterminator="\n"); w.writeheader() + for c in cases: w.writerow({"case":c["name"],"s":"" if c["s"] is None else c["s"],"label":c["label"],"status":_display_qualification(c["manifest"]),"qualification_required":c["manifest"]["result"]["qualification_required"],"settling_qualified":c["manifest"]["result"]["settling"]["qualified"],"settling_value":c["manifest"]["result"]["settling"]["value"],"max_velocity_error":np.nanmax(c["fields"]["velocity_error"]),"max_abs_vorticity_star":np.nanmax(abs(c["fields"]["vorticity_star"])),"fluid_points":c["fields"]["common"].sum(),"source_artifact_sha256":c["source_sha256"]}) + made.append("summary.csv") + diagnostic_rows,gap_rows,station_rows=_display_diagnostics(cases,qin,L["cases"]) + diagnostic_csv={} + for filename,rows in (("ns_case_summary.csv",diagnostic_rows),("ns_gap_fluxes.csv",gap_rows),("ns_station_diagnostics.csv",station_rows)): + diagnostic_csv[filename]=list(_write_dict_csv(tmp/filename,rows)); made.append(filename) + # Compact diagnostic comparison; it is explicitly not a closed NS balance. + fig,axs=plt.subplots(2,2,figsize=(11,8),constrained_layout=True); display_rows=diagnostic_rows[1:]; names2=[r["label"] for r in display_rows] + axs[0,0].bar(names2,[r["oracle_bound_C_P"] for r in display_rows]); axs[0,0].set_title("Oracle-bound actuator C_P") + gaps=("front_upper_rear","front_lower_rear","rear_rear"); width=.35; pos=np.arange(3) + for k,c in enumerate(cases[1:]): + rows=[r for r in gap_rows if r["case"]==c["name"]]; by={r["gap"]:r for r in rows}; axs[0,1].bar(pos+(k-.5)*width,[by[g]["Q_star"] for g in gaps],width,label=c["label"]) + axs[0,1].axhline(0,color="black",lw=.6); axs[0,1].set_xticks(pos,gaps,rotation=18); axs[0,1].set_title("Signed gap Q* (frozen normals)"); axs[0,1].legend(fontsize=7) + for c in cases[1:]: + rows=[r for r in station_rows if r["case"]==c["name"]]; axs[1,0].plot([r["x_over_D"] for r in rows],[r["E_inf_vector"] for r in rows],marker="o",label=c["label"]) + axs[1,0].set_xlabel("x/D"); axs[1,0].set_ylabel("E∞ vector vs q_in"); axs[1,0].set_title("Wake profile error"); axs[1,0].legend(fontsize=7) + xbars=np.arange(2); axs[1,1].bar(xbars-width/2,[r["recirculation_area_D2"] for r in display_rows],width,label="recirculation area/D²"); axs[1,1].bar(xbars+width/2,[r["immediate_wake_abs_vorticity_integral"] for r in display_rows],width,label="∫|ω*|dA*"); axs[1,1].set_xticks(xbars,names2); axs[1,1].set_title("Selected near-wake diagnostics"); axs[1,1].legend(fontsize=7) + fig.suptitle("Partial endpoint NS diagnostics — no residual closure\naccepted s=3.55 and stable reverse s=5.2 have mismatched amplitudes",fontsize=13); save(fig,"03_ns_diagnostics_partial_no_residual") + readme="""# Steady results display v2 + +This immutable CPU-only artifact renders existing authenticated endpoint fields; it did not execute CFD. + +## Figures + +- `01_total_velocity_streamlines`: total velocity, not disturbance velocity. The three MFS panels are inviscid finite-image strip references at zero circulation, favorable `g_opt`, and the finite-Re fitted `g`. The final panels are accepted `s=3.55` and stable reverse `s=5.2` CFD. Shared speed normalization, arrows, and solid masks support visual comparison, but streamlines do not establish mechanism, stability, or equivalence between potential and viscous flow. +- `02_cfd_disturbance_vorticity_streamlines`: rows are the stationary unsteady reference, accepted qualified endpoint, and stable reverse qualified endpoint. Columns show velocity disturbance from uniform inflow, conservative masked `omega D/U_inf`, and total-velocity streamlines. Blank vorticity cells lack a fully fluid centered stencil. Endpoint fields show spatial structure, not causality or asymptotic stability. +- `03_ns_diagnostics_partial_no_residual`: oracle-bound actuator power, signed gap fluxes using the exact frozen normals in `ns_gap_fluxes.csv`, wake-profile errors, recirculation, and vorticity diagnostics. This is an endpoint spatial partial ledger: storage/time-consistent and some body-adjacent terms are unavailable, so no residual is computed. Accepted `s=3.55` and stable reverse `s=5.2` differ in actuation amplitude and are not a same-amplitude controlled comparison. + +## CSVs + +`profiles_long.csv` retains every row on each selected station; `fluid_mask=1` identifies common case/q_in fluid points, and vorticity is blank only where its conservative stencil is unavailable. `summary.csv` distinguishes an unsteady reference not required to settle from settling-qualified steady endpoints. The three `ns_*.csv` files preserve diagnostics, exact orientations, provenance hashes, and partial-ledger limitations. +""" + (tmp/"README.md").write_text(readme); made.append("README.md") + command=f'PYTHONPATH="$PWD/src" TZ=UTC LC_ALL=C.UTF-8 conda run -n pinball_math python -m steady_pinball_theory.runner publish-results-display --steady "{steady}" --strip "{strip_json}" --ledger "{ledger}" --out "{out}"' + sources={"steady_root":{"path":str(steady),"files":{str(f.relative_to(steady)):_sha256(f) for f in sorted(steady.rglob("*")) if f.is_file()}},"strip_analysis":{"path":str(strip_json),"sha256":_sha256(strip_json)},"strip_arrays":{"path":str(strip_npz),"sha256":_sha256(strip_npz)},"oracle_bound_ledger":{"path":str(ledger),"sha256":_sha256(ledger)}} + manifest={"schema":"steady-pinball-results-display/v2","immutable":True,"scientific_scope":"CPU-only rendering and CSV export; no CFD executed","labels":labels,"orientation":{"array_axes":"yx","coordinates":"x-right_y-up","axes":"x/D horizontal, y/D vertical","origin":"front cylinder center"},"units":{"x_over_D":"1","y_over_D":"1","ux_over_U":"1","uy_over_U":"1","velocity_error":"|q_case-q_in|/U_inf","vorticity_star":"omega D/U_inf","fluid_mask":"boolean 0/1"},"color_limits":{"total_speed_over_U":[0,speed_lim],"velocity_disturbance":[0,dlim],"vorticity_star":[-olim,olim]},"masks":{"cfd":"solver FLUID-bit mask; vorticity additionally requires an all-fluid conservative centered stencil","potential":"analytic closed cylinder interiors masked before MFS evaluation and streamplot"},"csv":{"profiles_long":{"path":"profiles_long.csv","columns":list(profile_cols),"stations_x_over_D":[2,4,6,10]},"summary":{"path":"summary.csv","columns":list(summary_cols)},"diagnostics":diagnostic_csv},"potential":{"model":"finite-image free-slip-strip MFS rear_opposite affine circulation basis","image_layers":40,"g_values":[0,g["theoretical_rear_opposite_g_opt_layer40"],g["actual_wls_g"]],"total_velocity":True},"render":{"matplotlib":matplotlib.__version__,"backend":matplotlib.get_backend(),"locale":locale_name,"timezone":"UTC","dpi":240,"shared_normalization":True,"streamline_arrowheads":True},"interpretation":{"partial_ledger":"endpoint spatial partial; no residual closure","amplitude_mismatch":"accepted s=3.55 versus stable reverse s=5.2","panel_guide":"README.md"},"sources":sources,"exact_reproduction_command":command} + manifest["files"]={name:{"sha256":_sha256(tmp/name),"bytes":(tmp/name).stat().st_size} for name in made}; manifest["payload_sha256"]=hashlib.sha256(_canonical_json(manifest)).hexdigest(); (tmp/"manifest.json").write_text(json.dumps(manifest,indent=2,sort_keys=True,allow_nan=False)+"\n"); _publish_directory_no_replace(tmp,out); return manifest + finally: + if tmp.exists(): + import shutil; shutil.rmtree(tmp) + def main(argv=None): - p=argparse.ArgumentParser(); p.add_argument('command',choices=['oracle','diagnostic']); p.add_argument('--out',type=Path) - p.add_argument('--D',type=float,default=10.0); p.add_argument('--s',type=float,default=5.0); p.add_argument('--t-end',type=float,default=40.0); p.add_argument('--sample-dt',type=float,default=2.0) - a=p.parse_args(argv); c=CanonicalContract(diameter=a.D) - if a.command=='oracle': print(json.dumps(c.oracle(a.s),indent=2)); return 0 - if a.out is None: p.error('--out required') - a.out.mkdir(parents=True,exist_ok=False) - rows=[] - for b in ('qin','plus-minus','minus-plus'): - rows.append(run_case(a.out/b,branch=b,s=a.s,D=a.D,t_end=a.t_end,sample_dt=a.sample_dt)) - - q=np.load(a.out/'qin'/'endpoint.npz'); ix=int(round(c.centers[0][0]+c.primary_station_d*a.D)); refux=q['ux'][2:-2,ix]; refuy=q['uy'][2:-2,ix] - for row in rows: - e=np.load(a.out/row['branch']/'endpoint.npz'); du=(e['ux'][2:-2,ix]-refux)/c.u_inf; dv=(e['uy'][2:-2,ix]-refuy)/c.u_inf; vec=np.hypot(du,dv) - row['direct_qin']={"E_inf_x":float(np.max(np.abs(du))),"E_inf_y":float(np.max(np.abs(dv))),"E_inf_vector":float(np.max(vec)),"E_L2_vector":float(np.sqrt(np.mean(vec*vec)))} - (a.out/'summary.json').write_text(json.dumps(rows,indent=2)); return 0 - -if __name__=='__main__': raise SystemExit(main()) + p=argparse.ArgumentParser(); sub=p.add_subparsers(dest="command",required=True) + val=sub.add_parser("validate"); val.add_argument("artifact",type=Path) + article=sub.add_parser("publish-article") + display=sub.add_parser("publish-results-display") + for flag in ("steady","strip","ledger","out"): display.add_argument("--"+flag,type=Path,required=True) + for flag in ("steady","ledger","causal-analysis","causal-campaign","return-analysis","return-campaign","strip","ccd","sr","out"): article.add_argument("--"+flag,type=Path,required=True) + transient_val=sub.add_parser("validate-transient"); transient_val.add_argument("artifact",type=Path) + transient_inspect=sub.add_parser("inspect-transient"); transient_inspect.add_argument("artifact",type=Path) + transient_migrate=sub.add_parser("migrate-transient-ownership"); transient_migrate.add_argument("source",type=Path); transient_migrate.add_argument("--oracle",type=Path,required=True); transient_migrate.add_argument("--out",type=Path,required=True) + causal_v2=sub.add_parser("analyze-causal-switch"); causal_v2.add_argument("campaign",type=Path); causal_v2.add_argument("--out",type=Path,required=True); causal_v2.add_argument("--explicit-floor",type=float,default=1e-6) + return_v2=sub.add_parser("analyze-nonlinear-return"); return_v2.add_argument("campaign",type=Path); return_v2.add_argument("--out",type=Path,required=True) + analyze=sub.add_parser("analyze"); analyze.add_argument("campaign",type=Path); analyze.add_argument("--out",type=Path,required=True) + steady_analyze=sub.add_parser("analyze-steady"); steady_analyze.add_argument("campaign",type=Path); steady_analyze.add_argument("--out",type=Path,required=True) + ns_analyze=sub.add_parser("analyze-ns-ledger"); ns_analyze.add_argument("campaign",type=Path); ns_analyze.add_argument("--out",type=Path,required=True) + cred=sub.add_parser("analyze-credibility"); cred.add_argument("--out",type=Path,required=True); cred.add_argument("--evidence-root",type=Path); cred.add_argument("--agreement-tol",type=float,default=0.05) + promote=sub.add_parser("promote-evidence"); promote.add_argument("source",type=Path); promote.add_argument("dest",type=Path); promote.add_argument("--question",required=True); promote.add_argument("--notes",default="") + strip=sub.add_parser("analyze-strip"); strip.add_argument("--out",type=Path,required=True); strip.add_argument("--finite-analysis",type=Path) + karman=sub.add_parser("karman-baseline"); karman.add_argument("--out",type=Path,default=Path("/tmp/karman-baseline-20260806")) + semi=sub.add_parser("analyze-semi-analytic"); semi.add_argument("--out",type=Path,required=True); semi.add_argument("--evidence-root",type=Path) + oracle=sub.add_parser("oracle"); oracle.add_argument("--D",type=float,default=20.0); oracle.add_argument("--s",type=float,default=3.55) + reinterpret_oracle=sub.add_parser("reinterpret-torque-oracle"); reinterpret_oracle.add_argument("oracle",type=Path) + torque_oracle=sub.add_parser("qualify-torque-oracle"); torque_oracle.add_argument("--celeris-root",type=Path,required=True); torque_oracle.add_argument("--out",type=Path,required=True); torque_oracle.add_argument("--D",type=float,default=20.0); torque_oracle.add_argument("--U",type=float,default=.01); torque_oracle.add_argument("--rho",type=float,default=1.0); torque_oracle.add_argument("--omega",type=float,default=.002); torque_oracle.add_argument("--t-end",type=float,default=2.0); torque_oracle.add_argument("--sample-dt",type=float,default=.25); torque_oracle.add_argument("--parity-tol",type=float,default=.1); torque_oracle.add_argument("--zero-tol",type=float,default=.1) + acquire=sub.add_parser("acquire"); acquire.add_argument("--celeris-root",type=Path,required=True); acquire.add_argument("--role",choices=STEADY_ROLES,required=True); acquire.add_argument("--out",type=Path,required=True); acquire.add_argument("--D",type=float,default=20.0); acquire.add_argument("--s",type=float) + steady=sub.add_parser("steady-contract"); steady.add_argument("--celeris-root",type=Path,required=True); steady.add_argument("--out",type=Path,required=True); steady.add_argument("--D",type=float,default=20.0) + campaign=sub.add_parser("campaign"); campaign.add_argument("--celeris-root",type=Path,required=True); campaign.add_argument("--out",type=Path,required=True); campaign.add_argument("--D",type=float,default=20.0); campaign.add_argument("--s",type=float); campaign.add_argument("--t-end",type=float,default=250.0); campaign.add_argument("--sample-dt",type=float,default=2.0) + parent_cmd=sub.add_parser("acquire-parent"); parent_cmd.add_argument("--celeris-root",type=Path,required=True); parent_cmd.add_argument("--out",type=Path,required=True); parent_cmd.add_argument("--D",type=float,default=20.0); parent_cmd.add_argument("--s",type=float,default=3.55) + switch_cmd=sub.add_parser("acquire-causal-switch"); switch_cmd.add_argument("--celeris-root",type=Path,required=True); switch_cmd.add_argument("--parent",type=Path,required=True); switch_cmd.add_argument("--accepted-endpoint",type=Path,required=True); switch_cmd.add_argument("--reverse-endpoint",type=Path,required=True); switch_cmd.add_argument("--campaign-id",required=True); switch_cmd.add_argument("--out",type=Path,required=True); switch_cmd.add_argument("--horizon",type=float,default=10.0); switch_cmd.add_argument("--sample-dt",type=float,default=.1) + stability_cmd=sub.add_parser("acquire-stability"); stability_cmd.add_argument("--celeris-root",type=Path,required=True); stability_cmd.add_argument("--parent",type=Path,required=True); stability_cmd.add_argument("--accepted-endpoint",type=Path,required=True); stability_cmd.add_argument("--reverse-endpoint",type=Path,required=True); stability_cmd.add_argument("--campaign-id",required=True); stability_cmd.add_argument("--out",type=Path,required=True); stability_cmd.add_argument("--amplitude",type=float,action="append",required=True); stability_cmd.add_argument("--horizon",type=float,default=10.0); stability_cmd.add_argument("--pulse-duration",type=float,default=.5); stability_cmd.add_argument("--sample-dt",type=float,default=.1) + diagnostic=sub.add_parser("diagnostic"); diagnostic.add_argument("--celeris-root",type=Path,required=True); diagnostic.add_argument("--out",type=Path,required=True); diagnostic.add_argument("--D",type=float,default=20.0); diagnostic.add_argument("--s",type=float,default=3.55); diagnostic.add_argument("--branch",choices=("plus-minus","minus-plus"),default="plus-minus"); diagnostic.add_argument("--t-end",type=float,default=250.0); diagnostic.add_argument("--sample-dt",type=float,default=2.0) + a=p.parse_args(argv) + if a.command=="publish-results-display": + r=publish_results_display(steady=a.steady,strip=a.strip,ledger=a.ledger,out=a.out); print(json.dumps({"schema":r["schema"],"payload_sha256":r["payload_sha256"]},indent=2)); return 0 + if a.command=="publish-article": + r=publish_article(steady=a.steady,ledger=a.ledger,causal_analysis=a.causal_analysis,causal_campaign=a.causal_campaign,return_analysis=a.return_analysis,return_campaign=a.return_campaign,strip=a.strip,ccd=a.ccd,sr=a.sr,out=a.out); print(json.dumps({"schema":r["schema"],"payload_sha256":r["payload_sha256"]},indent=2)); return 0 + if a.command=="validate": print(json.dumps(load_validate_artifact(a.artifact)[0],indent=2)); return 0 + if a.command=="validate-transient": print(json.dumps(inspect_transient(a.artifact),indent=2,sort_keys=True,allow_nan=False)); return 0 + if a.command=="inspect-transient": print(json.dumps(inspect_transient(a.artifact),indent=2,sort_keys=True,allow_nan=False)); return 0 + if a.command=="migrate-transient-ownership": + contract,roles=migrate_transient_ownership(a.source,a.oracle,a.out); print(json.dumps({"schema":contract["schema"],"campaign_id":contract["campaign_id"],"roles":sorted(roles)},indent=2)); return 0 + if a.command=="analyze-causal-switch": print(json.dumps(analyze_causal_switch_v2(a.campaign,a.out,explicit_floor=a.explicit_floor),indent=2,sort_keys=True,allow_nan=False)); return 0 + if a.command=="analyze-nonlinear-return": print(json.dumps(analyze_nonlinear_return_v2(a.campaign,a.out),indent=2,sort_keys=True,allow_nan=False)); return 0 + if a.command=="analyze": print(json.dumps(analyze_campaign(a.campaign,a.out)["classification"],indent=2)); return 0 + if a.command=="analyze-steady": + result=analyze_steady_contract(a.campaign,a.out) + print(json.dumps({"schema":result["schema"],"classification":result["classification"]},indent=2)); return 0 + if a.command=="analyze-ns-ledger": + result=analyze_ns_ledger(a.campaign,a.out) + print(json.dumps({"schema":result["schema"],"claim_classification":result["claim_classification"]},indent=2)); return 0 + if a.command=="analyze-credibility": print(json.dumps(analyze_credibility(out=a.out,evidence_root=a.evidence_root,agreement_tol=a.agreement_tol)["classification"],indent=2)); return 0 + if a.command=="promote-evidence": print(json.dumps(promote_evidence(a.source,a.dest,scientific_question=a.question,notes=a.notes),indent=2)); return 0 + if a.command=="analyze-strip": print(json.dumps(analyze_strip(a.out,finite_analysis=a.finite_analysis)["classification"],indent=2)); return 0 + if a.command=="karman-baseline": print(json.dumps(write_karman_baseline(a.out)["classification"],indent=2)); return 0 + if a.command=="analyze-semi-analytic": print(json.dumps(analyze_semi_analytic(out=a.out,evidence_root=a.evidence_root)["classification"],indent=2)); return 0 + if a.command=="oracle": print(json.dumps(CanonicalContract(diameter=a.D).oracle(a.s),indent=2)); return 0 + if a.command=="reinterpret-torque-oracle": + binding,stored=load_qualify_torque_oracle(a.oracle); result=binding["runtime_interpretation"] + print(json.dumps({"schema":stored["schema"],"stored_qualification":stored.get("qualification"),"immutable_source":binding,"reinterpreted":result},indent=2,sort_keys=True,allow_nan=False)); return 0 + if a.command=="qualify-torque-oracle": + result=qualify_torque_oracle(a.out,intended_celeris_root=a.celeris_root,D=a.D,U=a.U,rho=a.rho,omega=a.omega,t_end=a.t_end,sample_dt=a.sample_dt,parity_tolerance=a.parity_tol,zero_tolerance=a.zero_tol) + print(json.dumps({"schema":result["schema"],"qualification":result["qualification"],"celeris_torque_channel_work_sign":result["celeris_torque_channel_work_sign"],"force_ownership":result["force_ownership"]},indent=2)); return 0 + if a.command=="acquire-parent": acquire_accepted_parent(a.out,intended_celeris_root=a.celeris_root,s=a.s,D=a.D); return 0 + if a.command=="acquire-causal-switch": acquire_causal_switch_v2(a.out,parent=a.parent,accepted_endpoint=a.accepted_endpoint,reverse_endpoint=a.reverse_endpoint,intended_celeris_root=a.celeris_root,campaign_id=a.campaign_id,horizon=a.horizon,sample_dt=a.sample_dt); return 0 + if a.command=="acquire-stability": acquire_nonlinear_return_v2(a.out,parent=a.parent,accepted_endpoint=a.accepted_endpoint,reverse_endpoint=a.reverse_endpoint,intended_celeris_root=a.celeris_root,campaign_id=a.campaign_id,amplitudes=a.amplitude,horizon=a.horizon,pulse_duration=a.pulse_duration,sample_dt=a.sample_dt); return 0 + if a.command=="diagnostic": run_case(a.out,kind="diagnostic",s=a.s,branch=a.branch,D=a.D,t_end=a.t_end,sample_dt=a.sample_dt,intended_celeris_root=a.celeris_root); return 0 + if a.command=="acquire": + required_s=3.55 if a.role=="accepted" else (5.2 if a.role=="reverse" else None) + if a.role in ("qin","stationary") and a.s is not None: p.error(f"{a.role} rejects --s") + run_case(a.out,kind=a.role,s=required_s if a.s is None else a.s,D=a.D,intended_celeris_root=a.celeris_root); return 0 + if a.command=="steady-contract": + roles=(("qin","qin",None),("stationary","stationary",None),("accepted-s3.55","accepted",3.55),("reverse-s3.55","reverse",3.55),("reverse-s5.2","reverse",5.2)); _assert_cfd_environment(intended_celeris_root=a.celeris_root) + def build(stage,item): + name,kind,svalue=item; enforce_launch_cooldown(); _run_case_unlocked(stage/name,kind=kind,s=svalue,D=a.D,intended_celeris_root=a.celeris_root) + with exclusive_cfd_lease(role="steady-contract"): _atomic_campaign(a.out,roles,build) + return 0 + if a.s is not None: p.error("campaign has frozen s values and rejects --s") + roles=(("qin",None),)+tuple((f"accepted-s{svalue:.2f}",svalue) for svalue in ACCEPTED_S); _assert_cfd_environment(intended_celeris_root=a.celeris_root) + def build(stage,item): + name,svalue=item; enforce_launch_cooldown(); _run_case_unlocked(stage/name,kind="qin" if svalue is None else "accepted",s=svalue,D=a.D,t_end=a.t_end,sample_dt=a.sample_dt,intended_celeris_root=a.celeris_root) + with exclusive_cfd_lease(role="campaign"): _atomic_campaign(a.out,roles,build) + return 0 +if __name__=="__main__": raise SystemExit(main()) diff --git a/src/steady_pinball_theory/tests/test_core.py b/src/steady_pinball_theory/tests/test_core.py index 4918506..8fe941d 100644 --- a/src/steady_pinball_theory/tests/test_core.py +++ b/src/steady_pinball_theory/tests/test_core.py @@ -1,52 +1,1972 @@ import numpy as np -from steady_pinball_theory.contract import CanonicalContract,wall_velocity -from steady_pinball_theory.metrics import profile_errors -from steady_pinball_theory.theory import solve_mfs +import pytest +from pathlib import Path +from steady_pinball_theory.contract import CanonicalContract, NondimensionalContract, wall_velocity +from steady_pinball_theory.metrics import ( + affine_profile_sensitivity, common_exterior_error, gap_flux, + one_sided_profile_error_slopes, profile_errors, reflection_parity_defect, + aligned_position_l2, karman_observer_mask, karman_propagation_metrics, + normalized_invariant_drift, + bilinear_sample_velocity, ccw_contour_circulation, outer_wls_effective_circulation, + outer_wls_total_model, + fit_two_point_affine_closure, predict_affine_closure, strip_modal_projection, + propagate_strip_modes, strip_mode_parity_sector, tensor_trapezoid_weights, + quadrature_l2, conservative_masked_vorticity, absolute_vorticity_moments, + recirculation_observables, wake_deficit_observables, + near_wall_tangential_speed, wall_vorticity_production_proxy, + separation_reattachment_estimator, control_volume_streamwise_momentum_ledger, + torque_power_availability, torque_to_actuator_power, station_flux_metrics, + volume_viscous_dissipation, gap_mass_momentum_flux, + control_volume_mechanical_energy_ledger, fit_conservation_model, + predict_conservation_model, rectangular_control_volume_fluxes, + weak_compressible_pressure_proxy, +) +from steady_pinball_theory.theory import ( + affine_velocity, basis_affine, circulation_basis, cylinder_velocity, + classify_stagnation_root, continue_stagnation_points, dense_diagnostics, + far_field_coefficients, find_interior_stagnation_points, + finite_vortex_rhs, mutual_vortex_velocity, prepare_unbounded_body_response, + rear_opposite_affine, reconstruct_multipoles, singular_velocity, + solve_laurent, solve_mfs, source_multipole_coefficients, velocity_jacobian, + strip_basis_affine, strip_mode_field, exact_circle_vortex_response, + integrate_point_vortices_rk4, karman_self_advection, karman_stable_aspect, + point_vortex_hamiltonian, point_vortex_rhs, staggered_karman_train, + vas_critical_hamiltonian, vas_foppl_equilibrium, vas_foppl_hamiltonian, + vas_foppl_rhs, +) + +CENTERS = np.array([[0.0, 0.0], [1.3, 0.75], [1.3, -0.75]]) + + +def circle_points(radius, n=4096, factor=1.0): + theta = (np.arange(n) + 0.371) * 2 * np.pi / n + normal = np.column_stack((np.cos(theta), np.sin(theta))) + return theta, factor * radius * normal, normal def test_canonical_geometry_and_reynolds(): - c=CanonicalContract(); assert c.centers==((1000.0,299.5),(1026.0,314.5),(1026.0,284.5)); assert c.viscosity==0.004 + c = CanonicalContract() + assert c.centers == ((1000.0, 299.5), (1026.0, 314.5), (1026.0, 284.5)) + assert c.viscosity == 0.004 + def test_source_level_wall_oracle(): - c=CanonicalContract(); o=c.oracle(5.0) - assert o['plus-minus']['action']==[0.0,0.005,-0.005] - assert o['plus-minus']['rear_y_plus_outer_top'][0] < 0 - assert o['plus-minus']['rear_y_plus_gap_bottom'][0] > 0 - assert o['minus-plus']['rear_y_plus_outer_top'][0] > 0 - assert wall_velocity(2,3,4)==(-8.0,6.0) + c = CanonicalContract(); oracle = c.oracle(5.0) + assert oracle["plus-minus"]["action"] == [0.0, 0.005, -0.005] + assert oracle["plus-minus"]["rear_y_plus_outer_top"][0] < 0 + assert oracle["plus-minus"]["rear_y_plus_gap_bottom"][0] > 0 + assert oracle["minus-plus"]["rear_y_plus_outer_top"][0] > 0 + assert wall_velocity(2, 3, 4) == (-8.0, 6.0) + def test_primary_metric_is_pointwise_vector_norm(): - r=profile_errors(np.array([1.,.8]),np.array([0.,.1]),u_inf=1.) - assert np.isclose(r['E_inf_vector'],np.sqrt(.05)) - -def test_unbounded_mfs_impermeability_and_zero_source(): - centers=np.array([[0.,0.],[1.3,.75],[1.3,-.75]]) - sol,diag=solve_mfs(centers,.5,[0.,2.,-2.],n_boundary=48) - assert diag['boundary_Linf'] < 2e-5 - for q in sol.strengths.reshape(3,-1): assert abs(q.sum()) < 1e-10 - -def test_strip_images_reduce_wall_normal_velocity(): - centers=np.array([[0.,0.],[1.3,.75],[1.3,-.75]]) - sol,diag=solve_mfs(centers,.5,[0.,2.,-2.],n_boundary=48,H=15.,image_layers=20) - x=np.linspace(-5,8,300); p=np.r_[np.c_[x,np.full_like(x,15.)],np.c_[x,np.full_like(x,-15.)]] - assert np.max(np.abs(sol.velocity(p)[:,1])) < 2e-3 - assert diag['boundary_Linf'] < 3e-5 + result = profile_errors(np.array([1.0, 0.8]), np.array([0.0, 0.1]), u_inf=1.0) + assert np.isclose(result["E_inf_vector"], np.sqrt(0.05)) -def test_mfs_resolution_and_source_radius_sensitivity(): - centers=np.array([[0.,0.],[1.3,.75],[1.3,-.75]]) - rows=[] - for n in (32,48,64): - for ratio in (.55,.65,.75): - _,d=solve_mfs(centers,.5,[0.,2.,-2.],n_boundary=n,source_ratio=ratio) - rows.append(d['boundary_Linf']) - assert max(rows) < 2e-4 +@pytest.mark.parametrize("kwargs,match", [ + ({"centers": [[0, 0], [0.9, 0]], "radius": 0.5, "circulations": [0, 0]}, "non-overlapping"), + ({"centers": [[0, np.nan]], "radius": 0.5, "circulations": [0]}, "finite"), + ({"centers": [[0, 0]], "radius": 0, "circulations": [0]}, "positive"), + ({"centers": [[0, 0]], "radius": 0.5, "circulations": [0], "u_inf": np.inf}, "finite"), + ({"centers": [[0, 0]], "radius": 0.5, "circulations": [0], "n_boundary": 7}, ">= 8"), + ({"centers": [[0, 0]], "radius": 0.5, "circulations": [0], "n_boundary": 8.0}, "integer"), + ({"centers": [[0, 0]], "radius": 0.5, "circulations": [0], "source_ratio": 1}, "source_ratio"), + ({"centers": [[0, 0.6]], "radius": 0.5, "circulations": [0], "H": 1}, "inside"), + ({"centers": [[0, 0]], "radius": 0.5, "circulations": [0], "image_layers": -1}, ">= 0"), +]) +def test_mfs_rejects_invalid_inputs(kwargs, match): + with pytest.raises(ValueError, match=match): + solve_mfs(**kwargs) -def test_strip_image_layer_sensitivity(): - centers=np.array([[0.,0.],[1.3,.75],[1.3,-.75]]) - vals=[] - for layers in (10,20,40): - sol,d=solve_mfs(centers,.5,[0.,2.,-2.],n_boundary=48,H=15.,image_layers=layers) - vals.append(sol.velocity(np.array([[10.,0.]]))[0]) - assert d['boundary_Linf'] < 4e-5 - assert np.max(np.linalg.norm(np.diff(vals,axis=0),axis=1)) < 2e-4 + + + +def test_vas_exact_foppl_equilibrium_hamiltonian_and_rhs(): + position, kappa = vas_foppl_equilibrium(2.0) + exact = np.array([np.sqrt(55.0) / 4.0, 3.0 / 4.0]) + assert np.allclose(position, exact, atol=2e-15) + assert kappa == 45.0 / 32.0 + assert np.linalg.norm(vas_foppl_rhs(position, kappa)) < 2e-15 + hc = 0.5 * kappa * (1.0 - np.log(0.5 * kappa)) + assert vas_critical_hamiltonian(kappa) == hc + assert vas_foppl_hamiltonian(position, kappa) < hc + + +def test_vas_hamiltonian_gradient_rhs_and_short_conservation(): + kappa = 45.0 / 32.0 + position = np.array([2.1, 0.9]) + step = 2e-6 + gradient = np.array([ + (vas_foppl_hamiltonian(position + [step, 0], kappa) + - vas_foppl_hamiltonian(position - [step, 0], kappa)) / (2 * step), + (vas_foppl_hamiltonian(position + [0, step], kappa) + - vas_foppl_hamiltonian(position - [0, step], kappa)) / (2 * step), + ]) + assert np.allclose(vas_foppl_rhs(position, kappa), + [gradient[1], -gradient[0]], atol=2e-10) + + from scipy.integrate import solve_ivp + initial_h = vas_foppl_hamiltonian(position, kappa) + result = solve_ivp(lambda _, state: vas_foppl_rhs(state, kappa), (0.0, 1.0), + position, rtol=2e-12, atol=2e-14, method="DOP853") + assert result.success + drift = max(abs(vas_foppl_hamiltonian(state, kappa) - initial_h) + for state in result.y.T) + assert drift < 2e-11 + + +def test_exact_circle_routh_response_and_mfs_regular_self_convergence(): + center = np.array([0.2, -0.1]) + radius = 0.7 + position = np.array([[1.45, 0.43]]) + gamma = np.array([1.8]) + exact = exact_circle_vortex_response( + position[0], gamma[0], center=center, radius=radius) + relative = position[0] - center + assert np.allclose(exact["image_position"], + center + radius**2 * relative / np.dot(relative, relative)) + step = 2e-6 + gradient = [] + for axis in range(2): + delta = np.zeros(2); delta[axis] = step + hp = exact_circle_vortex_response( + position[0] + delta, gamma[0], center=center, radius=radius)["hamiltonian"] + hm = exact_circle_vortex_response( + position[0] - delta, gamma[0], center=center, radius=radius)["hamiltonian"] + gradient.append((hp - hm) / (2 * step)) + expected_from_h = np.array([gradient[1], -gradient[0]]) / gamma[0] + assert np.allclose(expected_from_h, exact["regular_self_velocity"], atol=2e-11) + errors = [] + for n_boundary in (16, 24, 40): + solver = prepare_unbounded_body_response( + [center], radius, n_boundary=n_boundary) + numerical = solver.response(position, gamma).velocity(position)[0] + errors.append(np.linalg.norm(numerical - exact["regular_self_velocity"])) + assert errors[1] < errors[0] / 5 + assert errors[2] < errors[1] / 20 + assert errors[2] < 2e-8 + + +def test_karman_finite_train_center_velocity_converges_to_infinite_street(): + spacing, separation, gamma = 1.7, 0.43, 2.2 + expected = karman_self_advection(spacing, separation, gamma) + errors = [] + for half_window in (10, 30, 90): + positions, strengths = staggered_karman_train( + half_window, spacing=spacing, separation=separation, + circulation=gamma) + center_index = half_window + velocity = mutual_vortex_velocity(positions, strengths)[center_index] + errors.append(abs(velocity[0] - expected)) + assert abs(velocity[1]) < 3e-15 + assert errors[1] < errors[0] / 2.5 + assert errors[2] < errors[1] / 2.5 + assert errors[2] < 1.2e-3 + + +def test_karman_exact_temporal_neutral_aspect_identity(): + p0 = karman_stable_aspect() + assert np.isclose(np.sinh(np.pi * p0), 1.0, atol=2e-15) + assert np.isclose(p0, 0.28054992616959007, atol=2e-16) + + + +def test_point_vortex_hamiltonian_gradient_matches_rhs_and_conserves(): + positions=np.array([[-1.1,-.4],[.2,.6],[1.4,-.2]]) + strengths=np.array([-1.2,.8,1.1]); rhs=point_vortex_rhs(positions,strengths) + step=2e-6; gradient=np.empty_like(positions) + for i in range(len(positions)): + for axis in range(2): + delta=np.zeros_like(positions); delta[i,axis]=step + gradient[i,axis]=(point_vortex_hamiltonian(positions+delta,strengths)-point_vortex_hamiltonian(positions-delta,strengths))/(2*step) + canonical=np.column_stack((gradient[:,1]/strengths,-gradient[:,0]/strengths)) + assert np.allclose(rhs,canonical,atol=3e-11) + run=integrate_point_vortices_rk4(positions,strengths,horizon=.1,time_step=.0025) + assert normalized_invariant_drift(run["hamiltonian"],scale=abs(run["hamiltonian"][0]))<2e-12 + + +def test_karman_central_window_and_integrator_convergence(): + h=karman_stable_aspect(); states={}; errors=[]; uniform=[] + for M in (12,24,48): + x,k=staggered_karman_train(M,separation=h); mask=karman_observer_mask(x,1.) + rhs=point_vortex_rhs(x,k); mean=np.mean(rhs[mask],axis=0); errors.append(abs(mean[0]-karman_self_advection(1,h,1))) + uniform.append(np.sqrt(np.mean(np.sum((rhs[mask]-mean)**2,axis=1)))) + states[M]=(integrate_point_vortices_rk4(x,k,horizon=.25,time_step=.0025)["states"][-1],mask,x,k) + assert errors[2].2*h and np.isfinite(list(v for key,v in metrics.items() if isinstance(v,float))).all() + + +def test_karman_collision_masks_sensitivity_and_artifact_no_clobber(tmp_path): + with pytest.raises(ValueError,match="collision"): + point_vortex_rhs([[0,0],[1e-8,0]],[1,-1],collision_distance=1e-6) + with pytest.raises(ValueError,match="observer"): + karman_observer_mask([[0,0],[1,0]],1,half_width=.1) + x,k=staggered_karman_train(12,separation=karman_stable_aspect()); mask=karman_observer_mask(x,1) + perturbed=x.copy(); perturbed[np.flatnonzero((k<0)&np.isclose(x[:,0],0))[0],1]+=.01*karman_stable_aspect() + assert aligned_position_l2(x,perturbed,mask)["L2"]>0 + from steady_pinball_theory.runner import write_karman_baseline + out=tmp_path/"k1"; first=write_karman_baseline(out) + assert first["classification"]["K1"]=="FAIL" and not first["classification"]["K2_authorized"] + assert not first["checks"]["translation_window_convergence"] + with pytest.raises(FileExistsError): write_karman_baseline(out) + import json,hashlib + manifest=json.loads((out/"manifest.json").read_text()) + for name in ("config.json","result.json"): + assert hashlib.sha256((out/name).read_bytes()).hexdigest()==manifest["files"][name]["sha256"] + + +def test_free_vortex_response_enforces_dense_offgrid_impermeability(): + response_solver = prepare_unbounded_body_response(CENTERS, 0.5, n_boundary=64) + position = np.array([[-1.1, 0.37]]) + strength = np.array([1.8]) + response = response_solver.response(position, strength) + theta = (np.arange(3073) + 0.271828) * 2 * np.pi / 3073 + normals0 = np.column_stack((np.cos(theta), np.sin(theta))) + points = np.concatenate([center + 0.5 * normals0 for center in CENTERS]) + normals = np.tile(normals0, (len(CENTERS), 1)) + incident = strength[0] * singular_velocity(points, position[0], vortex=True) + residual = np.einsum("ij,ij->i", incident + response.velocity(points), normals) + assert np.max(np.abs(residual)) < 3e-7 + + +def test_free_vortex_response_decays_without_body_circulation(): + solver = prepare_unbounded_body_response(CENTERS, 0.5, n_boundary=48) + response = solver.response([[-1.2, 0.3]], [2.1]) + assert np.array_equal(response.circulations, np.zeros(3)) + assert np.max(np.abs(response.strengths.reshape(3, -1).sum(axis=1))) < 2e-14 + near = np.linalg.norm(response.velocity([[8.0, 3.0]])[0]) + far = np.linalg.norm(response.velocity([[80.0, 30.0]])[0]) + assert far < near / 50 + theta, offsets, tangent_normal = circle_points(0.5, n=4096, factor=1.08) + tangent = np.column_stack((-tangent_normal[:, 1], tangent_normal[:, 0])) + for center in CENTERS: + velocity = response.velocity(center + offsets) + circulation = 1.08 * 0.5 * 2 * np.pi * np.mean( + np.einsum("ij,ij->i", velocity, tangent)) + assert abs(circulation) < 2e-10 + + +def test_two_vortex_rhs_excludes_self_and_retains_mutual_induction(): + positions = np.array([[-2.0, -0.4], [-2.0, 0.6]]) + strengths = np.array([1.3, -0.8]) + mutual = mutual_vortex_velocity(positions, strengths) + expected = np.array([[-0.8 / (2 * np.pi), 0.0], + [-1.3 / (2 * np.pi), 0.0]]) + assert np.allclose(mutual, expected, atol=2e-15) + base, _ = solve_mfs(CENTERS, 0.5, [0.0, 1.4, -1.4], n_boundary=48) + response_solver = prepare_unbounded_body_response(CENTERS, 0.5, n_boundary=48) + rhs = finite_vortex_rhs( + base, positions, strengths, body_response=response_solver) + response = response_solver.response(positions, strengths) + assert np.isfinite(rhs).all() + assert np.allclose( + rhs, base.velocity(positions) + mutual + response.velocity(positions), + atol=2e-14) + + +@pytest.mark.parametrize("positions,strengths,match", [ + ([[np.nan, 0.0]], [1.0], "finite"), + ([[-2.0, 0.0], [-2.0, 0.0]], [1.0, -1.0], "distinct"), + ([[0.0, 0.0]], [1.0], "outside"), + ([[-2.0, 0.0]], [1.0, 2.0], "one finite value"), +]) +def test_free_vortex_invalid_and_colliding_inputs_fail(positions, strengths, match): + base, _ = solve_mfs(CENTERS, 0.5, [0.0, 0.0, 0.0], n_boundary=24) + with pytest.raises(ValueError, match=match): + finite_vortex_rhs(base, positions, strengths) + + +def test_exact_one_cylinder_field_wall_circulation_and_gamma_trace(): + radius, u_inf, gamma = 0.7, 1.3, 2.1 + theta, points, normal = circle_points(radius, factor=1.8) + tangent = np.column_stack((-np.sin(theta), np.cos(theta))) + velocity = cylinder_velocity(points, [0, 0], radius, u_inf=u_inf, circulation=gamma) + radial = np.einsum("ij,ij->i", velocity, normal) + tangential = np.einsum("ij,ij->i", velocity, tangent) + r = 1.8 * radius + assert np.max(np.abs(radial - u_inf * (1 - radius**2 / r**2) * np.cos(theta))) < 2e-15 + expected_t = -u_inf * (1 + radius**2 / r**2) * np.sin(theta) + gamma / (2*np.pi*r) + assert np.max(np.abs(tangential - expected_t)) < 2e-15 + _, wall, normal = circle_points(radius) + tangent = np.column_stack((-normal[:, 1], normal[:, 0])) + v0 = cylinder_velocity(wall, [0, 0], radius, u_inf=u_inf, circulation=0) + vg = cylinder_velocity(wall, [0, 0], radius, u_inf=u_inf, circulation=gamma) + assert np.max(np.abs(np.einsum("ij,ij->i", vg, normal))) < 2e-15 + assert np.max(np.abs(np.einsum("ij,ij->i", vg-v0, normal))) < 2e-15 + assert np.max(np.abs(np.einsum("ij,ij->i", vg-v0, tangent)-gamma/(2*np.pi*radius))) < 2e-15 + contour_velocity = cylinder_velocity(points, [0, 0], radius, u_inf=u_inf, circulation=gamma) + circulation = 2*np.pi*r*np.mean(np.einsum("ij,ij->i", contour_velocity, tangent)) + assert abs(circulation-gamma) < 2e-14 + + +def test_zero_inflow_tangential_counterexample(): + radius, omega = 0.7, -1.2 + gamma = 2*np.pi*radius**2*omega + _, wall, normal = circle_points(radius) + tangent = np.column_stack((-normal[:, 1], normal[:, 0])) + velocity = cylinder_velocity(wall, [0, 0], radius, u_inf=0, circulation=gamma) + assert np.max(np.abs(np.einsum("ij,ij->i", velocity, normal))) < 1e-15 + assert np.max(np.abs(np.einsum("ij,ij->i", velocity, tangent)-radius*omega)) < 1e-15 + + +def test_dense_unbounded_diagnostics_and_circulation(): + sol, algebra = solve_mfs(CENTERS, 0.5, [0, 2, -2], n_boundary=48) + dense = dense_diagnostics(sol, n_angle=1536, contour_factor=1.06, far_radius=100) + assert algebra["rank"] == algebra["unknowns"] + assert max(algebra["zero_source_error"]) < 1e-13 + assert algebra["collocation_Linf"] < 1e-11 + assert max(x["Linf"] for x in dense["off_collocation_bodies"]) < 2e-7 + assert max(abs(x) for x in dense["circulation_errors"]) < 2e-7 + assert dense["far_field_Linf"] < 3e-4 + + +def test_strip_finite_image_field_consistency_on_declared_exterior(): + fields = {} + walls = {} + for layers in (20, 40, 80): + sol, _ = solve_mfs(CENTERS, 0.5, [0, 2, -2], n_boundary=48, H=15, + image_layers=layers) + dense = dense_diagnostics(sol, n_angle=1024, wall_interval=(-5, 8), n_wall=1201) + assert max(x["Linf"] for x in dense["off_collocation_bodies"]) < 2e-7 + # Regression guard with >10x safety over the measured layer-20 value; + # it was set post hoc and is not scientific acceptance evidence. + assert dense["strip_wall"]["Linf"] < 1e-7 + fields[layers] = sol + walls[layers] = dense["strip_wall"]["Linf"] + successive = [] + for coarse, fine in ((20, 40), (40, 80)): + result = common_exterior_error( + fields[fine].velocity, fields[coarse].velocity, CENTERS, 0.5, + bounds=(-3, 6, -3, 3), shape=(121, 81), exclusion_factor=1.1) + successive.append(result["weighted_RMS"]) + assert walls[40] < walls[20] and walls[80] < walls[40] + assert successive[1] < 0.6 * successive[0] + assert successive[1] < 1e-5 + + +def test_mfs_order_and_source_radius_scientific_checks(): + offgrid = [] + for n in (24, 32, 48): + sol, _ = solve_mfs(CENTERS, 0.5, [0, 0, 0], n_boundary=n) + offgrid.append(max(x["Linf"] for x in dense_diagnostics( + sol, n_angle=1024)["off_collocation_bodies"])) + assert offgrid[1] < offgrid[0] / 20 and offgrid[2] < offgrid[1] / 100 + + for circulation in ([0, 0, 0], [0, 2, -2]): + solutions = {} + for ratio in (0.55, 0.65, 0.75): + solution, _ = solve_mfs( + CENTERS, 0.5, circulation, n_boundary=64, source_ratio=ratio) + solutions[ratio] = solution + dense = dense_diagnostics(solution, n_angle=2048) + assert max(x["Linf"] for x in dense["off_collocation_bodies"]) < 2e-7 + for ratio in (0.55, 0.75): + comparison = common_exterior_error( + solutions[0.65].velocity, solutions[ratio].velocity, CENTERS, 0.5, + bounds=(-3, 6, -3, 3), shape=(181, 121), exclusion_factor=1.1) + assert comparison["relative_to_uniform_speed"] < 1e-8 + + +def test_independently_discretized_laurent_agreement_and_metric_sensitivity(): + mfs, _ = solve_mfs(CENTERS, 0.5, [0, 0, 0], n_boundary=64) + errors = [] + for order in (6, 8, 12): + laurent, diag = solve_laurent(CENTERS, 0.5, order=order) + assert diag["rank"] == diag["unknowns"] + assert diag["off_collocation_angles_per_body"] > 3 * (4 * order) + result = common_exterior_error( + laurent.velocity, mfs.velocity, CENTERS, 0.5, + bounds=(-3, 6, -3, 3), shape=(181, 121), exclusion_factor=1.1) + assert result["retained_points"] > 19000 + errors.append(result["relative_to_reference_disturbance"]) + assert errors[1] < errors[0] / 5 + assert errors[2] < errors[1] / 30 + assert errors[2] < 5e-7 + + laurent, diag = solve_laurent(CENTERS, 0.5, order=12) + assert diag["off_collocation_Linf"] < 1e-5 + grid_results = [common_exterior_error( + laurent.velocity, mfs.velocity, CENTERS, 0.5, + bounds=(-3, 6, -3, 3), shape=shape, exclusion_factor=1.1) + for shape in ((121, 81), (181, 121), (241, 161))] + grid_values = np.array([x["relative_to_reference_disturbance"] for x in grid_results]) + assert np.max(np.abs(grid_values / grid_values[1] - 1.0)) < 0.15 + mask_values = [] + for exclusion in (1.05, 1.10, 1.15): + result = common_exterior_error( + laurent.velocity, mfs.velocity, CENTERS, 0.5, + bounds=(-3, 6, -3, 3), shape=(241, 161), exclusion_factor=exclusion) + mask_values.append(result["relative_to_reference_disturbance"]) + assert max(mask_values) < 8e-7 + assert mask_values[0] > mask_values[1] > mask_values[2] + + +def test_exact_rear_pair_far_field_coefficient_and_zero_log(): + xr, b, gamma = 1.3, 0.75, 2.4 + centers = np.array([[xr, b], [xr, -b]]) + points = np.array([[800.0, 110.0], [-700.0, 190.0]]) + direct = (gamma * singular_velocity(points, centers[0], vortex=True) + - gamma * singular_velocity(points, centers[1], vortex=True)) + z = points[:, 0] + 1j * points[:, 1] + coefficient = -gamma * b / np.pi + leading_q = -coefficient / z**2 + leading = np.column_stack((leading_q.real, -leading_q.imag)) + assert np.max(np.linalg.norm(direct - leading, axis=1)) < 5e-9 + assert coefficient < 0 + assert np.isclose(coefficient, -gamma*b/np.pi) + + +def test_source_multipole_reconstruction_converges_on_valid_exterior_points(): + full, _ = solve_mfs(CENTERS, 0.5, [0, 1.7, -1.7], n_boundary=64) + probes = np.array([[-2.0, 1.7], [3.0, 0.0], [2.6, 2.2], [10.0, -1.3]]) + errors = [] + for order in (1, 2, 4, 8): + reduced = reconstruct_multipoles(full, order) + errors.append(np.max(np.linalg.norm(reduced.velocity(probes)-full.velocity(probes), axis=1))) + assert errors[-1] < errors[1] / 100 + assert errors[-1] < 2e-8 + with pytest.raises(ValueError, match="outside source rings"): + reconstruct_multipoles(full, 2).velocity(CENTERS[:1]) + + +def test_source_coefficients_match_direct_source_velocity(): + full, _ = solve_mfs(CENTERS, 0.5, [0, 0, 0], n_boundary=48) + coefficients, radii = source_multipole_coefficients(full, 16) + assert np.allclose(radii, 0.325) + source_only = type(full)(full.centers, full.radius, full.strengths, full.source_points, + np.zeros(3), 0.0, None, full.image_layers) + reduced = reconstruct_multipoles(source_only, 16) + points = np.array([[-2.0, 2.0], [3.0, 0.0], [2.8, -2.1]]) + assert coefficients.shape == (3, 16) + assert np.max(np.linalg.norm(reduced.velocity(points)-source_only.velocity(points), axis=1)) < 2e-12 + + +def test_zero_net_circulation_reflection_parity_and_affine_coefficient(): + gamma = 2.3 + sol, _ = solve_mfs(CENTERS, 0.5, [0, gamma, -gamma], n_boundary=64) + coeff = far_field_coefficients(sol) + assert abs(coeff["log"]) < 1e-14 + grid = np.column_stack((np.linspace(-2, 8, 301), np.linspace(0.03, 2.8, 301))) + assert reflection_parity_defect(sol.velocity, grid)["Linf"] < 1e-10 + affine = rear_opposite_affine(CENTERS, 0.5, n_boundary=64) + predicted = affine["C0"] + gamma*affine["dC"] + assert abs(coeff["dipole"]-predicted) < 2e-12 + assert affine["dC"].real < 0 + assert abs(affine["dC"].imag) < 2e-12 + + +def test_cancellation_root_and_held_out_gamma_region_convergence(): + affine = rear_opposite_affine(CENTERS, 0.5, n_boundary=64) + assert affine["gamma_opt"] > 0 + assert affine["exact"] + assert abs(affine["residual"]) < 2e-12 + y = np.linspace(-3, 3, 1201) + profile_points = np.column_stack((np.full_like(y, 10.0), y)) + zero, _ = solve_mfs(CENTERS, 0.5, [0, 0, 0], n_boundary=64) + optimum, _ = solve_mfs( + CENTERS, 0.5, [0, affine["gamma_opt"], -affine["gamma_opt"]], n_boundary=64) + zero_profile = zero.velocity(profile_points) + optimum_profile = optimum.velocity(profile_points) + assert profile_errors(optimum_profile[:, 0], optimum_profile[:, 1], u_inf=1)["E_inf_vector"] \ + < profile_errors(zero_profile[:, 0], zero_profile[:, 1], u_inf=1)["E_inf_vector"] / 8 + for gamma in (affine["gamma_opt"], 1.37): + full, _ = solve_mfs(CENTERS, 0.5, [0, gamma, -gamma], n_boundary=64) + full_profile = full.velocity(profile_points) + region_errors, profile_reconstruction_errors = [], [] + for order in (1, 2, 4, 8): + reduced = reconstruct_multipoles(full, order) + result = common_exterior_error( + full.velocity, reduced.velocity, CENTERS, 0.5, + bounds=(-3, 6, -3, 3), shape=(181, 121), exclusion_factor=1.1) + region_errors.append(result["relative_to_reference_disturbance"]) + reduced_profile = reduced.velocity(profile_points) + delta = reduced_profile - full_profile + profile_reconstruction_errors.append(profile_errors( + 1.0 + delta[:, 0], delta[:, 1], u_inf=1.0)["E_inf_vector"]) + assert region_errors[-1] < region_errors[1] / 50 + assert region_errors[-1] < 5e-5 + assert profile_reconstruction_errors[-1] < profile_reconstruction_errors[1] / 1e6 + assert profile_reconstruction_errors[-1] < 5e-15 + + +@pytest.mark.parametrize("name,expected", [ + ("rear_opposite", [0, 1/np.sqrt(2), -1/np.sqrt(2)]), + ("common_rear", [0, 1/np.sqrt(2), 1/np.sqrt(2)]), + ("front_only", [1, 0, 0]), +]) +def test_stage4_bases_have_frozen_equal_norm(name, expected): + basis = circulation_basis(name) + assert np.allclose(basis, expected) + assert np.isclose(np.linalg.norm(basis), 1.0) + + +def test_stage4_counterfactual_sensitivity_parity_and_ablation(): + y = np.linspace(-3, 3, 1201) + points = np.column_stack((np.full_like(y, 10.0), y)) + sample = np.column_stack((np.linspace(-2, 8, 301), np.linspace(0.03, 2.8, 301))) + rows = {} + for name in ("rear_opposite", "common_rear", "front_only"): + affine = basis_affine(CENTERS, 0.5, name, n_boundary=64) + base = affine["zero"].velocity(points) + direction = affine["unit"].velocity(points)-base + smooth = affine_profile_sensitivity(base, direction) + slopes = one_sided_profile_error_slopes(base, direction, [0.2, 0.1, 0.05, 0.025]) + optimum = affine_velocity(affine, smooth["g_opt"], points) + rows[name] = (affine, smooth, slopes, profile_errors( + optimum[:, 0], optimum[:, 1], u_inf=1)["E_inf_vector"]) + rear, common, front = rows["rear_opposite"], rows["common_rear"], rows["front_only"] + assert abs(rear[0]["dlog"]) < 1e-13 + assert abs(common[0]["dlog"]) > 0.1 and abs(front[0]["dlog"]) > 0.1 + assert rear[0]["dC"].real < 0 and abs(rear[0]["dC"].imag) < 1e-12 + assert rear[1]["dJ_dg_at_zero"] < 0 + assert rear[1]["J_opt"] < min(common[1]["J_opt"], front[1]["J_opt"])/5 + assert rear[3] < min(common[3], front[3])/5 + assert rear[2]["last_change"] < 2e-4 + assert reflection_parity_defect( + lambda p: affine_velocity(rear[0], 1.0, p), sample)["Linf"] < 3e-10 + # Common-rear and front-only are deliberately not symmetric rear-opposite fields. + assert reflection_parity_defect( + lambda p: affine_velocity(common[0], 1.0, p), sample)["Linf"] > 1e-3 + + +def test_stage4_gap_flux_is_oriented_and_converged(): + affine = basis_affine(CENTERS, 0.5, "rear_opposite", n_boundary=64) + velocity = lambda p: affine_velocity(affine, 1.0, p) + upper = gap_flux(velocity, CENTERS[0], CENTERS[1], 0.5, samples=1001) + lower = gap_flux(velocity, CENTERS[0], CENTERS[2], 0.5, samples=1001) + upper_fine = gap_flux(velocity, CENTERS[0], CENTERS[1], 0.5, samples=2001) + assert abs(upper["flux"]-upper_fine["flux"]) < 1e-7 + assert np.isclose(upper["flux"], -lower["flux"], atol=1e-10) + + + +def test_stage5_root_accuracy_jacobian_convergence_and_classification(): + affine = lambda p: np.column_stack((2*p[:, 0] + p[:, 1] - 0.3, + p[:, 0] - 3*p[:, 1] + 0.2)) + exact_jacobian = np.array([[2.0, 1.0], [1.0, -3.0]]) + exact_root = np.linalg.solve(exact_jacobian, np.array([0.3, -0.2])) + errors = [np.linalg.norm(velocity_jacobian(affine, exact_root, step=h)-exact_jacobian) + for h in (1e-3, 3e-4, 1e-4)] + assert max(errors) < 2e-12 + audit = find_interior_stagnation_points( + affine, [[10.0, 10.0]], 0.5, bounds=(-1, 1, -1, 1), seed_shape=(9, 9), + exclusion_margin=0.08, root_tolerance=1e-11) + assert audit["kind"] == "sampled root audit" and len(audit["roots"]) == 1 + root = audit["roots"][0] + assert np.linalg.norm(root["point"]-exact_root) < 2e-11 + assert root["residual"] < 1e-11 and root["nondegenerate"] + assert root["singular_values"][-1] > 1.7 + + +def test_stage5_continuation_and_deliberate_failure_controls(): + base = lambda p: p + shifted = lambda p: p-np.array([0.03, -0.04]) + kwargs = dict(centers=[[10.0, 10.0]], radius=0.5, bounds=(-1, 1, -1, 1), + seed_shape=(9, 9), root_tolerance=1e-11) + a0 = find_interior_stagnation_points(base, **kwargs) + a1 = find_interior_stagnation_points(shifted, **kwargs) + continuation = continue_stagnation_points(a0, a1, maximum_displacement=0.2) + assert not continuation["flagged"] + assert abs(continuation["pairs"][0]["displacement"]-0.05) < 1e-10 + degenerate = lambda p: np.column_stack((p[:, 0], np.zeros(len(p)))) + info = classify_stagnation_root(degenerate, [0.0, 0.0]) + assert info["residual"] == 0 and not info["nondegenerate"] + assert info["singular_values"][-1] == 0 + constant = lambda p: np.column_stack((np.ones(len(p)), np.zeros(len(p)))) + assert not find_interior_stagnation_points(constant, **kwargs)["roots"] + failed = continue_stagnation_points(a0, {"roots": []}) + assert failed["flagged"] and failed["candidate_count"] == 0 + + +def test_stage5_exact_circle_boundary_roots_are_excluded(): + velocity = lambda p: cylinder_velocity(p, [0, 0], 0.5, circulation=0.0) + audit = find_interior_stagnation_points( + velocity, [[0, 0]], 0.5, bounds=(-2, 2, -2, 2), seed_shape=(13, 13), + exclusion_margin=0.08, root_tolerance=1e-10) + assert audit["roots"] == [] + + +def test_stage5_canonical_sampled_audit_and_affine_continuity(): + gamma = rear_opposite_affine(CENTERS, 0.5, n_boundary=64)["gamma_opt"] + solutions = [] + for factor in (0.98, 1.0, 1.02): + solution, diag = solve_mfs( + CENTERS, 0.5, [0, factor*gamma, -factor*gamma], n_boundary=64) + # Broad fail-fast sanity bounds; measured conditioning belongs in diagnostics, + # not in a nearly exact scientific-acceptance envelope. + assert diag["singular_value_min"] > 1e-8 and diag["condition"] < 1e8 + solutions.append(solution) + audit = find_interior_stagnation_points(solution.velocity, CENTERS, 0.5) + assert audit["roots"] == [] + probes = np.array([[-1.5, 1.5], [2.5, 0.0], [4.0, -1.0]]) + vm, v0, vp = [solution.velocity(probes) for solution in solutions] + assert np.max(np.abs((vm+vp)/2-v0)) < 3e-13 + for dx, db in ((-0.02, 0), (0.02, 0), (0, -0.02), (0, 0.02)): + centers = np.array([[0.0, 0.0], [1.3+dx, 0.75+db], + [1.3+dx, -0.75-db]]) + perturbed, _ = solve_mfs( + centers, 0.5, [0, gamma, -gamma], n_boundary=64) + assert find_interior_stagnation_points( + perturbed.velocity, centers, 0.5)["roots"] == [] + + + +def test_bilinear_ccw_vortex_sign_and_mask_gate(): + x=np.linspace(-2,2,401); y=np.linspace(-2,2,401); xx,yy=np.meshgrid(x,y,indexing="xy") + gamma=1.7; r2=xx*xx+yy*yy; r2[200,200]=1.0 + ux=-gamma*yy/(2*np.pi*r2); uy=gamma*xx/(2*np.pi*r2) + ux[200,200]=uy[200,200]=0 + result=ccw_contour_circulation(x,y,ux,uy,[0,0],[0.6,0.9,1.2],samples=1024) + assert np.allclose(result["circulation"],gamma,rtol=3e-4) + negative=ccw_contour_circulation(x,y,-ux,-uy,[0,0],[0.9],samples=512) + assert negative["circulation"][0] < 0 + valid=np.ones_like(ux,dtype=bool); valid[200,290]=False + with pytest.raises(ValueError,match="invalid"): + ccw_contour_circulation(x,y,ux,uy,[0,0],[0.9],samples=512,valid_mask=valid) + + +def test_outer_wls_and_two_point_held_out_closure_recovery(): + yy,xx=np.mgrid[:31,:41]; model=np.stack((np.sin(xx/8)*np.cos(yy/9),np.cos(xx/7)*np.sin(yy/8)),axis=-1) + mask=np.ones(model.shape[:2],dtype=bool); weights=1/(1+xx) + fit=outer_wls_effective_circulation(2.75*model,model,mask,weights=weights) + assert abs(fit["gamma_eff"]-2.75)<1e-13 and fit["weighted_RMS"]<1e-13 + closure=fit_two_point_affine_closure([3.45,3.65],[2.0,3.0]) + assert np.isclose(predict_affine_closure(closure,3.55),2.5) + + +def test_total_model_wls_cannot_omit_blockage_base(): + yy,xx=np.mgrid[:17,:23] + direction=np.stack((np.sin(xx/5),np.cos(yy/4)),axis=-1) + base=np.stack((0.3+0.02*xx,-0.1+0.01*yy),axis=-1) + observed=base-2.4*direction; mask=np.ones(observed.shape[:2],dtype=bool) + corrected=outer_wls_total_model(observed,base,direction,mask) + omitted=outer_wls_effective_circulation(observed,direction,mask) + assert np.isclose(corrected["gamma_eff"],-2.4,atol=1e-13) + assert np.max(np.abs(corrected["prediction"]-observed))<1e-13 + assert abs(omitted["gamma_eff"]+2.4)>1e-3 + + +def test_strip_exact_mode_projection_and_propagation(): + H=3.; y=np.linspace(-H,H,4001); x0=np.zeros_like(y) + v0=strip_mode_field(y,x0,H,[0.7,-0.2],through_flow=0.3) + p0=strip_modal_projection(y,v0,H,modes=4) + assert np.allclose(p0["modes"][:2,2],[0.7,-0.2],atol=2e-7) + assert np.allclose(p0["modes"][:2,3],[0.7,-0.2],atol=2e-7) + dx=1.4; v1=strip_mode_field(y,np.full_like(y,dx),H,[0.7,-0.2],through_flow=0.3) + p1=strip_modal_projection(y,v1,H,modes=4); predicted=propagate_strip_modes(p0,dx) + assert np.allclose(p1["modes"][:2,2:4],predicted["modes"][:2,2:4],atol=3e-7) + assert abs(p1["through_flow_zero_mode"]-0.3)<2e-7 + + +def test_strip_affine_layers_and_ablation_are_strip_native(): + probes=np.array([[7.,-2.],[7.,0.],[7.,2.]]) + fields={} + for layers in (10,20,40): + fields[layers]=strip_basis_affine(CENTERS,0.5,"rear_opposite",H=8,n_boundary=32,image_layers=layers) + assert fields[layers]["zero"].H==8 and fields[layers]["unit"].H==8 + d10=fields[10]["unit"].velocity(probes)-fields[20]["unit"].velocity(probes) + d20=fields[20]["unit"].velocity(probes)-fields[40]["unit"].velocity(probes) + assert np.linalg.norm(d20)={"Q_g","J_g","mass_flux"} + assert case["same_cv_partial_ledger"]["balance_status"]=="endpoint_spatial_partial_not_closed" + assert case["same_cv_partial_ledger"]["residual"] is None + text=(out/"analysis.json").read_text(); json.loads(text) + assert "NaN" not in text and "Infinity" not in text + with pytest.raises(FileExistsError,match="clobber"): analyze_ns_ledger(root,out) + cli_out=tmp_path/"ns-cli" + assert main(["analyze-ns-ledger",str(root),"--out",str(cli_out)])==0 + assert (cli_out/"analysis.json").is_file() + + +def test_ns_ledger_fails_clearly_without_v5_roles_or_with_v4(tmp_path): + import hashlib,json + from steady_pinball_theory.runner import ARRAY_FILE,_canonical_json,_sha256,analyze_ns_ledger + root=tmp_path/"missing"; root.mkdir() + with pytest.raises(FileNotFoundError,match="v5.*v4 torque-free"): + analyze_ns_ledger(root,tmp_path/"out") + _write_synthetic_steady_roles(root) + legacy=root/"accepted-s3.55"; manifest=json.loads((legacy/"manifest.json").read_text()) + manifest["schema"]=manifest["spec"]["schema"]="steady-pinball-endpoint/v4" + manifest["spec"]["history_schema"].pop("torque"); manifest["manifest_payload_sha256"]=hashlib.sha256(_canonical_json({k:v for k,v in manifest.items() if k!="manifest_payload_sha256"})).hexdigest() + (legacy/"manifest.json").write_text(json.dumps(manifest,indent=2,sort_keys=True)+"\n") + with pytest.raises(ValueError,match="torque-capable endpoint schema v5"): + analyze_ns_ledger(root,tmp_path/"out") + + +def test_mechanism_analysis_rejects_unqualified_reverse_s5_2(tmp_path): + from steady_pinball_theory.runner import analyze_steady_contract + root=tmp_path/"campaign"; root.mkdir() + _write_synthetic_steady_roles(root,reverse_5_2_qualified=False) + with pytest.raises(ValueError,match="reverse-s5.2 is not a qualified steady endpoint"): + analyze_steady_contract(root,tmp_path/"analysis") + + +def test_mechanism_analysis_allows_absent_reverse_s3_55_control(tmp_path): + from steady_pinball_theory.runner import analyze_steady_contract + root=tmp_path/"campaign"; root.mkdir() + _write_synthetic_steady_roles(root) + import shutil; shutil.rmtree(root/"reverse-s3.55") + result=analyze_steady_contract(root,tmp_path/"analysis") + assert not result["reverse_s3.55_negative_control"]["present"] + + +def test_residual_quadrature_regions_are_explicit_l2_not_rms(): + x=np.array([0.,1.,2.]); y=np.array([-1.,0.,1.]); weights=tensor_trapezoid_weights(x,y) + field=np.zeros((3,3,2)); field[...,0]=2.; mask=np.ones((3,3),dtype=bool) + result=quadrature_l2(field,mask,weights,normalizer=2*field) + assert np.isclose(result["retained_measure"],4.) + assert np.isclose(result["L2"],4.) and np.isclose(result["normalized_L2"],.5) + with pytest.raises(ValueError,match="retains no"): quadrature_l2(field,np.zeros_like(mask),weights) + with pytest.raises(ValueError,match="zero"): quadrature_l2(field,mask,weights,normalizer=np.zeros_like(field)) + + +def test_conservative_masked_vorticity_and_moments(): + x=np.linspace(-1,1,9); y=np.linspace(-2,2,13); xx,yy=np.meshgrid(x,y,indexing="xy") + ux=-3*yy; uy=2*xx; valid=np.ones_like(xx,dtype=bool); valid[6,4]=False + omega,use=conservative_masked_vorticity(x,y,ux,uy,valid) + assert np.allclose(omega[use],5.) and not use[6,4] + assert not use[6,3] and not use[6,5] and not use[5,4] and not use[7,4] + moments=absolute_vorticity_moments(y,omega,use,tensor_trapezoid_weights(x,y)) + assert abs(moments["y_centroid"])<1e-14 and moments["y_width"]>0 + + +def test_recirculation_and_wake_moment_synthetic_fields(): + x=np.arange(5.); y=np.linspace(-1,1,5); weights=tensor_trapezoid_weights(x,y) + ux=np.ones((5,5)); ux[1:4,1:4]=-1; mask=np.ones_like(ux,dtype=bool) + rec=recirculation_observables(x,ux,mask,weights) + assert rec["x_min"]==1 and rec["x_max"]==3 and rec["streamwise_extent"]==2 and rec["area"]>0 + empty=recirculation_observables(x,np.ones_like(ux),mask,weights) + assert empty["area"]==0 and empty["x_min"] is None + wake=wake_deficit_observables(y,np.array([1,.5,0,.5,1.]),np.ones(5,dtype=bool)) + assert np.isclose(wake["momentum_deficit_proxy"],1.) + assert wake["positive_deficit_measure"]>0 and np.isclose(wake["signed_deficit_integral"],1.) + + +def test_gap_flux_grid_mask_fail_fast_and_parity_sign(): + x=np.linspace(-2,2,81); y=np.linspace(-2,2,81); xx,yy=np.meshgrid(x,y,indexing="xy") + ux=-yy; uy=xx; valid=np.ones_like(ux,dtype=bool) + velocity=lambda p: bilinear_sample_velocity(x,y,ux,uy,p,valid_mask=valid) + upper=gap_flux(velocity,[-1,0],[1,0],.25,samples=401) + assert upper["normal"]==[-0.,1.] and upper["flux"]==pytest.approx(0,abs=1e-14) + valid[40,40]=False + with pytest.raises(ValueError,match="invalid"): + gap_flux(lambda p: bilinear_sample_velocity(x,y,ux,uy,p,valid_mask=valid),[-1,0],[1,0],.25,samples=401) + + +def test_near_wall_helpers_masks_and_fail_closed(): + x=np.arange(0.,21.); y=np.arange(0.,21.) + xx,yy=np.meshgrid(x,y,indexing="xy"); cx,cy,radius=10.,10.,4. + solid=(xx-cx)**2+(yy-cy)**20 + empty=near_wall_tangential_speed(x,y,ux,uy,fluid,body,centers,radius,body_ids=(2,),body_labels=("other",)) + assert empty["bodies"]["other"]["availability"]=="unavailable_no_adjacent_fluid" + proxy=wall_vorticity_production_proxy(x,y,ux,uy,fluid,body,centers,radius,body_ids=(1,),body_labels=("rear",),min_pairs=1000) + assert proxy["bodies"]["rear"]["availability"]=="unavailable_insufficient_radial_stencil" + sep=separation_reattachment_estimator(x,y,np.ones_like(ux),fluid,body,centers,radius,body_ids=(1,),body_labels=("rear",),min_samples=16) + assert sep["bodies"]["rear"]["availability"].startswith("unavailable_") + torque=torque_power_availability(force_history=np.zeros((4,8))) + assert torque["availability"]=="unavailable_no_torque_history" + ledger=control_volume_streamwise_momentum_ledger( + x,y,np.ones_like(ux),np.zeros_like(uy),np.ones_like(ux),fluid,x_left=5.,x_right=15., + force_history=np.column_stack((np.arange(4),np.arange(4),np.ones((4,6))))) + assert ledger["balance_status"]=="incomplete_not_closed" + assert ledger["viscous_stress"]["availability"].startswith("unavailable_") + assert "NEVER" in ledger["claim_limit"] + with pytest.raises(ValueError,match="stations"): + control_volume_streamwise_momentum_ledger(x,y,ux,uy,np.ones_like(ux),fluid,x_left=15.,x_right=5.) + + +def test_analyze_credibility_no_clobber(tmp_path): + from steady_pinball_theory.runner import analyze_credibility, _evidence_root + evidence=_evidence_root() + if not (evidence/"authoritative"/"steady-convergence-20260802"/"grid_summary.json").exists(): + pytest.skip("promoted credibility evidence unavailable") + out=tmp_path/"cred" + result=analyze_credibility(out=out,evidence_root=evidence) + assert result["schema"]=="steady-pinball-credibility-analysis/v1" + assert result["classification"]["mechanism"]=="NOT_CLAIMED" + assert result["classification"]["numerical_observation"] in ("PASS","BOUNDED") + assert any(item["name"]=="outlet_boundary_sensitivity" and item["status"]=="BOUNDED" + for item in result["missing_or_bounded_tests"]) + with pytest.raises(FileExistsError): + analyze_credibility(out=out,evidence_root=evidence) + + +def test_near_wall_and_fail_closed_separation_proxy(): + x=np.arange(21.); y=np.arange(21.); xx,yy=np.meshgrid(x,y,indexing="xy") + centers=np.array([[0.,0.],[10.,10.]]); body=np.full((21,21),-1,dtype=np.int16) + solid=(xx-10)**2+(yy-10)**2<=4; body[solid]=1; fluid=~solid + ux=-(yy-10); uy=xx-10 # geometric CCW solid-body-like field + near=near_wall_tangential_speed(x,y,ux,uy,fluid,body,centers,2.0,body_ids=(1,),body_labels=("rear",)) + assert near["bodies"]["rear"]["availability"]=="available" + assert near["bodies"]["rear"]["points"]>0 + sep=separation_reattachment_estimator(x,y,np.ones_like(ux),fluid,body,centers,2.0,body_ids=(1,),body_labels=("rear",)) + assert sep["bodies"]["rear"]["availability"].startswith("unavailable") + vort=wall_vorticity_production_proxy(x,y,ux,uy,fluid,body,centers,2.0,body_ids=(1,),body_labels=("rear",),min_pairs=4) + assert vort["bodies"]["rear"]["availability"] in ("available","unavailable_insufficient_radial_stencil") + + +def test_control_volume_ledger_incomplete_and_torque_unavailable(): + x=np.linspace(0,10,21); y=np.linspace(-2,2,17) + xx,yy=np.meshgrid(x,y,indexing="xy"); ux=np.ones_like(xx); uy=np.zeros_like(xx); rho=np.ones_like(xx) + fluid=np.ones_like(xx,dtype=bool); forces=np.zeros((12,8)); forces[:,2]=0.1; forces[:,4]=0.2; forces[:,6]=0.3 + ledger=control_volume_streamwise_momentum_ledger(x,y,ux,uy,rho,fluid,x_left=1.0,x_right=9.0,force_history=forces,viscosity=0.01) + assert ledger["balance_status"]=="incomplete_not_closed" + assert ledger["viscous_stress"]["availability"].startswith("unavailable") + assert ledger["body_force"]["availability"].startswith("available") + torque=torque_power_availability(forces) + assert torque["availability"]=="unavailable_no_torque_history" + + +def test_transpiration_neumann_zero_mean_and_branch_sign(): + from steady_pinball_theory.theory import (composite_model_fields, + displacement_transpiration_rhs, gap_couette_poiseuille_section, + solve_mfs, solve_mfs_neumann) + centers = np.array([[0., 0.], [1.3, 0.75], [1.3, -0.75]]) + radius = 0.5 + zero, _ = solve_mfs(centers, radius, np.zeros(3), u_inf=1.0, H=15, n_boundary=32, image_layers=20) + rhs = displacement_transpiration_rhs( + centers, radius, np.array([0., 3.45, -3.45]), zero.velocity, + n_boundary=32, delta_star_scale=0.05) + for ib in range(3): + sl = rhs["body_index"] == ib + assert abs(float(np.mean(rhs["v_n"][sl]))) < 1e-12 + _, diag = solve_mfs_neumann( + centers, radius, rhs["v_n"], circulations=np.zeros(3), u_inf=1.0, + H=15, n_boundary=32, image_layers=20) + assert diag["collocation_Linf"] < 0.05 + cp = gap_couette_poiseuille_section(0.5, 1.0, -1.0) + assert cp["Q_g"] == 0.0 + assert cp["J_g"] > 0 + acc = composite_model_fields( + np.array([[2.0, 0.0], [4.0, 0.0]]), centers=centers, radius=radius, + omega=3.45, branch="plus-minus") + rev = composite_model_fields( + np.array([[2.0, 0.0], [4.0, 0.0]]), centers=centers, radius=radius, + omega=5.2, branch="minus-plus") + assert acc["gaps"]["rear_rear"]["Q_g"] * rev["gaps"]["rear_rear"]["Q_g"] < 0 + + +def test_composite_fit_and_zero_rotation_limit(): + from steady_pinball_theory.metrics import fit_linear_composite, held_out_improvement + from steady_pinball_theory.theory import composite_model_fields + centers = np.array([[0., 0.], [1.3, 0.75], [1.3, -0.75]]) + obs = np.zeros((5, 5, 2)) + base = np.ones_like(obs) * np.array([0.1, 0.0]) + comp = base + np.array([0.02, 0.01]) + m = np.ones(obs.shape[:2], dtype=bool) + fit = fit_linear_composite(comp, [("base", base), ("extra", comp - base)], m) + assert fit["coefficients"]["base"] == pytest.approx(1.0, abs=1e-10) + assert fit["coefficients"]["extra"] == pytest.approx(1.0, abs=1e-10) + zero = composite_model_fields( + np.array([[3.0, 0.0]]), centers=centers, radius=0.5, omega=0.0, + branch="plus-minus", coeffs={"alpha_vi": 1.0, "alpha_gap": 1.0, "wake_amplitude": 0.0}) + assert np.linalg.norm(zero["q_vi"]) < 1e-12 + assert np.linalg.norm(zero["q_gap"]) < 1e-12 + imp = held_out_improvement(base, np.zeros_like(base), m) + assert imp["relative_improvement"] > 0 + + +# NS-first CPU primitives: localized analytic/manufactured tests. +def test_ns_torque_power_sign_ownership_cp_and_zero_limit(): + omega=np.array([[2.,-3.],[2.,-3.]]) + fluid_tau=np.array([[-4.,6.],[-4.,6.]]) + result=torque_to_actuator_power(fluid_tau,omega,torque_ownership="fluid_on_body",rho_ref=2.,u_ref=2.,diameter=.5) + assert np.allclose(result["actuator_torque"],-fluid_tau) + assert np.allclose(result["total_power"],[26.,26.]) + assert result["C_P"]==pytest.approx(6.5) # scale=.5*rho*U^3*D=4 + direct=torque_to_actuator_power(-fluid_tau,omega,torque_ownership="actuator_on_fluid",rho_ref=2.,u_ref=2.,diameter=.5) + assert direct["C_P"]==result["C_P"] + zero=torque_to_actuator_power(fluid_tau,np.zeros_like(omega),torque_ownership="fluid_on_body",rho_ref=2.,u_ref=2.,diameter=.5) + assert zero["C_P"]==0 + with pytest.raises(ValueError,match="ownership"): torque_to_actuator_power([1.],[1.],torque_ownership="ambiguous",rho_ref=1,u_ref=1,diameter=1) + + +def test_ns_station_flux_dimensions_matched_qin_and_normal_sign(): + y=np.linspace(-1,1,101); mask=np.ones_like(y,dtype=bool); rho=np.full_like(y,2.); p=np.full_like(y,3.) + qin=station_flux_metrics(y,np.ones_like(y),np.zeros_like(y),rho,p,mask) + assert qin["mass_flux"]==pytest.approx(4.) + assert np.allclose(qin["momentum_flux"],[10.,0.]) + assert qin["kinetic_energy_flux"]==pytest.approx(2.) + assert qin["mechanical_energy_flux"]==pytest.approx(8.) + matched=station_flux_metrics(y,np.ones_like(y),np.zeros_like(y),rho,p,mask,q_in=qin) + assert np.allclose(matched["delta_from_q_in"]["momentum_flux"],0) + reversed_face=station_flux_metrics(y,np.ones_like(y),np.zeros_like(y),rho,p,mask,normal=(-1.,0.)) + assert reversed_face["mass_flux"]==-qin["mass_flux"] and reversed_face["mechanical_energy_flux"]==-qin["mechanical_energy_flux"] + with pytest.raises(ValueError,match="same frozen normal"): station_flux_metrics(y,np.ones_like(y),np.zeros_like(y),rho,p,mask,normal=(-1.,0.),q_in=qin) + + +def test_ns_masked_volume_dissipation_manufactured_strain_and_zero(): + x=np.linspace(-2,2,81); y=np.linspace(-1,1,61); xx,yy=np.meshgrid(x,y,indexing="xy"); mask=np.ones_like(xx,dtype=bool) + # u=(a*x,-a*y): div u=0, 2*S:S=4*a^2. + a=.7; result=volume_viscous_dissipation(x,y,a*xx,-a*yy,.3,mask) + expected=.3*4*a*a*result["retained_area"] + assert result["viscous_dissipation"]==pytest.approx(expected,rel=2e-14) + zero=volume_viscous_dissipation(x,y,np.ones_like(xx),np.zeros_like(xx),.3,mask) + assert zero["viscous_dissipation"]==pytest.approx(0.,abs=1e-15) + holed=mask.copy(); holed[30,40]=False + assert not volume_viscous_dissipation(x,y,a*xx,-a*yy,.3,holed)["usable_mask"][30,41] + + +def test_ns_gap_qg_jg_density_orientation_and_sign(): + velocity=lambda p: np.tile([0.,2.],(len(p),1)); density=lambda p: np.full(len(p),3.) + gap=gap_mass_momentum_flux(velocity,density,[0.,0.],[2.,0.],.5,samples=101) + assert gap["normal"]==[-0.,1.] and gap["Q_g"]==pytest.approx(2.) + assert gap["mass_flux"]==pytest.approx(6.) and gap["J_g"]==pytest.approx(12.) + reverse=gap_mass_momentum_flux(velocity,density,[2.,0.],[0.,0.],.5,samples=101) + assert reverse["Q_g"]==-gap["Q_g"] and reverse["mass_flux"]==-gap["mass_flux"] + assert reverse["J_g"]==gap["J_g"] + + +def test_ns_mechanical_energy_ledger_never_false_closes_and_manufactured_balance(): + left={"mechanical_energy_flux":10.}; right={"mechanical_energy_flux":7.} + incomplete=control_volume_mechanical_energy_ledger(left,right,viscous_dissipation=2.,actuator_power_to_fluid=1.) + assert not incomplete["closure_available"] and incomplete["residual"] is None + balanced=control_volume_mechanical_energy_ledger(left,right,viscous_dissipation=2.,actuator_power_to_fluid=1.,lateral_mechanical_energy_flux=2.,storage_rate=0.) + assert balanced["closure_available"] and balanced["residual"]==pytest.approx(0.) + unbalanced=control_volume_mechanical_energy_ledger(left,right,viscous_dissipation=2.,actuator_power_to_fluid=0.,lateral_mechanical_energy_flux=2.,storage_rate=0.) + assert unbalanced["residual"]==pytest.approx(1.) + + +def test_ns_low_dimensional_conservation_fit_dimensions_uncertainty_and_holdout(): + x=np.linspace(-2,2,12); X=np.column_stack((np.ones_like(x),x)); y=3.+2*x + fit=fit_conservation_model(X[:9],y[:9],feature_names=["source","flux"],feature_dimensions=["P","P"],target_dimension="P",feature_scales=[1.,2.],target_scale=4.,held_out=(X[9:],y[9:])) + assert np.allclose(fit["coefficients"],[3.,2.],atol=1e-13) + assert fit["rank"]==2 and np.isfinite(fit["condition_number"]) and fit["uncertainty_available"] + assert fit["held_out"]["RMS"]<1e-13 + assert np.allclose(predict_conservation_model(fit,X[9:],feature_names=["source","flux"],feature_dimensions=["P","P"]),y[9:]) + with pytest.raises(ValueError,match="dimensions do not match"): predict_conservation_model(fit,X[9:],feature_names=["source","flux"],feature_dimensions=["P","velocity"]) + with pytest.raises(ValueError,match="dimensions mismatch"): fit_conservation_model(X,y[:,None],feature_names=["a","b"],feature_dimensions=["P","P"],target_dimension="P",feature_scales=[1,1],target_scale=1) + + + +def test_stage45_causal_switch_contract_and_analysis(tmp_path): + from steady_pinball_theory.runner import (SWITCH_TELEMETRY_CHANNELS, + analyze_paired_causal_switch, causal_switch_contract) + parent=tmp_path/"accepted.chk"; parent.write_bytes(b"accepted-parent") + contract=causal_switch_contract(parent,bootstrap_samples=100,seed=4) + assert set(contract["branches"])=={"continue-accepted","zero","equal-amplitude-reverse"} + assert np.allclose(contract["branches"]["equal-amplitude-reverse"]["action_omega"],[0.,-.00355,.00355]) + assert np.allclose(contract["branches"]["continue-accepted"]["wall_oracle"]["action"],[0.,.00355,-.00355]) + nrep,nt,nc=4,7,len(SWITCH_TELEMETRY_CHANNELS); clock=np.zeros((nrep,nt,2)); clock[:,:,0]=np.arange(nt); clock[:,:,1]=np.arange(nt)*.1 + base=np.ones((nrep,nt,nc)); zero=base.copy(); reverse=base.copy(); zero[:,3:,:]+=.1; reverse[:,2:,:]+=.2 + telemetry={"continue-accepted":np.concatenate((clock,base),axis=2),"zero":np.concatenate((clock,zero),axis=2),"equal-amplitude-reverse":np.concatenate((clock,reverse),axis=2)} + out=tmp_path/"analysis"; result=analyze_paired_causal_switch(contract,telemetry,out=out) + assert result["classification"]=="PASS" and all(g["pass"] for g in result["gates"].values()) + assert result["onset"]["ordering"][0]["reverse_minus_zero_onset"]==pytest.approx(-.1) + assert result["gates"]["replication"]["pass"] and result["gates"]["local_before_downstream"]["pass"] + assert "cross-correlation alone" in result["claim_boundary"] + one={key:value[:1] for key,value in telemetry.items()} + bounded=analyze_paired_causal_switch(contract,one) + assert bounded["classification"]=="BOUNDED" and not bounded["gates"]["replication"]["pass"] + with pytest.raises(FileExistsError): analyze_paired_causal_switch(contract,telemetry,out=out) + telemetry["zero"]=telemetry["zero"].copy(); telemetry["zero"][0,2,1]+=.01 + with pytest.raises(ValueError,match="synchronized"): analyze_paired_causal_switch(contract,telemetry) + + +def test_stage45_nonlinear_return_classification(): + from steady_pinball_theory.runner import analyze_nonlinear_return + t=np.arange(5.); stable=np.array([.2,.12,.06,.03,.01]); bounded=np.array([.2,.25,.24,.22,.2]) + result=analyze_nonlinear_return(t,{"symmetric":{.01:stable,.02:stable*.8},"antisymmetric":{.01:bounded,.02:bounded*.8}}) + assert result["classification"]=="bounded" + assert all(x["classification"]=="stable" for x in result["families"]["symmetric"]) + unstable=analyze_nonlinear_return(t,{"symmetric":{.01:stable},"antisymmetric":{.01:[.2,.3,.6,1.1,1.3]}}) + assert unstable["classification"]=="unstable" and unstable["families"]["antisymmetric"][0]["branch_switching"] + + +def test_stage45_matrix_free_arnoldi_convergence_and_fail_closed(): + from steady_pinball_theory.runner import matrix_free_arnoldi + diagonal=np.diag([.9,.6,.3,.1]) + good=matrix_free_arnoldi(lambda v,eps:diagonal@v,4,epsilons=(1e-2,1e-4),krylov_dimensions=(3,4),eigen_tolerance=.1) + assert good["convergence"]["passed"] and good["global_stability"]=="AVAILABLE_FEASIBILITY_ONLY" + assert good["runs"][-1]["spectral_radius"]==pytest.approx(.9) + bad=matrix_free_arnoldi(lambda v,eps:(diagonal+eps*np.eye(4))@v,4,epsilons=(.2,.01),krylov_dimensions=(2,4),eigen_tolerance=1e-6) + assert not bad["convergence"]["passed"] + assert bad["global_stability"]=="UNAVAILABLE_CONVERGENCE_GATES_FAILED" + + +def test_legacy_force_only_requires_explicit_loader(tmp_path): + import hashlib,json + from steady_pinball_theory.runner import (ARRAY_FILE, SCHEMA, _canonical_json, _sha256, + load_legacy_force_artifact, load_validate_artifact) + spec,arrays=_synthetic_artifact_inputs("stationary") + spec=json.loads(json.dumps(spec)); spec["schema"]="steady-pinball-endpoint/v4"; spec["history_schema"].pop("torque") + arrays=dict(arrays); arrays.pop("torque_history"); out=tmp_path/"legacy"; out.mkdir() + np.savez_compressed(out/ARRAY_FILE,**arrays) + manifest={"schema":spec["schema"],"immutable":True,"spec":spec,"result":{}, + "files":{ARRAY_FILE:{"sha256":_sha256(out/ARRAY_FILE),"bytes":(out/ARRAY_FILE).stat().st_size}}} + manifest["manifest_payload_sha256"]=hashlib.sha256(_canonical_json(manifest)).hexdigest() + (out/"manifest.json").write_text(json.dumps(manifest,indent=2,sort_keys=True)+"\n") + with pytest.raises(ValueError,match="v5"): load_validate_artifact(out) + loaded,legacy=load_legacy_force_artifact(out) + assert loaded["schema"].endswith("/v4") and "torque_history" not in legacy and SCHEMA.endswith("/v5") + + +def test_production_guards_gpu_root_lease_cooldown_and_no_clobber(tmp_path): + import json + from steady_pinball_theory.runner import (_assert_cfd_environment, enforce_launch_cooldown, + exclusive_cfd_lease, run_case) + root=tmp_path/"CelerisLab"; root.mkdir() + env={"CONDA_DEFAULT_ENV":"pycuda_3_10","CUDA_VISIBLE_DEVICES":"3"} + assert _assert_cfd_environment(intended_celeris_root=root,env=env)==("3",root.resolve()) + for visible in (None,"","0,1"): + bad=dict(env) + if visible is None: bad.pop("CUDA_VISIBLE_DEVICES") + else: bad["CUDA_VISIBLE_DEVICES"]=visible + with pytest.raises(RuntimeError,match="exactly one GPU"): + _assert_cfd_environment(intended_celeris_root=root,env=bad) + with pytest.raises(RuntimeError,match="explicit intended"): + _assert_cfd_environment(intended_celeris_root=None,env=env) + lease=tmp_path/"lease" + with exclusive_cfd_lease(lease,role="test"): + with pytest.raises(RuntimeError,match="already exists"): + with exclusive_cfd_lease(lease,role="other"): pass + assert not lease.exists() + cooldown=tmp_path/"cooldown"; slept=[]; clock=iter([100.,110.,130.]) + assert enforce_launch_cooldown(cooldown,delay_seconds=30,monotonic=lambda:next(clock),sleep=slept.append)==0 + assert enforce_launch_cooldown(cooldown,delay_seconds=30,monotonic=lambda:next(clock),sleep=slept.append)==20 + assert slept[-1]==20 + with pytest.raises(ValueError,match="30"): enforce_launch_cooldown(cooldown,delay_seconds=29) + existing=tmp_path/"existing"; existing.mkdir() + with pytest.raises(FileExistsError,match="clobber"): + run_case(existing,kind="qin",intended_celeris_root=root) + + +def test_celeris_source_identity_is_root_bound_and_hashes_configs(tmp_path): + from types import SimpleNamespace + from steady_pinball_theory.runner import _source_identity + root=tmp_path/"CelerisLab"; package=root/"src/CelerisLab"; configs=package/"lbm/kernels/config" + configs.mkdir(parents=True); (package/"__init__.py").write_text('__version__="test"\n') + (package/"simulation.py").write_text("# simulation\n"); (configs/"config_obs.h").write_text("#define OBS 1\n") + identity=_source_identity(celeris_module=SimpleNamespace(__file__=str(package/"__init__.py"),__version__="test"),intended_celeris_root=root) + assert identity["celeris_import_file"]==str((package/"__init__.py").resolve()) + assert identity["celeris_import_root"]==str(root.resolve()) and identity["celeris_version"]=="test" + assert "src/CelerisLab/lbm/kernels/config/config_obs.h" in identity["celeris_source_hashes"] + outside=tmp_path/"outside.py"; outside.write_text("# outside\n") + with pytest.raises(RuntimeError,match="outside intended root"): + _source_identity(celeris_module=SimpleNamespace(__file__=str(outside),__version__="x"),intended_celeris_root=root) + + + +def test_atomic_campaign_hides_partial_roles_and_no_clobber(tmp_path): + from steady_pinball_theory.runner import _atomic_campaign + out=tmp_path/"campaign"; seen=[] + def fail(stage,role): + (stage/role).mkdir(); seen.append(role) + if role=="second": raise RuntimeError("role failed") + with pytest.raises(RuntimeError,match="role failed"): + _atomic_campaign(out,("first","second","third"),fail) + assert seen==["first","second"] and not out.exists() + assert not list(tmp_path.glob(".campaign.tmp-*")) + _atomic_campaign(out,("only",),lambda stage,role:(stage/role).mkdir()) + assert (out/"only").is_dir() + with pytest.raises(FileExistsError,match="clobber"): + _atomic_campaign(out,("again",),lambda stage,role:None) + + +def test_fake_parent_restore_precedes_actions_and_is_fresh(tmp_path): + from types import SimpleNamespace + from steady_pinball_theory.runner import _new_parent_simulation, _set_exact_action, _sha256 + checkpoint=tmp_path/"parent.chk"; checkpoint.write_bytes(b"exact-parent") + record={"checkpoint":{"sha256":_sha256(checkpoint)},"config_lbm":{"grid":{"nx":20,"ny":12}}, + "centers_xy":[[4.,6.],[7.,8.],[7.,4.]],"radius":1.,"action_omega":[0.,.2,-.2]} + instances=[] + class FakeSimulation: + def __init__(self,**kwargs): + self.events=[]; self.bodies=SimpleNamespace(count=3,objects=[SimpleNamespace(obj_id=i,center=[*c]) for i,c in enumerate(record["centers_xy"])]); instances.append(self) + def initialize(self): self.events.append("initialize") + def load_checkpoint(self,path): self.events.append(("restore",Path(path).read_bytes())) + def set_body(self,i,omega): self.events.append(("action",i,omega)) + def close(self): self.events.append("close") + actions=([0.,.2,-.2],[0.,0.,0.],[0.,-.2,.2]) + for action in actions: + sim=_new_parent_simulation(record,checkpoint,FakeSimulation); _set_exact_action(sim,action); sim.close() + assert len({id(x) for x in instances})==3 + for sim,action in zip(instances,actions): + assert sim.events[:2]==["initialize",("restore",b"exact-parent")] + assert sim.events[2:5]==[("action",i,float(w)) for i,w in enumerate(action)] + + +def test_parent_restore_and_spatial_capture_fail_closed(tmp_path): + from types import SimpleNamespace + from steady_pinball_theory.runner import _capture_branch_row, _new_parent_simulation, _sha256 + checkpoint=tmp_path/"parent.chk"; checkpoint.write_bytes(b"p") + record={"checkpoint":{"sha256":_sha256(checkpoint)},"config_lbm":{"grid":{"nx":20,"ny":12}}, + "centers_xy":[[4.,6.],[7.,8.],[7.,4.]],"radius":1.,"action_omega":[0.,.2,-.2]} + class NoRestore: + def __init__(self,**kwargs): self.bodies=SimpleNamespace(count=3,objects=[]) + def initialize(self): pass + def close(self): pass + with pytest.raises(RuntimeError,match="load_checkpoint"): + _new_parent_simulation(record,checkpoint,NoRestore) + class NoFields: + def get_macroscopic(self): return {"ux":np.zeros(1),"uy":np.zeros(1),"rho":np.ones(1)} + with pytest.raises(ValueError,match="ux size"): + _capture_branch_row(NoFields(),record,[0,.2,-.2],1,1.) + + +def test_stability_amplitude_gate_precedes_simulation(tmp_path,monkeypatch): + import steady_pinball_theory.runner as runner + root=tmp_path/"CelerisLab"; root.mkdir() + monkeypatch.setattr(runner,"_assert_cfd_environment",lambda **kwargs:("0",root)) + monkeypatch.setattr(runner,"_load_accepted_parent",lambda parent:({"source_environment":{"celeris_intended_root":str(root.resolve())}},None,None,None)) + with pytest.raises(ValueError,match="two distinct positive amplitudes"): + runner.acquire_stability(tmp_path/"out",parent=tmp_path/"parent",intended_celeris_root=root,amplitudes=[.01,.01],simulation_factory=lambda **kwargs:None) + + +def test_online_branch_capture_uses_validated_gap_exclusion_contract(): + import inspect + from steady_pinball_theory.runner import _capture_branch_row + source=inspect.getsource(_capture_branch_row) + assert "exclusion_radius=1.1*radius" in source + assert "samples=1001" in source + + +def test_single_clock_three_body_power_is_scalar_total(): + tau_fluid_on_body=np.array([0.,-.02,.02]); omega=np.array([0.,.0035,-.0035]) + record=torque_to_actuator_power(tau_fluid_on_body[None,:],omega[None,:],torque_ownership="fluid_on_body",rho_ref=1.,u_ref=.01,diameter=20.) + assert np.asarray(record["total_power"]).shape==(1,) + assert float(record["total_power"][0])==pytest.approx(.00014) + assert record["sampling_semantics"]["normalize_true"].endswith("exactly once") + + +# Stage-1 lattice/project nondimensionalization contract. +def test_stage1_all_nondimensional_scales_and_zero_limits(): + c=NondimensionalContract(diameter=4.,u_inf=2.,rho_ref=3.) + out=c.convert(x=8.,t=6.,nu=16.,omega=1.,Q=24.,J=144., + force=48.,torque=192.,power=96.) + assert out["x_star"]==2. and out["t_star"]==3. + assert out["nu_star"]==2. and out["omega_star"]==2. + assert out["Q_star"]==3. and out["J_star"]==3. + assert out["C_F"]==2. and out["C_tau"]==2. and out["C_P"]==2. + zero=c.convert(x=0.,t=0.,nu=0.,omega=0.,Q=0.,J=0.,force=0.,torque=0.,power=0.) + assert all(zero[key]==0. for key in ("x_star","t_star","nu_star","omega_star","Q_star","J_star","C_F","C_tau","C_P")) + assert out["metadata"]["scope"]=="two-dimensional per-unit-span" + + +def test_stage1_reference_rescaling_invariance(): + D,U,rho=3.,2.,5.; a=7. + physical=dict(x=1.2*D,t=.8*D/U,nu=.03*U*D,omega=.4*U/D,Q=.6*U*D, + J=.7*rho*U**2*D,force=.8*.5*rho*U**2*D, + torque=.9*.5*rho*U**2*D**2,power=1.1*.5*rho*U**3*D) + base=NondimensionalContract(D,U,rho).convert(**physical) + D2,U2,rho2=a*D,U/a,2*rho + scaled=dict(x=1.2*D2,t=.8*D2/U2,nu=.03*U2*D2,omega=.4*U2/D2,Q=.6*U2*D2, + J=.7*rho2*U2**2*D2,force=.8*.5*rho2*U2**2*D2, + torque=.9*.5*rho2*U2**2*D2**2,power=1.1*.5*rho2*U2**3*D2) + other=NondimensionalContract(D2,U2,rho2).convert(**scaled) + for key in ("x_star","t_star","nu_star","omega_star","Q_star","J_star","C_F","C_tau","C_P"): + assert other[key]==pytest.approx(base[key]) + + +@pytest.mark.parametrize("refs",[(0,1,1),(1,0,1),(1,1,0),(-1,1,1),(np.nan,1,1)]) +def test_stage1_invalid_references_fail(refs): + with pytest.raises(ValueError,match="finite positive"): + NondimensionalContract(*refs) + + +def test_stage1_one_cylinder_power_identity_and_raw_semantics(): + rho,U,D,s=3.,2.,4.,.7 + tau_scale=.5*rho*U**2*D**2 + fluid_tau=np.array([[1.25*tau_scale]]) + omega=np.array([[2*s*U/D]]) + result=torque_to_actuator_power(fluid_tau,omega,torque_ownership="fluid_on_body",rho_ref=rho,u_ref=U,diameter=D) + assert result["raw_C_tau"][0,0]==pytest.approx(1.25) + assert result["C_P"]==pytest.approx(-2*s*1.25) + assert result["raw_torque_interpretation"].startswith("fluid_on_body") + assert "dynamic pressure" in result["sampling_semantics"]["normalizations_not_applied"] + + +def test_stage1_schema_freezes_single_time_average_only(): + from steady_pinball_theory.runner import case_spec + spec=case_spec("accepted",3.55) + semantics=spec["celeris_read_semantics"] + assert semantics["normalize_true"]=="mean per accumulated LBM step only; do not divide by stride again" + assert spec["history_schema"]["torque"]["ownership"]=="actuator_on_fluid" + assert "dynamic-pressure normalization" in semantics["not_applied"] + + +def test_gap_pressure_gradient_requires_explicit_positive_nu(): + from steady_pinball_theory.theory import gap_couette_poiseuille_section + with pytest.raises(ValueError,match="nonzero dp_dx requires"): + gap_couette_poiseuille_section(.5,1.,-1.,dp_dx=.2) + with pytest.raises(ValueError,match="finite and positive"): + gap_couette_poiseuille_section(.5,1.,-1.,dp_dx=.2,nu=0.) + resolved=gap_couette_poiseuille_section(.5,1.,-1.,dp_dx=.2,nu=.1) + assert np.isfinite(list(resolved.values())).all() + + +# Stage-2 same-control-volume endpoint ledger primitives. +def _stage2_cv_fields(): + x=np.arange(-4.,14.1,.25); y=np.arange(-5.,5.1,.25); xx,yy=np.meshgrid(x,y,indexing="xy") + fluid=np.ones_like(xx,dtype=bool); rho=1.+.03*xx + return x,y,xx,yy,fluid,rho + + +def test_stage2_pressure_proxy_gauge_and_not_zero_unavailable_semantics(): + rho=np.array([.9,1.,1.2]); proxy=weak_compressible_pressure_proxy(rho,rho_ref=1.) + assert np.allclose(proxy["values"],[-.1/3,0.,.2/3]) + assert proxy["availability"]=="available_weak_compressible_proxy" + assert "never unavailable" in proxy["claim_limit"] + shifted=weak_compressible_pressure_proxy(rho+.4,rho_ref=1.4) + assert np.allclose(shifted["values"],proxy["values"]) + + +def test_stage2_body_enclosing_cv_uniform_flow_faces_and_actual_bounds(): + x,y,xx,yy,fluid,rho=_stage2_cv_fields(); ux=np.ones_like(xx)*2.; uy=np.zeros_like(xx) + result=rectangular_control_volume_fluxes(x,y,ux,uy,np.ones_like(rho),fluid,[0.,0.],1.,rho_ref=1.) + assert set(result["faces"])=={"left","right","bottom","top"} + assert result["faces"]["left"]["normal"]==[-1.,0.] and result["faces"]["top"]["normal"]==[0.,1.] + assert result["bounds"]["actual_front_center_relative"]["x_over_D"]==[-2.,10.] + assert result["bounds"]["actual_front_center_relative"]["y_over_D"]==[-3.,3.] + assert result["outward_totals"]["mass_flux"]==pytest.approx(0.,abs=1e-12) + assert result["pressure"]["availability"]=="available_weak_compressible_proxy" + + +def test_stage2_linear_flow_viscous_traction_work_and_invalid_face_fail_closed(): + x,y,xx,yy,fluid,rho=_stage2_cv_fields(); ux=.2*xx+.3*yy+1.; uy=-.2*yy+.1*xx + result=rectangular_control_volume_fluxes(x,y,ux,uy,np.ones_like(rho),fluid,[0.,0.],1.,rho_ref=1.,viscosity=.4) + assert result["viscous_terms"]["availability"]=="available_centered_fluid_stencils" + assert np.isfinite(result["outward_totals"]["viscous_work"]) + invalid=fluid.copy(); invalid[np.argmin(abs(y)),np.argmin(abs(x+2))]=False + with pytest.raises(ValueError,match="left face contains nonfluid"): + rectangular_control_volume_fluxes(x,y,ux,uy,rho,invalid,[0.,0.],1.,rho_ref=1.,viscosity=.4) + unsupported=fluid.copy(); unsupported[np.argmin(abs(y)),np.argmin(abs(x+1.75))]=False + with pytest.raises(ValueError,match="unsupported velocity gradients"): + rectangular_control_volume_fluxes(x,y,ux,uy,rho,unsupported,[0.,0.],1.,rho_ref=1.,viscosity=.4) + + +def test_stage2_cv_dissipation_reports_body_stencil_omission(): + x,y,xx,yy,fluid,_=_stage2_cv_fields(); cv=(xx>=-2)&(xx<=10)&(yy>=-3)&(yy<=3) + body=(xx-1.)**2+yy**2<.7**2; cv_fluid=cv&~body + result=volume_viscous_dissipation(x,y,.4*xx,-.4*yy,.2,cv_fluid) + assert 00 + assert result["near_body_omission"].startswith("partial") + assert result["balance_status"]=="partial_not_closed_energy" + + +def test_stage2_gap_dimensionless_contract_keeps_orientations_separate(): + c=NondimensionalContract(2.,4.,3.) + upper=c.convert(Q=8.,J=192.,mass_flux=48.) + lower=c.convert(Q=-8.,J=192.,mass_flux=-48.) + assert upper["Q_star"]==1. and lower["Q_star"]==-1. + assert upper["J_star"]==lower["J_star"]==2. + assert upper["mass_flux_star"]==2. and lower["mass_flux_star"]==-2. + + +# Stage-3 transient v2 manufactured and provenance tests. +def test_stage3_common_mask_norms_grid_independent_and_branch_order(): + from steady_pinball_theory.metrics import common_mask_field_norms, branch_order + values=[] + for n in (21,41,81): + x=np.linspace(0,2,n); y=np.linspace(-1,1,n); ref=np.zeros((n,n,2)); cand=np.zeros_like(ref); cand[...,0]=2.; mask=np.ones((n,n),bool) + values.append(common_mask_field_norms(x,y,ref,cand,mask,contract=NondimensionalContract(2.,2.,1.))) + assert np.allclose([v["L2_star"] for v in values],1.) + assert np.allclose([v["Linf_star"] for v in values],1.) + order=branch_order([3.,1.,1.01],[1.,1.,1.],margin=.05,hysteresis=.02) + assert order["state"].tolist()==[1,1,1] + with pytest.raises(ValueError,match="undefined"): branch_order([0.],[0.]) + + +def test_stage3_onset_spikes_equality_and_strict_intervals(): + from steady_pinball_theory.runner import onset_interval, _interval_order + t=np.arange(7.); baseline=np.zeros(7) + spike=onset_interval(t,[0,0,2,0,0,0,0],baseline,noise_window=2,explicit_floor=1.,consecutive=3) + assert spike["status"].startswith("UNRESOLVED") + equality=onset_interval(t,[0,0,1,1,1,1,1],baseline,noise_window=2,explicit_floor=1.,consecutive=3) + assert equality["interval"] is None + sustained=onset_interval(t,[0,0,2,2,2,2,2],baseline,noise_window=2,explicit_floor=1.,consecutive=3) + assert sustained["interval"]==[1.,2.] + assert _interval_order(sustained,{"interval":[2.,3.]})=="UNRESOLVED_EQUAL_OR_OVERLAP" + assert _interval_order(sustained,{"interval":[3.,4.]})=="FIRST_STRICTLY_BEFORE" + + +def _stage3_arrays(n=5): + from steady_pinball_theory.runner import TRANSIENT_ARRAY_SCHEMAS + arrays={name:np.zeros((n,schema["tail"][0]),float) for name,schema in TRANSIENT_ARRAY_SCHEMAS.items()} + arrays["clock"][:,0]=np.arange(n); arrays["clock"][:,1]=np.arange(n)*.1 + arrays["action_omega"][:,1]=.2; arrays["action_omega"][:,2]=-.2 + arrays["torque_body"][:,1]=.3; arrays["torque_body"][:,2]=-.3 + arrays["power_body"]=arrays["torque_body"]*arrays["action_omega"] + arrays["field_L2_star"][:,0]=np.linspace(1,.1,n); arrays["field_Linf_star"][:,0]=np.linspace(1,.2,n) + arrays["distance_accepted_L2_star"][:,0]=.2; arrays["distance_reverse_L2_star"][:,0]=1. + return arrays + + +def test_stage3_transient_exact_schema_clock_power_and_tamper(tmp_path): + import json + from steady_pinball_theory.runner import transient_contract, write_transient_artifact, load_validate_transient + parent=tmp_path/"parent.chk"; parent.write_bytes(b"parent") + references={name:{"path":str(tmp_path/name),"manifest_payload_sha256":"0"*64} for name in ("accepted_endpoint","reverse_endpoint")} + schedule={"continue-accepted":{"initial_action_omega":[0.,.2,-.2],"release_action_omega":[0.,.2,-.2],"pulse_end_index":None,"release_index":0}} + contract=transient_contract(campaign_kind="causal-switch",campaign_id="manufactured",roles=["continue-accepted"],parent=parent,references=references,diameter=2.,u_inf=1.,action_schedule=schedule) + arrays=_stage3_arrays(); out=tmp_path/"role"; write_transient_artifact(out,contract,"continue-accepted",arrays) + manifest,loaded=load_validate_transient(out,validate_references=False) + assert manifest["schema"].endswith("/v2") and loaded["clock"][0,1]==0 + bad=_stage3_arrays(); bad["power_body"][1,1]+=1 + with pytest.raises(ValueError,match="ownership"): write_transient_artifact(tmp_path/"bad",contract,"continue-accepted",bad) + data=bytearray((out/"transient.npz").read_bytes()); data[-9]^=1; (out/"transient.npz").write_bytes(data) + with pytest.raises(ValueError,match="hash/bytes"): load_validate_transient(out,validate_references=False) + + +def test_stage3_orientation_signs_and_no_aggregate_channels(): + from steady_pinball_theory.runner import TRANSIENT_ARRAY_SCHEMAS, TRANSIENT_GAP_ORDER + assert TRANSIENT_GAP_ORDER==("front_to_rear_y_plus","front_to_rear_y_minus","rear_y_plus_to_rear_y_minus") + assert {"clock","action_omega","torque_body","power_body","gap_Q","gap_mass","gap_J","rear_wall_mean","rear_wall_rms","recirculation","station_deficits"} <= set(TRANSIENT_ARRAY_SCHEMAS) + assert not ({"telemetry","gap_sum","mixed_norm"}&set(TRANSIENT_ARRAY_SCHEMAS)) + + +def test_stage3_legacy_transient_has_fixed_bounded_ceiling(tmp_path): + import hashlib,json + from steady_pinball_theory.runner import load_legacy_transient_diagnostic, _canonical_json, _sha256 + out=tmp_path/"legacy"; out.mkdir(); np.savez_compressed(out/"telemetry.npz",telemetry=np.zeros((2,4))) + manifest={"schema":"steady-pinball-branch-acquisition/v1","immutable":True,"files":{"telemetry.npz":{"sha256":_sha256(out/"telemetry.npz"),"bytes":(out/"telemetry.npz").stat().st_size}}} + manifest["payload_sha256"]=hashlib.sha256(_canonical_json(manifest)).hexdigest(); (out/"manifest.json").write_text(json.dumps(manifest)) + diagnostic,_=load_legacy_transient_diagnostic(out) + assert diagnostic["classification"]=="BOUNDED_DIAGNOSTIC" and "cannot establish" in diagnostic["ceiling"] + + +def test_stage3_continuation_drift_and_release_normalization_boundaries(): + from steady_pinball_theory.runner import onset_interval + t=np.arange(6.); continuation=np.array([0,.01,.02,.03,.04,.05]); branch=continuation.copy() + assert onset_interval(t,branch,continuation,noise_window=2,explicit_floor=.01)["interval"] is None + release=np.array([9.,4.,2.,1.]); release_index=1 + ratio=release/release[release_index] + assert ratio[release_index]==1. and ratio[-1]==.25 + + +def test_stage3_one_realization_is_deterministic_bounded_contract(): + from steady_pinball_theory.runner import analyze_causal_switch_v2 + source=__import__("inspect").getsource(analyze_causal_switch_v2) + assert '"realizations":1' in source and '"deterministic BOUNDED; bootstrap forbidden' in source + + + +def test_stage3_fake_factory_v2_role_includes_zero_and_synchronized_release(tmp_path,monkeypatch): + from types import SimpleNamespace + import steady_pinball_theory.runner as runner + checkpoint=tmp_path/"parent.chk"; checkpoint.write_bytes(b"parent") + record={"checkpoint":{"sha256":runner._sha256(checkpoint)},"config_lbm":{"grid":{"nx":4,"ny":3}},"centers_xy":[[0.,0.],[1.,1.],[1.,-1.]],"radius":.25,"action_omega":[0.,.2,-.2]} + events=[] + class FakeSimulation: + def __init__(self,**kwargs): self.bodies=SimpleNamespace(count=3,objects=[SimpleNamespace(obj_id=i,center=[*c]) for i,c in enumerate(record["centers_xy"])]) + def initialize(self): events.append("initialize") + def load_checkpoint(self,path): events.append("restore") + def set_body(self,i,omega): events.append(("action",i,float(omega))) + def run(self,steps,zero_obs=True): events.append(("run",steps,zero_obs)) + def close(self): events.append("close") + samples=[] + def capture(sim,record,action,step,D,accepted,reverse,mask): + samples.append((step,np.asarray(action).copy())) + row={name:np.zeros(schema["tail"][0]) for name,schema in runner.TRANSIENT_ARRAY_SCHEMAS.items() if name not in ("field_L2_star","field_Linf_star")} + row["clock"]=np.array([step,step*.01/D]); row["action_omega"]=np.asarray(action); row["torque_body"]=np.array([0.,1.,-1.]); row["power_body"]=row["torque_body"]*row["action_omega"] + field=np.full((3,4,2),float(step)); return row,field,np.ones((3,4),bool),np.ones((3,4)) + monkeypatch.setattr(runner,"_capture_transient_v2",capture) + contract={"roles":["symmetric-a0.1"],"action_schedule":{"symmetric-a0.1":{"pulse_end_index":1,"release_index":1}},"body_order":list(runner.TRANSIENT_BODY_ORDER),"gap_order":list(runner.TRANSIENT_GAP_ORDER),"station_order_x_over_D":list(runner.TRANSIENT_STATION_ORDER),"torque":{"ownership":"actuator_on_fluid"}} + written={} + monkeypatch.setattr(runner,"write_transient_artifact",lambda out,contract,role,arrays:written.update(arrays=arrays) or {}) + continuation=([np.zeros((3,4,2)) for _ in range(3)],np.ones((3,4),bool)) + runner._run_transient_v2_role(record,checkpoint,tmp_path/"role","symmetric-a0.1",contract,[0.,.1,-.1],2,1,1.,FakeSimulation,{}, {},np.ones((3,4),bool),pulse_steps=1,continuation=continuation) + assert [x[0] for x in samples]==[0,1,2] + assert np.array_equal(samples[0][1],[0.,.1,-.1]) and np.array_equal(samples[1][1],record["action_omega"]) + assert np.array_equal(written["arrays"]["clock"][:,0],[0.,1.,2.]) + assert written["arrays"]["field_L2_star"][1,0]>0. + + +def test_stage3_transient_reference_authentication_fails_closed(tmp_path,monkeypatch): + import steady_pinball_theory.runner as runner + endpoint={"manifest_payload_sha256":"accepted-hash"}; record={"action_omega":[0.,.2,-.2]}; arrays={"ux":np.zeros((2,2)),"uy":np.zeros((2,2))} + accepted_manifest={"manifest_payload_sha256":"wrong-hash","spec":{"kind":"accepted"},"result":{"qualification_passed":True}} + monkeypatch.setattr(runner,"load_validate_artifact",lambda path:(accepted_manifest,arrays)) + with pytest.raises(ValueError,match="not accepted-parent"): + runner._transient_references(record,endpoint,arrays,tmp_path/"accepted",tmp_path/"reverse") + + +def _stage3_analysis_contract(roles): + import steady_pinball_theory.runner as runner + schedules={} + for role in roles: + pulsed=role!="continue-accepted" + schedules[role]={"initial_action_omega":[0.,.2,-.2],"release_action_omega":[0.,.2,-.2],"pulse_end_index":1 if pulsed else None,"release_index":1 if pulsed else 0} + return {"schema":runner.TRANSIENT_CAMPAIGN_SCHEMA,"roles":roles,"campaign_kind":"nonlinear-return","action_schedule":schedules,"action_schedule_semantics":{ + "pulse_end_index":"sample reached after the final pulsed evolution interval; the release action is installed before this sample is captured; null when no pulse is applied", + "release_index":"first sample under the release action and the pulse-end normalization index; equals pulse_end_index for pulsed roles and is zero for unpulsed roles", + "field_distance":"field_L2_star and field_Linf_star are synchronized role-minus-continuation distances on the common fluid mask, never distances from the role's own release state", + }} + + +def test_stage3_nonlinear_return_zero_normalization_writes_bounded_unavailable(tmp_path,monkeypatch): + import steady_pinball_theory.runner as runner + roles=["continue-accepted","symmetric-a0.1"] + arrays=_stage3_arrays(); arrays["field_L2_star"][1,0]=0. + loaded={role:({},_stage3_arrays()) for role in roles}; loaded["symmetric-a0.1"]=({},arrays) + monkeypatch.setattr(runner,"load_transient_campaign",lambda *args,**kwargs:(_stage3_analysis_contract(roles),loaded)) + result=runner.analyze_nonlinear_return_v2(tmp_path/"campaign",tmp_path/"analysis") + assert result["classification"]=="BOUNDED" + assert result["availability"]=="UNAVAILABLE_REACQUISITION_REQUIRED" + assert result["runs"]=={} and "labels" not in result and "label" not in result + assert "finite and positive" in result["reason"] + assert (tmp_path/"analysis"/"analysis.json").is_file() + + +def test_stage3_nonlinear_return_valid_data_keeps_finite_horizon_label(tmp_path,monkeypatch): + import steady_pinball_theory.runner as runner + roles=["continue-accepted","symmetric-a0.1"] + arrays=_stage3_arrays(); arrays["field_L2_star"][:,0]=[0.,1.,.5,.2,.05] + loaded={"continue-accepted":({},_stage3_arrays()),"symmetric-a0.1":({},arrays)} + monkeypatch.setattr(runner,"load_transient_campaign",lambda *args,**kwargs:(_stage3_analysis_contract(roles),loaded)) + result=runner.analyze_nonlinear_return_v2(tmp_path/"campaign",tmp_path/"analysis-valid") + assert result["availability"]=="AVAILABLE_FINITE_HORIZON" + assert result["runs"]["symmetric-a0.1"]["label"]=="RETURN" + + +def test_stage3_causal_order_unresolved_without_delivery(tmp_path,monkeypatch): + import steady_pinball_theory.runner as runner + roles={role:({},_stage3_arrays(7)) for role in ("continue-accepted","zero","equal-amplitude-reverse")} + contract=_stage3_analysis_contract(list(roles)); contract["campaign_kind"]="causal-switch"; contract["array_schemas"]=runner.TRANSIENT_ARRAY_SCHEMAS + for role in ("zero","equal-amplitude-reverse"): + roles[role][1]["gap_Q"][:,2]=[0.,0.,2.,2.,2.,2.,2.] + roles[role][1]["station_deficits"][:,0]=[0.,0.,0.,2.,2.,2.,2.] + monkeypatch.setattr(runner,"load_transient_campaign",lambda *args,**kwargs:(contract,roles)) + result=runner.analyze_causal_switch_v2(tmp_path/"campaign",tmp_path/"causal",explicit_floor=1.) + for role in ("zero","equal-amplitude-reverse"): + assert result["roles"][role]["delivery_onset"]["interval"] is None + assert result["roles"][role]["mediator_before_delivery"]["status"]=="UNRESOLVED" + + + + +def test_stage3_migration_preserves_nonpower_arrays_and_authenticates(tmp_path,monkeypatch): + import hashlib,json + import steady_pinball_theory.runner as runner + monkeypatch.setattr(runner,"_validate_endpoint_reference",lambda binding: {}) + parent=tmp_path/"parent.chk"; parent.write_bytes(b"parent") + refs={name:{"path":str(tmp_path/name),"manifest_payload_sha256":"0"*64} for name in ("accepted_endpoint","reverse_endpoint")} + schedule={"continue-accepted":{"initial_action_omega":[0.,.2,-.2],"release_action_omega":[0.,.2,-.2],"pulse_end_index":None,"release_index":0}} + legacy=runner.transient_contract(campaign_kind="causal-switch",campaign_id="legacy",roles=["continue-accepted"],parent=parent,references=refs,diameter=2.,u_inf=1.,torque_ownership="fluid_on_body",action_schedule=schedule) + arrays=_stage3_arrays(); arrays["power_body"]=-arrays["torque_body"]*arrays["action_omega"] + source=tmp_path/"source"; source.mkdir(); runner.write_transient_artifact(source/"continue-accepted",legacy,"continue-accepted",arrays) + rows={"plus_omega":[[1,.1,.4]],"minus_omega":[[1,.1,-.4]],"zero":[[1,.1,0.]]} + evaluated=runner._evaluate_torque_oracle(rows,D=20.,U=.01,rho=1.,omega=.002,parity_tolerance=.1,zero_tolerance=.1) + oracle={"schema":runner.TORQUE_ORACLE_SCHEMA,"immutable":True,"setup":{"D":20.,"U":.01,"rho":1.,"exact_actions_by_role":{"plus_omega":.002,"minus_omega":-.002,"zero":0.}},**evaluated} + oracle["payload_sha256"]=hashlib.sha256(runner._canonical_json(oracle)).hexdigest(); oracle_dir=tmp_path/"oracle"; oracle_dir.mkdir(); (oracle_dir/"oracle.json").write_text(json.dumps(oracle)) + out=tmp_path/"corrected"; contract,roles=runner.migrate_transient_ownership(source,oracle_dir,out) + manifest,migrated=roles["continue-accepted"] + assert contract["torque"]["ownership"]=="actuator_on_fluid" + assert np.array_equal(migrated["power_body"],arrays["torque_body"]*arrays["action_omega"]) + for name in arrays: + if name!="power_body": assert np.array_equal(migrated[name],arrays[name]) + runner.load_validate_transient(out/"continue-accepted",validate_references=False) + with pytest.raises(runner.TransientReacquisitionRequired,match="superseded transient power sign"): + runner.load_validate_transient(source/"continue-accepted",validate_references=False) + with pytest.raises(FileExistsError,match="clobber"): runner.migrate_transient_ownership(source,oracle_dir,out) + oracle["roles"]["plus_omega"]["mean_raw_torque"]+=1 + (oracle_dir/"oracle.json").write_text(json.dumps(oracle)) + with pytest.raises(ValueError,match="oracle payload"): runner.load_validate_transient(out/"continue-accepted",validate_references=True) + + +def _fake_torque_oracle_root(tmp_path): + root=tmp_path/"CelerisLab" + for rel in ("src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh","src/CelerisLab/lbm/kernels/core/obs.cuh"): + path=root/rel; path.parent.mkdir(parents=True,exist_ok=True); path.write_text("// frozen fake source\n") + return root + + +def _fake_torque_factory(torques): + import json + from types import SimpleNamespace + instances=[] + class FakeSimulation: + def __init__(self, *, lbm_config_path, body_config_path): + body=json.loads(Path(body_config_path).read_text()); self.omega=body["objects"][0]["omega"] + self.tau=float(torques[self.omega]); self.bodies=SimpleNamespace(count=1,objects=[SimpleNamespace(obj_id=0)]); self.closed=False + instances.append(self) + def initialize(self): pass + def run(self, steps, zero_obs=True): assert steps>0 and zero_obs + def read_body(self, body_id, normalize=True): + assert body_id==0 and normalize is True + return SimpleNamespace(torque=np.array([self.tau])) + def read_torque(self, body_id, normalize=True): + assert body_id==0 and normalize is True + return np.array([self.tau]) + def close(self): self.closed=True + return FakeSimulation,instances + + +def test_fake_factory_torque_oracle_sign_pass_and_metadata(tmp_path): + import json + from steady_pinball_theory.runner import TORQUE_ORACLE_SCHEMA, qualify_torque_oracle + root=_fake_torque_oracle_root(tmp_path); factory,instances=_fake_torque_factory({.002:.4,-.002:-.39,0.0:.005}) + source={"celeris_import_root":str(root.resolve()),"celeris_git_commit":"fake","celeris_git_dirty":False} + out=tmp_path/"oracle" + result=qualify_torque_oracle(out,intended_celeris_root=root,simulation_factory=factory,source_environment=source,cooldown=False) + assert result["schema"]==TORQUE_ORACLE_SCHEMA and result["qualification"]=="PASS" + assert result["celeris_torque_channel_work_sign"]=="actuator_on_fluid" and result["strict_pass"] is True + assert result["ownership_established"]==result["force_ownership"]=="not_established" + assert result["newton_pair_force_ownership_inference"]=="prohibited_from_torque_oracle" + assert len(instances)==3 and len({id(instance) for instance in instances})==3 and all(instance.closed for instance in instances) + assert result["setup"]["fresh_simulation_per_role"] is True and result["setup"]["read_semantics"]["normalize"] is True + assert result["setup"]["two_dimensional_per_unit_span"] is True and result["roles"]["plus_omega"]["C_P"]>0 + assert set(result["source_identity"]["force_torque_kernel_source_hashes"])=={ + "src/CelerisLab/lbm/kernels/boundary/curved_boundary.cuh","src/CelerisLab/lbm/kernels/core/obs.cuh"} + stored=json.loads((out/"oracle.json").read_text()); assert stored["payload_sha256"]==result["payload_sha256"] + with pytest.raises(FileExistsError,match="clobber"): + qualify_torque_oracle(out,intended_celeris_root=root,simulation_factory=factory,source_environment=source,cooldown=False) + + +def test_fake_factory_torque_oracle_sign_failure_is_bounded(tmp_path): + from steady_pinball_theory.runner import qualify_torque_oracle + root=_fake_torque_oracle_root(tmp_path); factory,_=_fake_torque_factory({.002:-.4,-.002:.4,0.0:0.0}) + result=qualify_torque_oracle(tmp_path/"bounded",intended_celeris_root=root,simulation_factory=factory, + source_environment={"celeris_import_root":str(root.resolve())},cooldown=False) + assert result["qualification"]=="BOUNDED" and result["strict_pass"] is False + assert result["ownership_established"]==result["celeris_torque_channel_work_sign"]=="not_established" + assert result["force_ownership"]=="not_established" + assert result["gates"]["same_sign_torque_and_rotation_both_directions"] is False + assert result["gates"]["positive_omega_tau_actuator_power_both_directions"] is False + + +# Stage-5 publication-v3 audit guards. +def test_publication_v3_exact_qin_metric_and_conservative_scaling(): + import steady_pinball_theory.runner as runner + x=np.arange(5.); y=np.arange(6.); X,Y=np.meshgrid(x,y) + qin={"x":x,"y":y,"ux":np.ones_like(X),"uy":np.zeros_like(X),"fluid_mask":np.ones_like(X,dtype=bool)} + qctl={**qin,"ux":qin["ux"].copy(),"uy":qin["uy"].copy()}; qctl["ux"][:,4]+=0.25 + direct,_,j,mask=runner._publication_metric(qin,qctl,center_x=-6.,D=1.,U=1.) + assert j==4 and mask.sum()==2 and direct["E_inf_vector"]==.25 + ux=-Y.astype(float); uy=X.astype(float); omega,use=conservative_masked_vorticity(x,y,ux,uy,np.ones_like(X,dtype=bool)) + assert np.allclose(omega[use]*2/4,1.) # (dv/dx-du/dy)D/U + + +def test_publication_v3_hash_auth_missing_and_tamper(tmp_path): + import hashlib,json + import steady_pinball_theory.runner as runner + p=tmp_path/"x.json"; p.write_text('{}') + with pytest.raises(ValueError,match="authentication"): runner._load_hashed_json(p,"x") + value={"schema":"x"}; value["payload_sha256"]=hashlib.sha256(runner._canonical_json(value)).hexdigest(); p.write_text(json.dumps(value)) + assert runner._load_hashed_json(p,"x")["schema"]=="x" + value["schema"]="tampered"; p.write_text(json.dumps(value)) + with pytest.raises(ValueError,match="authentication"): runner._load_hashed_json(p,"x") + + +def test_publication_v3_render_config_no_clobber_and_report_contract(): + import inspect + import steady_pinball_theory.runner as runner + matplotlib,loc=runner._configure_publication_rendering() + assert matplotlib.get_backend().lower()=="agg" and loc in ("C","C.UTF-8") and __import__('os').environ["TZ"]=="UTC" + source=inspect.getsource(runner.publish_article) + assert 'CreationDate":None' in source and 'ModDate":None' in source and 'if out.exists(): raise FileExistsError' in source + assert source.count("主公式组 1")==1 and source.count("主公式组 2")==1 and source.count("主公式组 3")==1 and source.count("主公式组 4")==1 + for term in ("第一部分","第二部分","第三部分","第四部分","第五部分","第六部分","存储/时间项","物体邻近梯度","没有闭合残差","q_ctl,q_in"): + assert term in source + + +# Steady-results display publisher guards. +def test_display_vorticity_csv_mask_and_no_clobber(tmp_path): + import csv + import steady_pinball_theory.runner as runner + x=np.arange(5.); y=np.arange(5.); X,Y=np.meshgrid(x,y); fluid=np.ones((5,5),bool); fluid[2,2]=False + qin={"x":x,"y":y,"ux":np.ones_like(X),"uy":np.zeros_like(X),"fluid_mask":fluid} + a={**qin,"ux":np.ones_like(X)-Y,"uy":X.copy()} + spec={"D":2.,"config_lbm":{"physics":{"velocity":1.}}} + f=runner._display_fields(a,qin,spec) + assert not f["vorticity_mask"][2,1] and np.isnan(f["vorticity_star"][2,1]) + assert np.allclose(f["vorticity_star"][f["vorticity_mask"]],4.) + solid=runner._display_solid_mask(x,y,np.array([[0.,0.],[2.,0.],[4.,0.]]),.5) + assert solid[0,0] and solid[0,2] and solid[0,4] and not solid[1,1] + case={"name":"stable-reverse-s5.2","s":5.2,"arrays":a,"fields":f,"U":1.,"x_D":x,"y_D":y,"source_sha256":"a"*64} + out=tmp_path/"profiles.csv"; columns=runner._write_display_profiles(out,[case],stations=(2.,)) + assert columns[:3]==("case","s","x_over_D") + with out.open(newline="") as stream: rows=list(csv.DictReader(stream)) + assert tuple(rows[0])==columns and len(rows)==5 and rows[2]["fluid_mask"]=="0" and rows[2]["ux_over_U"]=="" + stage=tmp_path/"stage"; stage.mkdir(); destination=tmp_path/"immutable"; destination.mkdir() + with pytest.raises(FileExistsError,match="clobber"): runner._publish_directory_no_replace(stage,destination) + + +def test_display_stationary_status_and_diagnostic_csv(tmp_path): + import csv + import steady_pinball_theory.runner as runner + stationary={"result":{"qualification_required":False,"qualification_role":"unsteady_reference","qualification_passed":True,"settling":{"qualified":False,"value":.0657}}} + accepted={"result":{"qualification_required":True,"qualification_role":"required_steady_endpoint","qualification_passed":True,"settling":{"qualified":True,"value":1e-6}}} + assert runner._display_qualification(stationary)=="unsteady_reference_not_required_to_settle" + assert runner._display_qualification(accepted)=="settling_qualified_steady_endpoint" + bad={"result":dict(stationary["result"],settling={"qualified":True,"value":0.})} + with pytest.raises(ValueError,match="unsteady-reference"): runner._display_qualification(bad) + rows=[{"case":"accepted-s3.55","oracle_bound_C_P":15.026583843864495,"partial_ledger_status":"endpoint_spatial_partial_not_closed","residual":"","source_artifact_sha256":"a"*64}] + columns=runner._write_dict_csv(tmp_path/"diagnostics.csv",rows) + assert columns==("case","oracle_bound_C_P","partial_ledger_status","residual","source_artifact_sha256") + with (tmp_path/"diagnostics.csv").open(newline="") as stream: saved=list(csv.DictReader(stream)) + assert float(saved[0]["oracle_bound_C_P"])==15.026583843864495 and saved[0]["residual"]=="" + +def test_display_profile_rows_keep_common_fluid_and_conservative_blanks(tmp_path): + import csv + import steady_pinball_theory.runner as runner + x=np.arange(5.); y=np.arange(5.); X,Y=np.meshgrid(x,y); fluid=np.ones((5,5),bool); fluid[2,2]=False + qin={"x":x,"y":y,"ux":np.ones_like(X),"uy":np.zeros_like(X),"fluid_mask":fluid}; a={**qin,"ux":np.ones_like(X)-Y,"uy":X.copy()} + fields=runner._display_fields(a,qin,{"D":2.,"config_lbm":{"physics":{"velocity":1.}}}); case={"name":"accepted-s3.55","s":3.55,"arrays":a,"fields":fields,"U":1.,"x_D":x,"y_D":y,"source_sha256":"b"*64} + runner._write_display_profiles(tmp_path/"profiles.csv",[case],stations=(1.,)) + with (tmp_path/"profiles.csv").open(newline="") as stream: rows=list(csv.DictReader(stream)) + assert len(rows)==len(y) and sum(r["fluid_mask"]=="1" for r in rows)==len(y) + assert rows[2]["ux_over_U"]!="" and rows[2]["vorticity_star"]=="" + assert all(r["source_artifact_sha256"]=="b"*64 for r in rows) + + +# Evidence and reader-document closeout guards. +def test_evidence_index_covers_physical_tree_and_replacements(): + import json + root=Path(__file__).resolve().parents[1]/"evidence" + index=json.loads((root/"INDEX.json").read_text()) + physical={p.name for bucket in ("authoritative","archive") for p in (root/bucket).iterdir() if p.is_dir()} + listed=set(index["authoritative"])|set(index["archive"]) + assert listed==physical + assert set(index["artifact_catalog"])==physical + for source,replacement in index["replacement_map"].items(): + assert source in physical and replacement in index["authoritative"] + assert index["artifact_catalog"][source]["replacement"]==replacement + assert index["authoritative_presentation"]=="steady-results-display-v2-20260809" + assert "steady-results-display-20260809" in index["archive"] + assert index["replacement_map"]["steady-results-display-20260809"]==index["authoritative_presentation"] + for old in ("steady-article-publication-20260809","steady-article-publication-v2-20260809","steady-article-publication-v3-20260809"): + assert index["publication_supersession"][old]=="steady-article-publication-v3b-20260809" + + +def test_transient_dispositions_and_reader_docs_are_complete(): + import json + root=Path(__file__).resolve().parents[1]; index=json.loads((root/"evidence"/"INDEX.json").read_text()) + expected={ + "steady-causal-v2-d20-s3.55-20260808T2200":"steady-causal-v2c-d20-s3.55-20260808T2245", + "steady-causal-analysis-v3-d20-s3.55-20260808T2200":"steady-causal-analysis-v3c-d20-s3.55-20260808T2245", + "steady-return-v2-d20-s3.55-20260808T2225":"steady-return-v2c-d20-s3.55-20260808T2250", + "steady-return-analysis-v2-bounded-d20-s3.55-20260808T2225":"steady-return-analysis-v2c-d20-s3.55-20260808T2250", + } + for old,new in expected.items(): + assert old in index["archive"] and index["replacement_map"][old]==new + assert old in index["diagnostic_disposition"] + for name in ("README.md","RESULTS.md","HISTORY_AND_LESSONS.md","DERIVATION.md","LITERATURE.md"): + assert (root/name).is_file() + assert (root/"evidence"/"README.md").is_file() + readme=(root/"README.md").read_text(); results=(root/"RESULTS.md").read_text(); history=(root/"HISTORY_AND_LESSONS.md").read_text() + assert "publish-results-display" in readme and "steady-results-display-v2-20260809" in readme + assert "CCD is **pending/not frozen" in results + assert "navigation not evidence" in history + + +# Standalone lattice-exact plotting helper guards. +def test_plot_results_discrete_center_white_and_pixel_contract(tmp_path): + from PIL import Image + from steady_pinball_theory.plot_results import discrete_colormap, crop_indices + edges, _, cmap = discrete_colormap("RdBu_r", -2., 2., 21, center_white=True) + assert len(edges) == 22 and np.allclose(cmap.colors[10], [1, 1, 1, 1]) + source=Path(__file__).resolve().parents[1]/"plot_results.py" + text=source.read_text(); assert "displayed/exported vorticity analytically zero" in text + assert "plates/error" in text and "family_scales" in text + x=np.arange(-3.,12.); y=np.arange(-4.,5.); ix,iy=crop_indices(x,y) + assert (len(ix),len(iy))==(13,7) + path=tmp_path/"raw.png"; Image.new("RGBA",(len(ix),len(iy))).save(path) + assert Image.open(path).size==(len(ix),len(iy)) + + +def test_plot_results_area_weighted_l2_and_publish_contract(tmp_path): + from steady_pinball_theory.plot_results import area_weighted_vector_l2, publish + du=np.full((3,4),3.); dv=np.full((3,4),4.); mask=np.ones((3,4),bool); weights=np.arange(1,13,dtype=float).reshape(3,4) + assert area_weighted_vector_l2(du,dv,mask,weights,2.)==2.5 + stage=tmp_path/"stage"; stage.mkdir(); (stage/"marker").write_text("new") + out=tmp_path/"figures"; out.mkdir(); (out/"marker").write_text("old") + with pytest.raises(FileExistsError,match="overwrite"): publish(stage,out,False) + assert (out/"marker").read_text()=="old" + publish(stage,out,True); assert (out/"marker").read_text()=="new" diff --git a/src/steady_pinball_theory/theory.py b/src/steady_pinball_theory/theory.py index d992492..733d6b5 100644 --- a/src/steady_pinball_theory/theory.py +++ b/src/steady_pinball_theory/theory.py @@ -1,66 +1,1263 @@ -"""MFS outer/strip potential-flow representation with prescribed circulation.""" +"""Validated potential-flow references with prescribed geometric-CCW circulation. + +Outer MFS/exact helpers solve impermeability with independent body periods; they +are not rotating-wall no-slip or Gamma(Omega) closures (DERIVATION.md §§3–7, 24). +Vasconcelos–Föppl and Kármán helpers are quarantined mathematical oracles only. +""" from __future__ import annotations from dataclasses import dataclass import numpy as np +_TWOPI = 2.0 * np.pi -def _images(y0: float, H: float, layers: int, vortex: bool): - for k in range(-layers,layers+1): - yield y0+4*k*H, 1.0 - yield 2*H-y0+4*k*H, -1.0 if vortex else 1.0 + +def _points(points): + p = np.asarray(points, dtype=float) + if p.ndim == 1 and p.shape == (2,): + p = p[None, :] + if p.ndim != 2 or p.shape[1] != 2 or not np.isfinite(p).all(): + raise ValueError("points must be a finite (N,2) array") + return p + + +def _integer(name, value, minimum): + if isinstance(value, (bool, np.bool_)) or not isinstance(value, (int, np.integer)): + raise ValueError(f"{name} must be an integer") + if value < minimum: + raise ValueError(f"{name} must be >= {minimum}") + return int(value) + + +def _geometry(centers, radius, circulations=None, H=None): + c = np.asarray(centers, dtype=float) + if c.ndim != 2 or c.shape[1] != 2 or len(c) == 0 or not np.isfinite(c).all(): + raise ValueError("centers must be a nonempty finite (B,2) array") + if not np.isscalar(radius) or not np.isfinite(radius) or radius <= 0: + raise ValueError("radius must be finite and positive") + if circulations is not None: + g = np.asarray(circulations, dtype=float) + if g.shape != (len(c),) or not np.isfinite(g).all(): + raise ValueError("circulations must be one finite value per center") + else: + g = None + if len(c) > 1: + d = np.linalg.norm(c[:, None, :] - c[None, :, :], axis=2) + np.fill_diagonal(d, np.inf) + if np.any(d <= 2.0 * radius): + raise ValueError("cylinders must be strictly non-overlapping") + if H is not None: + if not np.isscalar(H) or not np.isfinite(H) or H <= 0: + raise ValueError("H must be finite and positive") + if np.any(np.abs(c[:, 1]) + radius >= H): + raise ValueError("every cylinder must lie strictly inside the strip") + return c, float(radius), g, None if H is None else float(H) + + +def _images(y0, H, layers, vortex): + for k in range(-layers, layers + 1): + yield y0 + 4 * k * H, 1.0 + yield 2 * H - y0 + 4 * k * H, -1.0 if vortex else 1.0 def singular_velocity(points, source, *, H=None, layers=0, vortex=False): - p=np.asarray(points,float); x0,y0=map(float,source); vel=np.zeros_like(p) - imgs=[(y0,1.0)] if H is None else list(_images(y0,float(H),int(layers),vortex)) - for yi,sgn in imgs: - dx=p[:,0]-x0; dy=p[:,1]-yi; r2=dx*dx+dy*dy - if np.any(r2 <= 1e-24): raise ValueError("evaluation at singularity") - if vortex: vel += sgn*np.column_stack((-dy/r2,dx/r2))/(2*np.pi) - else: vel += sgn*np.column_stack((dx/r2,dy/r2))/(2*np.pi) + p = _points(points) + z = np.asarray(source, dtype=float) + if z.shape != (2,) or not np.isfinite(z).all(): + raise ValueError("source must be a finite 2-vector") + layers = _integer("layers", layers, 0) + if H is not None and (not np.isfinite(H) or H <= 0): + raise ValueError("H must be finite and positive") + vel = np.zeros_like(p) + imgs = [(z[1], 1.0)] if H is None else _images(z[1], float(H), layers, vortex) + for yi, sign in imgs: + dx, dy = p[:, 0] - z[0], p[:, 1] - yi + r2 = dx * dx + dy * dy + if np.any(r2 <= 1e-24): + raise ValueError("evaluation at singularity") + if vortex: + vel += sign * np.column_stack((-dy / r2, dx / r2)) / _TWOPI + else: + vel += sign * np.column_stack((dx / r2, dy / r2)) / _TWOPI + if not np.isfinite(vel).all(): + raise FloatingPointError("nonfinite singular velocity") return vel +def cylinder_velocity(points, center, radius, *, u_inf=1.0, circulation=0.0): + """Exact exterior velocity; positive circulation is geometrically CCW.""" + p = _points(points) + center = np.asarray(center, dtype=float) + values = np.asarray([radius, u_inf, circulation], dtype=float) + if center.shape != (2,) or not np.isfinite(center).all() or not np.isfinite(values).all(): + raise ValueError("center and flow parameters must be finite") + if radius <= 0: + raise ValueError("radius must be positive") + d = p - center + r2 = np.einsum("ij,ij->i", d, d) + if np.any(r2 < radius * radius * (1.0 - 1e-13)): + raise ValueError("exact velocity is defined only on the cylinder exterior") + x, y = d[:, 0], d[:, 1] + r4 = r2 * r2 + ux = u_inf * (1.0 + radius**2 * (y * y - x * x) / r4) + uy = -2.0 * u_inf * radius**2 * x * y / r4 + ux -= circulation * y / (_TWOPI * r2) + uy += circulation * x / (_TWOPI * r2) + return np.column_stack((ux, uy)) + + @dataclass class MFSSolution: - centers: np.ndarray; radius: float; strengths: np.ndarray; source_points: np.ndarray - circulations: np.ndarray; u_inf: float; H: float|None; image_layers: int + centers: np.ndarray + radius: float + strengths: np.ndarray + source_points: np.ndarray + circulations: np.ndarray + u_inf: float + H: float | None + image_layers: int + def velocity(self, points): - p=np.asarray(points,float); v=np.zeros_like(p); v[:,0]=self.u_inf - for q,z in zip(self.strengths,self.source_points): - v += q*singular_velocity(p,z,H=self.H,layers=self.image_layers) - for g,z in zip(self.circulations,self.centers): - v += g*singular_velocity(p,z,H=self.H,layers=self.image_layers,vortex=True) + p = _points(points) + v = np.zeros_like(p) + v[:, 0] = self.u_inf + for q, z in zip(self.strengths, self.source_points): + v += q * singular_velocity(p, z, H=self.H, layers=self.image_layers) + for gamma, z in zip(self.circulations, self.centers): + v += gamma * singular_velocity( + p, z, H=self.H, layers=self.image_layers, vortex=True + ) + if not np.isfinite(v).all(): + raise FloatingPointError("nonfinite MFS velocity") return v def solve_mfs(centers, radius, circulations, *, u_inf=1.0, n_boundary=96, source_ratio=0.65, H=None, image_layers=20): - c=np.asarray(centers,float); gam=np.asarray(circulations,float) - if c.shape != (len(gam),2): raise ValueError("centers/circulations mismatch") - th=(np.arange(n_boundary)+0.5)*2*np.pi/n_boundary - normals=np.column_stack((np.cos(th),np.sin(th))) - bpts=np.concatenate([ci+radius*normals for ci in c]) - nrms=np.tile(normals,(len(c),1)) - spts=np.concatenate([ci+source_ratio*radius*normals for ci in c]) - base=np.zeros_like(bpts); base[:,0]=u_inf - for g,ci in zip(gam,c): base += g*singular_velocity(bpts,ci,H=H,layers=image_layers,vortex=True) - rhs=-np.einsum('ij,ij->i',base,nrms) - # Eliminate one source per body so every body's net source is exactly zero. - cols=[] + """Neumann MFS solve; circulations are prescribed geometric-CCW periods.""" + c, radius, gam, H = _geometry(centers, radius, circulations, H) + if not np.isscalar(u_inf) or not np.isfinite(u_inf): + raise ValueError("u_inf must be finite") + n_boundary = _integer("n_boundary", n_boundary, 8) + image_layers = _integer("image_layers", image_layers, 0) + if not np.isscalar(source_ratio) or not np.isfinite(source_ratio) or not 0 < source_ratio < 1: + raise ValueError("source_ratio must satisfy 0 < source_ratio < 1") + theta = (np.arange(n_boundary) + 0.5) * _TWOPI / n_boundary + normals = np.column_stack((np.cos(theta), np.sin(theta))) + bpts = np.concatenate([ci + radius * normals for ci in c]) + nrms = np.tile(normals, (len(c), 1)) + spts = np.concatenate([ci + source_ratio * radius * normals for ci in c]) + base = np.zeros_like(bpts) + base[:, 0] = float(u_inf) + for gamma, ci in zip(gam, c): + base += gamma * singular_velocity( + bpts, ci, H=H, layers=image_layers, vortex=True + ) + rhs = -np.einsum("ij,ij->i", base, nrms) + cols = [] for ib in range(len(c)): - ref=spts[ib*n_boundary+n_boundary-1] - vr=singular_velocity(bpts,ref,H=H,layers=image_layers) - for j in range(n_boundary-1): - v=singular_velocity(bpts,spts[ib*n_boundary+j],H=H,layers=image_layers)-vr - cols.append(np.einsum('ij,ij->i',v,nrms)) - A=np.column_stack(cols); coeff,resid,rank,sv=np.linalg.lstsq(A,rhs,rcond=1e-12) - strengths=np.zeros(len(spts)); k=0 + ref = spts[(ib + 1) * n_boundary - 1] + vr = singular_velocity(bpts, ref, H=H, layers=image_layers) + for j in range(n_boundary - 1): + v = singular_velocity( + bpts, spts[ib * n_boundary + j], H=H, layers=image_layers + ) - vr + cols.append(np.einsum("ij,ij->i", v, nrms)) + A = np.column_stack(cols) + coeff, _, rank, sv = np.linalg.lstsq(A, rhs, rcond=1e-12) + if rank != A.shape[1]: + raise np.linalg.LinAlgError(f"rank-deficient MFS system: rank {rank}/{A.shape[1]}") + if not np.isfinite(coeff).all() or not np.isfinite(sv).all() or sv[-1] <= 0: + raise FloatingPointError("nonfinite or singular MFS solve") + strengths = np.zeros(len(spts)) + k = 0 for ib in range(len(c)): - q=coeff[k:k+n_boundary-1]; k+=n_boundary-1 - strengths[ib*n_boundary:ib*n_boundary+n_boundary-1]=q - strengths[ib*n_boundary+n_boundary-1]=-np.sum(q) - sol=MFSSolution(c,float(radius),strengths,spts,gam,float(u_inf),H,int(image_layers)) - residual=np.einsum('ij,ij->i',sol.velocity(bpts),nrms) - return sol,{"boundary_Linf":float(np.max(np.abs(residual))),"boundary_L2":float(np.sqrt(np.mean(residual**2))), - "rank":int(rank),"unknowns":int(A.shape[1]),"condition":float(sv[0]/sv[-1])} + q = coeff[k:k + n_boundary - 1] + k += n_boundary - 1 + strengths[ib * n_boundary:(ib + 1) * n_boundary - 1] = q + strengths[(ib + 1) * n_boundary - 1] = -np.sum(q) + sol = MFSSolution(c, radius, strengths, spts, gam, float(u_inf), H, image_layers) + residual = np.einsum("ij,ij->i", sol.velocity(bpts), nrms) + diag = { + "collocation_Linf": float(np.max(np.abs(residual))), + "collocation_RMS": float(np.sqrt(np.mean(residual**2))), + "rank": int(rank), "unknowns": int(A.shape[1]), + "singular_value_max": float(sv[0]), "singular_value_min": float(sv[-1]), + "condition": float(sv[0] / sv[-1]), + "coefficient_L2": float(np.linalg.norm(strengths)), + "coefficient_Linf": float(np.max(np.abs(strengths))), + "zero_source_error": [float(abs(x.sum())) for x in strengths.reshape(len(c), -1)], + } + return sol, diag + + +def _boundary_sample(centers, radius, n_boundary): + c, radius, _, _ = _geometry(centers, radius) + n_boundary = _integer("n_boundary", n_boundary, 8) + theta = (np.arange(n_boundary) + 0.5) * _TWOPI / n_boundary + normals = np.column_stack((np.cos(theta), np.sin(theta))) + bpts = np.concatenate([ci + radius * normals for ci in c]) + nrms = np.tile(normals, (len(c), 1)) + tangents = np.column_stack((-nrms[:, 1], nrms[:, 0])) + body_index = np.repeat(np.arange(len(c)), n_boundary) + return c, radius, bpts, nrms, tangents, body_index, theta, n_boundary + + +def _zero_mean_per_body(values, body_index, n_bodies, n_boundary): + out = np.asarray(values, dtype=float).copy() + for ib in range(n_bodies): + sl = body_index == ib + mean = float(np.mean(out[sl])) + out[sl] -= mean + return out + + +def wall_tangential_speed(centers, radius, omega, *, n_boundary=96): + """No-slip tangential speed u_theta=Omega a on each body boundary sample.""" + c, radius, bpts, _, tangents, body_index, _, _ = _boundary_sample( + centers, radius, n_boundary) + omega = np.asarray(omega, dtype=float) + if omega.shape != (len(c),) or not np.isfinite(omega).all(): + raise ValueError("omega must be one finite value per body") + rel = bpts - c[body_index] + speed = omega[body_index] * float(radius) + return {"points": bpts, "tangents": tangents, "speed": speed, + "body_index": body_index, "n_boundary": n_boundary} + + +def displacement_transpiration_rhs(centers, radius, omega, base_velocity, *, + n_boundary=96, delta_star_scale=0.05): + """Zero-net-per-body transpiration v_n=alpha d(U_e delta*)/ds proxy. + + The scale is a low-Re ansatz at h/D=0.5; it is not a lubrication closure. + """ + c, radius, bpts, nrms, tangents, body_index, _, n_boundary = _boundary_sample( + centers, radius, n_boundary) + wall = wall_tangential_speed(centers, radius, omega, n_boundary=n_boundary) + u_e = np.einsum("ij,ij->i", base_velocity(bpts), tangents) + delta_star = float(delta_star_scale) * radius / np.maximum(np.abs(u_e), 0.25) + product = u_e * delta_star + v_n = np.zeros(len(bpts)) + for ib in range(len(c)): + sl = body_index == ib + s = np.linspace(0.0, _TWOPI * radius, int(sl.sum()), endpoint=False) + v_n[sl] = np.gradient(product[sl], s) + v_n = _zero_mean_per_body(v_n, body_index, len(c), n_boundary) + return {"boundary_points": bpts, "normals": nrms, "v_n": v_n, + "body_index": body_index, "wall_speed": wall["speed"], + "edge_speed": u_e, "zero_mean_per_body": True} + + +def solve_mfs_neumann(centers, radius, normal_velocity, *, circulations=None, + u_inf=1.0, n_boundary=96, source_ratio=0.65, H=None, + image_layers=20): + """MFS Neumann solve with optional zero-mean transpiration on each body.""" + c, radius, gam, H = _geometry(centers, radius, circulations, H) + if gam is None: + gam = np.zeros(len(c)) + n_boundary = _integer("n_boundary", n_boundary, 8) + c, radius, bpts, nrms, _, body_index, _, _ = _boundary_sample( + c, radius, n_boundary) + vn = np.asarray(normal_velocity, dtype=float) + if vn.shape != bpts.shape[:1] or not np.isfinite(vn).all(): + raise ValueError("normal_velocity must align with boundary samples") + for ib in range(len(c)): + sl = body_index == ib + if abs(float(np.mean(vn[sl]))) > 1e-10: + raise ValueError("normal_velocity must have zero mean on every body") + base = np.zeros_like(bpts) + base[:, 0] = float(u_inf) + for gamma, ci in zip(gam, c): + base += gamma * singular_velocity( + bpts, ci, H=H, layers=image_layers, vortex=True) + rhs = vn - np.einsum("ij,ij->i", base, nrms) + theta = (np.arange(n_boundary) + 0.5) * _TWOPI / n_boundary + normals0 = np.column_stack((np.cos(theta), np.sin(theta))) + spts = np.concatenate([ci + source_ratio * radius * normals0 for ci in c]) + cols = [] + for ib in range(len(c)): + ref = spts[(ib + 1) * n_boundary - 1] + vr = singular_velocity(bpts, ref, H=H, layers=image_layers) + for j in range(n_boundary - 1): + v = singular_velocity( + bpts, spts[ib * n_boundary + j], H=H, layers=image_layers) - vr + cols.append(np.einsum("ij,ij->i", v, nrms)) + A = np.column_stack(cols) + coeff, _, rank, sv = np.linalg.lstsq(A, rhs, rcond=1e-12) + if rank != A.shape[1]: + raise np.linalg.LinAlgError(f"rank-deficient MFS Neumann system: {rank}/{A.shape[1]}") + strengths = np.zeros(len(spts)) + k = 0 + for ib in range(len(c)): + q = coeff[k:k + n_boundary - 1] + k += n_boundary - 1 + strengths[ib * n_boundary:(ib + 1) * n_boundary - 1] = q + strengths[(ib + 1) * n_boundary - 1] = -np.sum(q) + sol = MFSSolution(c, radius, strengths, spts, gam, float(u_inf), H, image_layers) + residual = np.einsum("ij,ij->i", sol.velocity(bpts), nrms) - vn + diag = { + "collocation_Linf": float(np.max(np.abs(residual))), + "collocation_RMS": float(np.sqrt(np.mean(residual**2))), + "rank": int(rank), "condition": float(sv[0] / sv[-1]), + "zero_source_error": [float(abs(x.sum())) for x in strengths.reshape(len(c), -1)], + } + return sol, diag + + +def solve_mfs_transpiration(centers, radius, omega, *, branch, u_inf=1.0, + delta_star_scale=0.05, **kwargs): + """Zero-circulation outer field plus moving-wall transpiration response.""" + zero, _ = solve_mfs(centers, radius, np.zeros(len(np.asarray(centers))), u_inf=u_inf, **kwargs) + if branch == "plus-minus": + om = np.asarray([0.0, +abs(omega), -abs(omega)], dtype=float) + elif branch == "minus-plus": + om = np.asarray([0.0, -abs(omega), +abs(omega)], dtype=float) + else: + raise ValueError("branch must be 'plus-minus' or 'minus-plus'") + if float(np.max(np.abs(om))) <= 0.0: + zero, d0 = solve_mfs(centers, radius, np.zeros(len(np.asarray(centers))), u_inf=u_inf, **kwargs) + return {"base": zero, "transpiration": zero, "rhs": {"v_n": np.zeros(1)}, + "diagnostics": d0, "zero_rotation": True} + rhs = displacement_transpiration_rhs( + centers, radius, om, zero.velocity, delta_star_scale=delta_star_scale, + n_boundary=kwargs.get("n_boundary", 96)) + resp, diag = solve_mfs_neumann( + centers, radius, rhs["v_n"], circulations=np.zeros(len(np.asarray(centers))), + u_inf=u_inf, **kwargs) + return {"base": zero, "transpiration": resp, "rhs": rhs, "diagnostics": diag} + + +def gap_couette_poiseuille_section(gap_height, u_wall_a, u_wall_b, *, + dp_dx=0.0, nu=None): + """Parallel-plate Couette–Poiseuille section oracle (finite-gap ansatz). + + Returns oriented mass flux Q_g, momentum flux J_g, mean velocity, and power + scale per unit span. Not a lubrication-theory claim at h/D=0.5. + """ + h = float(gap_height) + ua = float(u_wall_a) + ub = float(u_wall_b) + if h <= 0 or not np.isfinite([h, ua, ub, dp_dx]).all(): + raise ValueError("invalid Couette–Poiseuille inputs") + if nu is None and dp_dx != 0.0: + raise ValueError("nonzero dp_dx requires explicit finite positive nu") + if nu is None: + nu_value = None + u_mean = 0.5 * (ua + ub) + profile = lambda eta: ua + (ub - ua) * eta + else: + nu_value = float(nu) + if not np.isfinite(nu_value) or nu_value <= 0: + raise ValueError("nu must be finite and positive when provided") + u_mean = 0.5 * (ua + ub) - h * h * dp_dx / (12.0 * nu_value) + profile = lambda eta: ua + (ub - ua) * eta - dp_dx * h * h / (2.0 * nu_value) * eta * (1.0 - eta) + eta = np.linspace(0.0, 1.0, 201) + u = profile(eta) + q_g = float(h * u_mean) + j_g = float(h * np.sum(.5*((u*u)[:-1]+(u*u)[1:])*np.diff(eta))) + shear = (ub - ua) / h - (0.0 if nu_value is None else 0.5 * h * dp_dx / nu_value) + power = float(abs(shear * (ub - ua) * h)) + return {"Q_g": q_g, "J_g": j_g, "u_mean": float(u_mean), + "gap_height": h, "u_wall_a": ua, "u_wall_b": ub, + "dp_dx": float(dp_dx), "power_scale": power} + + +def _gap_wall_speeds(centers, radius, omega, branch): + """Gap-facing tangential speeds for rear–rear and front–rear segments.""" + c = np.asarray(centers, dtype=float) + if branch == "plus-minus": + om = np.asarray([0.0, +abs(omega), -abs(omega)], dtype=float) + elif branch == "minus-plus": + om = np.asarray([0.0, -abs(omega), +abs(omega)], dtype=float) + else: + raise ValueError("branch must be 'plus-minus' or 'minus-plus'") + r = float(radius) + # Gap-facing cardinals from contract oracle geometry. + upper_gap = om[1] * r + lower_gap = -om[2] * r + front_upper = om[0] * r + front_lower = -om[0] * r + rear_rear_h = float(np.linalg.norm(c[1] - c[2]) - 2.0 * r) + front_upper_h = float(np.linalg.norm(c[0] - c[1]) - 2.0 * r) + front_lower_h = float(np.linalg.norm(c[0] - c[2]) - 2.0 * r) + return { + "rear_rear": gap_couette_poiseuille_section(rear_rear_h, upper_gap, lower_gap), + "front_upper": gap_couette_poiseuille_section(front_upper_h, front_upper, upper_gap), + "front_lower": gap_couette_poiseuille_section(front_lower_h, front_lower, lower_gap), + } + + +def gap_jet_velocity_field(points, center_a, center_b, radius, gap_oracle, *, + jet_decay=0.35, strength=1.0): + """Localized gap-momentum jet along the shortest open segment.""" + p = _points(points) + a = np.asarray(center_a, dtype=float) + b = np.asarray(center_b, dtype=float) + d = b - a + length = float(np.linalg.norm(d)) + if length <= 2.0 * radius: + raise ValueError("invalid gap geometry") + tangent = d / length + normal = np.array([-tangent[1], tangent[0]]) + mid = 0.5 * (a + b) + t = np.clip(np.einsum("ij,j->i", p - a, tangent), radius, length - radius) + closest = a + t[:, None] * tangent + dist = np.linalg.norm(p - closest, axis=1) + envelope = np.exp(-(dist / (jet_decay * radius)) ** 2) + u_mag = float(strength) * float(gap_oracle["u_mean"]) + vel = envelope[:, None] * (u_mag * normal) + return vel + + +def wake_gaussian_deficit(points, *, x0, amplitude, width, u_conv=1.0, diffusivity=0.02): + """Convected Gaussian streamwise deficit; parameters from near field only.""" + p = _points(points) + x = p[:, 0] - float(x0) + y = p[:, 1] + if float(u_conv) <= 0 or float(width) <= 0: + raise ValueError("u_conv and width must be positive") + sigma2 = float(width) ** 2 + np.maximum(0.0, 2.0 * float(diffusivity) * x / float(u_conv)) + sigma = np.sqrt(sigma2) + decay = np.exp(-np.maximum(x, 0.0) * float(u_conv) / max(4.0 * float(diffusivity), 1e-12)) + du = -float(amplitude) * decay * np.exp(-0.5 * (y / sigma) ** 2) + return np.column_stack((du, np.zeros_like(du))) + + +def composite_model_fields(points, *, centers, radius, omega, branch, s=None, + coeffs=None, H=15.0, u_inf=1.0, n_boundary=96, + source_ratio=0.65, image_layers=40, + delta_star_scale=0.05, jet_decay=0.35, + wake_x0=2.0, wake_diffusivity=0.02): + """Evaluate q_MFS0, q_VI, q_gap, q_wake and weighted composite q_SA.""" + p = _points(points) + c = np.asarray(centers, dtype=float) + if coeffs is None: + coeffs = {"alpha_vi": 1.0, "alpha_gap": 1.0, "wake_amplitude": 0.0, + "wake_width": 0.5, "gamma": 0.0} + mfs0, _ = solve_mfs(c, radius, np.zeros(len(c)), u_inf=u_inf, H=H, + n_boundary=n_boundary, source_ratio=source_ratio, + image_layers=image_layers) + q0 = mfs0.velocity(p) + vi = solve_mfs_transpiration( + c, radius, float(omega), branch=branch, u_inf=u_inf, H=H, + n_boundary=n_boundary, source_ratio=source_ratio, + image_layers=image_layers, delta_star_scale=delta_star_scale) + q_vi = vi["transpiration"].velocity(p) - q0 + gaps = _gap_wall_speeds(c, radius, omega, branch) + q_gap = np.zeros_like(p) + for key, pair in (("rear_rear", (c[1], c[2])), + ("front_upper", (c[0], c[1])), + ("front_lower", (c[0], c[2]))): + q_gap += gap_jet_velocity_field( + p, pair[0], pair[1], radius, gaps[key], + jet_decay=jet_decay, strength=float(coeffs.get("alpha_gap", 1.0))) + q_wake = wake_gaussian_deficit( + p, x0=wake_x0, amplitude=float(coeffs.get("wake_amplitude", 0.0)), + width=float(coeffs.get("wake_width", 0.5)), u_conv=u_inf, + diffusivity=wake_diffusivity) + if abs(float(coeffs.get("gamma", 0.0))) > 0: + basis = circulation_basis("rear_opposite") + gfield, _ = solve_mfs(c, radius, float(coeffs["gamma"]) * basis, u_inf=u_inf, + H=H, n_boundary=n_boundary, source_ratio=source_ratio, + image_layers=image_layers) + q_gamma = gfield.velocity(p) - q0 + else: + q_gamma = np.zeros_like(p) + alpha_vi = float(coeffs.get("alpha_vi", 1.0)) + composite = q0 + alpha_vi * q_vi + q_gap + q_wake + q_gamma + return { + "q_mfs0": q0, "q_vi": q_vi, "q_gap": q_gap, "q_wake": q_wake, + "q_gamma": q_gamma, "q_sa": composite, "gaps": gaps, + "transpiration_rhs": vi["rhs"], "coeffs": dict(coeffs), + } + + +def _free_vortices(positions, strengths, centers=None, radius=None): + x = _points(positions) + kappa = np.asarray(strengths, dtype=float) + if len(x) == 0 or kappa.shape != (len(x),) or not np.isfinite(kappa).all(): + raise ValueError("strengths must be one finite value per nonempty vortex position") + if len(x) > 1: + separation = np.linalg.norm(x[:, None, :] - x[None, :, :], axis=2) + np.fill_diagonal(separation, np.inf) + if np.any(separation <= 1e-12): + raise ValueError("free vortices must be distinct") + if centers is not None: + distance = np.linalg.norm(x[:, None, :] - centers[None, :, :], axis=2) + if np.any(distance <= radius * (1.0 + 1e-12)): + raise ValueError("free vortices must lie strictly outside every cylinder") + return x, kappa + + +def mutual_vortex_velocity(positions, strengths): + """Physical mutual induction, with every singular self term omitted.""" + x, kappa = _free_vortices(positions, strengths) + velocity = np.zeros_like(x) + for i in range(len(x)): + for j in range(len(x)): + if i != j: + velocity[i] += kappa[j] * singular_velocity( + x[i:i + 1], x[j], vortex=True)[0] + if not np.isfinite(velocity).all(): + raise FloatingPointError("nonfinite mutual vortex velocity") + return velocity + + +@dataclass +class MFSBodyResponse: + """Reusable unbounded zero-period MFS Neumann-response discretization.""" + centers: np.ndarray + radius: float + boundary_points: np.ndarray + normals: np.ndarray + source_points: np.ndarray + matrix: np.ndarray + n_boundary: int + + def response(self, vortex_positions, vortex_strengths): + x, kappa = _free_vortices( + vortex_positions, vortex_strengths, self.centers, self.radius) + incident = np.zeros_like(self.boundary_points) + for position, strength in zip(x, kappa): + incident += strength * singular_velocity( + self.boundary_points, position, vortex=True) + rhs = -np.einsum("ij,ij->i", incident, self.normals) + coeff, _, rank, sv = np.linalg.lstsq(self.matrix, rhs, rcond=1e-12) + if rank != self.matrix.shape[1]: + raise np.linalg.LinAlgError( + f"rank-deficient MFS response: rank {rank}/{self.matrix.shape[1]}") + if not np.isfinite(coeff).all() or not np.isfinite(sv).all() or sv[-1] <= 0: + raise FloatingPointError("nonfinite or singular MFS response solve") + strengths = np.zeros(len(self.source_points)) + k = 0 + for ib in range(len(self.centers)): + q = coeff[k:k + self.n_boundary - 1] + k += self.n_boundary - 1 + sl = slice(ib * self.n_boundary, (ib + 1) * self.n_boundary) + strengths[sl.start:sl.stop - 1] = q + strengths[sl.stop - 1] = -np.sum(q) + return MFSSolution( + self.centers.copy(), self.radius, strengths, + self.source_points.copy(), np.zeros(len(self.centers)), 0.0, None, 0) + + +def prepare_unbounded_body_response(centers, radius, *, n_boundary=96, + source_ratio=0.65): + """Preassemble the geometry-only MFS matrix for free-vortex responses.""" + c, radius, _, _ = _geometry(centers, radius) + n_boundary = _integer("n_boundary", n_boundary, 8) + if (not np.isscalar(source_ratio) or not np.isfinite(source_ratio) or + not 0 < source_ratio < 1): + raise ValueError("source_ratio must satisfy 0 < source_ratio < 1") + theta = (np.arange(n_boundary) + 0.5) * _TWOPI / n_boundary + normals0 = np.column_stack((np.cos(theta), np.sin(theta))) + boundary = np.concatenate([center + radius * normals0 for center in c]) + normals = np.tile(normals0, (len(c), 1)) + sources = np.concatenate([ + center + float(source_ratio) * radius * normals0 for center in c]) + columns = [] + for ib in range(len(c)): + reference = sources[(ib + 1) * n_boundary - 1] + reference_velocity = singular_velocity(boundary, reference) + for j in range(n_boundary - 1): + velocity = (singular_velocity(boundary, sources[ib * n_boundary + j]) + - reference_velocity) + columns.append(np.einsum("ij,ij->i", velocity, normals)) + matrix = np.column_stack(columns) + if np.linalg.matrix_rank(matrix, tol=1e-12) != matrix.shape[1]: + raise np.linalg.LinAlgError("rank-deficient MFS response geometry") + return MFSBodyResponse(c, radius, boundary, normals, sources, matrix, n_boundary) + + +def finite_vortex_rhs(base_solution, vortex_positions, vortex_strengths, *, + body_response=None): + """Unbounded point-vortex RHS with physical self omitted, response retained.""" + if not isinstance(base_solution, MFSSolution) or base_solution.H is not None: + raise ValueError("base_solution must be an unbounded MFSSolution") + x, kappa = _free_vortices( + vortex_positions, vortex_strengths, + base_solution.centers, base_solution.radius) + if body_response is None: + per_body = len(base_solution.source_points) // len(base_solution.centers) + body_response = prepare_unbounded_body_response( + base_solution.centers, base_solution.radius, n_boundary=per_body) + if (not isinstance(body_response, MFSBodyResponse) or + body_response.centers.shape != base_solution.centers.shape or + not np.allclose(body_response.centers, base_solution.centers, + rtol=0.0, atol=1e-14) or + not np.isclose(body_response.radius, base_solution.radius, + rtol=0.0, atol=1e-14)): + raise ValueError("body_response geometry must match base_solution") + response = body_response.response(x, kappa) + rhs = (base_solution.velocity(x) + mutual_vortex_velocity(x, kappa) + + response.velocity(x)) + if not np.isfinite(rhs).all(): + raise FloatingPointError("nonfinite finite-vortex RHS") + return rhs + + + +def vas_foppl_hamiltonian(position, kappa): + """Vasconcelos et al. (2012), eq. (7); quarantined Föppl oracle (not steady claim).""" + point = np.asarray(position, dtype=float) + if point.shape != (2,) or not np.isfinite(point).all(): + raise ValueError("position must be a finite 2-vector") + if not np.isscalar(kappa) or not np.isfinite(kappa) or kappa <= 0: + raise ValueError("kappa must be finite and positive") + x, y = point + r2 = x * x + y * y + if y <= 0 or r2 <= 1.0: + raise ValueError("Vas symmetric coordinates require y > 0 and r^2 > 1") + logarithm_argument = y * (r2 - 1.0) / np.sqrt((r2 - 1.0)**2 + 4.0 * y * y) + return float(y * (1.0 - 1.0 / r2) + - 0.5 * float(kappa) * np.log(logarithm_argument)) + + +def vas_critical_hamiltonian(kappa): + """Hamiltonian level at Vas eq. (13) infinity saddle, paper eq. (26).""" + if not np.isscalar(kappa) or not np.isfinite(kappa) or kappa <= 0: + raise ValueError("kappa must be finite and positive") + return float(0.5 * kappa * (1.0 - np.log(0.5 * kappa))) + + +def vas_foppl_rhs(position, kappa): + """Canonical RHS (dx/dt,dy/dt)=(dH/dy,-dH/dx) for the Vas Hamiltonian.""" + point = np.asarray(position, dtype=float) + vas_foppl_hamiltonian(point, kappa) + x, y = point + r2 = x * x + y * y + gap = r2 - 1.0 + denominator = gap * gap + 4.0 * y * y + dlog_dx = 2.0 * x / gap - 2.0 * x * gap / denominator + dlog_dy = 1.0 / y + 2.0 * y / gap - 2.0 * y * (gap + 2.0) / denominator + dH_dx = 2.0 * x * y / (r2 * r2) - 0.5 * float(kappa) * dlog_dx + dH_dy = (1.0 - 1.0 / r2 + 2.0 * y * y / (r2 * r2) + - 0.5 * float(kappa) * dlog_dy) + return np.array([dH_dy, -dH_dx]) + + +def vas_foppl_equilibrium(radius): + """Return downstream Foppl (x0,y0,kappa) from Vas et al. eqs. (9)-(10).""" + if not np.isscalar(radius) or not np.isfinite(radius) or radius <= 1.0: + raise ValueError("radius must be finite and greater than one") + r0 = float(radius) + y0 = (r0 * r0 - 1.0) / (2.0 * r0) + x0 = np.sqrt(r0 * r0 - y0 * y0) + kappa = (r0 * r0 + 1.0) * (r0 * r0 - 1.0)**2 / r0**5 + return np.array([x0, y0]), float(kappa) + + +def exact_circle_vortex_response(vortex_position, vortex_strength, *, + center=(0.0, 0.0), radius=1.0): + """Exact zero-period response to one exterior vortex around one circle. + + A physical geometric-CCW vortex Gamma at z0 is paired with image -Gamma at + c+a^2(z0-c)/|z0-c|^2 and central +Gamma, restoring zero island circulation. + The regular self velocity retains both image terms (Routh rule). + """ + c, radius, _, _ = _geometry([center], radius) + position, strength = _free_vortices( + [vortex_position], [vortex_strength], c, radius) + z0 = position[0] + gamma = float(strength[0]) + relative = z0 - c[0] + image = c[0] + radius * radius * relative / np.dot(relative, relative) + + def velocity(points): + p = _points(points) + return gamma * (singular_velocity(p, c[0], vortex=True) + - singular_velocity(p, image, vortex=True)) + + regular_self = velocity(z0[None, :])[0] + hamiltonian = (gamma * gamma / (4.0 * np.pi) + * np.log((np.dot(relative, relative) - radius * radius) + / np.dot(relative, relative))) + return { + "image_position": image, "image_strength": -gamma, + "central_strength": gamma, "regular_self_velocity": regular_self, + "hamiltonian": float(hamiltonian), "velocity": velocity, + } + + +def staggered_karman_train(half_window, *, spacing=1.0, separation=0.281, + circulation=1.0): + """Finite unconfined Karman street; quarantined oracle (not steady claim path). + + Lower row: (m*a,-h/2), -Gamma. Upper row: ((m+1/2)*a,+h/2), +Gamma, + over the symmetric streamwise window |x| <= (half_window+1/2)*a. + """ + half_window = _integer("half_window", half_window, 0) + values = np.asarray([spacing, separation, circulation], dtype=float) + if not np.isfinite(values).all() or spacing <= 0 or separation <= 0: + raise ValueError("spacing and separation must be finite and positive") + lower_m = np.arange(-half_window, half_window + 1, dtype=float) + upper_m = np.arange(-half_window - 1, half_window + 1, dtype=float) + lower = np.column_stack((lower_m * float(spacing), + np.full(len(lower_m), -0.5 * float(separation)))) + upper = np.column_stack(((upper_m + 0.5) * float(spacing), + np.full(len(upper_m), 0.5 * float(separation)))) + positions = np.concatenate((lower, upper)) + strengths = np.concatenate((np.full(len(lower_m), -float(circulation)), + np.full(len(upper_m), float(circulation)))) + return positions, strengths + + +def karman_self_advection(spacing, separation, circulation): + """Positive-x infinite-street speed; quarantined Karman oracle only.""" + values = np.asarray([spacing, separation, circulation], dtype=float) + if not np.isfinite(values).all() or spacing <= 0 or separation <= 0: + raise ValueError("spacing and separation must be finite and positive") + return float(circulation) / (2.0 * float(spacing)) * np.tanh( + np.pi * float(separation) / float(spacing)) + + +def karman_stable_aspect(): + """Unconfined von Karman neutral aspect p0=h/a; quarantined oracle only.""" + return float(np.arcsinh(1.0) / np.pi) + + + +def point_vortex_hamiltonian(positions, strengths, *, reference_length=1.0): + """Finite-plane Hamiltonian matching mutual_vortex_velocity exactly. + + The reference length fixes the logarithm's dimensionless argument; no + configuration-dependent additive constant is introduced. + """ + x, kappa = _free_vortices(positions, strengths) + if (not np.isscalar(reference_length) or not np.isfinite(reference_length) + or reference_length <= 0): + raise ValueError("reference_length must be finite and positive") + i, j = np.triu_indices(len(x), 1) + distance = np.linalg.norm(x[i] - x[j], axis=1) + return float(-np.sum(kappa[i] * kappa[j] + * np.log(distance / float(reference_length))) / _TWOPI) + + +def point_vortex_rhs(positions, strengths, *, collision_distance=1e-6): + """Vectorized unbounded point-vortex RHS with collision fail-fast.""" + x, kappa = _free_vortices(positions, strengths) + if (not np.isscalar(collision_distance) or not np.isfinite(collision_distance) + or collision_distance <= 0): + raise ValueError("collision_distance must be finite and positive") + delta = x[:, None, :] - x[None, :, :] + radius2 = np.einsum("ijk,ijk->ij", delta, delta) + np.fill_diagonal(radius2, np.inf) + if np.min(radius2) <= float(collision_distance)**2: + raise ValueError("point-vortex collision threshold reached") + weights = kappa[None, :] / (_TWOPI * radius2) + velocity = np.column_stack((-np.sum(weights * delta[:, :, 1], axis=1), + np.sum(weights * delta[:, :, 0], axis=1))) + if not np.isfinite(velocity).all(): + raise FloatingPointError("nonfinite point-vortex RHS") + return velocity + + +def integrate_point_vortices_rk4(positions, strengths, *, horizon, time_step, + collision_distance=1e-6, + reference_length=1.0): + """Deterministic fixed-step classical RK4 point-vortex integration.""" + x, kappa = _free_vortices(positions, strengths) + values = np.asarray([horizon, time_step, collision_distance, + reference_length], dtype=float) + if (not np.isfinite(values).all() or horizon <= 0 or time_step <= 0 + or collision_distance <= 0 or reference_length <= 0): + raise ValueError("integration scales must be finite and positive") + states = [x.copy()] + times = [0.0] + hamiltonians = [point_vortex_hamiltonian( + x, kappa, reference_length=reference_length)] + time = 0.0 + while time < float(horizon): + dt = min(float(time_step), float(horizon) - time) + k1 = point_vortex_rhs(x, kappa, collision_distance=collision_distance) + k2 = point_vortex_rhs(x + 0.5 * dt * k1, kappa, + collision_distance=collision_distance) + k3 = point_vortex_rhs(x + 0.5 * dt * k2, kappa, + collision_distance=collision_distance) + k4 = point_vortex_rhs(x + dt * k3, kappa, + collision_distance=collision_distance) + x = x + dt * (k1 + 2*k2 + 2*k3 + k4) / 6.0 + if not np.isfinite(x).all(): + raise FloatingPointError("nonfinite RK4 state") + point_vortex_rhs(x, kappa, collision_distance=collision_distance) + time += dt + states.append(x.copy()) + times.append(time) + hamiltonians.append(point_vortex_hamiltonian( + x, kappa, reference_length=reference_length)) + return {"times": np.asarray(times), "states": np.asarray(states), + "hamiltonian": np.asarray(hamiltonians)} + + +@dataclass +class LaurentSolution: + centers: np.ndarray + radius: float + coefficients: np.ndarray + u_inf: float + + def velocity(self, points): + p = _points(points) + z = p[:, 0] + 1j * p[:, 1] + q = np.full(len(p), self.u_inf, dtype=complex) + order = self.coefficients.shape[1] + for center, coeffs in zip(self.centers, self.coefficients): + dz = z - complex(*center) + if np.any(np.abs(dz) <= self.radius): + raise ValueError("Laurent velocity requires strict exterior points") + for n in range(1, order + 1): + q += -n * coeffs[n - 1] * self.radius**n / dz**(n + 1) + v = np.column_stack((q.real, -q.imag)) + if not np.isfinite(v).all(): + raise FloatingPointError("nonfinite Laurent velocity") + return v + + +def solve_laurent(centers, radius, *, u_inf=1.0, order=12, n_boundary=None): + """Independent zero-circulation unbounded Fourier/Laurent collocation.""" + c, radius, _, _ = _geometry(centers, radius) + if not np.isscalar(u_inf) or not np.isfinite(u_inf): + raise ValueError("u_inf must be finite") + order = _integer("order", order, 1) + n_boundary = 4 * order if n_boundary is None else _integer("n_boundary", n_boundary, 2 * order) + theta = (np.arange(n_boundary) + 0.173) * _TWOPI / n_boundary + normals0 = np.column_stack((np.cos(theta), np.sin(theta))) + points = np.concatenate([ci + radius * normals0 for ci in c]) + normals = np.tile(normals0, (len(c), 1)) + z = points[:, 0] + 1j * points[:, 1] + cols = [] + for center in c: + dz = z - complex(*center) + for n in range(1, order + 1): + basis = -n * radius**n / dz**(n + 1) + for phase in (1.0, 1.0j): + q = phase * basis + vel = np.column_stack((q.real, -q.imag)) + cols.append(np.einsum("ij,ij->i", vel, normals)) + A = np.column_stack(cols) + rhs = -float(u_inf) * normals[:, 0] + x, _, rank, sv = np.linalg.lstsq(A, rhs, rcond=1e-12) + if rank != A.shape[1] or not np.isfinite(x).all() or sv[-1] <= 0: + raise np.linalg.LinAlgError("rank-deficient or nonfinite Laurent solve") + coeff = np.empty((len(c), order), dtype=complex) + k = 0 + for ib in range(len(c)): + for n in range(order): + coeff[ib, n] = x[k] + 1j * x[k + 1] + k += 2 + sol = LaurentSolution(c, radius, coeff, float(u_inf)) + collocation_residual = A @ x - rhs + # A distinct angular grid checks the boundary trace independently of the + # solve nodes. The tiny radial offset only satisfies strict-exterior evaluation. + check_theta = (np.arange(3 * n_boundary + 1) + 0.61803398875) * _TWOPI / (3 * n_boundary + 1) + check_normals0 = np.column_stack((np.cos(check_theta), np.sin(check_theta))) + check_points = np.concatenate([ + ci + radius * (1.0 + 1e-10) * check_normals0 for ci in c + ]) + check_normals = np.tile(check_normals0, (len(c), 1)) + offgrid_residual = np.einsum( + "ij,ij->i", sol.velocity(check_points), check_normals + ) + return sol, { + "collocation_Linf": float(np.max(np.abs(collocation_residual))), + "off_collocation_Linf": float(np.max(np.abs(offgrid_residual))), + "off_collocation_RMS": float(np.sqrt(np.mean(offgrid_residual**2))), + "off_collocation_angles_per_body": int(len(check_theta)), + "rank": int(rank), "unknowns": int(A.shape[1]), + "condition": float(sv[0] / sv[-1]), + "coefficient_L2": float(np.linalg.norm(coeff)), + } + + +def dense_diagnostics(solution, *, n_angle=2048, wall_interval=None, n_wall=1001, + contour_factor=1.08, far_radius=50.0, n_far=720): + """Independent shifted-node boundary, circulation, wall, and far-field diagnostics.""" + n_angle = _integer("n_angle", n_angle, 32) + n_far = _integer("n_far", n_far, 32) + c, radius, _, _ = _geometry(solution.centers, solution.radius, solution.circulations, + solution.H) + theta = (np.arange(n_angle) + 0.271828) * _TWOPI / n_angle + normals = np.column_stack((np.cos(theta), np.sin(theta))) + bodies = [] + for ib, center in enumerate(c): + points = center + radius * normals + residual = np.einsum("ij,ij->i", solution.velocity(points), normals) + if len(c) > 1: + vectors = np.delete(c, ib, axis=0) - center + target = vectors[np.argmin(np.linalg.norm(vectors, axis=1))] + angle = np.arctan2(target[1], target[0]) + delta = np.angle(np.exp(1j * (theta - angle))) + gap = np.abs(delta) <= np.pi / 3 + else: + gap = np.ones(n_angle, dtype=bool) + outer = ~gap if np.any(~gap) else gap + bodies.append({ + "Linf": float(np.max(np.abs(residual))), + "RMS": float(np.sqrt(np.mean(residual**2))), + "gap_Linf": float(np.max(np.abs(residual[gap]))), + "outer_Linf": float(np.max(np.abs(residual[outer]))), + }) + if not np.isfinite(contour_factor) or contour_factor <= 1: + raise ValueError("contour_factor must exceed one") + circulations = [] + tangent = np.column_stack((-np.sin(theta), np.cos(theta))) + for center in c: + points = center + contour_factor * radius * normals + trace = np.einsum("ij,ij->i", solution.velocity(points), tangent) + circulations.append(float(contour_factor * radius * _TWOPI * np.mean(trace))) + phi = (np.arange(n_far) + 0.4142) * _TWOPI / n_far + origin = np.mean(c, axis=0) + far_points = origin + far_radius * np.column_stack((np.cos(phi), np.sin(phi))) + far_error = solution.velocity(far_points) - np.array([solution.u_inf, 0.0]) + out = { + "off_collocation_bodies": bodies, + "circulation_integrals": circulations, + "circulation_errors": (np.asarray(circulations) - solution.circulations).tolist(), + "far_radius": float(far_radius), + "far_field_Linf": float(np.max(np.linalg.norm(far_error, axis=1))), + "far_field_RMS": float(np.sqrt(np.mean(np.sum(far_error**2, axis=1)))), + } + if solution.H is not None: + if wall_interval is None or len(wall_interval) != 2: + raise ValueError("strip diagnostics require wall_interval=(xmin,xmax)") + xmin, xmax = map(float, wall_interval) + if not np.isfinite([xmin, xmax]).all() or xmin >= xmax: + raise ValueError("wall_interval must be finite and increasing") + n_wall = _integer("n_wall", n_wall, 16) + x = np.linspace(xmin, xmax, n_wall) + p = np.concatenate((np.column_stack((x, np.full_like(x, solution.H))), + np.column_stack((x, np.full_like(x, -solution.H))))) + residual = solution.velocity(p)[:, 1] + out["strip_wall"] = { + "interval": [xmin, xmax], "samples_per_wall": n_wall, + "Linf": float(np.max(np.abs(residual))), + "RMS": float(np.sqrt(np.mean(residual**2))), + } + return out + + +@dataclass +class MultipoleSolution: + """Unbounded MFS source expansion through a finite bodywise order.""" + centers: np.ndarray + source_coefficients: np.ndarray + circulations: np.ndarray + u_inf: float + source_radii: np.ndarray + + def velocity(self, points): + p = _points(points) + z = p[:, 0] + 1j * p[:, 1] + q = np.full(len(p), self.u_inf, dtype=complex) + for center, coeffs, rho in zip(self.centers, self.source_coefficients, + self.source_radii): + dz = z - complex(*center) + if np.any(np.abs(dz) <= rho): + raise ValueError("multipole reconstruction requires points outside source rings") + for n, coefficient in enumerate(coeffs, start=1): + q += -n * coefficient / dz**(n + 1) + for gamma, center in zip(self.circulations, self.centers): + dz = z - complex(*center) + if np.any(np.abs(dz) <= 1e-12): + raise ValueError("evaluation at vortex center") + q += -1j * gamma / (_TWOPI * dz) + velocity = np.column_stack((q.real, -q.imag)) + if not np.isfinite(velocity).all(): + raise FloatingPointError("nonfinite multipole velocity") + return velocity + + +def source_multipole_coefficients(solution, order): + """Return A[j,n-1] for W_source=sum A[j,n-1]/(z-c_j)^n.""" + if solution.H is not None: + raise ValueError("unbounded source multipoles are not a strip asymptotic basis") + order = _integer("order", order, 1) + count = len(solution.centers) + if len(solution.strengths) % count: + raise ValueError("source points must be grouped uniformly by body") + per_body = len(solution.strengths) // count + coefficients = np.empty((count, order), dtype=complex) + radii = np.empty(count) + for j, center in enumerate(solution.centers): + sl = slice(j * per_body, (j + 1) * per_body) + strengths = solution.strengths[sl] + delta = (solution.source_points[sl, 0] + 1j * solution.source_points[sl, 1] + - complex(*center)) + if abs(np.sum(strengths)) > 1e-10: + raise ValueError("each body must have zero source monopole") + radii[j] = np.max(np.abs(delta)) + for n in range(1, order + 1): + coefficients[j, n - 1] = -np.sum(strengths * delta**n) / (_TWOPI * n) + return coefficients, radii + + +def reconstruct_multipoles(solution, order): + coefficients, radii = source_multipole_coefficients(solution, order) + return MultipoleSolution(solution.centers.copy(), coefficients, + solution.circulations.copy(), solution.u_inf, radii) + + +def far_field_coefficients(solution): + """Direct unbounded log and 1/z potential coefficients about the origin.""" + if solution.H is not None: + raise ValueError("unbounded Laurent coefficients do not describe strip asymptotics") + source_z = solution.source_points[:, 0] + 1j * solution.source_points[:, 1] + center_z = solution.centers[:, 0] + 1j * solution.centers[:, 1] + log_coefficient = (np.sum(solution.strengths) - 1j * np.sum(solution.circulations)) / _TWOPI + dipole_coefficient = (-np.sum(solution.strengths * source_z) + + 1j * np.sum(solution.circulations * center_z)) / _TWOPI + return {"log": complex(log_coefficient), "dipole": complex(dipole_coefficient)} + + +def rear_opposite_affine(centers, radius, *, u_inf=1.0, n_boundary=96, + source_ratio=0.65): + """Solve C(Gamma)=C0+Gamma*dC and its optimal real cancellation.""" + centers = np.asarray(centers, dtype=float) + if centers.shape != (3, 2): + raise ValueError("rear-opposite basis requires exactly three centers") + zero, _ = solve_mfs(centers, radius, [0.0, 0.0, 0.0], u_inf=u_inf, + n_boundary=n_boundary, source_ratio=source_ratio) + unit, _ = solve_mfs(centers, radius, [0.0, 1.0, -1.0], u_inf=u_inf, + n_boundary=n_boundary, source_ratio=source_ratio) + c0 = far_field_coefficients(zero)["dipole"] + dc = far_field_coefficients(unit)["dipole"] - c0 + if abs(dc) <= 1e-14: + raise FloatingPointError("rear-opposite dipole sensitivity is zero") + gamma = -float(np.real(np.conj(dc) * c0)) / float(abs(dc)**2) + residual = c0 + gamma * dc + scale = max(abs(c0), abs(gamma * dc), 1.0) + return { + "C0": c0, "dC": dc, "gamma_opt": gamma, "residual": residual, + "exact": bool(abs(residual) <= 1e-10 * scale), + } + + +_STAGE4_BASES = { + "rear_opposite": np.array([0.0, 1.0, -1.0]) / np.sqrt(2.0), + "common_rear": np.array([0.0, 1.0, 1.0]) / np.sqrt(2.0), + "front_only": np.array([1.0, 0.0, 0.0]), +} + + +def circulation_basis(name): + """Frozen unit-L2 geometric-CCW circulation counterfactual.""" + if name not in _STAGE4_BASES: + raise ValueError(f"unknown circulation basis {name!r}") + return _STAGE4_BASES[name].copy() + + +def basis_affine(centers, radius, name, *, u_inf=1.0, n_boundary=96, + source_ratio=0.65): + """Return exact MFS affine field/coefficient data for a frozen unit basis.""" + centers = np.asarray(centers, dtype=float) + if centers.shape != (3, 2): + raise ValueError("Stage-4 bases require exactly three centers") + basis = circulation_basis(name) + zero, _ = solve_mfs(centers, radius, np.zeros(3), u_inf=u_inf, + n_boundary=n_boundary, source_ratio=source_ratio) + unit, _ = solve_mfs(centers, radius, basis, u_inf=u_inf, + n_boundary=n_boundary, source_ratio=source_ratio) + c0 = far_field_coefficients(zero) + c1 = far_field_coefficients(unit) + return { + "name": name, "basis": basis, "zero": zero, "unit": unit, + "log0": c0["log"], "dlog": c1["log"] - c0["log"], + "C0": c0["dipole"], "dC": c1["dipole"] - c0["dipole"], + } + + +def affine_velocity(affine, amplitude, points): + """Evaluate u0 + amplitude*(u1-u0), exactly affine up to roundoff.""" + p = _points(points) + v0 = affine["zero"].velocity(p) + return v0 + float(amplitude) * (affine["unit"].velocity(p) - v0) + + + +def velocity_jacobian(velocity, point, *, step=2e-5): + """Centered finite-difference Jacobian D_x u at one interior point.""" + x = np.asarray(point, dtype=float) + if x.shape != (2,) or not np.isfinite(x).all(): + raise ValueError("point must be a finite 2-vector") + if not np.isscalar(step) or not np.isfinite(step) or step <= 0: + raise ValueError("step must be finite and positive") + columns = [] + for k in range(2): + delta = np.zeros(2); delta[k] = float(step) + plus = np.asarray(velocity((x + delta)[None, :]), dtype=float) + minus = np.asarray(velocity((x - delta)[None, :]), dtype=float) + if plus.shape != (1, 2) or minus.shape != (1, 2): + raise ValueError("velocity must return an aligned (N,2) array") + columns.append((plus[0] - minus[0]) / (2.0 * step)) + jacobian = np.column_stack(columns) + if not np.isfinite(jacobian).all(): + raise FloatingPointError("nonfinite velocity Jacobian") + return jacobian + + +def classify_stagnation_root(velocity, point, *, jacobian_step=2e-5, + nondegenerate_sigma=1e-4): + """Return residual and implicit-function diagnostics for one root candidate.""" + if not np.isfinite(nondegenerate_sigma) or nondegenerate_sigma <= 0: + raise ValueError("nondegenerate_sigma must be finite and positive") + x = np.asarray(point, dtype=float) + value = np.asarray(velocity(x[None, :]), dtype=float) + if value.shape != (1, 2) or not np.isfinite(value).all(): + raise ValueError("velocity must return a finite aligned (N,2) array") + jacobian = velocity_jacobian(velocity, x, step=jacobian_step) + singular_values = np.linalg.svd(jacobian, compute_uv=False) + return { + "point": x.copy(), "residual": float(np.linalg.norm(value[0])), + "jacobian": jacobian, "determinant": float(np.linalg.det(jacobian)), + "singular_values": singular_values, + "nondegenerate": bool(singular_values[-1] >= nondegenerate_sigma), + } + + +def find_interior_stagnation_points( + velocity, centers, radius, *, bounds=(-2.0, 5.0, -2.5, 2.5), + seed_shape=(29, 25), exclusion_margin=0.08, root_tolerance=1e-9, + deduplication_radius=2e-5, jacobian_step=2e-5, + nondegenerate_sigma=1e-4, max_iterations=40): + """Finite-seed Newton sampled audit of interior velocity roots. + + This routine does not assert global root completeness and excludes boundary roots. + """ + c, radius, _, _ = _geometry(centers, radius) + if len(bounds) != 4 or not np.isfinite(bounds).all(): + raise ValueError("bounds must contain four finite values") + xmin, xmax, ymin, ymax = map(float, bounds) + if xmin >= xmax or ymin >= ymax: + raise ValueError("bounds must be increasing") + if (len(seed_shape) != 2 or any(isinstance(n, (bool, np.bool_)) or + not isinstance(n, (int, np.integer)) or n < 2 for n in seed_shape)): + raise ValueError("seed_shape must contain two integers >= 2") + scales = [exclusion_margin, root_tolerance, deduplication_radius, + jacobian_step, nondegenerate_sigma] + if not np.isfinite(scales).all() or any(x <= 0 for x in scales): + raise ValueError("audit tolerances and margin must be finite and positive") + max_iterations = _integer("max_iterations", max_iterations, 1) + minimum_distance = radius + float(exclusion_margin) + + def admissible(x): + return (xmin <= x[0] <= xmax and ymin <= x[1] <= ymax and + np.all(np.linalg.norm(c - x, axis=1) >= minimum_distance)) + + xs = np.linspace(xmin, xmax, int(seed_shape[0])) + ys = np.linspace(ymin, ymax, int(seed_shape[1])) + roots = [] + attempted = 0 + for seed in np.array(np.meshgrid(xs, ys, indexing="xy")).reshape(2, -1).T: + if not admissible(seed): + continue + attempted += 1 + x = seed.copy() + converged = False + for _ in range(max_iterations): + try: + f = np.asarray(velocity(x[None, :]), dtype=float)[0] + if not np.isfinite(f).all(): + break + if np.linalg.norm(f) <= root_tolerance: + converged = True + break + jacobian = velocity_jacobian(velocity, x, step=jacobian_step) + step = np.linalg.lstsq(jacobian, -f, rcond=None)[0] + except (ValueError, FloatingPointError, np.linalg.LinAlgError): + break + if not np.isfinite(step).all() or np.linalg.norm(step) > 2.0: + break + accepted = False + for damping in (1.0, 0.5, 0.25, 0.125, 0.0625): + trial = x + damping * step + if admissible(trial): + try: + trial_norm = np.linalg.norm(velocity(trial[None, :])[0]) + except (ValueError, FloatingPointError): + continue + if np.isfinite(trial_norm) and trial_norm < np.linalg.norm(f): + x = trial; accepted = True; break + if not accepted: + break + if converged and admissible(x): + info = classify_stagnation_root( + velocity, x, jacobian_step=jacobian_step, + nondegenerate_sigma=nondegenerate_sigma) + if info["residual"] <= root_tolerance and not any( + np.linalg.norm(x - old["point"]) <= deduplication_radius + for old in roots): + roots.append(info) + roots.sort(key=lambda item: (item["point"][0], item["point"][1])) + return { + "kind": "sampled root audit", "bounds": [xmin, xmax, ymin, ymax], + "seed_shape": [int(seed_shape[0]), int(seed_shape[1])], + "attempted_seeds": attempted, "exclusion_margin": float(exclusion_margin), + "root_tolerance": float(root_tolerance), + "deduplication_radius": float(deduplication_radius), + "jacobian_step": float(jacobian_step), "roots": roots, + } + + +def continue_stagnation_points(reference_audit, candidate_audit, *, + maximum_displacement=0.2): + """One-to-one nearest matching for two sampled root audits.""" + if not np.isfinite(maximum_displacement) or maximum_displacement <= 0: + raise ValueError("maximum_displacement must be finite and positive") + reference = list(reference_audit.get("roots", [])) + candidate = list(candidate_audit.get("roots", [])) + pairs = [] + remaining = set(range(len(candidate))) + for i, root in enumerate(reference): + if not remaining: + break + j = min(remaining, key=lambda k: np.linalg.norm( + root["point"] - candidate[k]["point"])) + displacement = float(np.linalg.norm(root["point"] - candidate[j]["point"])) + pairs.append({ + "reference_index": i, "candidate_index": j, + "displacement": displacement, + "candidate_residual": candidate[j]["residual"], + "candidate_determinant": candidate[j]["determinant"], + "candidate_singular_values": candidate[j]["singular_values"].copy(), + "nondegenerate": candidate[j]["nondegenerate"], + }) + remaining.remove(j) + flagged = (len(reference) != len(candidate) or len(pairs) != len(reference) or + bool(remaining) or any(pair["displacement"] > maximum_displacement or + not pair["nondegenerate"] for pair in pairs)) + return { + "pairs": pairs, "reference_count": len(reference), + "candidate_count": len(candidate), "unmatched_candidate_indices": sorted(remaining), + "maximum_displacement": float(maximum_displacement), "flagged": bool(flagged), + } + + + +def strip_basis_affine(centers, radius, name, *, H, u_inf=1.0, n_boundary=96, + source_ratio=0.65, image_layers=40): + """Exact finite-image MFS affine basis for a free-slip strip.""" + centers=np.asarray(centers,dtype=float) + if centers.shape!=(3,2): raise ValueError("strip bases require exactly three centers") + basis=circulation_basis(name) + zero,d0=solve_mfs(centers,radius,np.zeros(3),u_inf=u_inf,n_boundary=n_boundary, + source_ratio=source_ratio,H=H,image_layers=image_layers) + unit,d1=solve_mfs(centers,radius,basis,u_inf=u_inf,n_boundary=n_boundary, + source_ratio=source_ratio,H=H,image_layers=image_layers) + return {"name":name,"basis":basis,"zero":zero,"unit":unit,"H":float(H), + "image_layers":int(image_layers),"zero_diagnostics":d0,"unit_diagnostics":d1} + + +def strip_mode_field(y, x, H, coefficients, *, origin=0.0, through_flow=0.0): + """Evaluate exact decaying harmonic velocity modes downstream of origin. + + With phi_n=B_n exp(-k_n dx) cos(k_n(y+H)), differentiation gives + (u_x,u_y)=-k_n B_n exp(-k_n dx)(cos,sin). The input is the + velocity amplitude A_n=-k_n B_n, so independently projected cosine + and sine coefficients have equal signs; no fitting sign is inserted. + """ + y=np.asarray(y,dtype=float); x=np.asarray(x,dtype=float); a=np.asarray(coefficients,dtype=float) + if H<=0 or y.shape!=x.shape or a.ndim!=1 or not np.isfinite(y).all() or not np.isfinite(x).all() or not np.isfinite(a).all() or np.any(x

tij$lX<(NB3IEc(TFRpqx1k!CPX8BrM|FDD@oMQ9 zCH0+Mfc7C;k!eZb)`f4`4Y+cF;UoOIOXIg{bb0i%&7ab(y{2@^@|0;A|isw|0AmiBMWK&vzjo>!Vc&b!mr|BjqDi$v_3!< zA_dx$$ih8T~FUCi|XhNbQK&PaC(!fGu;y|JFf9wYq5=S;j_?-sy zdH9_MLDpjaZ9fRIhr&N-z!&5|{YDe|;~WA&ADBP)69l@S{B|tRkLLINz(Nqw-|rV_ zl7j5h@Q?F?fph$E9|EFcfBYU;9N8x2pT`OcLVh1B;F^)G6aKNE09Y9E`?v^zMUlN5 ze%nt>{Ex8`M7Ev&Z9kwGH82VPc`VSXz{oBfztIGdrQUy|{hR9pR_q^RDkA>p zv7!Qy-{%3)q5x7Ub(+JO?ZURHy!(CMf>L*aOERJC*!)tni<_Nl*;gwB#TA0elVF z@#Hs}D6+N7-!yku3x@|bt~kgRQCbeZHURHrpVlV&z literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/streamlines/mfs-gopt.png b/src/steady_pinball_theory/figures/plates/streamlines/mfs-gopt.png new file mode 100644 index 0000000000000000000000000000000000000000..3869bfb10ea64dc70d2b2e0cf58aaea7a33121a5 GIT binary patch literal 52085 zcmeFZcT|&U_b$wgV;d1wEb4*4b~`0Dtqj?1Dc0Pula`bx&hgdru!5cRN09KNlOk zlgA~S8z4r%T1rXS`nXlq^d zO&;&{N#03cXqa*ca2Tobw8=gCbknmi;w>F%lgz_PH*_DpyZ%+dX#4gIZQEe%rK#*A zyLQO@s`T3q#a%lt@3^y5>*cKKg0X?hxhq$${El+DcI|P2RSkM}yj%L( zwQCPkQsmCw<99pJF#PS+pX*96jlT&A?M7iAy=&OWGq)~_-Y7Xv94%h`a$n-2jm@(k zBcIN{^c-pL`n0(>aGRK__joK#gLmnQv9aACl~5akBo;nG7*~yk8^7=>Dm`7wtlGCY zEG*fZ>Gbf?qYmoH6ALK=FTKVxO^d9gq)P0Xc8&B@md3Gtj!*QjuJ}}PC@c&uRh``Z z@!46NweY3My4Bib_YX&;+04XIIqjdVx9-(HY2OTsLy$iIf#q5!7am@Hmrrv1-d3@LcoyYx zp=FiQ?A2|*?LF-o+m>-&ugaSv8gLYOE8=dGEkYOfs(L?C?hh<2&bH}#VG|k_7RY1u z+ZXTUBZk#2b6lg;*WYP|kHW3K5JY}SzWBzsCyYHM)zucY^Ix~9-28mYbF|}v|Br89 z0;<&mW~ud2V$ajle?RRty1!wMM2AtHMKT~muc4&-(K!&eZjzBc6kvi8aBZyH)K-qGVm1QDk>_%hQE~?{o&_V z>D>GB8pX9=9@gbyLc$@EdASKrda5sA^1``ucgOo`%(b;CF1={B;LmUG3noNHMsA?t z7p8}h#b|77B&;m+I#m+{HRjJiU>{IWFnsAVS;&}IchMf_{fJPgjfK0=)zP`fFRoVc zx~S#g!?|-oxA)Mrd{Ylu2TrYh0J_{oE{He#_|Ba>ryE9dvr|V0E2DRe)c&YSkyg2X zM}L3O0VccWdP*sBnKGt@kKpoMEv{Nrd6NPch7ukoCLVcvZ)+(7&n&w@!LtsAhljV9 zIv5_}7OH4$`SsUKuQ5h@wqe?txi|eKb`gOybkpA?BovUxS?1brMfya{a_M@ZrR3Zt z`TY5F2s8f~?0{fRhECMO6jdLFOOsKCPHvhj3QMswF^T8jd%9z8EXU~T)&0oz?+_M7 zVj$Cl-TLtH<7?UVlhrt)vBLEiXFfDF4b2b4B=q!H2nlsp`;{Uee8s||AhrD0EnDn* zUwU1E_u#O~6Z&cbI(aW+l2_y9%rSElz3u7ewv2qrj>&xf+-ywQwNDnuD9A0X5!iD| za*RQWd+^}bk+zKcgM))2F|2aeG-tT@qcSo>5crSB$H!fhS)KGw#cN5XMn;4Jvr?T0 z5fRUEorUcrbLD;-J(e@#mkPh~Y}TR;c3Wdh%hn#xJrIg#q`!aexV?Uhn$VQ?J65Sf zjL-5+XFy_NA~`Y4cil#TAG>6)U!FXLY<`~)N3wn0+}ymxSsCXACt)LI8-?_^HPCZ; ziy`%qyKU9%;X?banOfR4E6B(+ReiZ9R{iG98-MHmKi6%nhHcf0qvu^qY490of1iZH znP_{!V&d_&ka}zj>Q-io`e2XLynFZVwC%h1@BI#?1(wV~MCP()lIqD$pR)98JZLmp zjH8QBe^B`$DJ#e&)o1Sun6ZofxWi1_8!Jl-^|VlNgjmv=26TMBEVJg-tK-yXEv zQ&o9z&u=DM{p8v-*!7FaWcwB(vmxmF>y0xE0f>n0LX)HUMM}XYMn+$HLsplqItwkw znpHJ4`gjvQb>{3IpG>%Of2ptP-(Rg8rTL6^ebG-m@xF;lJ=Ry$X%#>!ckS003zRu} zw0fhs@2fFb-{RhYnbDzM51P7_m)DGPD|?pZTI3_~Aj}kv9)(bEjEISu(|#Agi?TJ->ZC-SD*Euanx?2uquE-1gqw5|dT(;(NV^?7++mAOlIX6+wZDn=_4~9U3 ztuD50@E22ZzHB{LGuLMxV6_N$UOhF?(CIf(QE|$(`N{FV))ZBB8n-%1Oxd5E>=B(1 z8++M2?#YvHmLbbCR(5vJkFP}TK8e*d4_z9k`f-@#rmE==GBuALJvv>)$&53YhK*p~ zpS!gu^}fK~>6N*V)y^@vrebwueU=9gX-?HHO*i?c2_s=UaN~7vv9xftf%?oc!i4&uaNABV~J##xDk1`jltJNkuj15WLi1`bLQU-VK+-YXrzuO`C zOL$m9N(v_>aJsS2tzoaJ>Lhaeebs(jQwNmgPVB8b^{L2O(-ms46;w}L$Y#S!mwpU4 zC)%nNK8rB5ZHS)Hi4o_J9oy2q1NN%S!Nbx~EN@9t?i3eutzF3S5=U*}LIP6SH7w@d z<7?F$lgJ`<4t`I6=Xycl9R``?mqDj zR_RFsk%)Fk3a>D~=~Ju_>cW1?jy<+z5q-n0HEKqsiL2%cWhynyx6{HSikww@cj4>T z8?GHWMqayk1{w<(*YBTSledJKnVI#yxw|FGZOr^;e}$WEism1XR9jSs9vN55TfXeD zhx9$;J>F%bMtSk##cbCuAq6=((yY2!=?ht@`mgy)X@^pM--xOEmnFoE1$zP0tGst2e+=sBeN)$17;6p}{z>*{=2l&-IgapmQMf2B zB%6idq_IK59%XAy`;dhuYewbi_V>7mA3;X_!4ZSLD+lvUiwZ4|sc@T5;)+UssL_yO z<@0*IaEG6z{H`9$iKeHl?nz$hk?%Yt9A~QQRUFiRd^}6uGGr}LUSAZljDx6v^%T|Q zy%r4q4BL%J995sDN?QR)=Fk8QOhk#Rzw|bm9%Dx??&>)oy=MeoL?C>rf%M=NJllMd z)?sy_U|H|Zg}8%$QeO}3-|t(;>z%BIG^Y@Um<73RUmH+nq0L-gbn@SHtQuWj?LUH)t{zy2+hZ<^k8@D88namYg5}uZ5P9D(-=G z5t=@|UZxy{A^;;sIQ!OQ%aTPC)qu%J^>C%iS?578(Vvkc$}$6lGqKP0W<65W%%{op0Xk7J8jox4VO z>9xzd8mE@@vkX$uRgxK&d#z1OhG)jRKaJe3$`9&}B|jL zr{sICE_T*27_ycx%am4sd@{swSC{)&XG%BMx@n}cUBA4{%lj|}EfKscbZ(AI)tQ-@ zv)CU`O(oJoRu&*^%KQ9rPaD=--b8ZBjEOosHK6d2`+Q8i^{TW^RNC^m1H7m~Jiz&> zU+~m>VRHZG+LeX}(!!K9|Is4@#Zcw)mZgI&ERyFM52cBqc(a^*%cWq5qOqms_qVI? zAy)A4;Vod}oeXAt9N{;u%8EPDnl7cMw&^AV$(n_<~s|-~~|Ed*> zAUa)}6O%t+#+?jVg?V$1Q{{S07rOrJSM%n^(E7C2=D#mKGIM|9*i01t0{w#g5%K5JmaHCPmecw^p zL{9Isvl|l?ogSjOZzWbPqbbg2*;d+vu$6WQ5uoUNnCY~h99yuspsO2u#5gM~jG7Un zfn8dH7d*Os`)4P5-s4CyW%-X?sD|G5=X&qC)zm|{<8EKIk$)iw@7&qgQ|SR8CtNpw zm)z*o;`V)koz?^egHD8Pya0&-^ZNGs>ER^T4@s`IN8qu>|M=lKrDizI<9A_8+Z-7oMLEJ`1mFJdj|KzEUt;)!LbM@*%{9 z?4$Vj4}f)cEo?zT6tZ(hBZOu57tj8!Y%ZR?l-7?X+x6<+2l`CHZ zT(pp;W;&^VNyp0f%lad-vSkcF%?d|p)@k=zihJv)0JJvPcSyDUHVyos~t z9dt={-6eLd4Len;KQmxS9R}WiO*Vf!qmp0C34F8pkSL8wRvCWg2?Ve7ll*;`Rg0TLb!$(E)ZUa zZft^eF=LC6{A!TqWB;K;Jb#UZtV@Yf(0s%}YuyOTJ|?@O0o6!K%6;gu=|wCS`_%2w zr6-ahtGxap2((y0{2wwe#0>&?e5@6^VZC_128GMZP76K?^-IcqUhooy>*(c0-hc4m zMT7x@UhTBcgoSE7a+T%%!Bx#k%7)O{kvv}P?S~#88suMQ8~`rEqiglTv+tbDNzsj@oit|M#1OVkLozKdB1BR9bU7^a@2SCyPKlZ! zwc}mI8MDHRP^``ZtUCaWdOh7+J|?NTxjCnXBC6FdJmco47Gen{gtJ=cN+_@G-2SL3 zXvAH0V==H`3rLF+Xdy(X^k9E5b4VF-u7-SYF5ROw&sDWeQLQ;+$mmdUU%>e-c^VI z*{?HKcwzDeX;wk##xvt=1LRGqGDX!=P{qU40HDAf#%zU$k{Z^vI%FE86D4{eWQChH zlu)L6M z1C}^6{VgMgu@dpXHd;leK6U^`pJ5T|)KWd$FOXNA>ktU^XR0*QrHZ4}T^m&8Io@St-~41>KRl#J zbBAQV;lvZr-W*geM~JV6=)HEZ;ie&%eSly;EVWwm+YA7%0?V*Gp@@O{_c&GeXstfs znegGMWWWi$I^3>@iZgibQ;P|`1eQt|l4haHPl+)b} zSy@M?$GNw3Q)@XuaSzl0eY&qM&*`DjXbzo|o$8MbU6~1`elb5|34|lGokdjD$!ckd z;Q40=1q16)`f9jW0dO=y`e?EXWEmsBR^7GKtKC96L%f|e z+oy5`kk|X2rqr{7>if3{%RhpCNzcm43U3$&V8L+t?6q>2UhTo}a&g$gJ3h$Xk&^27 zRahdXNmSP0hC80jQ8ZvZhMw3)BNeC-=)uDY7VZ}~6lW@(a~=!D^HQps*+IipSt%*V zED86;{dI%qs`?wN{kTXlxYMtho?HBlAH}++Jy_fzp3hyaYXpiENBc8IV=?DtS8d2@ zu!`^ZKL)qsrKGx3&x@+KV>p}wgdT%k`4DNDOI&(SC!Y4o3k2w6FpN~mSL(zpoi<1c z^d4?CGwaFuKIKyy8nxbk7G$X;XJuW$xVx9|?>>>Kq&fYe9B8K8n5dYTqMD;6!>ON( z2OXmOGlzGrv#x8es(-LkW)N=5@naXk{dhU?+ze7FK0KBgx+`oI+unYqv9&cGo)j%7 z=10X;6Wv>Iu{Ot0F@_C^eSuM4dq65(shBhcXiO!*Ac0r1kJbI2cT#pKRWKu{b*Iyk z2LoER=Z0w-Qc}}UR2rc-8U&;wEVLZsD<$QS>~=3~Pi@NMCUZf$tYq+yw(|_l69pEP zC9_tO=fyKnlQYlt5I99 zp(<+tbcOVW0T8q@P7Qfz(NBM<-0K+^w#Q045D2%ipskR1@@vjhwgj`Urx9hu$?MVy=sNg?JWZfuK$g1*yj2;lv(?{l z3CJ!zAo!lYcySqd#SwXVO0*>!eKcThVg?lh0dW1qi4&PGU!sG5WJv5T-+e?*?lC-G zw6?&UfrzTNGlvE-YZ`EO$u7b2Ah5?*(rlrJ|8ruwf35Gqss^7=j=Xm z#=kD_-W6=EC)-+SbIQTeyW4Jh%z70K3HlI1Gho?vxL*?=K9mAEt{_qrbrHydkPB%V zL4yxu3S$8gUI1MLQCOf99*huHhzIhz5h)Lq<0VbCZsKqkkKiT^p$k6B9d3zp4H`2? z^e$b9J-dPWsOgZ^xe#*s2VZ1Y$R5qg%%pBNRNLo};uVj;5Xg@*noC~&H> z0>Slgu0O=u%5P{Vh&@xi-`#=xn_l5fHfgRd7=jY;82HYMknA8IY@F*%dOSQl`~eyl z1%=xA8=S|pgdT(89uL~%H*bCi3M+(4JQ%JUZwS#mS03$6hmivV6JqEC=Z^^^{R z_?pu+tr36(;OiNJAlfTE91sN%x`Za6*9NUu7ZWfT3>8@%sr&uw5Y+|I_15A+gExLs zg;Vxv|MBBSeIcts3%veSdC+JcK6!E&AoSKg9esVEJD}GZIBAU`_dwV;R2-+OVF&g@0QcJmW_Z9XOkn4R2j992|Xb7lVq!(2mx2^Y; z`r7OHN#9G{yuTtC5tp_LxiZU~MrqQCECNufUx2jg(4fHH1sTAr#sl}wZNMQ-XOSrt zWIf;Qx>Y508G`@5vg1cduWD$_ec{S-mRC0l?AfG9iHZp7{>U|q_0a8F2tuR_rD2sZ z-Ru-^bP5|bb4=aTafzTGgicV${QFG-Z}h>l98+`o{OV7H3%rSm_FCGyYCQ^QAx4`rvs#SMgqDcjaZ`m>FI*U?WoO>T9FnN0(!qr7!M$))F;*JPh1sinF3M{3B5 zUlBkBxEclMBvTqd1*(A`K#wYG9RuNE76c8b7UZnqt`&Mw@U=rlDw;l{9gV)1f;71& zi;ymA)(b0IqRwtj83UcS(_GVg{CW{or_%~Zb&86S>B;y8={^2hzDc98q56TQc)2)8 zDHj3Y4!zl;@Tiog!CI^US;24QdBPy@Kd}kc!Dh%F2eq}m*!H~2@{dn;(Ah9#=8$SI z(pi*-WKQUorQg4Q|JBcmBX=>{v)8M$aVWuBzSMyh50TLb63GDwYoy9TiyC*b_0-u7 zTSc$3kHfAnsEH}$jOKwJ$|QoKx1r^@x_XUwWRZ1La(w(jBo#n9HX3eCkwFS}L4m9a zM7Z6XJDc6diyJ=R%X<$3HPBw=GkH3OIO=7Oq``}&U;pUrw0biqy z0O5pFzwiQ-2Tjz8x~)H7ZM~Yq-jT(zqN1R^u;mlt3{H=TNu0z` zw=KXM4ne_50Pai=Fvotl zy6kEO?CqM8Yh@*0Sy_3)^V?;lWR#q%J2lB$7O@P!dsQx2%3G!J2 z5;XDhmIy|83@e6YTVUK8p;e8f)gk?xNx}7fpRx@T)^FLR3$6}$L-YngaapAB4niL0 z(lixdQy-hf0mjCF(t$|aW7Uf@V~3#mjt8~C90w0~|AkAJ6zdTMFH&3`4KjvwKXT1EWOLjx zO=hpJXggBd#+$6OW_>Pz=Bk@?o$t;kg^&fkh2_Z*1%zz?B3yCQ;?yc%F#=s1Ass!3 z(p>^n@J_jpEli8RS}@`lUM^`o|6h(e$y#t2{pah9$E(|_fBzux;`7==g`aP&ldV|ypTGaiw`Jn*mz?^SFOTi& z+U{tuOWwi}1K1_{g9kkE+y#Uu#ejNu6=!_qN@M}hLRb#s1Hep8yiB21!_K+_3uu{m|{ zhWbYQc!c~*T@o~?xQ^j3od~lpou8NYfXQ`YooAh=poPVQ=WV3TLES+orKI37KxSRT zHN;314KsQ2$BkAWJRNGw)7RC#j3W=wP4f3@O0}uqld@4|+}`BQzj625yVujKrH5{W zD5CW763>ELhD5yGEOcJVA>3@>;*XKq2FLD_=R`xIVk32WdO9#>i{b&Bc}p4oE`imZ zO?aVU&NduaWdt8dixmDl+d{f8?Rr=Zz;n`K0PfHM5UKfo1_lOi4}pQ~ z_xm#c&bLX-I$dVpB5Iu&)~9HILkpLA1G%ij0NS0bv~S<*xeBy+CgZ&b^YILqk%CL`SrZIVrxo{zX*&5DPWgA2}4 zgwSSvF==Wb-ec2=!ieKtFtf@6=1TyZ>sxocVP1J~;MlF#v*$ang9c-6XWRZKEWa zGW-Wq%|b0Lo;AEJv+a;TX^PZs#i#V?r}{pjih>Mx&J;yW7Y_jTQp47V=kqBgB`3bR zk&inMVEtm14KQnC&2+73dC+yY>&a2Wk*2)c$m zGS~=E;2u*WE1`LbMZAfMuJhx9+PAsC@V&YVWpv{QA%4^U`*y!6h&XZg&>;hohM`hb z5^-~s>Y;e^4kkRxnlIatgz<6k=D&MDe`N@;YUoL`%ADfR0pC9Evrdd)j*gCoHPGuf zUBNZIy^I?Z+mmV1lypP$E7&KbBVsyN<+JJ7L^(rbhvI43bl8$6NlzS8H`rPxJ$f`a zHZ?Ouh<>K7@vQ=lk9D(be(lZw^O+!UInk>fXsOs>2wbu5^4b}>Y>%Ij%U1j!tZUi9 zU~oQRNes2NbEQ;AR6PHQen(Ud|8yXwKD;e&Yx@~RehbBrsIpw=So>Ovzc3jMqV#hH zwi0haQleH+m>)h|L@69O67CoY0ioh(+l38{6w6fF#F`RqnsX5u{v&Cl$4zBH;WRIT zQl7vSG0(^szqVHgB0IbG#`|AUtH4a#Vp2|fUBS^bR|BP+nwpGpp@9PDnJ;?ZS7>o{ z(~5HUhKAKjHfYBV{C0-BD}M6H8Cy|}K;Nf(UjNI5LL#}$-i)#Vea1F@M1)WKd}d2F zKI(}y9^-_&%1IxwE7NA`D(jL+jmt=@h?)e9OV9_Zj#LA!YNYIe1Mla0ZYx#Kn2+5s z*U2A|?>9!C{G)&J!NNd>~U#a9B3%?T{KJ0Y4DcuYS78wteP8l{1 zaHVJ`CFWMverioVnM>rTM}I2`%H9pe5h9IhbyfvI zshK=f?6Rp~NDC_?BSS~afnAPkiR=q=aFSIq&SiX&bZ*Fxm~%8HhT_HBh-YIxY|BJN zHtvS-`u9!6kso0>` z9kNohN5n7=!mi1-N`>~CE>c{u^@NT{>)TBUS>Bf_d|eeCZ02iYGFacgyj?f6>E6H3 z{vF^9wBF6fm!pRxijg+dYc+fvw#QB9qi#^>8=MaB9m~3Fga0g?*@%l>C^RpZ|EPv0 zW9=~OHt<7Tt~UmQn-S#HXt8_DV>CJR*1ML@X_DNqnF_7cruQP}&E>$m8(i_`UkwdB zb;>&nx%y-YIN$Qf1f{@II<|#zI}(Ru>>Al~TO%!g<8Ebi%eY0y2E2u^6X~FCM*h6- z@}xU~aq!@1b{ep>sLoN#j)MmdETkrx{T|4AxLo3ADy4Dcd2wZe@i(Mkt82um9uN!^D?~kI*4TfjQR;OY#n3OU{)E zT)|a!;?Zd0q+4jucGmkKvUE@jg{Oo2E5Fp!-C05Hp*^3NN;;WjO28}JTuO`yK9)BZ zq20GmQdc1qQW6=i5{OrdTf~D0ft@B-uWBy^GDVPt)+9+i-eb|#callj)Lymk8>OS3 zlHx(8fhq4%PRE83!nVx0-#;F|9oVY9*e#SPth22xFyvhR#&8p{Ou>r~iO{0ulG6gG z!-<08YF$(?*ga!dfyAO?U)5iw#Fk_m38!@vTK6$La9FZZajJRQ@V1ePsN*`axD3<= zkDIDGwzOxJ&i7wzdP~{#cF&tzoNe;pg5Uh_VU#0r^m1MBa-iKATaUJnJI`?KaThH> z2E$P7YYB{(j^2APkw9^hO>m=*IH}!EBz)CIA(A~#UexdWX&orR9oUxqv5dV%>({Tx za)1+ylm#Ul_VyjirclKw!D&m$Z!7#K%CAqbk98>3bI+Z2iDm!#Rz!YyTNCqGjLSW~#fRntHYEo#C%fLnnhAQ4FLm6}sd%Cfq&HG?zAYJ8`pjurq40HG? zohcfGwe6~>1I81}EOsn#(l-uO^dqAl(A~|~F&$C8WE8+AbNsn;=d{Up@7}FtKULRo zbV)J?o5~~_Z^7~wl+um+>{z4h>=DM`It{#h5~`#F2ojCMxe(*y?J-QhekBUYqzUeP zklO?yYg2-c)TK>nVc&i?ll-lQ7AiS_wf!Y`>xqplKMr7?YuuAGwNF&UzCfNWX_7yA zf)#MQy;JBO+B~QLm*G`#Zn5v?ah+J&$EO~+iyrW80ehS0_;vMKSorrMHcvvgH1D(M z+I7Ep@0+2Df#@y&EQ~*kPY7(?bLyk%hC7eFCqGNhZKw1Oh@bi4IQM&5?^s=Crgn>- zo?g_Ys?NGFT@V6_n&X9c?3gbk_nNBePOcZW)n=ByIfoaS;J74(#%~-k{d%KEa_(&> z7HpMS4CZV@mVQ#?IG7-faO6HdXs4&u%O#7Xsop-ta-q#~%?*Z`1NHtqZ4Z|ybpX^B z&HLiXHpKg54OOB@D8Hq6?&IhFA@Jo5WmC-c$p~*|Wgf<;P+-{EP|AR6CLj26*aP6X>GUIVA zJ1irU;^VUz6vsBHqcq`61|!zE2~XawCEb}CHLR(q^w$G!S`z=P~ZK(|0PK6&zFP$zQ~&-Rror)Onn z^9uF#^-(8UGs1SV+$v!b0aXXuNuV8YCBUFh`du|O<$ZW_1*dxd9Hgqs?%{111aRWE zoVfp#CQL%t#l*~16pO=Rg?Zu2>LHO@M7`car0vmub26sB-g{HRvGEu%kL3Hsh^yaF ziyIFAccuN$Qwsb(qdOtRLh{W{EM=P!T##4SG}vA(n}uxz#PE)#iChz z(oy&D7WhcX0VbB*^M23mL7N=%<}oPK)=)T{@K1)nEKb?%mgY~hhRvpXYWVe@HzzkP zb+%P#y1Tn~^vtI0`X?~>%ne(^&yLqDE%6w*1uQB4ekBFG5-otn#DZLyd%&<1*oo!I z9TuM35MeiV*Re(UTLna7ZOKzI=omWjNMK}TWi5WV&A@sS3e!zr>UFIcMto;9CO8)ddBYNOE#=GnVF; zFMl4J(qe!9>eVH>9#=L@(IU<=i32YkGsTXu#=<;v~c$W$oslH#sx2AO&ol$jQ5<75}oMb?7l9e13 z4zT>z>BPYsJ-YCb3%4T!6d5|W$Yad_KBLs{50~tHBgM~>;`exEGaj+}p|R13+tbq{ zLd*2~m!(ItHNzGju2FVS4^xySuIBsE^q`dc=T|>jn|-XVsJKodqhzA*N$UGphM7qB zW*shwipoIUM<(W4BtXYPbq=?Ixs2=$bh=J_LW1xg-Y+FtQs}Kq7UMDVzT8C#xl;8s zyZ}>#f|m0+e&4Z$luKu7)Y8C$9Kyy zKPTrh7tCHFW{?EdE(s}5P!^hzOM>!D#Fc#tE&%&6L*)jN7Hu0+$CR5R`x1aH>qpG!cm~1nxi~zRbn8Bl>~=ByNJv8 zS?@`hq3vt8cKe$x)QNxeD3dWfIGD45(7+hb6jly7Ji~8c&4$~N^vmiUu^u<40_Cw8 zQ^?)i8~*;k)7f3Tka%&QaKm07i+|tKBjn4Ow_T!I*Gx=A5zheH9E}z&MVpI{F%d4X z(pui1Um{BX!kdrtt+Ro^cId>Xq>zBYh+u*~Ar0$jjN86l1+RP!$#eF&9EYZ#wC{5Q zLOG?K0mDJD47=Dh(sa5Jevq|0M&lja~We=gmSwW@V0q zB3UB%^CO!XU3$0=j<}ATA+35ZfLd-&r^1U$QO$BkkDe$20WgP*4*vdGs~@@)bBbUPSqyvNLj!N{-Q3|e)ho;2Bt~dmYe@bu-}6`D6l6_CF3FE<_@|88ji(hA zT~zPMJ`%%)MQNde(vr@Y=qi3ob)H*{*~O~inp2#eFaVTiE%Rp%2nmJ9C>IIqt`T3A zO84T!zp+a5@-C7{1qDAW^M{bi2s4?m&9tzg(MFb*q+vpPZMsf=zjknNEfIV{y>lYW z**Y-UmwWm6m16 z%5oi@ZMp<(o~&CLbL^4$pSE6buz}PKT)RK4j5IRvfvy5emUJmfjGjtU+Gu{(kkkik z-ji=Kr9+hABCUFT0|TX!M~`;&lhG#Dg)QACIGhse(Gn>ACR{LGUTJ~M>@3X#oAy%% z_z{#~eZasD_HS$SI zIL%jU50oxe!*3cRjZ8OnFcFzXM+rlX)y-NDjnKa=Mz^wZ&xCdNr2^TjV}eHKF|dAM zBU&rnTMe2lI>57$Lk8U)D=sXYJ^ZR|0^BPnPOuhU&1#G?$@v5@*cp;IpymAk#^jMUH9b8&r-L~P3_uQJ*REZQ!L?c5n>JPo=8=?+9BHJ2FQNl2 z*D3BAP&+z`MaT#;^sT%N39x(pVmaHjV*`q@bA=Ny!2wYYg0U&CQghjc!aL>KQ_)6M za_uW%Fx@%H4+(^42poSy1?jAV3G)ODDvZg90I|>Oo)xE4K=;V+V8T3>NH>UOKdW2I zuJ4{GUQvT-Xr&TK_H;+b)qVgZ11RCEz63z6D_o6FqJ|oDX%MO2alg5`h;Eu&7COTm# z2XCWE@$2`V#Ths@0dS+EiF@~Y151tq@;hwm5>dlE<2=bMlkxFW{3ICgNnUQEj6R<= zZVVZP9GjAoS|hZ2t9$8oQ%xLk~OmDuUP9e0$vqz4>Wk!aBE5m_>G~u z-Btrz$X_Hoic&OM>|8H;Po-G*KC+r>&x+m^S-0_x}2g`gO8S3C=?z?x|(w`>m6r{i*;tJpOE2P&YI8Q2YRthM* z2uP^_nA0Z>&4Z9km0#Rzs6_2NijQ>cl~F~ZuC?IV?)cSg=v2j3L02aM>)2DKcHqD{ zqAphl&tRCQ_xs%+-<6jSzTHFE4AtzMeDPj^?xA`r=SN6gaSNXgL!cA zgSIxh%+Uq|X5?$Yc!eV_S#$tReNMy-who=?SjJ8(G z4Cpn~+lrA}uH@UzL_I@o(MQ0ZP|tmd;GAJdnu;ahjnNJ`eLf0?olvVVQyeJ^$|Ff1 zyd@>bX$WK(=S?Txe`c2EEx=o#g%lzsWOp~J(;|a$?+dx|DLxH3?E>_(W@K*v8ZN16 zR;$8M-?{0-hYluiI3NQ;i(i&C1x+_7(gn50%c@ICu0U`0>#Phq>a*ph6B~u=+#PKz zx&+#o@$$7S<@?rji)tm7PYxW7z!T2^eM3jdseM100-|4S!`5__aazVTk=9DBn*~3; zez&MDesAvEKi{$cedZ7`EB!TMJw#ap8YLR0s&!KVkXjhzw!v_fXg5rV(2>%TvjAH# zs1r*Q)-Fg&MpC8@1C)iZ2E2TkPQYX}HyY^2=zP>1@tDnRDESg8b!3Air55TUjQ263 zB{VgTdN|6%B&8E(ZKl$-ibHWU%rAy)`;pyD5R7=l|s3(B8^wTlzIyJ&n}n z2h+d=u;R@Z(oe9sh%t|h{xm;0h(Q2UzX-Yz^=g+8%&lGa;9F6j>+t}X<<}?V3-P3DgonFE*Thdon0gz zlQ|Jo*lSFI#sZ6nvsj2}H{U?_92b|tU{3f%WL+4uyIH^60T4QvZ8VijVB*4| zL^{KO`HX&XG7_9o1~QD8y$R~j*a~U( z1L@we1orV`C6a0C=yg|wmamV|^Aphds63s4w%HKi718;78z{C_nVIjX0RB3dFivQl zi03y4mcJ<8)Wif43C<&&Bk^4QLyo%m*rYjAZNAmVlS-qRa@V%bSzd|_Ood?aR#vH# zZa+Oe5;4R++!XT#th3+GsNDYY@0fn%P@|8@j#2B09;JT*6Ogk26QR$C;Xs(Dgsoyq z&Cm}9mW~xxwNh8U-`9km%{B>!+H=W@x>1EdfubhCaz-FsFaDjh7bx3Fwkjl8`Vx#p zPpRv8*yFM)y~a$WS#W#`0743laeYgB$3-0FIqITtTg(8IOtOh;c9-Zd0BI33n4a!n zg3`9&Umd0kKITa^gdL+#ztdip@r^|j?|yYW0R|(~Dv%<03>Z+2aNrMik#1^fiE_RH zVe#v~)P5a_4>sUf6cRCHX{zCP>Sk?iU_~>Bk@-vl31(?Xmf(seJdTggBilGK>~W*n zs8Ut1mUS>eWZ9iaI%4hdj8g@=B6$`#`Qs(w+Yg;i+b%lsH9|qD1Ytlx-OakU5Of*g zC!yyt#wEy_r4IuDdQ9kU#Z65O&upgH6QQ#`UIHe#JTh|11p!V-(IIVpt0K%Nst1if z5f}A@Z2whimJ61$TeyF~@4Qm)`Dr6CpOKfUBwmJ5VSt4m2%{jN29W=}wq^Bynq`exw4V)y-m87(Ycor5#S>BCfs(o|4 ztjU_)Tw<6(jsoQgG0-Tx^f+RWLz>V$m{fR8Ez>x>HWRAD=!qe}sHO>77OO?8WQ_`s zdHl*-XRZ7{+85CIIi3I*+7SpaLx*DXb_3{*m^@S$|51&;CDt{hJ7=!x6$;=ow;s56 zm!T^!8}&Ov={duR6hItzIyTT?V(AcB3C_@=2G75h$Rktkl^0`Ft=KI|4j3B^`4}DM z$|gO~1Xbb~IoAP9=cNe0HNasi;Upch39q1ClMm^OTx{5amx9YzHkHPA_#T} ziHrW^!hr??*c~9VJzfMAI#qHk3Q-GNuO!9BK4oBSD{{6rEv!4$j!Z@^t;OeB?FZv< z0-!@fR3h>txWzlq@P`5*)HN7(`)4n_s{Fjki$73GTK_SO^ZhzUQvMLgbt#y_eeWHT8+4uK5(3sy@SJfMTHJm7~00Jz|3Xd!s^Q8swjdWQ(8B_ z3h8bgLMkBxPVqTR1H0VQ;D55q{>z^EQIY-(AYd02ail_^@L_Skie^&4D6W%*LYLCl zc!HY^jPKrG-rUup1TMIfO#)a44;{)UgJa@Y3HYiZ(M5+3Pe8?qA;?)(UngB zT7yKc4<8yD!g63}#}$Jx8g!N7J zE*TkJKj03h-2CbO%iGaSe+StAsYSTu7iXi`_4##ZkX_4rm=o;i@s{`w{%cV)k%=lZ z;9Q28%X6j$*Pk&ax=R~?c^kY4`O1US*MppyfyPyt9=|OHhwC9%wYp}SglM=ftvXRL z(7}WXCSnE&2<)g+dA+#ayPphHTd2rUZDfY`>J9A#il#sGWt&b;vEeWzV=kDtMG|K# z_eo7hSTDVyzG**urfPKt0a0j9O`Y3-4w>@w>8rUtZ*Cguve;D=n7?-_qcs5?K{gq) zy)mYjF$Dc6mZT3h55mkST@My@02!+wqgMr44z(t@015Dtfm9BLqL0VR)cE@a0ngpK z_iKY|_TNuR(d{2NeBb%md@HznaD<5~x`yn7-&+D^$AOaAU<)&{c?74ZZ`#^O36Q1Q z;9+B;D#jt4&_LOn_tV(FBa&YY49{XY;1+bkfRCGi78}-yu(4BRl+C>cpL8~((7LXV zY8A5VMV^Hj3S$qBx~-~J=tt4_tCgwbW%cs0|s7Tid&;k72`b};6OU;3fPA87hoB1 z7~s1R;{p)|{6xBuQ$84d(1_}I!+E87&Cc4`otZ7ct^Rya0)gxEzK2!=3W;f04##-wXLPGaq}_NIF5P-3e!Q%cn}8T zY`eS93aV!^G!S6F0^@0|RB%l_XD~%iVapCCA(0$W-1(!c){Xf=z<_;U28!C&s9Dl1%ym22aNq7MED-nT}S;3%ES00q-PCTsfR=& z_CK z2ZPWOXjSK~W56n;or3;LDha5}ocI4gkL-E7cdIv?2$;Xnq)=Bd%nT}4s2V>(o`oqg zPkebHl! zwyiq9uvU{OJWK3cJHNXt9T9dG;DCex)GAC%;xUvUpH54k-GA+3=ER=`iAs1Pp?gsg z8SI^_IG+Kt^rGEF6t08Ga;cJIe#$*NCjA|zqjSl?A1fn}I*$zM7D1n%@77_WvTG_4 z#^HN)W&!$Xkzm@$@g4W0|3wm-e33L%I}Qq{z`t$+Mn3{`;)p?1R-{KnjJ|(n*dt)U z1xF+%Cp-Ty_TDor%5&`+CeWB8W5-6Gf^d zSm+8WbwJ7t9jt)DfG7+dBFKOsAdCzhzI6>I+vk0E$$ox)KVFYx=h!g{%za>`(Wb`+FljVuxt81A+p9ZY zfKzg@gd2rVw;i?V6ILynOs{Ye;5q%z5f-s?5`d>h-mHrF7ExrvFLE%82SpfJ8V zjwC{ncriiTBEzAwGiK0hDr)a9(@p2V@bYe@g`}=pxY`d))jNBTz#Wg;e<9#>kV*mA zT1tb?27QtOWKtWlr(6eBX^{cjAwkq*Qn(2meyk#BXGlPmyaG}6O3$uCp%Mci<`D9m z`29=>%~L0#>-Ch)nXMr{lMA!kbb{6NmS?`1f5-xowM(cF_}PblkE8x>G*;Ptay#wJ zF`Avo>drUwoDl#NsgrP_NajMkloW0Wzl}Y;^@nov>ICfsYJDR%7>~h@h)Gm>rd7%N z)iq_Xy%IA6zJlD|cA^RMzz|1vlqxW*t18KG!ILdQ*IG|uXgCO_?W+B`B^6A&C|1~2 z;w@Kcsz4S4SSnreqXy=DSHijKXYxe%w6&8Ej6_%DJiAB zb@lecvclmIM~O9uN@-yn(plu0Ns*{B=-pb;z_m*Q=k315;6xVTrZRWwLHk+<0t1YC zUla+H6TIfqR)@DGKn7+OP`t=3%O0kCU8T+HbUe(@;0im?Risy6R!lfqnmaq>26Gzm z<_qiM`ie~S=G*dOhkv%059yVC=<$gNf6?-#tl=`2{vaydxYNbfdw+HpUR#wh=zG6i zlM5IQ$8LZMU~3EgnF(!~nVj%Ew3kt6$V?zx!G*&)vcQmocj=GtY*$Pn&450H|0q?)yGI7G{`=A}LblxfU% z#G2uzSKosA;z=dsg=rirsk>GE@u-3~u3Klwm~F20yTxVQx?~s)`A|xMM@_C2t!0kb zdjYo;PyXOeT>>VvZ07I`Yi$ouKMzd^ua@tbxdm#J;Mcz#kSy(k_>w_@>8tUOp zk7eJt`o1U2U}R*#co$3?8CC!1zl!*T;p}cuErW4!a5|^Q)K)I(N)3AL7Z zdvgcPhES4uCZ^V=U&Ar`r+)a~Cu@A=Uh>)b?SRqRr(|(n_4^ zzF*alu`C=GO=vD}vZb!D;?_~D%*?>`EI>hVks_z--gl8eHp99YR=)tXZ(5cpeONAu z#1k7NK*vz;ewNJnKWRq6?CskRW3LQah zUh&a?A1efv+YL-b7K#xy#k#gPh+w!&TNxn-$^G|%T`bkF!>d=U8Di&a9M~NfK3}2r z8R!j-l|UD-bBIL_nxE3`XY2bOqd#>UEXjpPgXwYS%zMJMvhwmZmGaQYGg%#nTG80UNY7LUAw^Q43cR47_ zoz{+>{<-7%gVTFKpYwRey&gg%!{DB+HJ+f(UEqj@m#SNUVFGqC;d18SU{7X1MV1%^ zDjdC+CLh{a}-A4l319|Ao9FEti1NL72*=G=066JZEQH*0~s=Cx-+x4`SLt z@rEghM5IT?Hn3rmY3z2m)!8vQ93K#|RTTageL9JA%@`6jQ0O_W9{M+!4Gj%~glT#E z@K2O!80Y@THYXz|!2nk9SO=coL~bV2FDUS+^o`A|n=C2#xvarFkIv7{Q*OVzKv&$_H zQEl}}ESR6Ik*$>c+0j#ETE4Q)v9}1L4%wXug*0XxU*q?S7yl?SsbW^Nj@tW{l7H-V z**`EoaztGAGPCZUWPLtQj7`*9kY&V8-Wr zBTpd2(~pT?F-j_>Y+7cC31b!tYG>Q6Q5gw-pdMyL>5e>DVQ_13u`nN5#BlL{S%-GP z_g38d3-&{l6~T^VT1@vTp3GY+=eAz}=&fBFrR~P7)@KBC+^#o~cz}i^co%KcHwo(Q zC9m%-mW|tX)zanRN&_|DDR-b77GD*@CM?8p^u;6UAiNvJdYadKPKW}sAfFtd!JPV- zEfSvz4OUev>x!d_9tMe|O~NJEH%#~i%@}5uL~fAA%$lp_xVDa8Skq~g3;9S=9Sbwi zkhF%6#Tp6o(+O;P)pJ1_df$ESw*1oyqItCUf~R%Ej9|WsP>g9KEcl|Vy?QPgaG=Hz z%GuVW+B^R7nOp0Ts@WL++YlaegX*6z@L#HG-c?GEhF(gBhv89-W{rhQeoVOh5kng( zYnZ~wN@g_MUtAFIfjyu^FI8h1CXV`f81i!}l&Ipp1T2nNrGu5CHcqG-K; z|8o3Q^jr8Fzr$MQWp=+nNo*oiy zBDZB&o^^{O^s|O|t?8N7=!HYHf3*ww8@%wYEl&2ouD$1xEbaX&%RmiQ2uwaa##FLV zbxp;c9kj}W=ZsP|Y(i6+;DVX*a&uK=qhW{#)Ga>O4&yvjKxI5<|7r8i?t8HUBuKun zPX?#Y|MjLP9jo2A)etI7b6TfV?8g`7wJ$10rlfWNROqZt8tdLnP-K*jRo^IaHA+=iFp2=G)m-URGG@Y5)6mdJ&}b@c)rIq)0lz|bZa;&LszDDMcZ7C- z@L$46D!cW6Pm;Q~RebQ*UpYP_sLD|if9yvBKP8PGBxqK{wE0)bgg2S_Ne1}J>`b_! z%6h}CED`WQuEAxn1b(Iz!Np9r2-miu1(RKQ!25v4jMzLLFQl5Kn`=`lDBT2>q=Bi|;X+smTIt2f6cVCdXIqSxwK@ z(tFK1B4>lc(R*m+sjdso z;xVzB1dmajhiwzp*3`=DCZ#pgx-5Wu8`~{Z{a=I|24iW!F)AGZU4suYCyKx?j1C>L zw>IG$Q<=mClP%hy41No2K&57j0|NX4A(jX-mgzqP09TqB^mw zhMLj7a|Qsdo5nZa5@=>utB8yYNkZWzus);GQ7;EO_SdIS=_n+i*1jhn)F#p6$+{W&BjlXz-3K~oWC?Ua13Ma@C6o#)4*5P zdsr>lnh}7L1PaLOOU+2UcLd6|$qsPIJp4GLYivFgYt(0SRuo-58`Qg4(;%Hd1yNPF zsf1QX7Uk5pfIe1NDJVVn5SNQwH;;Yn9&d{qO;CQ#3B4J9FxKeN9o((nZfi>z%W4JR)^#ZFyu5Kg z4JMts;*pG$M8LOE71jbWA-@73k?19jUH_bhLns&FX&Hr&D~X9vqfuZXY~h|(VrN4l zXB9llBN+v?Aa7)H(Qc?_!Bi(0b4ift z{Cjgy?wGcgvxcuwh7vfec;;zy`o+fUqzGF3)aC4)=E|3%@_xQS?hAsLBUiUwRD@d) z)s~nEH?+VUT6Um51r`cO0}_PU?OVHHezyY5tcrBOx#p z;Y>Hoz%=;)5A*1|mGIe26zF&iJpSrISxB->waVuis#Xo$Z)9B2ii?>MhDGmZ%B>#$ z1B|?2M;PEx2L=8wl>6(1y=9XK_F{%`PR6xwBW4*vzjIXk1k^+(9C#QZmq7tYo`m^v z@GF>^jA%Oni;OyMYl}RU@(OGrXImIL#1Cs+^P}*N2$y^{_Ta*bh89eVHpd!WZ4$T5 zuqZgd)}4914UB=|pH;T(*|}3Wn;0sAkZ8`}Oe`HD=1$Z(ve3k{1Ja)J%I^!cV^A3U z3Q@*{HY|XZuqlJ5@t)9`!v8+&h?Aev)XjXwBLquBH_aM{5L3(~j09sZWe}8=fY<(j zZCPMI38)YKkwkhS66@HRmF4fkUMI4u@zAc6^N49tHmtE+uiV$}S>8Z0@L)Pg+~VQ@dDx}as4FzUaQ$T4g6c59fbbAe#UB{6bK_;swqW6!Km)QO zWFrAf!0+_Zr7*X;wvHq=v@ED~IW1G8_Fz}j5NhwdGex-j&TRW#;FcRAQ+F7NUn!d) z#LO1o5c;?#XK0e1Mz2fwHFKjq0;KU^M-BT&RF1)pFhwFfh^8T}Ie4XuH$xDRz=?y= zsDawyJ3^gqpD4F#H=K3szGZ+i5=SqU(?QzYjP_xUN2mRuXl_Y7Ccj4(rg8<=-tNs) zx^H0cTnS6Uo18g3to=O9;Ju9(B?$?4)gmN1h9SHY?yg;=@&q@p-Ut89Kn>nM zOf|**!zUT4KGPV!FgRohMQO!9LuDK*TF^h%gJAUt#0%4C@z&m+u7^P(yJ%l*{KD(m z)yFXsdEFK-(RM~q|%?ZpK;$(Hi7L*$R zMwsnQXDm_52B&W_;GDYIbn%#iHvO3 z4UN90&s-h&m)sU zGgR8LQC9*=2V0r6B*6aYX$e$S6Nc=L`CdycQS8Z#YLVDEEoR;l*-b5{hB@JTDGn2fA7Qw6vEVW=V zoqEqsq=0+EqAU90Xi1ggM<1>js5NOFmcsoEd$}cQg9%yBD){v;Yf3c5=^v?R0J(){ zfc96=EV{|&v@bK!k|JaP=AZQHi41{h&DplRlNg)|JU#@PwiaK9BEn_0I&t?SgUeA- zsT_lTjO-5b1n>%o;Kyy{hu-rP40TYZ36JCl$kWR%eAw#Q;$@)s0)3A1!psw2?ai!D zc(!jWSw0u#50h8}K4u@_6i%(O?^SCp$bw=7FFzbKd2utN;`2&ED#onZCzxHgRyq-o z)PrC@d;D=HqeOI?|6?`%&iVT3L3y0enLn`Ek8X=HxR64tng#B4fCqeAtQp@BgSEOO z#@*`-hltByO<6Idbp49M9hNMzVe_N#9_R}rAwuFxa+_M)5d>m-u#38=8)k_uOEyd>`|r%JdF+bII&>Sbobix zOB%~r^zJph?YmUUPDAqtQmPZ}VC-+db#2HAIg-Zgp=@&*WWs}N$s^)HL^*3^zRi_x zfwTAQn#k?=wA^7wP??NrhM|%vTtHw>6Aysv_1)I|vmE}Hv!8d%;RjxIukueum=R@= z16$^7AV>ab)KLLQ3IjAWnm;&HF+aW{&@X}%SidEmtk@u2Rj7KFd{9@6z+GMmgMN%B z2xO!N+w)#GY5*B)3P_hN;Mt-h+n4@-qUchTZKkcgUD)*pZbS0^=@<>*jtwoakW4FJ zOs-AXN&61eymZbgToE&9c*z*21$7MCiaKjUfhwejb?ya)L2pALJc(#UUrJ#N7TJqN zr4-t8gHBxFxU77s7)~aGaI_rPKF9cK601`jiTJg&;-fR?0(*{Y#IygGjAJk>4HX&d zO~BWn2oyC7aefl61|g1Qc*Wp6*%+{fT|x>cEr;EE1v;7zGF;-L+e{;#X~sO=*_V3_ zIQ3B#Y9cKo@`8XSwm|Ji?O0y9cGp!E1RW99RGklnAhpFKzY(S zeCLe)-gRqp$NO-~q3)}=9WbY1LleK*gV_aK8a#&_iHFyyWh-_%cDf0jIn)H*(gN8A z@;&xXeC>UDF9arj=sR}2ojZa8_BN{jjZ6s3kj?!L_B-AfWr%tG!<-%I45_et6uw)_(kguK=BjO$_84KjLH(rgEv0 zImEel5C3lT%X7bBOungcM2*Yh{c<^pXdVewkh{v(0+Wo*m~eYC2L0GXQqNelTa>RI z6)ynbh<$nrlgxEPUIA_e6sWW62v#g!hm&KdclHNDC)~ULJGMH`&Y2IeX=+n87^VWS z@*ofA#!zLExzQ7lgCvMt5HtBa)z{CEjHyYHgksKt2?$RxCkC6b7WK~X@-_lqSkUUd zKqkQ@GYlbm1vW9tmX%Pl-Cobla(K2DolZO_O0Bh{TgBV4FxRbkQ29sN9E}FQFKCwA zOu*JyRhKU#BT$DfAVU08<_s9xOz%l7DYKaQ?2j&A3ER)PB%DiA9Ncu zZ6+0!G*&yV5&!RdF`-|c5P6PZqT7KTA+po3(d%~K)2TPTIZM@;?A2Ug!Z1}!9I3g3 zJi-}d0!H7I4SkC#gAO(;S)|1SkEEh91Nti_Aqrg&Z)R=7LYydErK(B{X>W0$QEjax z@Hq$Pr?C>rt-fVb5cJ!Ro`|;w_Ju5?ldKYxyg=P0jv+Lrg}0Bdjr|f|I@^U=oKoWK z;ts2ERi#$Nn5Zc6OB%(*fzuBhD~V<-&$=O~z6}h{8iQD{Z$$??!e1V^mGI!0oLROWV-|+J z_O@gL8bu5GELk^~+Fp2CCr@Hy5{!$&iUa)izFFf&kc@^I^lT999RJCqRNyuVCQj}& zpBir@BZK%kdI_$d4RBSd>g@!f7ixsCoPh0s2QsUPT9=5R-x0vbH4ar-lWGtii(V?9 zkN*@lCYehYwp}XkH+aE)sr}VIwa>$fxx5^{*9IA^JMQ(i5E8No7#qKU4M{1J(2Ln< zhH<}>ENl3)+IjLI>pxrPzLh5C8XSf$i7*L|fF%Xj5wu~dx|ntkw`^Zlb!aumxp?GU zcyrXPmMHU3an;9_epAolQ<)%wZBk-jj~v;P91g$tWM&=pDH$K}O30AD=4?Gya9I*9 ztC3q7v034g<&O*E@FhEce^3s4c)-=L=|=xGx?YB?(N85Po+J@3+O{Hh=#)9&hHVMBG8Yc2D1fqe0 z2}zLSCp1mG{$myWPA&Of)Gf9Bzzh!XtY`a84M-Z^%@}Mi%6q0EwZzf+%IeuZLjyj1 zo{2i*6eaN?@$ett;<&_~X^@ZAdIxBU`q7!3YGXaJ3A)tHoDRpR1)9%p!UR{@EwDYq z@j$%3P*Yv4l1)k>LLXeVsi-fRjB8<%lEx(bJ~xKO;ftAzSmk9DSuO}pXcjGwYneLi zzGCSUn-wB_q00tquw{uB<11#soY;2RgG6}!Uq`~!Z4}vOXc?ycis`2IFi{}70zNhu zokx-VwZ34boNN&x777aSx+uK@+$}zq6M2JI-#C8!gQ+;=w(CEq!Jp$b*_C>?%JPOBShXQAQx@_JE zGsY6nz9(B5gK!=Q$A*cN1vNc8T0M0yQc53xcC<;}w3CPcE;bY!o zLQ}<5?jVos8K?w-W!T$7vOU+P)g#_-sMEiRa0J`XG+T$M;wSDUos z$C=|55UAF-2oCLiC}l!S!GH$ZYbhT!Y4BYXOsdbRh22&$HRyiA*PZ@EXnB3zgzwS6 zU#I;K5yH{Vuw}0P)oaGRckHV7bOYBH3YM>lk>e_rWurc*+l6c8fZMX`W|}*cG4eMs z*|+Z+XQ;Cb8jGQJa2^X7*w(y{t(sM8?R4Yb31>}-R*wL8)SB@45;wadZ&}}hqb1(# zkQ58=z?wv`b&h8Yx;60&&NUGRdz1q5J=>q`IBEuZX2ayL=7pU|#C3y55XNv<@vdH5 z`)CmhN%HH?d+#tX-kseZzWWa&*RJACp1EgNpeCkTVbeLh8U!YD7s+wT&SlG0=7Vo# zu!@`a{Y8VqERa?{YSy910zx#0q>bSF3$`MXM+?G!vahQtV6DAN_9kQt+)t-1a#T0x z`hH9u19$mc0Bda<-aVm7P$9(+-l(C`>`4qc5;fG%eg1Tf(G4%>#gatruUZB(?BG|V zG^8c%icH{2lErOoiB7)YgW(_l5)b;Hne2U`KQ0oE>TYG7;wyux?)%;byV(ix7*OsjQm;jK%ON9?8TVp(p@fQMwGt=1*h0YI+8Y@{`Gl` z1OsH@jL*LNoJX8j*KBP4Y9sIaSK|)>@xK4RasPdP^LI_+!qg?}7DEO~EWU^hnYIjWb5N8AiYsQzt$k@)CZPOKY!i8Gz; zU*}UDrMh#04M4Jx71nh?& zevVqVc5V5owd@stgRMcV&<%ejz6aP<-xyNu;oLzQk_jeqw)G6rEZ7%cZ|KW`BpGgkBX}Fl?s}2?(SD za8N)hAcSPnKf@F?^iA6L=-ll}n}(r*2$SWdH!%5g z^<9=6vxVrQFRxua)FhrGFfscRih`XB*(>noK-JHj%a<-q#+^0Ukl-A@rZCo&Q!iDlkhbJ!wy@ zxQ^l)p+Pq`-%O;65-kuke2C#}U6gZr-r2=jZI|mL&uZkaxa_5(#=3vR@%()Dto&!{ z6HESjwTs@p@c$y-5hrR{gW%VfKDw!T5(Os6jO7;vRv4Bl*K>PXwqSMD>SqNGA>Uw} z6F-dRr=AiLbS{{E^ZNOqk0U8=<{}~PkdF8sV-;gd2@tQZ6$EB1#MlUM#k#ewnu~-Q zbL}dyaCy-(HJ}}B_Inp4U*WfZ$64~|Zw~8RtlSEIR1p&T>XvUCd@fUo_3pwccNx!jzN8CEjfSI=j5kK=Yl#U*uUZ*yB(HJPEJxmEO%E8Lvw6~eY{MH z7IrW!)N*;7R$q~ydTMWD-`Yr+FzD;lDDd!Yi`q$!qzbcT6Z`&H_kAS;x5%@Lk6c~k z_K66%LWbQQeW=u;#{24I|H)CDD=YC1%S)AC@$nqA&zmcE|N5aq^0lsCN5v0|QWK8c zx@<$e)y*`mh#F;Q+ihfeRk+ljzUdP6$TK0v-A*)TWAS0Cc>kGGpN2fRD0E5BX#bsj zYro;uel?G}trqh&j}N-BUeEgJ_{_Y1b$p(a(`YrF*XU=FzM7|*pSd?+?L-7TZ z$9+GSXUHGkspLELCa?+pE@g}dQS<(jWLbe!4Lk5kc=Wht_NbPY`i73CtFwxgfxSI; zA?CJO3^_~A4-UZ6s;b#RnU+PYwFU4ANeN(Bm1rufZ-^V4DQ+uv$tnL<$;rx(;}_60 zwQAeO1KajXF|e0NL%9P)rocmBs%ga(froUgJZCho*)F=e4U3dbAAmp@7rA(NrS9aT zy-M9!ljUtU1CO;6`meB?uCiMD#l>wc)=egBX!14Y0U8_P)USv9;}mpFElO zmn@h{fBTcZ(aty5m-!~A9@68#|0#SaYpVzQ-oL27DyiDsR&j&X*XlAyLFF>;U6sPv z?!?ilX&pA}=Jwb<1n1^rWL0b6#-F1_6l}g~2PevSWl(@UW^DmIa(guFpIl3gix*M& zEn1|u^@@4-y%M45-}2U+?D*k6=;=rFtGkj1e;-)g07DN^Ut_UIk{0_pf@y zHWw-~Ns{;Krr77xY)e)%Pb*-E7b{i<)I_PJUeMj)btE&e&j8V$f z^h3vcxr5`yirJ&IOVOt0$3xA(R?iHj&@=7nv1Z%ETGRNGV=?A?Pe#nnoEA%zF0B~2 zelB1tdE1gPqiuS#^;>((M7(-4aPf!gHCYGWV#sH{uwPgN^3ID0v9!E%*%mXDm03gz zubhYW-}vFN=)^8JguU0N-R^` zHilxJiH$qo`(Tw~{q3Im<@;BktjF`ZZa-6Z@afOQoz>-pr9(%!UFi-m^C2-^E$h>cD zIY0d36|}i`S-#j{;`qd~=?#UK6j z9_wSQa;OOo6IGN^o`XOlPe#r4Mdi}QBk~^$of+5pn-?pB`NX)R%M^YcsV6mr96!ol zwO_t4`6TD(aIc{48D=@RwiTFV6`x|P`lPn1RzjAxzrXm`R2;m#01xd-$|f!6yMyU% z#UJGby;x;dskK1|ueZ7l;|@*bIdWxX)Et{`SGPgLdQ*mlb;!0{5BII3H8qR|(OBOZ zcRQz&MouIN71Vg^+JdozhRwAKwBXap*QNQ##QLu#wE6nITC+pG*%nh9lBDq56_#unJ` zWl;M7XW4CWzB`nDD!dJ({_3{$QyuvT>L~#|C808%*2jD@S4MW{bm_ZRT^*-=Gkl62 z=;`6a8Q&G&w#93>9b2_cgteakvO>viujb1efrmIFai->Co%drS5xKfc($04$C91x7 z81$-JiHZw;tRBZXFm!(=qU*LLJt6y-sYYyF;%}mG(p`1>Ih}t$9%CrKU%S5ia{}`1 zPv^jo#IJuuE{ul0ffAwQyQ5lzxkh$Q9N%!-N!|Wp?_-|1=KyJ$YCBm;=?`^Veyu)y z^2>rNrx>n0cdoB`P@8qBNx@k5$KP{iV}sfjYbxX+rS!L@Pai}U&@?dFGA!L@HqF47 zU$XC3@g!OMTN~Vo5^7}@1f3BSEV_8z@#5`h=AZmve}&ZB_S6e7P_Q)qT&UlYbM%RD z^I{vMIyK}sgb!!oA(^0KSF+Z4ab%jjrjxcinQT$Ob)z-z2!D8~s*)Wj@+el<-_LFc zvrwh(Mbf7Z>%Y2ocIo44?e1XZ?~Y z957|{X zDW%6wZsQ@9xGT}j*GIzJWEQJl4v$``@SAzLs8@lMWo34NOpxZ~tmNGtd@A$s9!|bK zHMu9@ikVIC;CYt*s}5bu3m#9boYXrmy#ha| z(X!Sw;}T0ngAy)>`nhU^mVs&GVO>YB{v*~4!E_>LncwTP|Nc<^^|;8p_W+SF@DK#K zN^V+($u=Ebzv!2d;p5Lm_u*LDr&WqeNLjYt=o5uwPGVw#*MOJp!=M+XBF7jj z4}9$j%1mUzUY$u>J0I)-U73aH@ml3^EELTMpu^D3xbgCMOTTJf9BrV_<$%GGV~&}X zqGS8cw(-~7d@gj2_9u|_PkxBM()GqDO2Q?1q$|>AM zOIcl^gJI5}=cO3qf;ewYp!9I=zrS67Rc)2|oy^JvA2S<-=qSxr;h3Ho0SQnUh$cs@}HZfxm2B^AFE7Fl;)<&bOxDaC5$MQmSuN& zb#v~I@6z@+J+^){a{Z{~I4Bh>Q*9po_RY#HprFUNLs&VyGOOLAmC+ANpUqBkBJG2H z)Ah}Z-*2QXi7hEn>L0XsDyiRJ)o7Zg*fiQO;OSPvn{3Ig*^*H#GS>5C+cLSop8)FN z-Wk{g9q-$t^TRJlmP1eSnU6#IChkQZ!}YpetF%f&F2N*dQv-E>X|eu?Ij-0pXm0z} zy-@ib7PjFJi`&u%dwTdV%8e%qp{BnGqyOm*N_jM0PZbrqJ@&25-N8`#7nWap8jVmd zW%YS7Y~`NBo!+5Fq z%6~Y##B1%~1MIhIalka>574EX}Q7E zQJ1eLj*qgd2K#1z;SCuTlPV_9)WFHa2bnoGN)U_OgE2yBIOb%sQNgO*H;Lz}#Z#s% zQ+?5J{aj1q{ukc2ObU<(@i=*R1tHnXtqHpijD(BkrUsPVdTZmYg(a|}tby4;E!|*K z+9uv8bSA?jt)QuQsitX3OmFs>CS*2?AFeNdi)8QnNA2~0rMJU%^`aOgCBz>e>dQ$C3O@QsU}(<0CQ!UV*`_%?EZEKMdqLwdH4R z>$cM_voGF01br0gSjH|Efh~lJ=#*i_x4%JLRJb%OTGascz$mXHEWOsLBg=A-$9oad z+RQTyZ)}WIt*`RytJdtlevVNmIJemOSslDLT8$yYuU4+LApPTX18-LxbeQ{E-}`N@o$e-dBqDQ*TC_b^6ehQf77Lym+xLS@L;s3YQs_Dkcv8{ zQdb*mCXKTT6nckN38V6jb^aYboaiPe+P8Vw|7WT~*-h8$SI?L@cke z<$W)tk(~a@G=@om*?2s=XdONLl$Dc_k&!-GRZ6-JB`O;5hJ9b>Rf>8IFS!hPi*E^0D9U zwLxn%PUXnGUjm!JoK<#%79R+~H&-lvi;T`&{?+$E>6yP5>qnqJvK9u2W!Zo-oe~;; zr8P1$(M0u2DcJ#SoYHU`8Rxci8^-0uMjm{AD&woYCUo5?kbkA?zq;Q;Doj1H zWIO;$Wo_j=lOV?IAB%L81GIV7%8>S zs;7t5T$+q?#H>Ym4n~I_lqFtxrmI&lQyJ2sRg{v|At51=Bk7Z}3hJ~vZgCqWBs}kg zdkJ?{yRO+tu|{cS>BdnVk(BG^>Wz!=bFlEKBZ-08Ldi)1^^KatM|NUtGO4R2f{~A#G|LL<4 zFDewe#$eJK%b{x)^#@tyC<=2+OR^wl-|^F9{VUP`UI036fZn61Q1TBcmA30k)6u_? zH9)8OuAe^&F;SLl&*KdFPw{t>-B7!R!of_XJVZj|yrgRYSF8S~a}fvn`(+N(upJ|N z;<0Jz7nl(Q2VlRv!Go{POMZbsL4VWVut8j0yfFUl%ADKmSD(v^>)**x?{lY*-A|h2pWt5&46x zR+aYaOYQTwiA;5gl!-#0cmebg1?T{BGvtYv%c-!aEncp>qEy!N5!K+NTl%b_=Z;C5 zxv7Ydc^W1e58)`;m7Ey*)RFvg%@?`P_5>w{YJLY)ZG}HPI|~aXo2U->23~j`GBQVD zL1bw`p2qEOHuond;&)nd9q>DjC3tv2TTuSgfe^j7Ji98c6jj#7!4Z$$Te3O z{XjGRoR<4f5eFc%{FeMc_KuFP`d#tI&d7alV`GE9Lnq6=E+IqyBNjz`=*dT%bh8zJ zkb|I`_c*y8f9}qz8_u1jS;+8*a_n}SUU}dAn=70jL=GXr=;^7bs-ATDhUtlZzJgRJ zySYBt)E@lQ%Y7Q zTRUc|%4T-LS7}{TR8$v;c44)?LvD2_+fyq}y}Ws)OLv~9Yl9zf1bxIq`16UZM%mg8 z-DME?H=f_l!w@TgWLwWx^>%k7;`T9EQ|k(EoO1l`N;FsIyW+NJDED3|n>p5YdVrC2 z;`zNkR6*oVy42~5JcRy6UBjaUs!+e>^L*#|Rp0=7Zh@Hwog0D&ppQ&+6#Zb<{M1zQaolTX$>*1@H41@Ir<7HKJ#qQCJtseqoy7y z8TM6>_IZ8x)MU>U8@T1imWCzg-ehl(YjGQLC-1<2e%!wTA_W^rk4M78e7=Ucd`w{H zN&Q;=AP(##%de8N8L9LQG3#rB^r^eaCM*PM+I2kdg3G;y`W3^KTd-k3!L{RQxZ4=D z-(h%Qu&=;(=Mrd@+rOJyy3g~ACoeB6SjS-xNPI@w+*F4AP43)4+1v*G2W#ispoJZj z9!~@B%Fc}trhA>dAyR$GR_}DI*f1atqtHF5pZA~|=<7c~?F!Wz+D`KS@H5=rr$jQ` zAPVA_X+I1wxzi=MSV@EzxNQ=rPXsW0ugN{LZ|HOvwe74O}xhopE zYTaKxQkW8(u0F1l^QgNF2(|;X(>Djtv)KiMDM^(ROp`Q?9_#rrYa_iIaQaN#HfD)~ zy>i&BL^-qGE{0OGVNk=9QshA&>h;HkrMm{jnXh8_!yn86d%+^R$;IA-lK0g?{ z9FKCE#*+*Nr2P;G_oF5}FygqRh#-^?O=dT`>7Wf6`7*=?xjy$?wjgTZKOQP{cQCzj zpb)~9a37Zi`z#N@-GwF~MInx|h7xpeR|>Iyv7aj8+CCo2PT#VTujxvqpD z`9QLdzNUH-w*S)boZG3Qu3pht%4dpdc{rw96evMC!kvKKkEDpjiLEj4fv6nBB*YfkZE%+w*dEZv^~u*DpnkWzPjMc0(;;;{)PTn59SaH{@Xx zYm@{ap6%TySMeTuJ6k!_7Cb{?{>A*r>Um)#n6RDl1z(qkN=e`vg+MQ(1suBFZYH7k zvi?9Bd39i`UqHkE)f}RZnn9?f7$G}b;4X|H4pxAFBn?wT%c22?{euOxx{+4puvN|T zgWAsPT{En1#3f{U?%bTWNCtE^%fqzddnHk6-_lfvB%F)G1t?ZvKrZePbhUDpIAY*? z)~6U16-GR5$9=`WSSp{9%&Ay=e zdbIAUpim=~vcBURYw|}5wlt`AtxBlbj#f60tKU8lR zF7dkASMaQ@z|Cmewrx}=r#-}Y=esx_#Jwr(&V@?~^K3i>vJ+@+sqLfRa>2?-qO+QB zv5kkAI*oFgesRTKxqala9(Xghim`5Q$AH{GTgS?wC(MmepA8FV7LV>ASI7mize3nh zQkb-PGpG*ieSLuTDME6S59?bS%p)NaYAmnN;b(0|+BSFNWLmE#fI$~#6Cns>4?kTO zvz)~IZg6K)n>rv<{}QhA7dmIS>LcK;Xx1Qc2u?gH8gPz^jI7+uSOCzfC-xgktwaM~ z_vFd#W<}!tU5*`nU2qsO=61_X(@-zvm@jkbdPSjZbmW0Qlv zVg9&B50HID4JBRlEZo?t(e105Ph5MddUeJN)J8CP(9uCQs6Z9h4Mk1otIaqNk9_uG zATdp{P-05TdeG}QLo+pG>^9n|M9~DNFXzkz0t;vL7##E`H=KUG@yZZE14&q=lV3r+ty1 zdy3Bl0J}4MgVAyS3|}%2hMcD)J(`Y4DX@OOx-Bn5Be!p}J}=0xJlnA?f8lvT9@`D~ z(&2rxa;dRURv48}41Yu>;RsS|5##2PRQWZvm887;d9i$eZ0Kg0J#gZ>3P2#b*BbIX z#`F*@F3bjcdF@`qwpJ-6awo0UpB{3rlFQTEv3{;`e#&|TI%-|d;#K;!a!A;yPns|X z`mQFLg{oE*cZq~RY2XGPjYbE>x}B-ga)t9%o1L2@62@$s>jxM~Zr;~ED9nGp%=~78 zX+AM7O+ob*IqpI$sO2JGa87?y32?h@?Qv+_9B?8X+VWi@Z9bP!+emgw&{>oIbG7q7 z3WsOpcLml1&kXFffRB=KgVi$A<6L}W!vlIZNW_e0$HILpFyKwfUf=I{BjK`!w-AAE zfLwAjqN8-Y1Dm5_3(7Ddh{gtC4tElgiS5T@Pny{I0la^Tl@FKpY#Dh_T>%sIKOzoL z$Gv?}7qJQqxp+d&yN7}hujE6dwF~=o8?1gR#=qSPuy^})ZxCcNB)GiFu1XajXvZk= z;v5o|hQ6LALhr!#Uv1;CX%{9TgBA#s2%Zl%pi_THC+8)8w3mbr5y zkKc+o01}zyP{YL>JN6FT9tZs8m(V=YLtqeaKLySu4)MPHl>XF&>^2mf2ovNBbDD5i zpEhOL7{N4aL+C7&E;mpw--4{aOx0wt*Bhl7{wP@pExuuTqOHx?ZcxL?JcFNlPNQD3 zrP8Pz%s19fs|0*Um`8Fa^?*kGz@r`xYn$qIDSmgDly%vTiiM&zW=U#GfhukDfQfG)Hm=n#E)l9iF%lzv>W`mP9G>2IQy1o^GTW^?XS3sF z?UM2G@^XYIt(y`~`Cn;I{Bf4Ccr!6s#Zv*!@)V8?&rnmuI~BgXrGg3dm%=Zxr^+#> z{ql-A{7v_JpRT(>@E&;3s`{d#*aL(o<@)s_IYHXD-t?~az}>bP`f>i&Dv{Q<{K46~ z6WGgmlN>>8$uRaUIuHHpmNB4=T`xS*RpFbGIK*k1pDmkL*VhvVpd7W?>lB87Wgl38Z!MFX5%h`-;Q0`0J((bM1(G zMj$Y7ZGe02#YHkj^feA?7>z+#N;GTr>(Y^S29Q`yH}|p^hc(kGC$8I+(T3__+OK((OhIx7|C| zGo|yO!=dXBq2q~062-@I4l$md)Zt#W!C@c^>=;?uVYTepK6gz{s3ji{z@W zbDz}2Z3_y0RyW8>dOmkyuaAtr9#^-=d9Sv9Z=1|mgrZ+0RW->m^?65A(^V4q+~M$Z zb9$&qLGTKN!x3H2=c4P5IIyF33vbsHYQ7k_uEK4D5nt=67M*?7w8PHIAuY=5W@W)M zoZ;5fR?nV1*_WjYN2}B}N>EIYiTOO9-WB{UFK#4b_c)9fZlLnWVBT`}>6RGGNYd`j zkn$>7Pd_b9AD;71+8vumO6&TZg5eOQnnBgJ>ohZ!mHlnl=Q4XJ>!^MVlnaVDy_|_~ zLuoNY87BnTgx!AVj7ejyh%p%F(2n(MVY?2_eK5IPSvWN;9S>N9RNzOHK>Rv9gP;w4 zR8u1RRE4D5t{L)FXQ$zKbQG09D4>wdf_w~c;y}XyNvQ+6WxjcyomL4PEJa$mF4p}( zb-b=FL=OX~5}!0(vbz!cQi5t2Gm@sqr1-VOeQ8S$({HK!q196k`@x!*XeQb{&WQ3Gur{DAmWB-Hw?D1b9U-Lxbx}};a zJ3NBUp_QxM5d*uT4JcRkpY-d{9q`EmS;x@EhTnK#rw@ukW9M<;B|-4dX3foFPlUB3 z?tUGHXiIyC(N4I)ptfR>&g-8JmHGM3Of{B;Lcw1IrSRSdABk8jCrZE~9`=xkkUIo? zB!!)ovmRL}XxmbaugPbhAP)b+!e|H;5#>_H{Ub99xKXE2RdqX~8}BCH9O0^*^gaal zIS>vPtq6N3r_hn^3XzUIK;`vvW4BRH`fwd^c&YWt_gWRtm$D_JGSf*qKUUiw&BGdx z2e{^9u<|{D)2l$)>&?aKb$6ekysXyfA$1io_!t`|We`b1w{}Ge047W(1TUPNgMa`s zoMZR88C7p^R?hs=^hH}rkFpEt>;e2sLs`B9!#U+49FU1C{*zbok*>NDSI^o@qIsvs znZB{er9iOi)rObg!egsfphA)+j{*Xm3UExN&r5k6+A>-xn}u>4(}husJlRZ7H=e!s zxPK6}#yqgNBb1X<&?vFrznA~Li}=vKUO!lo80y((T$SGM6_&4PQ=aR6dhibK&1L^tj0^VS9xHAGtOBt4W3Dp%HC7=1q z!QXxhX`c~-)^%YOPcW)fOv3}yy)iBN){^fq+AR0c_Hh9 zYQc0&6Fy>dn_-+|13|K)OV@)_==D}Z0~QFv$eOvA@pJ2k06Lw*A5KJZWjtIIN_BJ$ zMopu-bj#~I6P&!#m85lUgO`6~0feE)B~RAxCtdBmR@73aGF^k-ms!aTBaun3y4Au^ z5)^6(@S&IKwciU09MTt%V6=WrgcO?3>PBccm3t!ulqrup?=5KCc3+k3LK=4IQ zN1{7t))H)%bQy`rH>AF-zU9cMIjJ>uT3tPi$f_*!|ItWBxNV5-OVmWx2uR5 z)>SP}r#29PTpkD;etDV{gJzi#kIPVaidQcO$EZK#G`G@G}*as_+OuEYDM3 zn(rj%rQg}TQOYYUCp2<*B+AejWCLT=1x-gr7|y=5952!-5Ou7g|J)3LNkEXsk<-`X zcWw0|Kn4<}bl>$; zaKx~|ip9q>#prk!lfI68?Jh&zsr`C-GcddMO}8%78NvmdxU)#-Nt8FpD*9MA*$s+p z!0MSl7LAamIjY?x3VG`RCaJ)30Vmc$GaIgqQQIjeiPIkD%WqCn zwMy$&-rFo_h`({OH~;IvJc!Q}9RfGY>4T!}+Jlj9LG|Rgq~N$zxYE5lZ5i^vgVIuL769uNc{zGy_}D)$Be+vgkNNPZn;B(*e}XCf3Sl2CMRsg$^|^Su4^nm5ozWKnC;RXqRtI%80}!aAnv$imayCE zW$TkC%Z2Ms>vOd7nmfkxlUHsq$(`&?i00L-7~Uqe%iM@q}A2r&+Sl8HKaq`lo&e3gUJrysC2(udd7@N5j#K#tQ=X#elOHYsH zh`le-jHF!zNXMo9hOGJn)~4Krn|WcULWv4NPSw0%P;RKAqVfQ-a^zm?1X89n`5UBh zghaAYJd=b7<45#f`1u-PfZU&BO2_wcPuqx-mA$(lo4dg)D)( z96e2b^ORQMCTp>7K)g8)D46yD>D~z&km1)X(j3-fxbX&JU6%ZzH%=fOAEnycZ=atC zo4*R*bcR|OB$o=lJsYeYa?U&fd~#7n#pBj)i=NNQjr4sq}&j?I%fI9DO@y5_nj>zWM%Nzhw zDX!sa+XAu=WnKp*u37=Fw{|ZXoDgI&8b^0E5K#E{X$=Acbol?;yVj^C>oCs2%5JD9 z1dBjBvy`dW0dVIqO*A`kky{jUkO`7HIZAAS2ss8Ei)oms z$QZZ{DyQS##4(ZES-)qTzSKE=>zqEsCl2iTzW?|A|8CFofF_1d$hlm=xGO7ik3ssr zsy9HF3PXv&!43nEyDxb$AdI2-9S03&%YxY=$WpkJ_8aTa(6ES>5dMRyXf0?|!m7!v zAcG8l@t$9(bPxcewvbQ@Q_&)(`YdA!t3aDV!*t=VQzEjuir9jS2C#!= z2{srEcA)QYP?9rwR%PV?x7CgB$7nBB_KZC4AVSHwl~0VaX#CvSa!4^1d%WqGB89si za*=Zc2a?tqO;MtHNm7~efL~8Wa!rCb{9u~VM{uXGZZI>dGP3^hR!XYjqyg4c!lP4Z zEuuOm@oqYqYFV<-7_YL_a~V#!=EGnEN8FH@u0;xVMfoW7&5W`7?gU@Koz`@v{}8Di zQb_2&KRU@)Hz$vg%3~L}qgnp~n{l61TUF_cthPfNm}01f--7|M;f<5B4#s?K z05x}Fe3z0`FR;>mk(tySW(5#C{fGtzK-qh!s9TZN4n4aC@LAp82jjB@^OaVX1=rUt zGx!FNZtlyj&HH-Lejp*cuV-xsl8P-D3pAnxO;e51M2w{gPamDsf&k!su%sew%>X4i zSwKCkF;~WY$c=euW1?n_Rj@~ZfTBjb*K*W}_cbvUY#icPNQwcn>kF0;rE_rQ zaYdu(K$b@@u@qUg%T=3_>2^xOBQ3#oC~OQjwgb$ZDiDcUXyv2odAsywVb`f}7nW&c zHjMVs{(T$~%?VcZ$H@i3bz^t2p=ut@a*y;+6eKkk#8>2dG=1Zl>zZQkRKgzdIX2d=#1$tt9dg3MjM>67aO z#9>t3R+onv%bL;WD66=S#-?ih<>6;4{~_&Fwsg6eXWXAN5j-Rpv%7jdd&BPbx#+aJ zutc_a_!wjl95?c#(D(Zc;%m`3ybAQK+F>%XBDIrl85SI=2(00+Fh}JmBu`sclo-9a zO89)<&20cU;3^B7>yMeWTEghrBx6`CpHEYq>^l z*Z@^~mnpwBs|NNc7dUe_cuqO`Pif`J$;qtYnIx(5&}_vuY5X}U0d8mU-S0MFFR{av z$1yj9bl4B;A`7=PLZdv0krDj*o<%re>9k3sV~{PDv>+C!gh3>atbot&guLhxViHA+dD~7Y=@lv;lxpD9;L&0 z(KKvEE;u$j2A>0!%tEh}kNcq!M58sZf?^(M0dn~#!Ejd%?roGJID(-yZNCX5fjW@% zEPSZPtCA=wfy>KNUZ7(!9+H8YyEy>8QBn##H0LwiE7j5JuYW1Ji!q@_B3xxRLzkUY znf*i}zQ%t;4rtjH{w*vn2W;S}xIk-6bq%7?jLMZ%ccU^spzn!XD-T4{?loRPpsX|R z11WbV$6^&*WFrd8kkQ&GI6cd~`rw8M7!ujogFUeeVBVcP&h?>NZ&>5|iISi_vA!CTi<;x5pazyt)AQU%yzzC1}M)$Y7e985LyRKv5D`t9*Fop{$l)cZS_2w zGNl83Oe2Ahasd}gfBwwn4sH$<6o`frexn}N`QbSC+}nEGH!Qo20A-C*o`(p4Quwx2s9TD4=;adk_kO@9|Aam45E728-Ogf^ zH8L1mBs(4`PCe3~D*+G4xwmovO>LZCvT;y`X{NM)mGAMH+i8ERPR;g28<*Ot#r%jw z??c7&Ad;WQ(>ssoGLelz4yOHt9KjWEHOI_M$(1i8^agvd^`;Y9!X?$(D#oL%f{uf+ z-lPn3YuWYV>U)P$7P|pNkR}F>QCsRueS)g2fF84n1fq>3Qah7*pSNI$#~L~*t><2pJ8`@$iQKSyVJqL3+0xf@r z{FVU`DK5?%osqnlV##9bsx83h8Klh9tGoa3O7j+r-AD;nh|b zdNCEKb>smH(>=tC>4}Suy#8oh%i&cXvswJdBi`Z>;Dg1{;fjwKN=|f*U!{- a^V9`}ujIVZX0;zn%*xx-k1JUda^erghl&XR literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/streamlines/mfs-zero.pdf b/src/steady_pinball_theory/figures/plates/streamlines/mfs-zero.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2cf01a92ab2d949f5963dc5134010068d44b524b GIT binary patch literal 43532 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 B{(}Gj literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/streamlines/mfs-zero.png b/src/steady_pinball_theory/figures/plates/streamlines/mfs-zero.png new file mode 100644 index 0000000000000000000000000000000000000000..10ada3633caf94edd64328e8c829f80c88b9a7ac GIT binary patch literal 63887 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%0D#h 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 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/vorticity/cfd-accepted-s3p55.pdf b/src/steady_pinball_theory/figures/plates/vorticity/cfd-accepted-s3p55.pdf new file mode 100644 index 0000000000000000000000000000000000000000..55e5c87784ec615f4c6dfdaa8dbaa8b1d0e73d46 GIT binary patch literal 20103 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 b$+%--XBU){3(i!+kV3##va!jj%ai^;8auI( literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/vorticity/cfd-accepted-s3p55.png b/src/steady_pinball_theory/figures/plates/vorticity/cfd-accepted-s3p55.png new file mode 100644 index 0000000000000000000000000000000000000000..75ab60d875987ccc58ba2b6835823686b6913733 GIT binary patch literal 32691 zcmeFaXI#_w`ZrGNskSOo+A7MlE)+yWWeaFQQ4lD5g9?fS0g+7@S}P(5s0b)43I+^Q zz_3HKtRf0Bk}!jU%m9&*1PDp)>qC3a|Ga*`yFEVoKe^9?bCSl4@Avv#<9)3+w|_R) z7hW&EUPwqt`1C0~Ga;d``h|qnT>N@1yz>6VX(M>p>371$&)oZ>U*Nf`7libJz0P^M z`<^*>e*2Zn-hR$kFZlXj_VYb(C3yIG@kV(2H&;&C`U(k&eTV+{g&VE|zBEGRwBB)x zptPxh;F`n>l{$QnooWZ8qMmKs7rj0ua^L8KopzhtQ(QI)TNyWXb(NTBOKDN}-P+G3 zBzB%QY)I>CM|~6?BUo}Izyz{ ziKK~$a4fBVI3WrbBP4Vz>jh@!tJSA3bC12>wEAq@*Zp6hC)?Lt*Ia$Ub^Dcd=*hK> z|Cm{Q;qLX9Qmao6eOs{xJvp}a%fQtae*f>6{J$rY8`QTXp-aZ|qi7fnM*(F=+c%&lFOK@3F#X{z>1!*UQn$9au?*}1_)M=y z(WTC8qtbkrkH6n59!au4saIcr`+Jw+SXHkD^|3dPzGv3V8=t{xYf+uB)8p+~`hL^B z%01PW+B1VzW}EUfym8uLnfme4Em~d$L~3-Ll;+8?*7PhaXGSY6HxcEnh-42wyrTbHF4+IX9PRHf=H`d`T1kE;xCHIw1WT!ShRB}oA7$ly9cM7zdtbz-_*85HWlY5PEQWCdh z!WR!6pBzo~mUgTThz*_}ZFpvybsl6tn}A!{g)XWB4q<46^WskvM@d+Y(@gpc+;UgW zeHK3690!SP3!n>@&CF%haU97e7?I|7F9_GNUM7F?=>AHk7D9s|lW;6#SHF zl&aDWXFX0QVbSMK#!E|e=9t9i6;{d3kT~?9<%t{#f7)D;5OAdrUGUtEbEC??|W~=zZb-{aBi>aVW^#@uFt( zR~xp}uMs)=t(e1=;~OPZ_RrLEXI$ThH*Rz5TGvQ?=GWinO_ov}4E1#g9!XU4>aS26 ze|%$TrkWY27_ro%tkd-Ru|I?A)2cpJf9{sl7ERE+L)_Um5OFxSZ?I7$VzF-P;frTN z1>C`SIO~E}ZT@r3vQ5Eb>9osDoiD2V8C&9y&Yg?q^c-r_)q?zg=ODiPxq;0((CO)$^usrXzNmI2C(H$n@h4O&GJPx-yw^NRq5SZ2I3uIYtO$qtmI9v8K>k~UoPvp*qq_sncV^4TE|xnmnZ ziH_X+WeO>IW`ux$f_f*i2lpY-b^)_8zF7D!Hg$yPMn77H*}dhs1ck zJ@dq7E}zGY5cBuLkwoh)qNbN?W*ZxR`D%k4KU6FMc&^9$qcvu_T!t!g`{nztlK z5ATAD;4i5yzQ5rDwl6x{9^MKDl{bwj6#j+BY^lIsf(+JU7I@?2t3JskdKu#otHfIfv$2s=e2wq4EK zYx#C^grEY9FFBYF`k>rf?k%Gmx$$;XloqG|FkFSXV3FPDjq{A9IY)#cy}2C~KXYU- zoI9OmnP)XS*P_^TLd@}pceQ} z@Y@aG@V21)bqMIW(9;^$=UKiQ7r+x1R$g4SSGbIaYCh+Y2VA>x>$i?oez)7gW_)`x zN`ItdnWROAvp`%_be)vn&sl98s=apu#J?=?_U(DrMd-k+#%C4Yej}T<>L>5W=x9qv ztjvBSv!kLaSXBEgFkFbTQ`OAcmZJgO>GG!AvKd>Efms#UofxbQ%Yx`MJDFG1h`j0G zQfuJ(-|zl7drN2K$&f}Zl4OF3_BJUEzo=Dlm3d0^T`o0x15q!V(K>fzAtcpon)L~; zF=S<2Unlx>!k&gfKD#{HUU%S1ov`T-CoYp%)Y+xBh}uaS3c9Wx{kH|V<6vmU^mZOwq~V=*p+M24$K`tEu^$fo<5DPh@D%T0qJjDn%V zxTQ0qqR6#byn(3tXxKSq0>A8%W1OC{xKAZK7D=-hFpQX}DO{j-OaCiv|H-bQ$2T_F zjVgDA+`_hHXo1bK!8}vq?0Y)`b8$Y6+ZrApzj2@J6v1OfH(6rcRzL+DBi?}0i`R_C z_g!sKfRAj_S@|@CJjG}++~o5LF!UIEuS&dMKm3mUEGxXD$fU}JpB_jjFr^NjJ>~=9 zpGJ1Zar?)TxR2~Jb_YI-SaB`_70d1REFXwoCmr&Rp>xX9Wb0QhDjtVR#GR{)vyH1r3~+ z*?y;*3co2hjc9+WZBA6w&};c3htXopn(W5>**k|@pAG)0kb~jQTPR z{M(5c`6zhh3C~IfHV|wzG1S?}Y5;dcE1)JxO`Du!^i|37+*x)mA zX&KAJ;W*6$oc?6T0NaU&0n@#kX%4FDT4s72rsA*1qv z0Q;k#UapxXF~f=`i6b_{2zH5zg7tJ9()~Kw2H^Bim$^x-4FA(D%kXlMk^NFtmF0k(0I=G4!uViaK- zXx!5woEcJolj?w9=lCEw0`l4K_ne7Ra%rqjQ};!|?)L0(Q&WSOvn1f7+@;`n&6$dd znJPx6GdaAaO8`!#abHf_ce=MW#R`^ig4?xW+{WT2=~Uig(oEFOxF`q%sR zS?LE3B^40m3DNpdQ&On2iQ0!>Q3_!=R+yI;12(Cc5j1prtNK;fjWXItgGrjK zE^}W}+Ea9L-2mWRzqU5q=WAj{SbCPI#z8 z(1)8o0G=8l)XT9++?i^YfO|tkJL*H-Eq%QQY-Oj6NNLpw{z?#}5<7>owzJV80faHU zju$ZRAH+g@YxbS4Via!1xzQX0V-ZT_S7O>9Dz`p5EZcZzn>l4!{5<431i_$8=%?d1 zT4#OS(tJ)*u&-3>I~WcjyjcG?N=^0PIKR(H53oB5q1I>o$*o4O>gg?j6pZ;N-h8J@ z4{|9}4(&J9m)eZd6<$PJin4q-=v4y}eX>)CJH+aBK1(CXv{1TltGcZ1AZX1HNIGV^ zd{CPXv9aRgeZ%|LgI(f_T)`*Lb{HyJ4miiOg|kcBA-%~B0rVt;{QSy$zoi^uWj3vJQFLDW%x<>{h1U%QU8^S8jg5KP3 z62GeN??PRKKx|2@J>Xc?RZ|!h|0M$)M+4~S4%TyOIV6-;QO8zq zZ;(spobP^qPAPcqWA~-3SgYS>6>C2IBpLMny0GK&RbffBgPYXeU(4l^*~Fp-9DgBa z>yb-8pGi4F;8!gmaEqW)fqi*g5gcQSWa$FyT<~Bs7*o2L@5DIQywiMA6)SIc^xji6t*oSgX*VA;2=gD>WgcqCNZ2i4?M% z0ZHq*hP#Y95uH0xQACg?v_YA*py;M@aUr;NR!S_b`gBQ@zo=NR7~dP4OI{FW)3w8OCMDO z2-x{}3}xTLzBsPK+otp@zkRcsBX8Mn^DPPy)R$U2k}8KoK%JDonu%2p2Nj6o^SHDH z2Z|lt*#^JB9MnNMA@Whk5X0pOpvk*;Xjkz)D?UX2OU&RIX@V0MbPM;zQrGMhbMH{3gjdwpf#pzoJLda+gx4=Re29rB^@24YMMW8>YfvJbZ;8lA1J1ZI*T3`Roo9mvxlgzP)svvRmFXdq z1Rp3bH3ESD{_w>&QQ)xlos1RV%*Zb_P6Ne$Te1gq_x(gn7L2;2{GkGb%{xIXFTZ{D6NgI4{ntT z>{sFgO3|;^=gz{-w?J(Pbn1kF&y!g2fRN$!E@iEVw1a@G3UGTZxy&Hxa!zNVV>P76 zW9xNl@iyP(k{3D*X90lJBU?Zq0onJHThexu-jrNRo^!9lHiMKB*QhyU^T?#$GIB?& zN{93F1om`M6c8XPGS^8C5vk4i}K@ z-T<&;06|fETS3+rP@2)ikkN#qS2XCnEY1Zyp=}&?l8`eQU%fn;m&~ndjF)lVZ};LE zpA4XUV%cRiqlKulUur(ac_p)U3}NNbV#pdOIx4Qe-;HkTd#FqY$joY@gC61e2|nE2JS9WIW>kq#Mu z(p(GvzZ5x0RGY}9{rtlTRE0p^VzW#HBy0>E7U^qxwH285v&A08=y+`zdrzVzWF?%L zff%SmJqSUku~GcU-b(5>-|yK!zqDMD>QzPH&p%k^tFjjp--0bU12hIFDh76D4RQ;t zollSEMeyfw3>|sFpnxMtl#T$ki$Ne#)D)>^%h9q0)+KsP@Mc^VU~f1E%RyDhxGzY1 z{1by4LLg&+$N?%j=9AdH&5ZqUJkN(Hn;QgN&XViwu#7+r;wSq8wGO@XRh7l;)X3sfNr-c zV=Vds#?BHktlP6Ozg;LYq~vo z^J^XcZ2Yo<1*-7^&Q%`DFKtD}vU~Jxsu=iS>y29vZr`CTKF4X&;TJEI_FgW1dmb{f z_9ADp8dQl;xi}6=y5s+StsB!fTRD~2+4BiM{2LQ4qa0T3$Ns&d%|fHW!tI`ij} zMMY7@i131*o&~LuemarX59Mf`al!2rV;Y0k|s~sw+Ua&xFhz zKc61P?wN(8SYyWyOy#aSlIn-Rf39K@l!zBM?@6skSK&L>8jIZ3YLyxOK>~b$XAPJR zK6tG0`k5)z5=dC)#@fM?EJEmz3LFdzL|VOLhf0rY!q!8srzT3fx`(Y* z04H5Y!_HI|zgjC%5B?v@2ti=ja$Y2hA5MhM#yHWMc|7ck0L80qAgO#|}^(``+5@A8CCi8g4{d z-EQ>BfhzwP+tQ0C>h*C0a32Lj4AiQ#x;xskY;6Q0Q$R`Ya`on9KKQx3Ay6S7ABbJD z%qxn~nKqy(J|Aw1Z9(;wIZ4stH&Pw3T7`R~hoElnkGw^6Q-h#-XAsmJSxx)H^e3RM zVVMtB);zpPYvEmVU>fLdgv02j`Q7AAU^M$Z_D5$vgrHaqPF|L)+IuN$$RuLfJZt8P z^U(Em(tEXe6DEp*VG>>y=X_9o3=-vhodZo$Gq{C3NQ@ewC|cfMO>R3n{|1~VXmyGc zr^07A8qnl^&JtvK+#!I`g%dTxDCrmT$S-cZN-F^s`9VZ`@oaAPHsdzHC3?i&UNt-vW=0R?*ym&e}3$$U0b zRa#Ts9+P=)Rn7_^XB4T{I_iL2uVoKI)$TbIuoqjL`QNQsx9LuEf~@|nO;YC}0Nl=s z*Vce^DRs3e07@2vUNF{P`uI^D*?k~A*sW%9C9(g80U8UU^1kfvRwRUbWJS`RMpd*nKhd9Ie{p)hei!ARvcxLNs48sm>`;Dsdh zQ4}E+!zK(xMQ5S5Sf=al)_gQ zg8+K0{tT4+Q27@1a(=tIt}z_dCL!zA2OPgzi_Z{vM{w;?jT7}k9x8iSA^3>SP7QMV zEWlm3irPj=a)~-LS%xUq&aqLbAaKZ7i`A7IhlQ%Z5TrS=s2>KkT~uu-2HkA1h9clc zE(bto69j81QBlwkhl?f)4@|0N!23VpS6zWDPVw+mpgYmQJ5SvW)GI1})Lhc1UKG`E zA09mS6YmV_7(QP5y5Ie-UD=h#7r2nHWuiXW*;l_HaGM2Pk+-B>kJmTJM1-zDVjt%X zc@ctjDx9lGNuz9(%G1A8paNKvK)zcNz{hU^HmAXd*Mu9db~N7Pp@w(TvzqcRpW7k% zBEWv2=F@MZPV1jbW}S?U25B`d&JGW|>2PiLJ5(G59VK@|Gb9D;4xfA}a53B_UY~SG zNS=z49F+L-B8s34t^~-W8W)hd*A??8tS z71da%G3=@34lqvwf=I>MqR*N2fB3UEzcmGoBM1row@LrsnFFE!&S41sKRlcA*xy%C zNC=Qn+rxozUq5D-cAWuo4dRVbe>tY}=ir5qUA81Qx7>n_MT0$8eQ*88L7z(l{TqbN zHXQnTGkoB&dqv%U8~_4O^?d!oKiOTj{&%^vZ-ucc z9GI38x+VZz1dl@hH?9BkwysgGhxG_d6u2ej8R~>d`d7mztp=(yi4(;qvf`X8W*Q$^ znO&3#g75gf?ytY>pQB7K-&tJS^E`9iQ)68Dvq^d@Bj42D+hyGoEAb$^mMfj`<(30n z{ z?=0#}J+}Q~cRKFFvskHL?cCqHV=CP7KW6Xi91Kx)lu^%`^tI>+jxiqTO=74n*AO?l z7zsNmpG7BQrycm8C$eie=P``Jjh`jtl}{1x+pWu|9y+7ka1F(_#i+l&y{QkI z@~Pt0irC#omCjfLj0oqzhV0!~`?meeyxOzMD$l~NEn4V-Uq98gPs>5Tk9E&fxpf~2q}bDh$t*E;1G%U%(k-9-Ixz0R5G3~hZDmo(Phr_~V7gv)qg zG4r2?)grUM%)2RBXDXrjwg1AM%I4*Z>AhBAaa~usq86@o8Qjnw)8=r@Jg2f0_h56# zEH8q};z)Bdy>Zh|)09G^lJI^GXI~LRGkG_b>@)q|m6tBoS)_PjV8%WXvrgvc!V`LF zH6Cqd1s&K29VBzEE3Z!0t6*7@xY4QLgu)stVKeB~T#Nra6Ux6TuDP9<^x;|J+9%W< z%16-CKM$)jBUG+O)Avm9!^x=Y6R%QtUTjmOh-*qJ?-+U++nb1S&R95E5?IRYx6O^^ z*O@lcn-e7OFx`M7<%l@$GuZI3sC&I2pVy2v?MdicE><3-p z)5Ix?^gVh}*uvv;&Gd<#ZVxa7QtwW2vNIM_1RdwM{H4nT73i6|GMiJAIXiWh$FmYh zFb8mo%4JX6=lYMo`>{t8P_5bYt93GG*l`l7g%%7!Pum`Bb=ibtu9oJ7b0vXqu=Dp> z4_ed96)05}-P{__n_3ifn7O#3Edj~*I{^=7W-del*DbsO$bwnb?Xa(%HQe|ana z8iM>8rY76_V}urW#Y)|^b5}!l;IYlM$Cu=9Kzyq~G-8Km+c%j_!(kh-vm>)kK3(_p z&j*zNHH==!F-)5n?lilWy|@P7yGG=Jho~sj6uby!F!4pHsMvaYmPDzD$hJ5Xg`4+QVeeKh1hw30d0vpCa zbb9(Ac`%!X7M>BCN}(uwom0@8Ebn6!Rv+lm#B@C~o6fAAP9RMOXg!`(?mA@ig7xNf z^YSk~JM*;lU6cdvV)QyUnHwn~=X91e`k$qI_LAJY{TQjZ6!Bl}PGeS`&0xwAdE3FO z!*lOC|FqCm?~&ugEj9C8)uva9CdSlMxcJw$gNtWM_{nbrQEvUMH#<^k z$M*0>+C9PRm7i{Lim_u~5zOUOCt*sxc}1?w7Mide#qKw!>BLaRl4b%6+K*Wl)sUB^ zhN$Po`nGAQ+Uh_)XGoOLPNwe^%-PpI$}b-niNV|9Np1FRX%@K(TU8JB^jSa9}R3p_^4*Q|v8T_m9utbEdGjTK~gDe-@OsQ;R5enNP8RrybQRX}oEVB zQ@ZH~$$jZ6#v-STdh*SK_g+$(YIkLhAFneYUQZaa;5jHXK%vY!SIYN|(%a|X$*Hd% zZuN|uNVQ{zew)P4xh(R^xT`nj5(a-fcSB=rzPnVc=|tt#jlo93=APf&u#i73Y@>V% znMuRnh*GQndPwX*krvS!s~19MbDdM}PQ5KwpERl$m* zr{Vn&9W$o=fzFKmBJ1goSCpfp77kJXe2qGp#oQOq?loISpuT>OjMik2^6KFF-_5B< zX8$HvSiHu}{Ewr>g{f*0O}2<8jNZU|z#x7gm=4q0wv_ zgb1!rxi^=W(!3niGjBbvVMDx=Qu^4!zTAyf4XQRz**p_!^RrK5=fo*)p?(k z)p+K0Rd(cf&50b>Fq)pHMdbCu6Q&O^F=C3w>@v&<^Gd4jB<~c-n>g8>hs|ocCvIcs zZsU&ske&An^>7|JV8288@;TxPE?c~@*J5MvS3=h;ll{<~m5|W?9$|keJ@Y);aGI9U zo2Rvd&YcnkGc4Zms2+yb&G*VUWsH9{JQv6ePs8%Hn(8Wr-t@hlUl z;O&Z%Wo5DYZ*6~O1()|1{2T!Wb> z*mKeHqGfOqTT*VC3`Pp;uSlu&vj~ZrDDn;`PR@rfwKyN3 z%v21=xiX=8+nL*Ds12o8EO;ML{ax6irDm2TE)Zcw2I+fU^S*_>B6406W_9*`3*DL9 ztjyB84qD!@c%l+XDcc{}{iRTz+~--*W~DHCrfV1=8UrGVdr>r*t#|#6S`G{F5(z9Q zw8}EjWFkSutu@WnyEx_+coDJ`a+f^>nI*W#1ULSe# zJkhC7IZQ->a#51xTcXMee@fpVp4~APw)p7--fl81kFrosH==rMQ%RZJjqBP@G1zGH zm0gNua8$wd=R(gzJ|j~+cx1EP^V!1}tp_wi8v9*&{Nz0kFhk0kKKn z#DwkSKOZwPze&o5B`)WFWdwvW1`q_Nj860QS8gLUQhP>*jHGAycMIy8h zojn%Z`dgIf&ika{aI=hiKj(cPpx9>IeOcgnpR}s35cVkJ$}e2m&x+D{^e?OqKwf_> z^fQp5ohs+cYrU}&s)EpQ&|GUE5nG=C@detyCwpG|?u1+o_`XFBrIR@QtM{Cddtc9Jgle#=Vr24kb<{ zf&C`0>rQ$Q&-TOp6s#u=Xc84EjZJ0E^x?)@iv#@8G*{+sov;dvyd&eK!v#9>l-gxV z(VjmJxuD~0-)05nuUQDUvz=g*0N?xLEy?>+M!f#38}+rWWCb)YS7{07JRLa=`T42M zkKb&!5V~ah8Rs$?-Bqu8_GaFNOOwM{Ims9?=MejnKx+Nm!MASVIO&DpCaJ&&m}KYh z;F9ECd}PE)J=8J4_X^|kJoio`5KN#l#K@=F#-63e305uF=mur!+#)m2A)MD4cJ|tQ zr$f87E-%0w$zBQ{YUYqb1u`@8IWQYy!GQK9{8qj#z841Z?}L{Q4<(e1Egwda?ELSW-u}e$m|H{)A@F)V2J!}Kr;f;SOV$WqDDo3} zy!+~B0$Xj!^@D#NUI=E&VsDwGS+as}@tHmNUg$Xf6SrDRdu-G%lCxCQsUg$9Oat{=1KC6 z2=FF4`y3(*l^I9)2qkG~DA*-XG z7jkxYA>1=fSWkjcI%h%v3;?=1iN^X&6*nbeQ1jhrY`kV<8IqJ&nNS}n&i0LP05H^F54!E!sk_r-b~?twww$f(ISbCxhDG7R}*2_K(Tc7Q^iekA>CPq8%zYEjp7mIjF-`WBFDZPIpypsR54~c-&cayXNT|&T!b(taCY4#^a0yQ_0?BQ|RjH&PFxD*x> zrN)rJou<-yxxbnf)VKsm6Q|4_+(kIqy?xjlB=#AqIXB1pey=sDgFhjEHGb}<{L~}6 zP1y4Q$)A_pt6Igpf7cDsHGlFIqvWg|h2%J9jQK6`ompsLlgutg{E_x~qdy$PL2B2m z`Wf%OeYP?K7dl+%DNoAl!B@(+y0{QnOE?4xuQOC;Uyd~);B2x;0?EUxyL7o>_Z^&4 zwP};S-kCpZuNFEF{oZ}r*SuV+2m$8enG~=u`3Xw72Z0JY>&i@$NM;beC`i0a-KSMS z+?_Wsmra`9VJ`m`i^eQ`%36B-si79lUDz^-A8=Sgm`lvpp7X$aUonG>?#O*n9dM%c5GIM)?J+>&^9s&d#xi%Q+H; zL<1ayuERH_cxd{zxa7?gG{i~}4Rt<^@5FbQ%C4yOXn33t#_?z}duejP97BCsMz!Z4 z(W39_@TO+E0hbgH0Atesh?V)Y82ON054)m#?5M&$(tL88G>qQLXM9##{_dwYs9=}3 z@ReivSmW)(zhyP-jRCcP8hyw^_U2 zb-;|fC$ArSsDtlM6^|1aRpL~Vtx08S^RLa^>wmRvroL^`vdb+XasUGfQjYAhjevgy_tuFZHIhlK3ZMCB&`Vzr`rf>6|IEY0izNUDyaR^AWyx@m9pW zDbidKRGN|t)irwhVAkH1SN_d(d)z(||NN)ihCw+B46LP3X)TX0yfXms`>(=X3^Sy!AW4jj9d|@DY>EF&q-i54Z}63*cmW{gztrE#TPZZRq{Y)KiZOqqU8;U zXdLeTzjuHX}RhWVWYRN4pNfppaXPB*Y1nQ7yjDR zjx$D`gg)I0|zJH=J zSmH^Va_rI8Nn|IRkZJ*tw>g~x$Qc^mC?fSRUxe95w18wqGk-7JW8JgX#cic|GsHnn zp(9$KtAT*w@Vz<9%!gB2SI!2%9C_L7d!OWQDqX9_h}KLXNqO^Z32aJHxN;AOcq|E% zxYn@n65%)wO`4Z*U<+qIWs~~HyHM_WIT9_+xAnPZl`3q2_g!0)cDdllcIA=(fz0Wa zwv)V~BbS0;%Lm_kf)NXFI@CJ&n0Em^-GQH9qf9v3U3T9tl3fyV@Y4^EFXS$a>DF0% zv0dgfZ|KF9fmlPLidM*OY`MmB2brMxJWCyG3>2s9J7rfYEUH5cLb}I=Rr`O=MRU2$ zbf}WaGGMn;fdW%=cc;>o^NvoDlFG;B!p;tIAyopy~`HAnM# z``F@=%gFI(CIeSoC`~%^+=a(&tEFFisasj2S74nJWjS@C6C4*#LQ%oQl2gRvqfh;L zvBm~$uS%aKY`JX?Bp>aEN2xF3My)3NKZ)M>8S=TcPyRMX{TCg>YVHlH_$Yt1x#7|2 z664B*gS5#_|3s}uR<_NW)oT`B^1;}WvuSVRE(UCGpQirN6Jk&GG}BGOCe87^$Ja@L z0>T!aA(2ae_;3mi&Hu#YgRM5U&F{V$`A`f%342K|i+Tk%J7gKKg=3!8+A`-DI@{2^ zd|DPCnOf$tFi+A{=kX>h=^C-xs`44vbA;sM&f)*Qh5%t}b1@uN0t*f+5tBNtquqo3 zDU;eAHXyG~EObjqQ$@|K*Ia8wHBXK!bEPxfA~!bJ+oz-)O9oE`H9TrXRkqS7DHz|& zQ#3lork0F85nuxd0f1;_u`p?9&k82MpyfmuWa1N0^5)G#PXNV<$uawgtOb5)s=pk$ zEz9jq!E((<7w3Sp7cSy_h0a=jUIjk?S8D%rH-ZYZuU)-UrR^VJB&IBRzEWyePnKw3 znM<2ADfuP#p%&Sq5A)`!t9Pz_m~YJLob3;-F?%w*apE6BXHWcfE#u$y z#L8y_ZJ@%!qjTp#DpXO6ehbzV5x2?}4iCOs5(u5b4-vo=*;L0|$YRfMZgpcXNq zamP}{RMt^5!h+8eR6K^Boy2hf6Ro=Jf${nKCX+n0u6J{$QBWpW9G{5QsO@;(0qU$W zS(CTE&eU2YGVn{Gm$@yU)qS@)kzaYP%{7ewKnZV$tTp5z1|AB^#MQGbB-Db9hfN%A zOx#x1(>sHmBbXJmsNhW4?1|nd7VcI!SWawRoB=!Tp_Y!VjI!HtmWfSWaJjg-lRfRxZPv;9=4vnKQF8In(=5_C z_&AbcSwvuC+*s5n9*~wV)-OoU5Ny|K(d=cpDOXQV?=+b&rfC4a&;7jGhm|hjc&_Ng zx!gY=64w#}rV^#^rgSX90kR5Cwmw^yBz!@DM*iU*O|98bm^j3ia1P5(ndMHGh0$D@ z43YibH-%L_&M&(?5)XN#Yx)DEMh!6uBoLcs|LEO6s_&(V)9n*L~Mcd&3J)UoVQ(v(&(Ed!F{ z+oktOhntd}`|@v3(5y}u@F=}ww>ZfduK%KSNgxaZ;O(G*TvFujpSZkqQV)$rS}-`Q zJd6fMJJsLo_xo1r3c*DIP!s_XN`3~^gHtX!Eo=sT409uRcoqgt>!wCrCTg|rV&Hlp z)BPjCsnraIo;eIqw9#PfMgFwbV6edd-|_C0hn=G%)KQz4gU1pFV$ z#WNlD7&kT~)$T0sIoQLcKDE7#35IvJY|UQA>1v;$awcu~`$S+Hp$7|b-OaHxcMr># z(M2#X3FOpY>(V0oLkB;9K-GlW)b`LZS2+FdvO}Q_)H6}m{?~Z&Uq1Soe01ienG-_$ zP2C@26wKCGA+*ez-O#8UF65pnO)?->d1~XPq-viZ-8jDr`33BEQLbU5i+);o!rJ`s z#Wo28A~Qn3g|42eq6qWo^b6=40k1=>z0HPu%hOO6YguEma|hbOG%IL2H-T%bP4)g6 zic8zJYpnJjz{o9eS;bb3PY7$DBC-Ar%0DX-cozSzn>1j~th9dl<=ooM)=zjF7C#fqrn{-X*F`+(-{Zb;4RHbk8lPfB1&N0q)mYm0FYVS zns&sDe6to-qMGSYku0&${CHRQJ_$;o4oj6Mg$W^!5XsbRalLy;gWPxDOtig@?&{|C zre6J1VSiTmESPvb(aL2V;iLr^y;;jOid`4<8O#c(ACe#~_&4VoE3@hpM3p92OcF7j znn~;4p496HsD$s;fxY5|dH?@eNS$jN`=8Je@f@^x1o55#L_X%-=UDr2%1HQB!NSrb z(B~39M9$_A1E{_bs#NjC(5X!EItFta;2Vx4eO9jgQZA>s&cb?OJ4HpSY%j&^#z7dW z`}4X(&sPR^$xnQd2lo{#wd&8>bniI`*XuT*>W+L1n%Ycf-t4wCi z;`x$txK&NR>BRg9mc6qaCA?ErYh}L2J1se11i%c1(G5*oydAkSz=R#JI!Xp}StX;9 zS_v#J{gg|mlVhhJX;d}=?nYa3|VGxsYTue#aRRH2kYfZ%e*8W zZ7}5lztX$X=T>f;X-n-?Vs{Z5uax_|*#FodR_b~0gBup+P=2!YtpkS-IbQ-vSN6d= ze=G5YN8*#VpwI?pH>~A_9jD(BtxIaXICBRn#+xH!3(2OeHR@cyg7CBMF3KZUy6j+l zT-LXyi%%kvRM6!)H`|Fv!d?t1r+6pS~=0Mj$C)kL4!7dyZt z-8bOA%z4U=EPC3JF-x2xX58C0CJj?`jejd)h77ZO-B;C)evI)KTT7B&c@n6y9ACdjM z(}%YLS>R{9_rH9C|D{L#-?JtEmC1i)@^>R!|D4DFub%u@PyTKlWvyjqn?sj!xtzDRC1mmId1J zhPC#-enUu}u30*vMQ23Dg9zi6Sq$0GTa;seju&0hV3GyltDEF#GgD8GNhhJj%XWf! zjtz|LXB8F}KC=EAB5htAFo2-N(rt$?*2ApEFpSax84CRWQ8cP{5{Q*jgKr))|E{7= z?()QQ9x!Iy(G}4;0^8KR{VnK1D2NAj7>K_-R-jfPT2+Su)5?2Z+NvQRDJ-#NaG6>@ z1pA_%Gb8YGFEI>Qc8rG|P=pw5qVxYg}i|9 zAx;pq-iUVNftjulBy&Xcx@LZ625hARXMi`EmlC`izWJD*9*|b-+%eQFi@Q9UC}ea3 zuHqS@szj^mFd7u*tB8NxD+b{D(2pfzLQmQ?+7)AJJS zet6k zB?HUws#SqZ>2;DB^B`dP!phMUBnb4atDE%^D@_q-2*pF21{<{BA=a%s z;>vO=-Dhuf!?z5>4*bQ5YHP-r%j{4CA~|Yu29__hlj=9quf7SmwiZWK$+nXb&=wqe z=n_Y$K;$XvFzjC1PxFC2`^FYUvLqrA1p$&47SYmbTLj;?1}Hz!POuGdBf%;#JIXtZ zVc%Zt(lnA$jjxz(lo$q5Q(eUJG&>Zdc))ky5^Tt$-S&38Ve&W(=^@s|VqgVS?Xg3= zH;6N_ANXYu6KOrv35QXk;c7&Zx=y*FuQ1-KQags2mXpLhqg!~J=roL}JgNGWyib`D z$cMJvZReFCF`tIb*7dNsO@Gf)fQ{Nh_^nlHTVT;aEC;(HoXL!H=Z;8bTD00=5m^ecliYCjR$zGl9+EQ0Qu(McV5TEt7}|lunvuu6y=x_{=-B+{-y(>z;q5D-d;3g{C!t)1m4b{b(F(8$cWh4Hog2jGB zpcf4`cI17cay$}dckoy`Voy-zn5EPMubeYFR6K`(Hua(Glc(LbvNRt9gmT(T8BFM~ zw=7VXmli?$Vh{yo4;eUdegF;v$7}&Q(yKZGXqWwV)wu;oSZonHA8-NtL;$_)q>Ny( zNLnl82gFyiJVs5^hPr|n>PAIpRxui3#LNuQQ*kwb0oMT?5q`{`KBh<;Q)y5>qDXtU zGDcu&nlqG(sU8jmv~fFbs-1b*7|e?H0*L@@jFU|nnm|Hqh`XKC%Fz}CV|Zats7xQ- zaK*xrw(!K|q!l~ZOO6Jzk|T>OY8Bs(*4b55PG$HRt{mMzoxtDk*o?@b&Xaj;`HQV- zwk)NWuj>?aU&?)`|K21&NNnU{sweenn-=W#FZPdVud+0v$}G}0#1pYHmrT9`qSii8 zHJ-WZPo8@GegTdhElZ=F^%U&B9w3Ut&VsMe(gym*#YWXyQQ5RBKh?miK0poFXsAf~ z0SIv}qJ{6mNe8q?vq}(#h-`prKmr&su*egmdD0+gHXZlLq=!=qphjvQ6OmI*~ZRN}IqT zyLQ3f1!}IVEBZhiJdFG+oQn<{mgra6sKAA_lqD_Ak2L{(G9sw;`TfUR^-SRUSOh8x z%VM3ev4CI)-T5oRypL_?3($F&>Je%6c11o!r!0vOBX3M4c^>h(oCgmgsE;ru9)-E^ zI3W7f)@Bh*8W8Ct;(`To6%AqS!RR3@PJnf0FgFmx<0Y;-5AQ1D#^v>Gb>C4|Y{hMilmmxEK9+0HKRCU0d|>2HM~=}J zF$u%Y8jw3b^7k~FuqH19KTgBT>uXZspdEoH1(+T6Vd?)63s`+OBR1l8VCTr4xfBkR zJuyIgfq3fnIl&t{hJi%dX_V~23tfO7El@rJZ?|){HV_|Vf@z(AB6d>c&a2IiKOq`# z*+Skhq9{0z2rEIhr0BqrH$e4+h&~9~p1m*51D&MYDxD%Q$|>t`q8G>lE*Y){cwP5J z4<(QXAy}=lrGn+4r5%PH00QS4Ac18GNGL3D4&*xE`V8PKuKs^#@xN@(7ZJX|Ed%9X zN53KAHZzR>Prp{ksxo8Xcyg6c-UPBwVC*TpFiEVX+tHjEAt}o&YDl`5JMI?Va^7vi z0Ll<~D!S&^qoN)jaW``S2GUindE@4 zgjnka_c{yACrU`eyWy^e-|33P$`@AbK=j2SPy()1hbH(c&($yx_qe6`b(~)1cm`H4 z2_P1EzdrbFrQc-NK3gVGFG6b#$Xo_wGlsKMy;hle5E0_XVZ(4Ih!GzTv4HYtSM7W{ zvtFA!^*yM0#LD}1I*6*#A~XZhgrNZq1PX@U-w=rd*Vm*3#L-bvY7k&oZ7C{>8OFq} z5_W)PemA%>s>+D>9>=aA=2=2chB#t1fp|h*tjFn_+gz1xK{0l}IkUggca`E27^a#a z*3R7?tNer2R&D8Hf(ux_ycQkUY%cJtsclV&OB&cD6sNN)foQD>c+@0e_33uR%CHQs zqSa&$xV{=uh+7064{N*m4q*Sqt!xBx5Ou^+349(_FEGUOe6?9Pj0UmVPd69ginhX0 z@DIfs0n-uS#UeFuWrlS*i1i0iM0qX2hQ)LGIpMuk6RFill~Q*pUwtb6Min4CRm$j-9D}2#A2&G6bfW!z?0Rrw(B< zb7S@0$fu~y{k{{yJ;tFX+|}3nkj?;kICxll0dFa2up^Y2>f{^7^!OtV6wngw1XIZ+ zL9;^@K=XMX@fiy86-^n8w?2*z^i`$I#fM2JJ!7|Zyqs)KI&^F!unHn=y1;)g_?TeQ z7^_O(YV926p9Ta-h^GU2ePD6kiT*ACVy9j= zB8x33iU(d};IIA;Q4OsCF70A<}3c@GXj+t0)g>cEm)EemaI&qF5}X zF7SB^nH>iZIbUrs0W0dv?WH9xRVtd`+w@W907QgJuNh?d0X z^}d|?d-~Gb1|j4QA*2=+ubrhY6Xtgm8ZwA|T;XsK2KbLwdC<|3r%)^5XPfqmB~2@_dLdPgN5JvXPB6^D9;Wj1;*yF#0TDaEWf@8 z+;1rI1CQ^?FwbVUMM$&m7#^tHg$Tg}-Qcq}lYtFo2ox(WDhlX3cRGbHjV${bWgJ!C zu>_0{Eg`z7A;iLq{-DDUsHMDJxtAlj(y*cDO__`22=M{n;5-i)-M1U9uZ0B-?Rg<~r zff2m{@4 z6+}Q$q=+D(AZi2^5eDfa7J8)D0HThdBPyXuuY&X*I(pFoMS2SaA_yXc7DbxDz_(w$ zKisvxzu>NQ`N6etCE?Bcp68si_j8`Tp_F4h-SQ5q>&DYNo;+Mp2As&^d~t_c1tA1X zeTc8EiA#f^EJGsR3g``*^iV$aJ5LN~bi1Il^BX!GvG7gU9e?gDv?e+Jg@nb&5DHqB z|AU0D?CW+D|yejdMQyIwW|pgI#g)l5T`}f{1W%i{gfoM7tl4#$s1Xw z__eE>kiSRs-zb@-{i9~J3Y`kBS{9l@KJm7tVHqRQW$(+g%ImtkgL6xsWdP}@DagCA zT0UYq84);Jat;4B{cq3U_!i>4Jz+uuZ-gNv%Wvvacn%1e!sR8os|{fzYI$t#$=~PL zzUTE9mNYb1vSaAE&>e5Dunf=-d!sCsYMxA=SYu6a$^jMMvCCuZBDKY!NU!oO5B zTi>g<=68o_$H1=sIl6@?QOH8iDoc_P&KwR=h6xEgfFY}>WuWJJLhv3{-^({=&pjgI zEt?eR_o3jOynMFxyU-JX{J()S!kPsF)q7oPh-^#53+xD1trgx#2=+r^NrjA)8)Ni5 z3xmANwYT}^Jns4S*Ox|G+Y&01d6W@pS)3X7gpRN!1e$Wk%b+{e_lYPO#AJ0NPm(zM zO)2K;I1B<|e8Z~9AH*Z%a4^%kRmeX7*w>GN>i3DpfzYuH3R-Ns?)NhxSPNCTeMS7O z#KjO+AcRB~CPS(@mD%3}^iUjqEiS($^r;=A78XMZL?Y|?aWHd9nk(1waA~Ela$)dk zgWQARXJ>x6WFs?pTf6MX^&X+lA+pDw=>FMlU0zIE-SDLSbl`)O3+W=U=0BEnbf1`d zbzjrO>V1NS)n11#zCG(4M8yBRxvC&TBk0c2H97%~d>Wgby*O)KXh!a#%%a0FFPj$R zLe-U)rhVQPE!DJmwY=zEC@wDEBQE~crlt37f4^|S_H=bsG$_V2`>2S$M#&&nCJ-X6 zxKkz&-Bj-&65_m!jHL6*#bB$Tu7ciL5pk)x=L!_KK}B*u0d4T zxWqOba^RT}5x6e9Km3d6(0IS9}Uv>m*2ai;)HQh+vjmsMTI zbekT_YT~?9P{oG4ErNoCes>3I?}fO-E+>Q(?OPAkeB#eBt5i(2Cz0-c^?Qc)nC-3J z95*v{`BW9h>ZB#Bl$Vz`cR_P~^_{H@**wdqhI6iUXLMYT3k~1A$-))$6S}U+UEH(dJP^1QZ zECwoPx`k#H?roR>PKPSok7hbbY>NuljCkL9qwvVcKvP``(D;VlQG`q)YM}ne$jEuo z`i5}nIdsf_`tDOvQ5pBH$gHU`hj1TmsnM%*p}W3xm)1N%&wCu1b{$33FxRvVj7&Dx zml2MvN4id>cPl6;Y?HTsgu@VfSq!bXC{hKjxkOAv)mvXnON#@mkU3z-ag>dpD*kXi zF2|Z|@Tj7EnR%+dn#E{gr&PDP@7lNTOi4+Jt%HMsv$J!nU9qi-Vib%0#VMnh)+Iz^z$3Ua9xNUtUKy@f&b4D<8nLm-i# zm6o=A@Cu2i%#fzuR;y&rnN){SsmWNLwvZh6#;~wF(DozoAB4du5#B)Zj)O<( zOBp#i;jRujS5FclQ#D>1vQhJHQix}l;4m|tS$F(ov23%$eRq?ZO4rfH7KK+xuV}1} z^sLm>;}~YyhQ_YZO>R1m^xld6p=x7Z`Dw!se(fbCUrdaRX9-7^`yn0JYqLg7bQg8X0m>mR#Tap`W*{jW?x;*=y(%6&1C!uf4rJ zEH+k{MmY%?!Nid_k#=x}Az;C}pMENV+d&td zzLuFZk{#d;z?B#nYStn-IHtwjJ@zhd`lOHE6GBkcd5>oWCwQ;Q?wxh`W;zP}`W$jLA= z*eNa{VTTkGFvYCCQ)$Rm+-zyR$I|*h9>=n3sW|3wPkhYQ(cLHN^=ee`>;&lSIECm+ zj;?JTSK+SmG&5dsNWt)~+q49CC2|9iW*#R_je8x~)>bU>wqD3CcAB4?B<*6u|fX9tS+aV`HoyS7eyL2fD-LlxT0a5u&SQceq=hG!G zq>VvvcrssRw9>61GCZ7xr62c}HF4zVtMcJ2uG(ep17-!~i*sv>`Ys#wkZGM`#{!Ue z30o8v!7gE4w$M_H?hT_3b=kqqWj=keS#h*^$H{E&E(r;VkE#)okrRNtfd>yBO!j^j z#Vd0swz4kv_)QllpX$206F82!e|%-qS>{2XdRVTC{Gmg3uc_k7{>xRrXJ1U(XF?kT zB=3M}hp0Xo2m$LC9CpBj?~&!jVOuh}8;Y}6uU@(GBdtEm-~DBlUtixQ&84&Jr!v$; zWOkp}ELm3`+-7!{HMVtFO}4(;aFlod2dRQau5feVF^o$mpke8Jr&gu>_EfUXIS=9M zN^yU)-nNTY#cQuV^#`-++L0UN!4F9p*Q-9A7`${AvhUYg?eK3JfQ8+)`IW#l8H<`D z_Nu@afuuq>H}!=}8#Xp(=j1e*d%oihy@HI{-P*cw5Bta#sa?BvjRoB9>grPT<+z4k zA=JWO&U?)Li(=mCv-t6nkb-R(zDZBKs!v4~8=Z@>w|9kzlH-n#i6s+2Gd&cw1TK`n zX)to(t^VD}$Oc-q{N6iSlePZRq55(sEJ{Nq&aI)*>GVFL={+ifr+$z`15x+Lw~ix% z-Il(tPZl+l!yj7M3&2Ga6O%;$>&yy;r=|$yCUBGQxpBelnHgtPf+$j9YO0tI zsK8t13l;t+ybnYga%sC>>RMWR)VJn#|7_D(cK7bJ>C3TwTc>E0s=w_TJ?2|G9esPe z9B?544rmZ|3MdEvI;>VuSKaqn!*En8WawTWw7dX7pOFfYY~0IMa^u%BkH{-T6M2?d z$9mf-Y8j>NaXT>Whr7YIRUX~w7wd0otbyG7n)vkz;o(;SrAitbbwaP4Q|A^(X`L+t zoiqRu%XWoI2C^z>K^sN%h0m?t`cXY+$Ic6(RFewB!nV9=YAS);IIkKT zHV83My&x<^Psx869W}u%ho*Z&qvgs2rn!7w2NJ0c^$SJqO-oBD5c%3=Gd;b{`tz_u zDyXg1@PXp6=C~06-=J@^Ra9)OJvBQq@p*Ji%<8Mm`G?Wb+d{8!Ider-RaHmzPEecT zROs7;gl;vo#2ji7>qS8A+rPhMx6b2@i}6${brSr<-Nka`h8VFJu!67bK!oyl`h!6+ zGB-Ehp?0beO6WT*x#o-tw=7a2lH;NLDeP1zlKYjk&z&p1cW<4X+!DAgJGF!sVvp{T za&0ghB*dDzQ8b@@1nX5M`~nKStC!qlzJl@pt;Zb-=!r9APL9#&rx9-i(o-SxzjaG} z8BLF!gnnk$DV54H9KLw|MSskGa9d@##%lIunTL;g(AC_bdDF>j)1we(FY4^nM@BE` z?(W{8K76tH7P*g|rus?Eyws`U(0t&8n_}ejKlnU$6ofdg-TbKUwvUTTkt(bmjtTNm zCqYf{eP#Qn-mZ-51rfa3BVENG$-fY-aA265%pM@xs}SQ~r!y$lOUTd$g>DOUdDqiB z5UpUBocYF~TE%_xfLsyyW;bIQtiaS|T#Yt~#8*j>a17k!GgQ!aNiP)Rm7HoLWXxp0nRa&iuMT;1*MoA)fh^yh%1EK5gGq<~Ui%}OpP zC}@K*;w2$Kc5e^QBRxI6#HyCjqMJ8==qs@^)KAd166AwZ zMg(CzaEyC`icX@N@V7{;`T6?E2f_ujv#v1*F5NV%@{}Dbf%tIL0K4?-S4t%c*x-W~ z^B(Pom4ya+dwb_$<KT6%H znCc+c-S2xmrbrYL@|${-syd2?SpRPeswooR62)GZUrI+U54otX@oUWLkL4b$c5x=cl*6Fcq@nMYA74PP%fiOm z@0Ty9IJ>yq>Tb5Pu{jS61L`Xo7{SfB1@WqHVv^O^*tp@%GN{*9NI)0kAb3-}stLM8 zWv8LrcLYRpCnqPL_L-vLZ)j*Z`vzWnI)oogr`rh=Hk^*aqM|a8GR|=d_%r+a`_J~Z_4GW=%#=cLu!Ri$v57N*E}w?9 z;3O!G9vvT^f;Fnq&`GCfWoDiZ4h}x8t$o4I&#!f&jZ!ahE?)o4nc$h38D-Paf^-TT z1u`=;^=xf3iRC>nXKiiW3hRnQJUU>HKXXRW=x`tk=QcNP5DdGv$%^OXrNERYPqdJs zQT>TtcyN`Ah>fkSo`FGlu6cE4Y;5cX(e~~Tu)h{FOWbJK5(dtRs<`X$^YiD{XBeW1 zG{Aks)|@S>%FaAdpb&&u2QuLt*w4)DY#qRrog=xT10)g&7vF)AgUYH8-tyQ8Sgjy0 z@4CnVNfd^xRj3;6Crw&fU`Ix2l_*NehHc&UQ=X-Dv9EH3?6BhQieM-5<>J1XPn+{( z{W-HX1_lN;p#B2fVpJwxG~0do@+H8<3Ske|5?_Ak>%U(WeSayQ9yhGkT^<_aBs@{B z6kVQ>Qdp>m=Na(X?4;%4w-*_r4nB;(>OUzb2X|DLs}~E}$oN+C3n>!4IUU2|?Gtq> zH*yhPVu=@jo@TN*w|y*TM%7o0v?KPm4XiACFu~}mGKF`%lUG!fl9tw%Hq7lLHrnFJ z8;+b<&&%0fr+VYKX06C6dr4I$56{>JadB}-fcX7V&<_=SU!;AhTnEX0`?{b?U(35| zqr|l|;#}Y+w&U^HproS%?J;##FUz2^ny_E2f7L7>#2>n0HucX46HFWQ_ssxF+Q6{R zX+WUW@C(gdJI3%nr`e+>1uVEnSxpL^5C$)dxTXZk_koWImg<%T zU!EJ0|MAvGp5C8Jl)r!f9nS{#lPa7?P79Q#UIy6d#9n2kgFl-4HhAPzIQa8CIz_y- z_VL;qi_W=SadsX&cg1Hz26@yLkZayAEV+TkizgEU6c~{n#qJ8?=``t`+Ql84h!m}F zZXU138QTT*{*3e(%$eXv3?S&6S&uDCh9}`10N0NSR?WgC#l_a}!&7B$`Sz+EHuwct zwhPtSyF!v@=r-DgL^8JC2y}tQ*4EZ`ob}<`Yg^M56cq`)fBNj%Zk&Ye?r2)IQG)p3 z@Q{!st-pTFNKV$6pyx@jz6oX@6|k|l?}VK}67n_r#EZZE_M0kGjK^t6PHuvAf+y%9 zjiy+Qy*EaUZzWO-;UQ&*9v&B-|f>3Qnu)2BN-JH--O();^O`M1fR@_S~XmXMboL(J{)9IZVdhXpf+ zjRUN5YLujcf&rXk+OeofwAFkll&vS_<>jqGc6g&Taee=46TBd-Y^|-wSl7N^iX$i% zKvH?HnJZ`u41wkG3{;tWd6+kDf0yvZ-`PHRh%oy2_T%}V|G(qkBH|bUT8qp6_e%y> pZT_ySi{JnE^8ekL|B@hBUdxv7-+kA#I*^EClGfSdxf*}m{6A%hB9Z_A literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/vorticity/cfd-reverse-s5p2.pdf b/src/steady_pinball_theory/figures/plates/vorticity/cfd-reverse-s5p2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a52acd55f566e0b049493835925422b93f58459a GIT binary patch literal 25159 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 literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/vorticity/cfd-stationary.pdf b/src/steady_pinball_theory/figures/plates/vorticity/cfd-stationary.pdf new file mode 100644 index 0000000000000000000000000000000000000000..34a24f3d16f8af4e469f4b0ee262568a3511c47a GIT binary patch literal 28538 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 QSUA#5$-rQny|vOm0JrFY&;S4c literal 0 HcmV?d00001 diff --git a/src/steady_pinball_theory/figures/plates/vorticity/cfd-stationary.png b/src/steady_pinball_theory/figures/plates/vorticity/cfd-stationary.png new file mode 100644 index 0000000000000000000000000000000000000000..cdadcbb9f16a75e3a2350c1e172f21c18d4c1811 GIT binary patch literal 35876 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