# Searching for genuinely different periodic patterns

This is the initial assessment, recorded before the diversity batches at commit `f5a02359c7c53a5b4927f33fad37e0634f4ce295`. The search implementations and delivered results have since expanded; see [the current diversity report](../DIVERSITY.md) and [the implemented visibility criterion](../visible-time-symmetry.mjs).

The current atlas does not establish that 12–20 visibly different patterns exist at any one fixed physical parameter set. A defensible next search should target different spatial organizations, then report the number that actually passes the existing gates. Different phase origins, reflected counterparts, lattice shifts, and repeated copies of a smaller tile must not inflate that number.

This note accompanies [the local prototype](diversity_strategy.py) and its [recorded results](diversity_strategy_results.json). Nothing from the prototype is an admitted orbit. Its two nonlinear trials both failed to converge; the linear calculations describe seed opportunities, not an existence theorem.

## Why the existing search produces similar pictures

The 442 reproduction and GPU continuation scripts impose additional instantaneous mirrors. The 632 search previously restricted reciprocal seeds to `(m,0)` and `(m,m)`, sometimes enforcing translations of a smaller cell. Those reductions are valuable for reproducing known branches but exclude most mixed or localized states by construction.

A single rotational reciprocal star typically generates a proper sublattice of the full reciprocal lattice. Its index is the greatest common divisor of the determinants of all pairs of its wavevectors. An index greater than one means the pattern has a smaller spatial translation cell. For a square star generated by `(a,b)`, the index is `a²+b²`; for a hexagonal star it is `a²+ab+b²`. Moving to a higher star can therefore produce a resized or reoriented repeating pattern without producing a new shape.

Keep only the instantaneous spatial kernel required by the selected time character. Release optional mirrors and subcell translations. Preserve the spatial rotation center and the complete canonical time character in the shooting residual.

## Linear bandwidth at common parameters

For the nonzero uniform equilibrium, let

```
u* = (1 − sqrt(1 − 4(F+k)²/F))/2
v* = F(1−u*)/(F+k).
```

For a Laplacian eigenvalue `−μ`, the reaction–diffusion Jacobian has trace

```
k − v*² − (Du+Dv) μ.
```

At `F=.004`, `k=.02`, `Du=.16`, `Dv=.08`, the oscillatory unstable band ends near `μ=.00444717`. On a continuum cell of length 256 this corresponds to `a²+b² < 7.3825` for 442 and `a²+ab+b² < 5.5369` for 632. There are only a few simple seed families in that range.

The prototype also enumerates the exact finite-grid dispersion, merging reflection-related rotational stars into a single geometric type. Counts below include unstable oscillatory stars only, at the stated grid; discretization slightly increases some counts near the cutoff.

| F | L | N | 442 geometric star types | 632 geometric star types |
|---|---:|---:|---:|---:|
| .00400 | 256 | 48 | 4 | 3 |
| .00395 | 256 | 48 | 7 | 4 |
| .00380 | 256 | 48 | 12 | 7 |
| .00400 | 512 | 96 | 16 | 10 |
| .00395 | 512 | 96 | 22 | 14 |
| .00400 | 768 | 126 | 33 | 21 |

These are not counts of nonlinear solutions, nor an upper bound on disconnected nonlinear branches. They explain why a fixed larger cell offers more opportunities than repeatedly restarting the first mode. A useful common target is `F=.00404` or `.004`, `k=.02`, `L=512` (or 768 when more separation is needed), with the same diffusivities. Keep this full physical tuple fixed when presenting multiple patterns. Changing L is a different parameter set.

For `L=512`, grids 48→96 preserve the established coarse/fine physical spacing. For `L=768`, grid 24 is only a discovery screen; refine to 96→126 or 144 before making spatial-accuracy claims. The present 632 gate caps N at 126, so extending to 144 requires an explicit implementation change. A small shooting error on a coarse grid does not remedy spatial error.

## Highest-value seeds: degenerate mixed stars

Mixing stars with different linear frequencies starts from a detuned oscillation that Newton often collapses to one surviving mode. A better first choice is a pair of **different rotational stars with the same exact lattice eigenvalue**. Reflection supplies such a pair without changing the prescribed temporal charge of the projected seed.

