RadCluster
Graph-based cluster dynamics for irradiated materials
Loading...
Searching...
No Matches
Functions | Variables
compare_linsol Namespace Reference

Functions

RadClusterSimulation build_sim (str equations)
 
dict make_solver_config (str linsol, preconditioner)
 
 _last (arr)
 
 run_one (tag, equations, linsol, preconditioner)
 
 fmt_t (x)
 
 fmt_w (x)
 
 fmt_pct (x)
 
 fmt_n (x)
 
 find (tag)
 
 ratio (a, b)
 
 fastest (group)
 

Variables

 encoding
 
 errors
 
 MODULE_ROOT = Path(__file__).resolve().parent.parent.parent
 
 REPO_ROOT = MODULE_ROOT.parent
 
 HERE = Path(__file__).resolve().parent
 
str build_dir = MODULE_ROOT / 'build'
 
str exe_name = 'win32' else 'solver'
 
list exe_paths
 
 flush
 
 exist_ok
 
str cmake_src = MODULE_ROOT / 'cpp_utils'
 
 res = subprocess.run(cmd, capture_output=True, text=True)
 
float TIMEOUT_S = 3000.0
 
 I = int(1e4)
 
 i_mobile
 
 v_mobile
 
tuple T_SPAN = (1e-6, 1e4)
 
int N_POINTS = 200
 
int RTOL = 1e-6
 
int ATOL = 1e-20
 
int C_FLOOR = 1e-25
 
dict PHYSICS_OVERRIDES
 
 BIN_MOMENT_GRID
 
list CASES
 
list records = [run_one(*c) for c in CASES]
 
str out_json = HERE / 'compare_linsol_results.json'
 
 f
 
 indent
 
 default
 
 D_WB
 
 D_JC
 
 D_KLU
 
 B_WB
 
 B_JC
 
 B_KLU
 
 ref_d = fastest([D_WB, D_JC, D_KLU])
 
 ref_b = fastest([B_WB, B_JC, B_KLU])
 
list lines = []
 
str rel = ratio(r['wall_s'], ref_d['wall_s']) if (ref_d and r['wall_s']) else '—'
 
 spd = ratio(ref_d['wall_s'], ref_b['wall_s'])
 
str report_path = HERE / 'compare_linsol_report.md'
 

Detailed Description

compare_linsol.py — Linear-solver / preconditioner comparison.

Six configurations are timed back-to-back, all with identical physics
overrides (taken verbatim from the current cell of
RadCluster_2_1.ipynb). Each run is capped at TIMEOUT_S wall-clock
seconds; if the cap is hit, the C++ solver finalises the current
output step gracefully and the partial trajectory is kept.

Group 1  EQUATIONS='discrete'    (full per-size, I_bin=V_bin=0)
   D-WB   gmres + Woodbury
   D-JC   gmres + Jacobi
   D-KLU  klu (sparse direct, full_CD only)

Group 2  EQUATIONS='bin_moment'  (i_discrete=v_discrete=50, I_bin=V_bin=20)
   B-WB   gmres + Woodbury
   B-JC   gmres + Jacobi
   B-KLU  klu                       <-- C++ rejects: full_CD only

After the 6 runs the script writes
    compare_linsol_results.json
    compare_linsol_report.md
in the same directory.

Function Documentation

◆ _last()

compare_linsol._last (   arr)
protected

Definition at line 198 of file compare_linsol.py.

◆ build_sim()

RadClusterSimulation compare_linsol.build_sim ( str  equations)
Construct a fresh RadClusterSimulation with the right equation form.

Definition at line 132 of file compare_linsol.py.

◆ fastest()

compare_linsol.fastest (   group)

Definition at line 302 of file compare_linsol.py.

◆ find()

compare_linsol.find (   tag)

Definition at line 289 of file compare_linsol.py.

◆ fmt_n()

compare_linsol.fmt_n (   x)

Definition at line 287 of file compare_linsol.py.

◆ fmt_pct()

compare_linsol.fmt_pct (   x)

Definition at line 286 of file compare_linsol.py.

◆ fmt_t()

compare_linsol.fmt_t (   x)

Definition at line 284 of file compare_linsol.py.

◆ fmt_w()

compare_linsol.fmt_w (   x)

Definition at line 285 of file compare_linsol.py.

◆ make_solver_config()

dict compare_linsol.make_solver_config ( str  linsol,
  preconditioner 
)

Definition at line 179 of file compare_linsol.py.

◆ ratio()

compare_linsol.ratio (   a,
  b 
)

Definition at line 294 of file compare_linsol.py.

◆ run_one()

compare_linsol.run_one (   tag,
  equations,
  linsol,
  preconditioner 
)

Definition at line 205 of file compare_linsol.py.

Variable Documentation

◆ ATOL

int compare_linsol.ATOL = 1e-20

Definition at line 94 of file compare_linsol.py.

◆ B_JC

compare_linsol.B_JC

Definition at line 299 of file compare_linsol.py.

◆ B_KLU

compare_linsol.B_KLU

Definition at line 299 of file compare_linsol.py.

◆ B_WB

compare_linsol.B_WB

Definition at line 299 of file compare_linsol.py.

◆ BIN_MOMENT_GRID

compare_linsol.BIN_MOMENT_GRID
Initial value:
1= dict(i_discrete=50, v_discrete=50,
2 I_bin=20, V_bin=20,
3 shape_function='linear')

Definition at line 113 of file compare_linsol.py.

◆ build_dir

str compare_linsol.build_dir = MODULE_ROOT / 'build'

