Niederer benchmark#
In this example we will use the same setup as in the Niederer benchmark [LGA+15].
from pathlib import Path
import json
import time
import logging
import os
import dolfinx
import scifem
import numpy as np
import numpy.typing as npt
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
if os.environ.get("NO_PYVISTA", "0") == "1":
pyvista = None
logger.warning("Turn off pyvista")
else:
try:
import pyvista # type: ignore[no-redef]
except ImportError:
pyvista = None # type: ignore[no-redef]
logger.warning("pyvista not installed, skipping visualization")
import gotranx
import matplotlib.pyplot as plt
import beat
def setup_initial_conditions() -> npt.NDArray:
ic = {
"V": -85.23, # mV
"Xr1": 0.00621,
"Xr2": 0.4712,
"Xs": 0.0095,
"m": 0.00172,
"h": 0.7444,
"j": 0.7045,
"d": 3.373e-05,
"f": 0.7888,
"f2": 0.9755,
"fCass": 0.9953,
"s": 0.999998,
"r": 2.42e-08,
"Ca_i": 0.000126, # millimolar
"R_prime": 0.9073,
"Ca_SR": 3.64, # millimolar
"Ca_ss": 0.00036, # millimolar
"Na_i": 8.604, # millimolar
"K_i": 136.89, # millimolar
}
values = model.init_state_values(**ic)
return values
dx = 0.5
dt = 0.05
# Increase T to 100 to reproduce Niederer benchmark
T = 20.0
here = Path.cwd()
model_path = Path("tentusscher_panfilov_2006_epi_cell.py")
if not model_path.is_file():
here = Path.cwd()
ode = gotranx.load_ode(
here
/ ".."
/ "odes"
/ "tentusscher_panfilov_2006"
/ "tentusscher_panfilov_2006_epi_cell.ode",
)
code = gotranx.cli.gotran2py.get_code(
ode,
scheme=[gotranx.schemes.Scheme.generalized_rush_larsen],
)
model_path.write_text(code)
import tentusscher_panfilov_2006_epi_cell as model
fun = model.generalized_rush_larsen
init_states = setup_initial_conditions()
parameters = model.init_parameter_values(stim_amplitude=0.0)
mesh_unit = "mm"
Lx = 20.0 * beat.units.ureg("mm").to(mesh_unit).magnitude
Ly = 7 * beat.units.ureg("mm").to(mesh_unit).magnitude
Lz = 3 * beat.units.ureg("mm").to(mesh_unit).magnitude
dx_mm = dx * beat.units.ureg("mm").to(mesh_unit).magnitude
geo = beat.geometry.get_3D_slab_geometry(
comm=comm,
Lx=Lx,
Ly=Ly,
Lz=Lz,
dx=dx_mm,
)
ode_space = dolfinx.fem.functionspace(geo.mesh, ("Lagrange", 1))
if pyvista is not None:
plotter = pyvista.Plotter()
grid = pyvista.UnstructuredGrid(*dolfinx.plot.vtk_mesh(geo.mesh))
plotter.add_mesh(grid, show_edges=True)
plotter.show_grid()
plotter.add_axes(line_width=5)
plotter.show_axes()
plotter.view_xy()
if not pyvista.OFF_SCREEN:
plotter.show()
else:
figure = plotter.screenshot("niederer_mesh.png")
2026-06-10 11:40:54 [info ] Load ode /__w/fenicsx-beat/fenicsx-beat/demos/../odes/tentusscher_panfilov_2006/tentusscher_panfilov_2006_epi_cell.ode
2026-06-10 11:40:54 [info ] Num states 19
2026-06-10 11:40:54 [info ] Num parameters 53
2026-06-10 11:40:55.471 ( 2.909s) [ 7FE3F57D6140]vtkXOpenGLRenderWindow.:1458 WARN| bad X server connection. DISPLAY=
INFO:trame_server.utils.namespace:Translator(prefix=None)
INFO:wslink.backends.aiohttp:awaiting runner setup
INFO:wslink.backends.aiohttp:awaiting site startup
INFO:wslink.backends.aiohttp:Print WSLINK_READY_MSG
INFO:wslink.backends.aiohttp:Schedule auto shutdown with timout 0
INFO:wslink.backends.aiohttp:awaiting running future
# Surface to volume ratio
conductivities = beat.conductivities.default_conductivities("Niederer")
# # Membrane capacitance
C_m = 1.0 * beat.units.ureg("uF/cm**2")
time_constant = dolfinx.fem.Constant(geo.mesh, 0.0)
L = 1.5 * beat.units.ureg("mm").to(mesh_unit).magnitude
S1_marker = 1
L = 1.5
tol = 1.0e-10
def S1_subdomain(x):
return np.logical_and(
np.logical_and(x[0] <= L + tol, x[1] <= L + tol),
x[2] <= L + tol,
)
cells = dolfinx.mesh.locate_entities(geo.mesh, geo.mesh.topology.dim, S1_subdomain)
S1_markers = dolfinx.mesh.meshtags(
geo.mesh,
geo.mesh.topology.dim,
cells,
np.full(len(cells), S1_marker, dtype=np.int32),
)
I_s = beat.stimulation.define_stimulus(
mesh=geo.mesh,
chi=conductivities["chi"],
time=time_constant,
subdomain_data=S1_markers,
marker=S1_marker,
mesh_unit=mesh_unit,
amplitude=50_000.0,
)
assert geo.f0 is not None
M = beat.conductivities.define_conductivity_tensor(
f0=geo.f0,
**conductivities,
)
params = {
"petsc_options": {
"ksp_type": "cg",
"pc_type": "hypre",
"pc_hypre_type": "boomeramg",
},
}
save_freq = int(1.0 / dt)
# Create a monitor to log the solver time and performance metrics every `save_freq` time steps
monitor = beat.PerformanceMonitor(log_frequency=save_freq)
pde = beat.MonodomainModel(
time=time_constant,
mesh=geo.mesh,
M=M,
I_s=I_s,
params=params,
C_m=C_m.to(f"uF/{mesh_unit}**2").magnitude,
dx=I_s.dZ,
monitor=monitor,
)
ode = beat.odesolver.DolfinODESolver(
v_ode=dolfinx.fem.Function(ode_space),
v_pde=pde.state,
fun=fun,
init_states=init_states,
parameters=parameters,
num_states=len(init_states),
v_index=model.state_index("V"),
monitor=monitor,
)
INFO:beat.conductivities:Get harmonic mean conductivity: g_il=<Quantity(0.17, 'siemens / meter')> g_it=<Quantity(0.019, 'siemens / meter')> g_el=<Quantity(0.62, 'siemens / meter')> g_et=<Quantity(0.24, 'siemens / meter')> chi=<Quantity(1400.0, '1 / centimeter')>
INFO:beat.conductivities:Harmonic mean conductivities sigma_l=<Quantity(0.133417722, 'siemens / meter')> sigma_t=<Quantity(0.0176061776, 'siemens / meter')>
INFO:beat.conductivities:Scaled harmonic mean conductivities s_l=0.0009529837251356239 s_t=0.00012575841147269718
INFO:beat.conductivities:Define conductivity tensor s_l=0.0009529837251356239 s_t=0.00012575841147269718 dim=3
solver = beat.MonodomainSplittingSolver(pde=pde, ode=ode, monitor=monitor)
output_dir = Path("results-niederer-benchmark")
output_dir.mkdir(exist_ok=True)
filename = output_dir / f"results-{dt}-{dx}.xdmf"
filename.unlink(missing_ok=True)
filename.with_suffix(".h5").unlink(missing_ok=True)
vtx = dolfinx.io.VTXWriter(
comm,
"niederer_benchmark.bp",
[solver.pde.state],
engine="BP4",
)
points = {
"P1": (0, 0, 0),
"P2": (0.0, Ly, 0.0),
"P3": (Lx, 0.0, 0.0),
"P4": (Lx, Ly, 0.0),
"P5": (0.0, 0.0, Lz),
"P6": (0.0, Ly, Lz),
"P7": (Lx, 0.0, Lz),
"P8": (Lx, Ly, Lz),
"P9": (Lx / 2, Ly / 2, Lz / 2),
}
activation_times = {p: -1.0 for p in points}
save_freq = int(1.0 / dt)
i = 0
if pyvista is not None:
plotter_voltage = pyvista.Plotter()
viridis = plt.get_cmap("viridis")
grid.point_data["V"] = solver.pde.state.x.array
grid.set_active_scalars("V")
renderer = plotter_voltage.add_mesh(
grid,
show_edges=True,
lighting=False,
cmap=viridis,
clim=[-90.0, 40.0],
)
gif_file = Path("niederer_benchmark.gif")
gif_file.unlink(missing_ok=True)
plotter_voltage.open_gif(gif_file.as_posix())
T = 20
# T = 100 # Change to 100 to reproduce Niederer benchmark
t = 0.0
times: list[float] = []
while t < T + 1e-12 and any(at < 0.0 for at in activation_times.values()):
v = solver.pde.state.x.array
if i % save_freq == 0:
logger.info(f"Solve for {t=:.2f}, {v.max() =}, {v.min() =}")
if len(times) > 0:
logger.info(f"Average solver time per time step: {np.mean(times):.5f} s")
logger.info(activation_times)
vtx.write(t)
if pyvista is not None:
grid.point_data["V"] = solver.pde.state.x.array
plotter_voltage.write_frame()
t0 = time.perf_counter()
solver.step((t, t + dt))
times.append(time.perf_counter() - t0)
for p in points:
value = scifem.evaluate_function(solver.pde.state, [points[p]]).squeeze()
if value > 0.0 and activation_times[p] < 0.0:
activation_times[p] = t
i += 1
t += dt
if pyvista is not None:
plotter_voltage.close()
monitor.display_summary()
monitor.save_summary(output_dir / "performance_summary.json")
INFO:__main__:Solve for t=0.00, v.max() =np.float64(-85.23), v.min() =np.float64(-85.23)
INFO:__main__:{'P1': -1.0, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': -1.0, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=20, t=(0.45000, 0.50000), ksp_iterations=5, ksp_residual_norm=6.221912e-03, ksp_converged_reason=2, ode_function_call=0.031838s, ode_state_update=0.000280s, ode_total_step=0.032229s, ode_step=0.032279s, ode_to_dolfin=0.000149s, ode_to_pde=0.000126s, pde_assign_previous_before=0.000078s, pde_set_time=0.000083s, pde_update_matrices=0.009958s, pde_update_rhs=0.019531s, pde_linear_solve=0.009207s, pde_scatter_forward=0.000020s, pde_total_step=0.039080s, pde_step=0.039127s, pde_to_ode=0.000178s, ode_from_dolfin=0.000064s, pde_assign_previous_after=0.000080s, total_step=0.072661s
INFO:beat.telemetry:PDE step timing step=40, t=(0.95000, 1.00000), ksp_iterations=5, ksp_residual_norm=6.202217e-03, ksp_converged_reason=2, ode_function_call=0.063646s, ode_state_update=0.000581s, ode_total_step=0.064448s, ode_step=0.064566s, ode_to_dolfin=0.000281s, ode_to_pde=0.000245s, pde_assign_previous_before=0.000157s, pde_set_time=0.000169s, pde_update_matrices=0.009958s, pde_update_rhs=0.038701s, pde_linear_solve=0.017561s, pde_scatter_forward=0.000039s, pde_total_step=0.066975s, pde_step=0.067068s, pde_to_ode=0.000358s, ode_from_dolfin=0.000121s, pde_assign_previous_after=0.000165s, total_step=0.134108s
INFO:__main__:Solve for t=1.00, v.max() =np.float64(-27.367299529535245), v.min() =np.float64(-88.12556417635007)
INFO:__main__:Average solver time per time step: 0.00681 s
INFO:__main__:{'P1': -1.0, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': -1.0, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=60, t=(1.45000, 1.50000), ksp_iterations=5, ksp_residual_norm=6.206490e-03, ksp_converged_reason=2, ode_function_call=0.095512s, ode_state_update=0.000911s, ode_total_step=0.096763s, ode_step=0.096927s, ode_to_dolfin=0.000417s, ode_to_pde=0.000365s, pde_assign_previous_before=0.000229s, pde_set_time=0.000244s, pde_update_matrices=0.009958s, pde_update_rhs=0.057837s, pde_linear_solve=0.025762s, pde_scatter_forward=0.000056s, pde_total_step=0.094659s, pde_step=0.094793s, pde_to_ode=0.000536s, ode_from_dolfin=0.000177s, pde_assign_previous_after=0.000242s, total_step=0.195356s
INFO:beat.telemetry:PDE step timing step=80, t=(1.95000, 2.00000), ksp_iterations=5, ksp_residual_norm=6.215415e-03, ksp_converged_reason=2, ode_function_call=0.127142s, ode_state_update=0.001207s, ode_total_step=0.128793s, ode_step=0.129023s, ode_to_dolfin=0.000561s, ode_to_pde=0.000485s, pde_assign_previous_before=0.000303s, pde_set_time=0.000320s, pde_update_matrices=0.009958s, pde_update_rhs=0.077035s, pde_linear_solve=0.034009s, pde_scatter_forward=0.000072s, pde_total_step=0.122447s, pde_step=0.122623s, pde_to_ode=0.000699s, ode_from_dolfin=0.000235s, pde_assign_previous_after=0.000318s, total_step=0.256457s
INFO:__main__:Solve for t=2.00, v.max() =np.float64(61.82255037565199), v.min() =np.float64(-88.88024699043358)
INFO:__main__:Average solver time per time step: 0.00651 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': -1.0, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=100, t=(2.45000, 2.50000), ksp_iterations=5, ksp_residual_norm=6.200855e-03, ksp_converged_reason=2, ode_function_call=0.158942s, ode_state_update=0.001491s, ode_total_step=0.160981s, ode_step=0.161255s, ode_to_dolfin=0.000698s, ode_to_pde=0.000605s, pde_assign_previous_before=0.000378s, pde_set_time=0.000402s, pde_update_matrices=0.009958s, pde_update_rhs=0.096263s, pde_linear_solve=0.042306s, pde_scatter_forward=0.000089s, pde_total_step=0.150310s, pde_step=0.150529s, pde_to_ode=0.000870s, ode_from_dolfin=0.000293s, pde_assign_previous_after=0.000400s, total_step=0.317782s
INFO:beat.telemetry:PDE step timing step=120, t=(2.95000, 3.00000), ksp_iterations=5, ksp_residual_norm=6.200800e-03, ksp_converged_reason=2, ode_function_call=0.190481s, ode_state_update=0.001784s, ode_total_step=0.192915s, ode_step=0.193234s, ode_to_dolfin=0.000839s, ode_to_pde=0.000719s, pde_assign_previous_before=0.000466s, pde_set_time=0.000478s, pde_update_matrices=0.009958s, pde_update_rhs=0.115349s, pde_linear_solve=0.050556s, pde_scatter_forward=0.000106s, pde_total_step=0.177989s, pde_step=0.178251s, pde_to_ode=0.001038s, ode_from_dolfin=0.000350s, pde_assign_previous_after=0.000478s, total_step=0.378650s
INFO:__main__:Solve for t=3.00, v.max() =np.float64(41.35117666823548), v.min() =np.float64(-89.73650574752942)
INFO:__main__:Average solver time per time step: 0.00641 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': -1.0, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=140, t=(3.45000, 3.50000), ksp_iterations=5, ksp_residual_norm=6.206833e-03, ksp_converged_reason=2, ode_function_call=0.222478s, ode_state_update=0.002071s, ode_total_step=0.225305s, ode_step=0.225669s, ode_to_dolfin=0.000976s, ode_to_pde=0.000839s, pde_assign_previous_before=0.000540s, pde_set_time=0.000555s, pde_update_matrices=0.009958s, pde_update_rhs=0.134522s, pde_linear_solve=0.058797s, pde_scatter_forward=0.000122s, pde_total_step=0.205729s, pde_step=0.206032s, pde_to_ode=0.001228s, ode_from_dolfin=0.000410s, pde_assign_previous_after=0.000559s, total_step=0.440048s
INFO:beat.telemetry:PDE step timing step=160, t=(3.95000, 4.00000), ksp_iterations=5, ksp_residual_norm=6.206215e-03, ksp_converged_reason=2, ode_function_call=0.254664s, ode_state_update=0.002380s, ode_total_step=0.257908s, ode_step=0.258317s, ode_to_dolfin=0.001104s, ode_to_pde=0.000956s, pde_assign_previous_before=0.000631s, pde_set_time=0.000632s, pde_update_matrices=0.009958s, pde_update_rhs=0.153597s, pde_linear_solve=0.067028s, pde_scatter_forward=0.000140s, pde_total_step=0.233363s, pde_step=0.233708s, pde_to_ode=0.001392s, ode_from_dolfin=0.000467s, pde_assign_previous_after=0.000638s, total_step=0.501539s
INFO:__main__:Solve for t=4.00, v.max() =np.float64(30.167118262039594), v.min() =np.float64(-89.80755776358377)
INFO:__main__:Average solver time per time step: 0.00637 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': -1.0, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=180, t=(4.45000, 4.50000), ksp_iterations=5, ksp_residual_norm=6.204411e-03, ksp_converged_reason=2, ode_function_call=0.286749s, ode_state_update=0.002678s, ode_total_step=0.290397s, ode_step=0.290852s, ode_to_dolfin=0.001257s, ode_to_pde=0.001077s, pde_assign_previous_before=0.000705s, pde_set_time=0.000709s, pde_update_matrices=0.009958s, pde_update_rhs=0.172677s, pde_linear_solve=0.075229s, pde_scatter_forward=0.000158s, pde_total_step=0.260973s, pde_step=0.261361s, pde_to_ode=0.001567s, ode_from_dolfin=0.000518s, pde_assign_previous_after=0.000715s, total_step=0.562897s
INFO:beat.telemetry:PDE step timing step=200, t=(4.95000, 5.00000), ksp_iterations=5, ksp_residual_norm=6.196909e-03, ksp_converged_reason=2, ode_function_call=0.318380s, ode_state_update=0.002951s, ode_total_step=0.322404s, ode_step=0.322905s, ode_to_dolfin=0.001381s, ode_to_pde=0.001194s, pde_assign_previous_before=0.000778s, pde_set_time=0.000782s, pde_update_matrices=0.009958s, pde_update_rhs=0.191823s, pde_linear_solve=0.083903s, pde_scatter_forward=0.000176s, pde_total_step=0.289137s, pde_step=0.289568s, pde_to_ode=0.001745s, ode_from_dolfin=0.000569s, pde_assign_previous_after=0.000798s, total_step=0.624317s
INFO:__main__:Solve for t=5.00, v.max() =np.float64(32.41230789520775), v.min() =np.float64(-89.61147777787832)
INFO:__main__:Average solver time per time step: 0.00634 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': -1.0, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=220, t=(5.45000, 5.50000), ksp_iterations=5, ksp_residual_norm=6.203506e-03, ksp_converged_reason=2, ode_function_call=0.350370s, ode_state_update=0.003226s, ode_total_step=0.354772s, ode_step=0.355318s, ode_to_dolfin=0.001530s, ode_to_pde=0.001315s, pde_assign_previous_before=0.000851s, pde_set_time=0.000856s, pde_update_matrices=0.009958s, pde_update_rhs=0.210923s, pde_linear_solve=0.092161s, pde_scatter_forward=0.000193s, pde_total_step=0.316821s, pde_step=0.317294s, pde_to_ode=0.001915s, ode_from_dolfin=0.000627s, pde_assign_previous_after=0.000883s, total_step=0.685649s
INFO:beat.telemetry:PDE step timing step=240, t=(5.95000, 6.00000), ksp_iterations=5, ksp_residual_norm=6.187767e-03, ksp_converged_reason=2, ode_function_call=0.382246s, ode_state_update=0.003517s, ode_total_step=0.387045s, ode_step=0.387640s, ode_to_dolfin=0.001663s, ode_to_pde=0.001435s, pde_assign_previous_before=0.000925s, pde_set_time=0.000930s, pde_update_matrices=0.009958s, pde_update_rhs=0.230124s, pde_linear_solve=0.100492s, pde_scatter_forward=0.000213s, pde_total_step=0.344686s, pde_step=0.345202s, pde_to_ode=0.002085s, ode_from_dolfin=0.000685s, pde_assign_previous_after=0.000963s, total_step=0.747029s
INFO:__main__:Solve for t=6.00, v.max() =np.float64(31.193337037560713), v.min() =np.float64(-88.8449338472062)
INFO:__main__:Average solver time per time step: 0.00632 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': -1.0, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=260, t=(6.45000, 6.50000), ksp_iterations=5, ksp_residual_norm=6.195794e-03, ksp_converged_reason=2, ode_function_call=0.414465s, ode_state_update=0.003846s, ode_total_step=0.419710s, ode_step=0.420352s, ode_to_dolfin=0.001806s, ode_to_pde=0.001557s, pde_assign_previous_before=0.001001s, pde_set_time=0.001007s, pde_update_matrices=0.009958s, pde_update_rhs=0.249391s, pde_linear_solve=0.108796s, pde_scatter_forward=0.000235s, pde_total_step=0.372602s, pde_step=0.373162s, pde_to_ode=0.002261s, ode_from_dolfin=0.000738s, pde_assign_previous_after=0.001044s, total_step=0.808881s
INFO:beat.telemetry:PDE step timing step=280, t=(6.95000, 7.00000), ksp_iterations=5, ksp_residual_norm=6.187793e-03, ksp_converged_reason=2, ode_function_call=0.446584s, ode_state_update=0.004163s, ode_total_step=0.452273s, ode_step=0.452979s, ode_to_dolfin=0.001941s, ode_to_pde=0.001677s, pde_assign_previous_before=0.001075s, pde_set_time=0.001084s, pde_update_matrices=0.009958s, pde_update_rhs=0.268507s, pde_linear_solve=0.117085s, pde_scatter_forward=0.000256s, pde_total_step=0.400344s, pde_step=0.400947s, pde_to_ode=0.002435s, ode_from_dolfin=0.000788s, pde_assign_previous_after=0.001121s, total_step=0.870447s
INFO:__main__:Solve for t=7.00, v.max() =np.float64(29.43358324261444), v.min() =np.float64(-89.14390384354888)
INFO:__main__:Average solver time per time step: 0.00631 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': -1.0, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=300, t=(7.45000, 7.50000), ksp_iterations=5, ksp_residual_norm=6.193262e-03, ksp_converged_reason=2, ode_function_call=0.478647s, ode_state_update=0.004493s, ode_total_step=0.484780s, ode_step=0.485539s, ode_to_dolfin=0.002081s, ode_to_pde=0.001801s, pde_assign_previous_before=0.001151s, pde_set_time=0.001160s, pde_update_matrices=0.009958s, pde_update_rhs=0.287690s, pde_linear_solve=0.125335s, pde_scatter_forward=0.000279s, pde_total_step=0.428116s, pde_step=0.428762s, pde_to_ode=0.002609s, ode_from_dolfin=0.000837s, pde_assign_previous_after=0.001224s, total_step=0.932050s
INFO:beat.telemetry:PDE step timing step=320, t=(7.95000, 8.00000), ksp_iterations=5, ksp_residual_norm=6.295497e-03, ksp_converged_reason=2, ode_function_call=0.510944s, ode_state_update=0.004842s, ode_total_step=0.517542s, ode_step=0.518348s, ode_to_dolfin=0.002213s, ode_to_pde=0.001920s, pde_assign_previous_before=0.001226s, pde_set_time=0.001234s, pde_update_matrices=0.009958s, pde_update_rhs=0.306855s, pde_linear_solve=0.133654s, pde_scatter_forward=0.000301s, pde_total_step=0.455944s, pde_step=0.456636s, pde_to_ode=0.002785s, ode_from_dolfin=0.000892s, pde_assign_previous_after=0.001301s, total_step=0.993897s
INFO:__main__:Solve for t=8.00, v.max() =np.float64(33.994512114006135), v.min() =np.float64(-89.02144281862137)
INFO:__main__:Average solver time per time step: 0.00631 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': -1.0, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=340, t=(8.45000, 8.50000), ksp_iterations=5, ksp_residual_norm=6.376745e-03, ksp_converged_reason=2, ode_function_call=0.543098s, ode_state_update=0.005162s, ode_total_step=0.550129s, ode_step=0.550981s, ode_to_dolfin=0.002354s, ode_to_pde=0.002041s, pde_assign_previous_before=0.001301s, pde_set_time=0.001311s, pde_update_matrices=0.009958s, pde_update_rhs=0.326026s, pde_linear_solve=0.141907s, pde_scatter_forward=0.000323s, pde_total_step=0.483705s, pde_step=0.484440s, pde_to_ode=0.002954s, ode_from_dolfin=0.000943s, pde_assign_previous_after=0.001377s, total_step=1.055513s
INFO:beat.telemetry:PDE step timing step=360, t=(8.95000, 9.00000), ksp_iterations=5, ksp_residual_norm=6.393849e-03, ksp_converged_reason=2, ode_function_call=0.575131s, ode_state_update=0.005476s, ode_total_step=0.582590s, ode_step=0.583488s, ode_to_dolfin=0.002486s, ode_to_pde=0.002161s, pde_assign_previous_before=0.001375s, pde_set_time=0.001386s, pde_update_matrices=0.009958s, pde_update_rhs=0.345164s, pde_linear_solve=0.150188s, pde_scatter_forward=0.000344s, pde_total_step=0.511459s, pde_step=0.512237s, pde_to_ode=0.003125s, ode_from_dolfin=0.000992s, pde_assign_previous_after=0.001455s, total_step=1.116990s
INFO:__main__:Solve for t=9.00, v.max() =np.float64(28.775193432878318), v.min() =np.float64(-89.58069101983232)
INFO:__main__:Average solver time per time step: 0.00630 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': -1.0, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=380, t=(9.45000, 9.50000), ksp_iterations=5, ksp_residual_norm=6.408088e-03, ksp_converged_reason=2, ode_function_call=0.607190s, ode_state_update=0.005777s, ode_total_step=0.615059s, ode_step=0.616005s, ode_to_dolfin=0.002639s, ode_to_pde=0.002281s, pde_assign_previous_before=0.001449s, pde_set_time=0.001467s, pde_update_matrices=0.009958s, pde_update_rhs=0.364273s, pde_linear_solve=0.158421s, pde_scatter_forward=0.000364s, pde_total_step=0.539154s, pde_step=0.539977s, pde_to_ode=0.003306s, ode_from_dolfin=0.001041s, pde_assign_previous_after=0.001532s, total_step=1.178457s
INFO:beat.telemetry:PDE step timing step=400, t=(9.95000, 10.00000), ksp_iterations=5, ksp_residual_norm=6.446121e-03, ksp_converged_reason=2, ode_function_call=0.638978s, ode_state_update=0.006067s, ode_total_step=0.647247s, ode_step=0.648240s, ode_to_dolfin=0.002767s, ode_to_pde=0.002397s, pde_assign_previous_before=0.001522s, pde_set_time=0.001545s, pde_update_matrices=0.009958s, pde_update_rhs=0.383398s, pde_linear_solve=0.166648s, pde_scatter_forward=0.000383s, pde_total_step=0.566837s, pde_step=0.567702s, pde_to_ode=0.003469s, ode_from_dolfin=0.001090s, pde_assign_previous_after=0.001607s, total_step=1.239535s
INFO:__main__:Solve for t=10.00, v.max() =np.float64(31.616118199460043), v.min() =np.float64(-89.63423719278785)
INFO:__main__:Average solver time per time step: 0.00629 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': -1.0, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=420, t=(10.45000, 10.50000), ksp_iterations=5, ksp_residual_norm=6.451066e-03, ksp_converged_reason=2, ode_function_call=0.671097s, ode_state_update=0.006376s, ode_total_step=0.679786s, ode_step=0.680824s, ode_to_dolfin=0.002905s, ode_to_pde=0.002534s, pde_assign_previous_before=0.001596s, pde_set_time=0.001624s, pde_update_matrices=0.009958s, pde_update_rhs=0.402530s, pde_linear_solve=0.174945s, pde_scatter_forward=0.000403s, pde_total_step=0.594618s, pde_step=0.595525s, pde_to_ode=0.003643s, ode_from_dolfin=0.001148s, pde_assign_previous_after=0.001687s, total_step=1.301144s
INFO:beat.telemetry:PDE step timing step=440, t=(10.95000, 11.00000), ksp_iterations=5, ksp_residual_norm=6.450708e-03, ksp_converged_reason=2, ode_function_call=0.703185s, ode_state_update=0.006660s, ode_total_step=0.712267s, ode_step=0.713352s, ode_to_dolfin=0.003034s, ode_to_pde=0.002652s, pde_assign_previous_before=0.001671s, pde_set_time=0.001702s, pde_update_matrices=0.009958s, pde_update_rhs=0.421691s, pde_linear_solve=0.183177s, pde_scatter_forward=0.000422s, pde_total_step=0.622340s, pde_step=0.623289s, pde_to_ode=0.003809s, ode_from_dolfin=0.001203s, pde_assign_previous_after=0.001786s, total_step=1.362622s
INFO:__main__:Solve for t=11.00, v.max() =np.float64(30.54381536064954), v.min() =np.float64(-89.71610451246843)
INFO:__main__:Average solver time per time step: 0.00629 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': -1.0, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=460, t=(11.45000, 11.50000), ksp_iterations=5, ksp_residual_norm=6.448697e-03, ksp_converged_reason=2, ode_function_call=0.735648s, ode_state_update=0.006977s, ode_total_step=0.745175s, ode_step=0.746307s, ode_to_dolfin=0.003175s, ode_to_pde=0.002773s, pde_assign_previous_before=0.001746s, pde_set_time=0.001809s, pde_update_matrices=0.009958s, pde_update_rhs=0.440927s, pde_linear_solve=0.191436s, pde_scatter_forward=0.000444s, pde_total_step=0.650214s, pde_step=0.651205s, pde_to_ode=0.003982s, ode_from_dolfin=0.001258s, pde_assign_previous_after=0.001898s, total_step=1.424732s
INFO:beat.telemetry:PDE step timing step=480, t=(11.95000, 12.00000), ksp_iterations=5, ksp_residual_norm=6.436803e-03, ksp_converged_reason=2, ode_function_call=0.767940s, ode_state_update=0.007283s, ode_total_step=0.777892s, ode_step=0.779069s, ode_to_dolfin=0.003324s, ode_to_pde=0.002893s, pde_assign_previous_before=0.001822s, pde_set_time=0.001888s, pde_update_matrices=0.009958s, pde_update_rhs=0.460121s, pde_linear_solve=0.199734s, pde_scatter_forward=0.000467s, pde_total_step=0.678053s, pde_step=0.679089s, pde_to_ode=0.004178s, ode_from_dolfin=0.001317s, pde_assign_previous_after=0.001980s, total_step=1.486596s
INFO:__main__:Solve for t=12.00, v.max() =np.float64(27.892413772752153), v.min() =np.float64(-90.14739056664547)
INFO:__main__:Average solver time per time step: 0.00629 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': -1.0, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=500, t=(12.45000, 12.50000), ksp_iterations=5, ksp_residual_norm=6.430657e-03, ksp_converged_reason=2, ode_function_call=0.800535s, ode_state_update=0.007585s, ode_total_step=0.810914s, ode_step=0.812140s, ode_to_dolfin=0.003468s, ode_to_pde=0.003014s, pde_assign_previous_before=0.001899s, pde_set_time=0.001976s, pde_update_matrices=0.009958s, pde_update_rhs=0.479264s, pde_linear_solve=0.208060s, pde_scatter_forward=0.000489s, pde_total_step=0.705879s, pde_step=0.706960s, pde_to_ode=0.004362s, ode_from_dolfin=0.001378s, pde_assign_previous_after=0.002062s, total_step=1.548750s
INFO:beat.telemetry:PDE step timing step=520, t=(12.95000, 13.00000), ksp_iterations=5, ksp_residual_norm=6.441329e-03, ksp_converged_reason=2, ode_function_call=0.832445s, ode_state_update=0.007895s, ode_total_step=0.843247s, ode_step=0.844519s, ode_to_dolfin=0.003595s, ode_to_pde=0.003134s, pde_assign_previous_before=0.001973s, pde_set_time=0.002051s, pde_update_matrices=0.009958s, pde_update_rhs=0.498490s, pde_linear_solve=0.216288s, pde_scatter_forward=0.000512s, pde_total_step=0.733670s, pde_step=0.734793s, pde_to_ode=0.004536s, ode_from_dolfin=0.001429s, pde_assign_previous_after=0.002139s, total_step=1.610104s
INFO:__main__:Solve for t=13.00, v.max() =np.float64(36.21403307193282), v.min() =np.float64(-90.23100099821878)
INFO:__main__:Average solver time per time step: 0.00629 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': -1.0, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=540, t=(13.45000, 13.50000), ksp_iterations=5, ksp_residual_norm=6.448284e-03, ksp_converged_reason=2, ode_function_call=0.864431s, ode_state_update=0.008218s, ode_total_step=0.875666s, ode_step=0.876985s, ode_to_dolfin=0.003730s, ode_to_pde=0.003252s, pde_assign_previous_before=0.002050s, pde_set_time=0.002127s, pde_update_matrices=0.009958s, pde_update_rhs=0.517730s, pde_linear_solve=0.224617s, pde_scatter_forward=0.000533s, pde_total_step=0.761575s, pde_step=0.762756s, pde_to_ode=0.004710s, ode_from_dolfin=0.001486s, pde_assign_previous_after=0.002220s, total_step=1.671716s
INFO:beat.telemetry:PDE step timing step=560, t=(13.95000, 14.00000), ksp_iterations=5, ksp_residual_norm=6.424363e-03, ksp_converged_reason=2, ode_function_call=0.896711s, ode_state_update=0.008516s, ode_total_step=0.908354s, ode_step=0.909719s, ode_to_dolfin=0.003864s, ode_to_pde=0.003372s, pde_assign_previous_before=0.002125s, pde_set_time=0.002203s, pde_update_matrices=0.009958s, pde_update_rhs=0.536868s, pde_linear_solve=0.232864s, pde_scatter_forward=0.000553s, pde_total_step=0.789306s, pde_step=0.790533s, pde_to_ode=0.004875s, ode_from_dolfin=0.001560s, pde_assign_previous_after=0.002318s, total_step=1.733405s
INFO:__main__:Solve for t=14.00, v.max() =np.float64(38.73591052468942), v.min() =np.float64(-91.02768068126953)
INFO:__main__:Average solver time per time step: 0.00629 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': -1.0, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=580, t=(14.45000, 14.50000), ksp_iterations=5, ksp_residual_norm=6.394441e-03, ksp_converged_reason=2, ode_function_call=0.928829s, ode_state_update=0.008817s, ode_total_step=0.940882s, ode_step=0.942293s, ode_to_dolfin=0.004002s, ode_to_pde=0.003492s, pde_assign_previous_before=0.002198s, pde_set_time=0.002279s, pde_update_matrices=0.009958s, pde_update_rhs=0.556027s, pde_linear_solve=0.241114s, pde_scatter_forward=0.000571s, pde_total_step=0.817042s, pde_step=0.818312s, pde_to_ode=0.005043s, ode_from_dolfin=0.001616s, pde_assign_previous_after=0.002395s, total_step=1.794906s
INFO:beat.telemetry:PDE step timing step=600, t=(14.95000, 15.00000), ksp_iterations=5, ksp_residual_norm=6.348886e-03, ksp_converged_reason=2, ode_function_call=0.960918s, ode_state_update=0.009115s, ode_total_step=0.973383s, ode_step=0.974840s, ode_to_dolfin=0.004129s, ode_to_pde=0.003610s, pde_assign_previous_before=0.002272s, pde_set_time=0.002354s, pde_update_matrices=0.009958s, pde_update_rhs=0.575290s, pde_linear_solve=0.249383s, pde_scatter_forward=0.000590s, pde_total_step=0.844921s, pde_step=0.846237s, pde_to_ode=0.005238s, ode_from_dolfin=0.001673s, pde_assign_previous_after=0.002473s, total_step=1.856555s
INFO:__main__:Solve for t=15.00, v.max() =np.float64(36.357581644055266), v.min() =np.float64(-91.23898576258237)
INFO:__main__:Average solver time per time step: 0.00628 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': 14.000000000000064, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=620, t=(15.45000, 15.50000), ksp_iterations=5, ksp_residual_norm=6.314005e-03, ksp_converged_reason=2, ode_function_call=0.993010s, ode_state_update=0.009403s, ode_total_step=1.005868s, ode_step=1.007372s, ode_to_dolfin=0.004279s, ode_to_pde=0.003729s, pde_assign_previous_before=0.002345s, pde_set_time=0.002433s, pde_update_matrices=0.009958s, pde_update_rhs=0.594407s, pde_linear_solve=0.257565s, pde_scatter_forward=0.000608s, pde_total_step=0.872561s, pde_step=0.873919s, pde_to_ode=0.005417s, ode_from_dolfin=0.001726s, pde_assign_previous_after=0.002548s, total_step=1.917928s
INFO:beat.telemetry:PDE step timing step=640, t=(15.95000, 16.00000), ksp_iterations=5, ksp_residual_norm=6.278104e-03, ksp_converged_reason=2, ode_function_call=1.024831s, ode_state_update=0.009698s, ode_total_step=1.038083s, ode_step=1.039634s, ode_to_dolfin=0.004401s, ode_to_pde=0.003844s, pde_assign_previous_before=0.002418s, pde_set_time=0.002506s, pde_update_matrices=0.009958s, pde_update_rhs=0.613433s, pde_linear_solve=0.265782s, pde_scatter_forward=0.000623s, pde_total_step=0.900135s, pde_step=0.901536s, pde_to_ode=0.005580s, ode_from_dolfin=0.001783s, pde_assign_previous_after=0.002625s, total_step=1.978940s
INFO:__main__:Solve for t=16.00, v.max() =np.float64(39.55295851776965), v.min() =np.float64(-91.811500367793)
INFO:__main__:Average solver time per time step: 0.00628 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': 14.000000000000064, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=660, t=(16.45000, 16.50000), ksp_iterations=5, ksp_residual_norm=6.243014e-03, ksp_converged_reason=2, ode_function_call=1.057280s, ode_state_update=0.010065s, ode_total_step=1.071026s, ode_step=1.072625s, ode_to_dolfin=0.004549s, ode_to_pde=0.003966s, pde_assign_previous_before=0.002493s, pde_set_time=0.002587s, pde_update_matrices=0.009958s, pde_update_rhs=0.632846s, pde_linear_solve=0.274122s, pde_scatter_forward=0.000647s, pde_total_step=0.928239s, pde_step=0.929685s, pde_to_ode=0.005763s, ode_from_dolfin=0.001841s, pde_assign_previous_after=0.002707s, total_step=2.041293s
INFO:beat.telemetry:PDE step timing step=680, t=(16.95000, 17.00000), ksp_iterations=5, ksp_residual_norm=6.229820e-03, ksp_converged_reason=2, ode_function_call=1.090612s, ode_state_update=0.010415s, ode_total_step=1.104828s, ode_step=1.106474s, ode_to_dolfin=0.004683s, ode_to_pde=0.004084s, pde_assign_previous_before=0.002569s, pde_set_time=0.002663s, pde_update_matrices=0.009958s, pde_update_rhs=0.652026s, pde_linear_solve=0.282426s, pde_scatter_forward=0.000670s, pde_total_step=0.956088s, pde_step=0.957577s, pde_to_ode=0.005958s, ode_from_dolfin=0.001898s, pde_assign_previous_after=0.002794s, total_step=2.104237s
INFO:__main__:Solve for t=17.00, v.max() =np.float64(35.001446691610845), v.min() =np.float64(-91.8433983931623)
INFO:__main__:Average solver time per time step: 0.00629 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': 14.000000000000064, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=700, t=(17.45000, 17.50000), ksp_iterations=5, ksp_residual_norm=6.226787e-03, ksp_converged_reason=2, ode_function_call=1.123242s, ode_state_update=0.010775s, ode_total_step=1.137938s, ode_step=1.139631s, ode_to_dolfin=0.004828s, ode_to_pde=0.004206s, pde_assign_previous_before=0.002645s, pde_set_time=0.002741s, pde_update_matrices=0.009958s, pde_update_rhs=0.671180s, pde_linear_solve=0.290712s, pde_scatter_forward=0.000693s, pde_total_step=0.983903s, pde_step=0.985437s, pde_to_ode=0.006153s, ode_from_dolfin=0.001957s, pde_assign_previous_after=0.002895s, total_step=2.166487s
INFO:beat.telemetry:PDE step timing step=720, t=(17.95000, 18.00000), ksp_iterations=5, ksp_residual_norm=6.237986e-03, ksp_converged_reason=2, ode_function_call=1.155223s, ode_state_update=0.011107s, ode_total_step=1.170359s, ode_step=1.172098s, ode_to_dolfin=0.004957s, ode_to_pde=0.004323s, pde_assign_previous_before=0.002717s, pde_set_time=0.002815s, pde_update_matrices=0.009958s, pde_update_rhs=0.690418s, pde_linear_solve=0.299046s, pde_scatter_forward=0.000711s, pde_total_step=1.011809s, pde_step=1.013388s, pde_to_ode=0.006328s, ode_from_dolfin=0.002009s, pde_assign_previous_after=0.002975s, total_step=2.228070s
INFO:__main__:Solve for t=18.00, v.max() =np.float64(34.65196141502749), v.min() =np.float64(-92.23417103103628)
INFO:__main__:Average solver time per time step: 0.00629 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': 14.000000000000064, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=740, t=(18.45000, 18.50000), ksp_iterations=5, ksp_residual_norm=6.192738e-03, ksp_converged_reason=2, ode_function_call=1.187429s, ode_state_update=0.011422s, ode_total_step=1.202989s, ode_step=1.204777s, ode_to_dolfin=0.005096s, ode_to_pde=0.004444s, pde_assign_previous_before=0.002792s, pde_set_time=0.002892s, pde_update_matrices=0.009958s, pde_update_rhs=0.709597s, pde_linear_solve=0.307285s, pde_scatter_forward=0.000728s, pde_total_step=1.039556s, pde_step=1.041179s, pde_to_ode=0.006497s, ode_from_dolfin=0.002066s, pde_assign_previous_after=0.003056s, total_step=2.289714s
INFO:beat.telemetry:PDE step timing step=760, t=(18.95000, 19.00000), ksp_iterations=5, ksp_residual_norm=6.157724e-03, ksp_converged_reason=2, ode_function_call=1.222022s, ode_state_update=0.011721s, ode_total_step=1.237991s, ode_step=1.239825s, ode_to_dolfin=0.005224s, ode_to_pde=0.004559s, pde_assign_previous_before=0.002866s, pde_set_time=0.002967s, pde_update_matrices=0.009958s, pde_update_rhs=0.730544s, pde_linear_solve=0.316159s, pde_scatter_forward=0.000747s, pde_total_step=1.069782s, pde_step=1.071449s, pde_to_ode=0.006763s, ode_from_dolfin=0.002128s, pde_assign_previous_after=0.003157s, total_step=2.356319s
INFO:__main__:Solve for t=19.00, v.max() =np.float64(32.354750762747045), v.min() =np.float64(-92.73790063918632)
INFO:__main__:Average solver time per time step: 0.00630 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': 14.000000000000064, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:PDE step timing step=780, t=(19.45000, 19.50000), ksp_iterations=5, ksp_residual_norm=6.123312e-03, ksp_converged_reason=2, ode_function_call=1.254984s, ode_state_update=0.012005s, ode_total_step=1.271359s, ode_step=1.273239s, ode_to_dolfin=0.005373s, ode_to_pde=0.004696s, pde_assign_previous_before=0.002941s, pde_set_time=0.003044s, pde_update_matrices=0.009958s, pde_update_rhs=0.749838s, pde_linear_solve=0.324391s, pde_scatter_forward=0.000763s, pde_total_step=1.097634s, pde_step=1.099343s, pde_to_ode=0.006931s, ode_from_dolfin=0.002180s, pde_assign_previous_after=0.003235s, total_step=2.418796s
INFO:beat.telemetry:PDE step timing step=800, t=(19.95000, 20.00000), ksp_iterations=5, ksp_residual_norm=6.087515e-03, ksp_converged_reason=2, ode_function_call=1.286698s, ode_state_update=0.012289s, ode_total_step=1.303459s, ode_step=1.305384s, ode_to_dolfin=0.005512s, ode_to_pde=0.004824s, pde_assign_previous_before=0.003013s, pde_set_time=0.003117s, pde_update_matrices=0.009958s, pde_update_rhs=0.768895s, pde_linear_solve=0.332625s, pde_scatter_forward=0.000778s, pde_total_step=1.125263s, pde_step=1.127015s, pde_to_ode=0.007090s, ode_from_dolfin=0.002227s, pde_assign_previous_after=0.003309s, total_step=2.479727s
INFO:__main__:Solve for t=20.00, v.max() =np.float64(32.56449196104626), v.min() =np.float64(-92.8468358247903)
INFO:__main__:Average solver time per time step: 0.00629 s
INFO:__main__:{'P1': 1.2500000000000004, 'P2': -1.0, 'P3': -1.0, 'P4': -1.0, 'P5': 14.000000000000064, 'P6': -1.0, 'P7': -1.0, 'P8': -1.0, 'P9': -1.0}
INFO:beat.telemetry:
==================================================
PERFORMANCE SUMMARY
==================================================
Total Steps: 802
KSP Total Iterations: 2005
KSP Max Iterations: 5
--------------------------------------------------
Metric | Time (s)
--------------------------------------------------
total_step | 2.4860
ode_step | 1.3088
ode_total_step | 1.3068
ode_function_call | 1.2900
pde_step | 1.1298
pde_total_step | 1.1280
pde_update_rhs | 0.7708
pde_linear_solve | 0.3334
ode_state_update | 0.0123
pde_update_matrices | 0.0100
pde_to_ode | 0.0071
ode_to_dolfin | 0.0055
ode_to_pde | 0.0048
pde_assign_previous_after | 0.0033
pde_set_time | 0.0031
pde_assign_previous_before | 0.0030
ode_from_dolfin | 0.0022
pde_scatter_forward | 0.0008
==================================================
INFO:beat.telemetry:Performance summary saved to results-niederer-benchmark/performance_summary.json

# Save activation times
activation_times["dx"] = dx
activation_times["dt"] = dt
at_file_name = output_dir / "activation_times.json"
if at_file_name.is_file():
all_at = json.loads(at_file_name.read_text())
else:
all_at = []
all_at.append(activation_times)
at_file_name.write_text(json.dumps(all_at, indent=2))
213
The activation times are saved in the file output-niederer-benchmark/activation_times.json.
The file contains a list of dictionaries, each dictionary contains the activation times for a specific dx and dt.
Here are the activation times for the different dx and dt:
dx |
dt |
P1 |
P2 |
P3 |
P4 |
P5 |
P6 |
P7 |
P8 |
P9 |
|
|---|---|---|---|---|---|---|---|---|---|---|---|
0 |
0.5 |
0.05 |
1.25 |
51.1 |
34.9 |
58.9 |
14.1 |
49.5 |
34 |
56.65 |
26.05 |
1 |
0.5 |
0.01 |
1.22 |
50.85 |
33.96 |
58.05 |
13.98 |
49.36 |
33.07 |
55.91 |
25.64 |
2 |
0.5 |
0.005 |
1.215 |
50.775 |
33.825 |
57.96 |
13.97 |
49.345 |
32.945 |
55.825 |
25.595 |
3 |
0.2 |
0.05 |
1.25 |
29.7 |
32.9 |
40.2 |
9.55 |
30 |
32.95 |
39.9 |
18.9 |
4 |
0.2 |
0.01 |
1.24 |
29.09 |
31.25 |
38.66 |
9.34 |
29.4 |
31.29 |
38.42 |
18.14 |
5 |
0.2 |
0.005 |
1.235 |
29.015 |
31.05 |
38.475 |
9.315 |
29.32 |
31.08 |
38.235 |
18.045 |
6 |
0.1 |
0.05 |
1.25 |
26.85 |
33.3 |
40.35 |
8.4 |
27.5 |
33.85 |
40.55 |
18.95 |
7 |
0.1 |
0.01 |
1.23 |
25.64 |
31.46 |
38.08 |
8.03 |
26.24 |
31.94 |
38.21 |
17.95 |
8 |
0.1 |
0.005 |
1.225 |
25.5 |
31.26 |
37.81 |
7.99 |
26.09 |
31.72 |
37.93 |
17.835 |
Sander Land, Viatcheslav Gurev, Sander Arens, Christoph M Augustin, Lukas Baron, Robert Blake, Chris Bradley, Sebastian Castro, Andrew Crozier, Marco Favino, and others. Verification of cardiac mechanics software: benchmark problems and solutions for testing active and passive material behavior. Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences, 471(2184):20150641, 2015.
Zhaoyang Zhang, Michael B Liu, Xiaodong Huang, Zhen Song, and Zhilin Qu. Mechanisms of premature ventricular complexes caused by qt prolongation. Biophysical journal, 120(2):352–369, 2021.