Repository navigation
Expand file tree
/
Copy pathmain.py
More file actions
82 lines (65 loc) · 4.06 KB
/
Copy pathmain.py
File metadata and controls
82 lines (65 loc) · 4.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import numpy as np
import pamd
from glob import glob
def replicate_initial_configurations(conf_regexpr, pamd):
'''The variable "conf_regexpr" is used to find all
available starting configuration which are replicated
equally often.'''
available = sorted(glob(conf_regexpr))
count = len(available)
assert count > 0,'No starting configurations found'
config_degeneracy = np.empty(count,dtype=int)
config_degeneracy[:] = pamd.replica // count
config_degeneracy[:pamd.replica % count] += 1
cum_config_degeneracy = np.cumsum(config_degeneracy)
limits = (pamd.get_global_process_from_local_process(0),pamd.get_global_process_from_local_process(pamd.replicas_per_process))
relevant_range = [np.argwhere(cum_config_degeneracy>limits[0])[0][0],np.argwhere(cum_config_degeneracy >= limits[1])[0][0] + 1]
degeneracy = config_degeneracy[relevant_range[0]:relevant_range[1]]
degeneracy[0] = cum_config_degeneracy[relevant_range[0]]-limits[0]
degeneracy[-1] = -cum_config_degeneracy[relevant_range[1]-2]+limits[1]
return degeneracy, available[slice(*relevant_range)]
def load_initial_configs(sim_object, conf_regexpr, pamd):
degeneracy, available = replicate_initial_configurations(conf_regexpr, pamd)
SIMULATIONS = np.array([sim_object(SIM.get_global_process_from_local_process(i), {'timestep':2, 'initial_temperature_seed':42, 'thermostat_seed':101010, 'damping_time':10}) for i in range(REPLICAS_PER_PROCESS)])
index=0
for i,deg in enumerate(degeneracy):
for j in range(index, index+deg):
SIMULATIONS[j].load_config(i)
index += deg
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-m","--mode", help="Set run-mode", type=str, default="demo")
parser.add_argument("-N","--number_of_nodes", help="Set number of nodes on which the simulation runs.", type=int, default=1)
parser.add_argument("-n","--threads_per_node", help="The number of threads on each node. Has to be the same for all nodes.", type=int, default=1)
parser.add_argument("-r","--replicas_per_process", help="The number replicas per process. Is the same on each thread.", type=int, default=1)
parser.add_argument("-s","--seed_offset", help="The seed offset which is used to initialize all the random number seeds needed for the simulation.", type=int, default=0)
args = parser.parse_args()
REPLICAS_PER_PROCESS = args.replicas_per_process
SIM = pamd.Simulation(REPLICAS_PER_PROCESS,args.seed_offset)
SIM.set_threads_per_compute_unit(args.threads_per_node)
if args.mode == "demo":
import demo
#load_initial_configs(demo.Demo, 'test_configs/conf*', SIM)
SIMULATIONS = np.array([demo.Demo(SIM.get_global_process_from_local_process(i)) for i in range(REPLICAS_PER_PROCESS)])
SIM.run(SIMULATIONS)
elif args.mode == "ising":
import ising_pa
SIM.overlap = 0.8
SIM.equilibration_steps = 0
SIM.simulation_steps_per_temp = 50
SIM.start_temp = 2000 # actually starting at inf but for adaptive temp step to work choose large (finite) temp instead
SIM.end_temp = 1 # well within the ordered phase
SIMULATIONS = np.array([ising_pa.Ising(SIM.get_global_process_from_local_process(i)) for i in range(REPLICAS_PER_PROCESS)])
SIM.run(SIMULATIONS)
elif args.mode == "lammps":
import lammps_pamd
#load_initial_configs(lammps_pamd.Lammps, 'test_configs/conf*', SIM)
SIMULATIONS = np.array([lammps_pamd.Lammps(SIM.get_global_process_from_local_process(i), {'timestep':2, 'initial_temperature_seed':42, 'thermostat_seed':101010, 'damping_time':10}) for i in range(REPLICAS_PER_PROCESS)])
SIM.run(SIMULATIONS)
elif args.mode == "openmm":
import openmm_pamd
SIMULATIONS = np.array([openmm_pamd.OpenMM(SIM.get_global_process_from_local_process(i)) for i in range(REPLICAS_PER_PROCESS)])
SIM.simulation_steps_per_temp=1
SIM.run(SIMULATIONS)
# load_initial_configs(lammps_pamd.Lammps, 'test_configs/conf*', SIM)