Definition at line 50 of file compare_linsol.py.

◆ C_FLOOR

int compare_linsol.C_FLOOR = 1e-25

Definition at line 95 of file compare_linsol.py.

◆ CASES

list compare_linsol.CASES
Initial value:
1= [
2 # tag, equations, linsol, preconditioner
3 ('D-WB', 'discrete', 'gmres', 'Woodbury'),
4 ('D-JC', 'discrete', 'gmres', 'Jacobi' ),
5 ('D-KLU', 'discrete', 'klu', None ),
6 ('B-WB', 'bin_moment', 'gmres', 'Woodbury'),
7 ('B-JC', 'bin_moment', 'gmres', 'Jacobi' ),
8 ('B-KLU', 'bin_moment', 'klu', None ), # expected: rejected by C++
9]

Definition at line 118 of file compare_linsol.py.

◆ cmake_src

str compare_linsol.cmake_src = MODULE_ROOT / 'cpp_utils'

Definition at line 58 of file compare_linsol.py.

◆ D_JC

compare_linsol.D_JC

Definition at line 298 of file compare_linsol.py.

◆ D_KLU

compare_linsol.D_KLU

Definition at line 298 of file compare_linsol.py.

◆ D_WB

compare_linsol.D_WB

Definition at line 298 of file compare_linsol.py.

◆ default

compare_linsol.default

Definition at line 277 of file compare_linsol.py.

◆ encoding

compare_linsol.encoding

Definition at line 36 of file compare_linsol.py.

◆ errors

compare_linsol.errors

Definition at line 36 of file compare_linsol.py.

◆ exe_name

str compare_linsol.exe_name = 'win32' else 'solver'

Definition at line 51 of file compare_linsol.py.

◆ exe_paths

list compare_linsol.exe_paths
Initial value:
1= [build_dir / 'Release' / exe_name,
2 build_dir / 'Debug' / exe_name,
3 build_dir / exe_name]

Definition at line 52 of file compare_linsol.py.

◆ exist_ok

compare_linsol.exist_ok

Definition at line 57 of file compare_linsol.py.

◆ f

compare_linsol.f

Definition at line 277 of file compare_linsol.py.

◆ flush

compare_linsol.flush

Definition at line 56 of file compare_linsol.py.

◆ HERE

compare_linsol.HERE = Path(__file__).resolve().parent

Definition at line 44 of file compare_linsol.py.

◆ I

compare_linsol.I = int(1e4)

Definition at line 87 of file compare_linsol.py.

◆ i_mobile

compare_linsol.i_mobile

Definition at line 88 of file compare_linsol.py.

◆ indent

compare_linsol.indent

Definition at line 277 of file compare_linsol.py.

◆ lines

list compare_linsol.lines = []

Definition at line 309 of file compare_linsol.py.

◆ MODULE_ROOT

compare_linsol.MODULE_ROOT = Path(__file__).resolve().parent.parent.parent

Definition at line 42 of file compare_linsol.py.

◆ N_POINTS

int compare_linsol.N_POINTS = 200

Definition at line 92 of file compare_linsol.py.

◆ out_json

str compare_linsol.out_json = HERE / 'compare_linsol_results.json'

Definition at line 267 of file compare_linsol.py.

◆ PHYSICS_OVERRIDES

dict compare_linsol.PHYSICS_OVERRIDES
Initial value:
1= {
2 'T': 673,
3 'eta': 0.3,
4 'f_cl_i': 0.5,
5 'f_cl_v': 0.15,
6 'E_m_1D': 0.4,
7 'L_hat': 5,
8 'c_C': 1e-3,
9 'E_b_C_SIA': 0.65,
10 'rho_d': 1e14,
11 'Z_i': 1.08,
12 'Z_ii': 1.01,
13}

Definition at line 98 of file compare_linsol.py.

◆ records

list compare_linsol.records = [run_one(*c) for c in CASES]

Definition at line 264 of file compare_linsol.py.

◆ ref_b

compare_linsol.ref_b = fastest([B_WB, B_JC, B_KLU])

Definition at line 307 of file compare_linsol.py.

◆ ref_d

compare_linsol.ref_d = fastest([D_WB, D_JC, D_KLU])

Definition at line 306 of file compare_linsol.py.

◆ rel

str compare_linsol.rel = ratio(r['wall_s'], ref_d['wall_s']) if (ref_d and r['wall_s']) else '—'

Definition at line 355 of file compare_linsol.py.

◆ REPO_ROOT

compare_linsol.REPO_ROOT = MODULE_ROOT.parent

Definition at line 43 of file compare_linsol.py.

◆ report_path

str compare_linsol.report_path = HERE / 'compare_linsol_report.md'

Definition at line 420 of file compare_linsol.py.

◆ res

compare_linsol.res = subprocess.run(cmd, capture_output=True, text=True)

Definition at line 62 of file compare_linsol.py.

◆ RTOL

int compare_linsol.RTOL = 1e-6

Definition at line 93 of file compare_linsol.py.

◆ spd

compare_linsol.spd = ratio(ref_d['wall_s'], ref_b['wall_s'])

Definition at line 391 of file compare_linsol.py.

◆ T_SPAN

tuple compare_linsol.T_SPAN = (1e-6, 1e4)

Definition at line 91 of file compare_linsol.py.

◆ TIMEOUT_S

float compare_linsol.TIMEOUT_S = 3000.0

Definition at line 84 of file compare_linsol.py.

◆ v_mobile

compare_linsol.v_mobile

Definition at line 88 of file compare_linsol.py.