# ОПТИМИЗИРОВАННЫЙ GPU-решатель (без SDF): цилиндр, три версии (без AMR / 2× / вложенный 2×+4×). # То же, что amr_cylinder_gpu.py, но: GPU-only ядро _opt (фикс силового зонда + ускорение), # прогресс-бар на каждый прогон, гифки для ВСЕХ трёх режимов (none/amr2x/nested). # Запуск: python amr_cylinder_gpu_opt.py # AMR_FP64=1 ... (двойная точность) # AMR_STEPS=2000 ... (короткий прогон) # AMR_CUDAGRAPH=0 ... (выключить CUDA Graphs; по умолчанию ВКЛ, с рантайм-самопроверкой) import os, time, numpy as np import amr_gpu_core_opt as core HERE = os.path.dirname(os.path.abspath(__file__)) ANIM = os.path.join(HERE, "anim"); os.makedirs(ANIM, exist_ok=True) FIGS = os.path.join(HERE, "figures"); os.makedirs(FIGS, exist_ok=True) print(f"[ОПТ · без SDF] backend={core.BACKEND}; домен {core.Nx}x{core.Ny}; steps={core.STEPS}; " f"graphs={'on' if os.environ.get('AMR_CUDAGRAPH','1') != '0' else 'off'}; " f"L1(2×) {core.P1['Nfx']}x{core.P1['Nfy']}; L2(4×) {core.P2['Nfx']}x{core.P2['Nfy']}") t0 = time.perf_counter() R0 = core.run("none", False, core.make_progress("none")); print(" none :", round(time.perf_counter()-t0, 1), "s") R1 = core.run("amr2x", False, core.make_progress("amr2x")); print(" amr2x :", round(time.perf_counter()-t0, 1), "s") R2 = core.run("nested", False, core.make_progress("nested")); print(" nested :", round(time.perf_counter()-t0, 1), "s") core.save_gif(R0, "none_cyl.gif", ANIM, " (без SDF)") core.save_gif(R1, "amr2x_cyl.gif", ANIM, " (без SDF)") core.save_gif(R2, "amr_nested_cyl.gif", ANIM, " (без SDF)") AS = [core.analyze(R0), core.analyze(R1), core.analyze(R2)] core.print_table(AS, "БЕЗ SDF — сравнение на реально собранных данных (установившийся режим)") np.savez(os.path.join(HERE, "_amr_probe_data.npz"), St=np.array([a["St"] for a in AS]), Cd=np.array([a["Cd"] for a in AS]), Clrms=np.array([a["Clrms"] for a in AS]), uyrms=np.array([a["uyrms"] for a in AS]), Cl0=AS[0]["Cl_s"], Cl1=AS[1]["Cl_s"], Cl2=AS[2]["Cl_s"], uy0=AS[0]["uy"], uy1=AS[1]["uy"], uy2=AS[2]["uy"]) core.probe_figure(AS, R2, os.path.join(FIGS, "11e_amr_probe_comparison.png"), "AMR на цилиндре (без SDF): сравнение трёх версий на данных зондов") print("DONE (без SDF)")