Restart

In this tutorial, the restart functionnality of Freshkiss3D is explained.

import os
import matplotlib.pylab as plt
import numpy as np
import freshkiss3d as fk
import freshkiss3d.extra.plots as fk_plt

# ~ os.system('rm -r outputs')
#sphinx_gallery_thumbnail_number = 4

Restart scheduler:

To enable the restart, you have to set an h5_writer and pass it to the Problem class. Here we set the restart scheduler to time and set it to 1,2 and 3s. At the first time set simulation will stop and create a back up save file. Saved data ara stored inside a restart_data.h5 file that allow to perform a restart of the simulation from the time it stopped.

Note

Restart can be performed several times in the same simulation. In our case, simulation time is splitted in 4 sections, and 3 iterative restarts are performed.

Case set-up:

restart_times = [1., 2., 3.]
restart_scheduler = fk.schedules(times=restart_times)

simutime = fk.SimuTime(final_time=5.1, time_iteration_max=20000, second_order=True)

create_figure_scheduler = fk.schedules(times=[1., 2., 3.])

triangular_mesh = fk.TriangularMesh.from_msh_file('../simulations/inputs/square2.mesh')

layer = fk.Layer(1, triangular_mesh, topography=0.)

def H_0(x, y):
    h = 2.4*(1.0 + np.exp(-0.25*((x-10.05)**2+(y-10.05)**2)))
    return h

primitives = fk.Primitive(triangular_mesh, layer, height_funct=H_0)

tracers = [fk.Tracer(triangular_mesh, layer, primitives, Tinit=1.0)]

slides = [fk.Slide(ref=r) for r in [1, 2, 3, 4]]

h5_writer = fk.H5Writer(scheduler=restart_scheduler, \
    output_dir='outputs/hydrodynamic_h5_from_{}_to_{}'.format(\
    int(restart_times[0]), int(restart_times[-1])))

problem = fk.Problem(simutime, triangular_mesh, layer, primitives,
                     slides=slides,
                     numerical_parameters={'space_second_order':True},
                     tracers=tracers,
                     h5_writer=h5_writer,
                     custom_funct={'plot':fk_plt.plot_freesurface_3d},
                     custom_funct_scheduler=create_figure_scheduler)
RESTART = False
if RESTART:
    # computation restarts after 2 s
    problem.restart('./outputs/hydrodynamic_h5_from_1_to_3/output_0001.h5')
    restart_times = [4., 5.]
    restart_scheduler = fk.schedules(times=restart_times)
    problem.h5_writer = fk.H5Writer(scheduler=restart_scheduler, \
        output_dir='outputs/hydrodynamic_h5_from_{}_to_{}'.format(\
        int(restart_times[0]), int(restart_times[-1])))
    create_figure_scheduler = fk.schedules(times=[3., 4., 5.])
    problem.custom_funct_scheduler = create_figure_scheduler

problem.solve()
plt.show()
  • Height at time = 1.0s
  • Height at time = 2.0s
  • Height at time = 3.0s
