-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
103 lines (83 loc) · 2.65 KB
/
main.py
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
'''
Author: Yu Xiaoyuan
'''
import argparse
import json
import sys
import simpy
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from tqdm import tqdm
import module
import util
matplotlib.use('TkAgg')
def external_accel(t: float):
'''
External Force, nothing unusual.
'''
return 0.4 * np.sin(2 * np.pi * 2e2 * t)
# return 0
def argue_parser():
'''
Arguements.
'''
parser = argparse.ArgumentParser(
description='Run simulation of a mems die.')
parser.add_argument(
'--param',
type=str,
help='An optional simulation parameters file in json format',
default='parameters/default.json')
parser.add_argument('--out',
type=str,
help='Data output file.',
default=f'data/{util.formatted_date_time}-data.json')
return parser.parse_args()
if __name__ == '__main__':
args = argue_parser()
print(f'Using parameters from file `{args.param}`.')
with open(args.param, 'r', encoding='utf-8', errors='replace') as f:
param = json.load(f)
f.close()
json.dump(param, sys.stdout, indent=2)
runtime = param['runtime']
dt = param['mechanic_dt']
env = simpy.Environment(0)
system = module.System(env, config=param, extern_accel=external_accel)
# initial_state = np.array([0., 0.], dtype=np.float64)
# spring_system = SpringDampingSystem(
# env=env,
# mass=7.45e-7,
# spring_coef=5.623,
# damping_coef=4.95e-6,
# initial_state=initial_state,
# runtime=runtime,
# dt=dt,
# input_force=external_force,
# )
# env.process(spring_system.run(runtime, dt))
with tqdm(total=int(runtime / dt), desc='Running simulation') as pbar:
while env.now < runtime:
env.run(until=env.now + dt)
pbar.update(1)
_, t_ax = util.plot(np.array(system.spring_system.simulation_data['time']),
np.array(
system.spring_system.simulation_data['position']),
label='Displacement')
power, phase = util.freq_and_plot(
np.array(system.spring_system.simulation_data['position']),
dt,
log=True,
)
plt.legend(loc='upper right')
plt.show()
simulation_data = {
'parameters': {},
'mass_block_state': {},
'quantized_output': {}
}
simulation_data['parameters'] = param
simulation_data['mass_block_state'] = system.spring_system.simulation_data
simulation_data['quantized_output'] = system.pid.simulation_data
util.save(args.out, simulation_data)