import sys, math, time, json sys.path.insert(0, '.') import engine as E from engine import A, iv t0 = math.log(1e9); TEND = float(sys.argv[2]) if len(sys.argv)>2 else 300.0 tstart = float(sys.argv[1]) if len(sys.argv)>1 else t0 def dT(t): return min(0.05, 4e-4*math.exp((t - t0)/6)*(t0/t)**2*1.0) KB = E.KAPPA - E.BETA; KP = E.KAPPA + E.BETA out = open(f'cover_{tstart:.3f}_{TEND:.0f}.jsonl', 'w') ta = tstart; n = 0; st = time.time() gmin, gmax = 1e9, -1e9 while ta < TEND: tb = min(TEND, ta + dT(ta)) o = E.cell(ta, tb) T = iv(A(ta), A(tb)) tot = o['TOTAL'] c3 = A(3)/2*(1 - E.C3)*T*(-T/6).exp() Llo = KB + c3 + tot/T # t*(c/e^g - (2-2sqrt2+W)) lower Lhi = KP + c3 + tot/T cup = 2 - 2*E.SQ2 + E.BETA + Lhi/T rec = dict(ta=ta, tb=tb, Elo=float(tot.lower()), Ehi=float(tot.upper()), Llo=float(Llo.lower()), Lhi=float(Lhi.upper()), cup=float(cup.upper()), app=float((Llo/T).lower())) out.write(json.dumps(rec) + "\n"); n += 1 gmin = min(gmin, rec['Elo']); gmax = max(gmax, rec['Ehi']) if n % 2000 == 0: print(n, ta, gmin, gmax, time.time() - st, flush=True); out.flush() ta = tb print("done", n, gmin, gmax, time.time() - st)