"""Bounded fixed-parameter linear comparison; no nonlinear flow or GPU run.""" import json from pathlib import Path import numpy as np from scipy.linalg import eigvals cx=np.array([0,1,-1,0,0,1,-1,1,-1]);cy=np.array([0,0,0,1,-1,1,-1,-1,1]);w=np.array([4/9]+[1/9]*4+[1/36]*4) U=.0028664576821029186;omega=1/.524;cu=cx*U base=w*(1+3*cu+4.5*cu**2-1.5*U**2) E=w[:,None]*((1+3*cu+4.5*cu**2-1.5*U*U)[:,None]+(3*cx+9*cu*cx-3*U)[:,None]*(cx-U)[None,:]+(3*cy+9*cu*cy)[:,None]*cy[None,:]) C=(1-omega)*np.eye(9)+omega*E r=np.array([1,0,2,1,1,0,2,0,2])/(1-U);I=np.eye(9) B=I.copy();B[1]=I[2]+2/3*U*r;B[5]=I[6]+.5*(I[4]-I[3])+U/6*r;B[7]=I[8]+.5*(I[3]-I[4])+U/6*r T=np.array([[0,0,2,0,0,0,2,0,2],[0,0,0,1,1,0,2,0,2],[0,0,0,0,0,0,2,0,-2]]) R=w[:,None]*np.array([4.5*(cx*cx-1/3),4.5*(cy*cy-1/3),9*cx*cy]).T Bfull=base[:,None]*r+R@T@(I-base[:,None]*r) assert np.max(abs(Bfull[:,[1,5,7]]))<1e-15 assert np.max(abs(np.array([np.ones(9),cx,cy])@Bfull-np.array([r,U*r,np.zeros(9)])))<1e-14 def radius(n,k,b): A=np.zeros((9*n,9*n),complex) for x in range(n): local=C@b if x==0 else C for q in range(9): donor=x-int(cx[q]) if 0<=donor