- **442:** `(2,1)` and `(1,2)`, Q=5, already lie in the useful band near F=.004 at L=256. The union of these two stars has reciprocal index 1.
- **632:** `(2,1)` and `(1,2)`, Q=7, become available near F=.00395 at L=256 or at larger L. Their union also has index 1.
- At L=512, the 632 Q=13 pair `(3,1)/(1,3)` and Q=19 pair `(3,2)/(2,3)` add two more promising families with full-cell translation structure. Q=21 has an additional index-3 translation and should be labelled accordingly.

For order n, charge c, and reciprocal vector k, construct

```
ψk(ξ) = (1/n) Σj exp(2πicj/n) exp(2πi k·R^j ξ)
ψ(ξ) = ψk(ξ) + a exp(iφ) ψmirror(k)(ξ).
```

Then `ψ(Rξ)=exp(−2πic/n)ψ(ξ)`. Multiplying by a temporal factor `exp(2πit/T)` gives the requested time-offset relation. The script tests six `(a,φ)` combinations, checks the exact character to roundoff, and checks every discrete translation to confirm that only the full cell remains. All six tests passed.

Use amplitude ratios `a=.5,1,2` and relative phases `φ=0,π/2`, but regard these as guesses for different nonlinear branches. Many ratios can converge to the same root. Near onset, solve for F with an amplitude condition, continue the amplitude through `.003,.006,.012,.018`, then continue each surviving branch to a common fixed F. This is more reliable than beginning every large mixed seed directly at the final F.

The bounded local prototype tried two unreduced q=1 mixed Q=7 seeds at `F=.00395, k=.02, L=256, N=12`, amplitude .045. They retained spatial structure but stalled after about 1,760 residual evaluations: shooting RMS `6.29e−4` and `2.38e−4`. Neither is a solution. This independently reproduces the observed difficulty with q=1 and motivates a stronger corrector.

## Fix the q=1 corrector before scaling the search

The q=1 character has no instantaneous rotational reduction: there are `2N²` state variables. q=2 and q=3 have smaller required kernels and therefore fewer unknowns. The current 632 Fourier preconditioner is used only when F is fixed; free-F amplitude-constrained Krylov searches run without it. This makes a large batch of q=1 amplitude searches a weak use of compute.

Extend the existing Fourier-block inverse to the two bordered unknowns `(log T, F)`. Let A approximate the state Jacobian of the twisted return, B contain the two parameter columns, and C contain the phase and amplitude rows. Apply a two-by-two Schur complement:

```
y = A⁻¹ rstate
W = A⁻¹ B
δp = (D − C W)⁻¹ (rborder − C y)
δstate = y − W δp.
```

The log-period column is the final RHS multiplied by the shooting duration. Obtain the F column by a centered finite difference or an inhomogeneous tangent solve; include the existing .004 scaling of the free-F coordinate. Near the degenerate Hopf point, regularize tiny Fourier-block singular values in the **preconditioner**, without changing the nonlinear residual or acceptance criteria.

For larger grids, integrate Jacobian-vector products alongside RK4 rather than building a complete finite-difference dense Jacobian. The tangent reaction terms are

```
δu̇ = Du Δδu − (v²+F)δu − 2uv δv
δv̇ = Dv Δδv + v²δu + (2uv−F−k)δv.
```

That supports Newton–Krylov and leading Floquet multipliers while reusing the same stencil and actual nonlinear trajectory. The existing full-state trajectory must remain unprojected.

## Deflation and secondary branches

