Source code for pyretis.initiation.initiate_restart
# -*- coding: utf-8 -*-
# Copyright (c) 2023, PyRETIS Development Team.
# Distributed under the LGPLv2.1+ License. See LICENSE for more info.
"""This file contains functions used for initiation of paths.
Important methods defined here
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
initiate_restart (:py:func:`.initiate_restart`)
A method that will get the initial path from the output from
a previous simulation.
"""
import logging
import os
from pyretis.core.pathensemble import generate_ensemble_name
from pyretis.core.random_gen import create_random_generator
from pyretis.inout import print_to_screen
from pyretis.inout.restart import read_restart_file
logger = logging.getLogger(__name__) # pylint: disable=invalid-name
logger.addHandler(logging.NullHandler())
__all__ = ['initiate_restart']
[docs]def initiate_restart(simulation, settings, cycle):
"""Initialise paths by loading restart data.
Parameters
----------
simulation : object like :py:class:`.Simulation`
The simulation we are setting up.
settings : dictionary
A dictionary with settings for the initiation.
cycle : integer
The simulation cycles we are starting at.
"""
for idx, ensemble in enumerate(simulation.ensembles):
path_ensemble = ensemble['path_ensemble']
name = path_ensemble.ensemble_name
logger.info('Loading restart data for path ensemble %s:', name)
print_to_screen(
'Loading restart data for path ensemble {}:'.format(name),
level='warning'
)
restart_file = os.path.join(
generate_ensemble_name(path_ensemble.ensemble_number),
'ensemble.restart')
restart_info = read_restart_file(restart_file)
ensemble['engine'].load_restart_info(restart_info['engine'])
ensemble['engine'].exe_dir = path_ensemble.directory['generate']
ensemble['system'].load_restart_info(restart_info['system'])
ensemble['rgen'] = create_random_generator(restart_info['rgen'])
ensemble['order_function'].load_restart_info(
restart_info.get('order_function', []))
path_ensemble.load_restart_info(restart_info['path_ensemble'],
cycle)
# This allows ensemble renumbering
if settings['simulation']['task'] == 'retis':
path_ensemble.ensemble_number = idx
# The Force field is not part of the restart, just explicitly
# set it:
for point in path_ensemble.last_path.phasepoints:
point.forcefield = ensemble['system'].forcefield
path = path_ensemble.last_path
yield True, path, path.status, path_ensemble