===================================================================
|                          INITIALIZATION                         |
===================================================================
Problem size: Nodes=3303, Layers=1, Triangles=6408,
Iter =        0 ; Dt = 0.0000s ; Time =     0.00s ; ETA =     0.00s
===================================================================
|                            TIME LOOP                            |
===================================================================
Iter =       17 ; Dt = 0.0061s ; Time =     0.11s ; ETA =    19.56s
Iter =       35 ; Dt = 0.0057s ; Time =     0.21s ; ETA =    15.80s
Iter =       54 ; Dt = 0.0054s ; Time =     0.32s ; ETA =    16.02s
Iter =       73 ; Dt = 0.0053s ; Time =     0.42s ; ETA =    14.36s
Iter =       93 ; Dt = 0.0051s ; Time =     0.52s ; ETA =    16.11s
Iter =      113 ; Dt = 0.0052s ; Time =     0.63s ; ETA =    15.32s
Iter =      133 ; Dt = 0.0054s ; Time =     0.73s ; ETA =    14.42s
Iter =      152 ; Dt = 0.0055s ; Time =     0.84s ; ETA =    12.66s
Iter =      171 ; Dt = 0.0053s ; Time =     0.94s ; ETA =    12.65s
Iter =      190 ; Dt = 0.0054s ; Time =     1.04s ; ETA =    12.80s
Iter =      209 ; Dt = 0.0055s ; Time =     1.15s ; ETA =    11.87s
Iter =      228 ; Dt = 0.0057s ; Time =     1.25s ; ETA =    10.95s
Iter =      246 ; Dt = 0.0059s ; Time =     1.36s ; ETA =    10.61s
Iter =      263 ; Dt = 0.0059s ; Time =     1.46s ; ETA =    10.22s
Iter =      281 ; Dt = 0.0060s ; Time =     1.56s ; ETA =     9.62s
Iter =      298 ; Dt = 0.0060s ; Time =     1.67s ; ETA =     9.61s
Iter =      316 ; Dt = 0.0057s ; Time =     1.77s ; ETA =     9.69s
Iter =      334 ; Dt = 0.0056s ; Time =     1.87s ; ETA =     9.34s
Iter =      353 ; Dt = 0.0057s ; Time =     1.98s ; ETA =     9.11s
Iter =      371 ; Dt = 0.0058s ; Time =     2.08s ; ETA =     8.56s
Iter =      389 ; Dt = 0.0059s ; Time =     2.19s ; ETA =     8.25s
Iter =      407 ; Dt = 0.0058s ; Time =     2.29s ; ETA =     7.96s
Iter =      424 ; Dt = 0.0059s ; Time =     2.39s ; ETA =     7.73s
Iter =      442 ; Dt = 0.0059s ; Time =     2.50s ; ETA =     7.34s
Iter =      460 ; Dt = 0.0060s ; Time =     2.61s ; ETA =     6.90s
Iter =      477 ; Dt = 0.0059s ; Time =     2.71s ; ETA =     6.65s
Iter =      495 ; Dt = 0.0058s ; Time =     2.81s ; ETA =     6.56s
Iter =      513 ; Dt = 0.0057s ; Time =     2.92s ; ETA =     6.27s
Iter =      531 ; Dt = 0.0057s ; Time =     3.02s ; ETA =     5.99s
Iter =      550 ; Dt = 0.0057s ; Time =     3.13s ; ETA =     5.58s
Iter =      568 ; Dt = 0.0059s ; Time =     3.23s ; ETA =     5.19s
Iter =      585 ; Dt = 0.0060s ; Time =     3.33s ; ETA =     4.84s
Iter =      603 ; Dt = 0.0059s ; Time =     3.44s ; ETA =     4.64s
Iter =      620 ; Dt = 0.0057s ; Time =     3.54s ; ETA =     4.50s
Iter =      639 ; Dt = 0.0056s ; Time =     3.65s ; ETA =     4.20s
Iter =      657 ; Dt = 0.0056s ; Time =     3.75s ; ETA =     3.99s
Iter =      676 ; Dt = 0.0057s ; Time =     3.86s ; ETA =     3.54s
Iter =      694 ; Dt = 0.0059s ; Time =     3.96s ; ETA =     3.14s
Iter =      711 ; Dt = 0.0058s ; Time =     4.06s ; ETA =     2.99s
Iter =      729 ; Dt = 0.0057s ; Time =     4.16s ; ETA =     2.69s
Iter =      748 ; Dt = 0.0057s ; Time =     4.27s ; ETA =     2.42s
Iter =      766 ; Dt = 0.0057s ; Time =     4.37s ; ETA =     2.10s
Iter =      784 ; Dt = 0.0058s ; Time =     4.48s ; ETA =     1.75s
Iter =      802 ; Dt = 0.0057s ; Time =     4.58s ; ETA =     1.53s
Iter =      820 ; Dt = 0.0058s ; Time =     4.69s ; ETA =     1.18s
Iter =      838 ; Dt = 0.0058s ; Time =     4.79s ; ETA =     0.86s
Iter =      856 ; Dt = 0.0059s ; Time =     4.90s ; ETA =     0.56s
Iter =      873 ; Dt = 0.0059s ; Time =     5.00s ; ETA =     0.35s
Iter =      891 ; Dt = 0.0031s ; Time =     5.10s ; ETA =     0.00s
===================================================================
|                               END                               |
===================================================================
Problem.solve() completed in 15.29369568824768s (wall time)

Total running time of the script: ( 0 minutes 16.777 seconds)

Gallery generated by Sphinx-Gallery