After one root is found, restart with a deflated shooting residual rather than hoping a different random seed avoids its basin. Use a shifted factor such as `(1+d⁻²)` for each known orbit, where d compares **phase-aligned** trajectories, not just the stored initial frame. A state-space phase condition removes the continuous time origin; additionally check discrete rotations/translations when declaring novelty. Deflation preserves the unknown roots but does not guarantee that all roots will be found. [Farrell, Birkisson and Funke](https://arxiv.org/abs/1410.5620) provide the underlying PDE method.

Fourier magnitudes or a time-averaged local oscillation-energy profile are useful cheap deflation descriptors, but two different phase organizations can share them. Use such descriptors for candidate screening, then compare aligned full trajectories before deciding that two roots are duplicates. Periodic-orbit deflation has produced diverse localized multibreather patterns in another nonlinear lattice, which supports trying the method here but is not evidence that Gray–Scott has the same branches. [Martin-Vergara et al.](https://arxiv.org/abs/2305.17571)

Continue each accepted branch in F or L while estimating the largest multipliers of the **twisted return map** on the full required kernel. A nontrivial +1 multiplier is a branch-switching opportunity; perturb in that eigenvector and recorrect. Exclude the neutral time-phase multiplier. In particular, test eigenvectors that break the known solution's optional small-cell translations or mirrors. These are direct routes from a repeated simple wave to a full-cell pattern.

A doubled orbit must still pass the original canonical phase action. A period doubling of a twisted map can change the character; simply multiplying a movie's period is not a valid way to manufacture another solution. The existing primitive-period and independent phase gates must stay enabled.

## Localized shapes: a separate, slower branch of the search

At a fixed larger cell, use one, two, or three Gaussian packets at generic positions, then form their space–time character orbit with distinct phases. Vary packet radius, separation, angular position, and relative amplitude. Start from nonnegative concentrations, and use these only as shooting or multiple-shooting guesses. A superposition of independently moving spots is not an exact solution because the chemistry is nonlinear and diffusive interactions never vanish exactly.

For morphology close to the user's U-skates, the published Gray–Scott localized-pattern region is a stronger starting point than the tiny-feed homogeneous Hopf branch. Munafo reports coexisting stationary, moving and rotating structures near `F=.06, k=.0609`, with diffusivity ratio 2. Those values and units need to be transferred consistently; the paper uses much smaller dimensional diffusion coefficients. Its translating U structures do not themselves satisfy a sixfold or fourfold time symmetry. Coordinated rotating or oscillatory clusters would still need to be found and independently audited. [Munafo, *Stable localized moving patterns*](https://arxiv.org/abs/1501.01990)

Oscillatory instabilities of Gray–Scott spot configurations are also supported by asymptotic/numerical analysis. That makes continuation from a localized steady state through a Hopf point a reasonable route to new patterned loops, with the selected cyclic character imposed at the branch switch. [Chen and Ward](https://arxiv.org/abs/1009.2805)

## Budgeted parallel execution

Read-only checks found Modal SDK **1.5.5** at `/tmp/scott-gray-modal/.venv/bin/modal`, authenticated successfully. All five prior task apps were stopped with zero tasks. The checked-in ledger reported **$0.24425508** for prior work; this study launched no cloud jobs.

The CPU wrapper [p6/modal_diversity.py](p6/modal_diversity.py) supports at most 64 jobs, eight containers, two physical CPU cores, 4 GiB requested/8 GiB hard-limit memory, a 180-second subprocess deadline, 240-second function/startup deadlines, zero retries and zero warm/buffer containers. It returns compact, explicitly labelled initial-state seeds. Run its dry review using plain Python so no Modal app or image build starts; `modal run ... --launch` is the separate execution step.

Using the current official rates of `$0.0000131/core/second` and `$0.00000222/GiB/second`, assigning every job the maximum startup, runtime and scale-down interval gives **$1.3786** of function resource exposure for 64 jobs. A $15 allocation leaves room for image-build overhead within the user's cumulative $100 limit. It is not a provider invoice. [Modal pricing](https://modal.com/pricing)

A100s are appropriate after measuring a GPU-native corrector. The existing square-grid benchmark showed a strong gain for large batched Jacobian evaluations, but a SciPy/C++ process running alone on an A100 still computes on the CPU. Use the CPU wrapper for that code. For a GPU implementation, batch independent tangent directions or independent seeds, keep FP64, and add the triangular stencil before reusing 632 jobs. Send compact initial states and reconstruct/audit movies locally. Do not launch extra GPUs merely to improve wall time until a small CPU/GPU pilot measures cost per distinct accepted orbit.

## Acceptance and diversity contract

1. Keep the current numerical gates: exact source group, both concentrations, true unprojected evolution beyond T, half actual timestep, PDE residual, positive motion/spatial floors, and resolved primitive period.
2. Compare every accepted candidate against existing ones after cyclic phase alignment and allowed Euclidean/lattice transformations. Never count a time origin, reflection counterpart, or tiling factor as a different morphology.
3. Record reciprocal support/translation index, spatial peak arrangement, and local oscillation-energy map alongside the full-trajectory distance. Require a visibly and quantitatively different shape before adding another thumbnail at the same tuple.
4. Aim for 12–20, but publish the verified distinct count even if it is smaller. A failed bounded search leaves existence unresolved.
