-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSimulation.py
62 lines (44 loc) · 2.6 KB
/
Simulation.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
import angiogenesis as an
import time
import numpy as np
import cProfile as profile
# In outer section of code
pr = profile.Profile()
pr.enable()
start_time = time.time()
'---------------object oriented approach--------------------'
# instantiate Model
square_model = an.Model(23, 'square', 'square')
#print(square_model.__dict__)
# N should be divisible by 16 or 32
parameters_set = {'a': 3.1, 'b': 4.5, 'gamma': 2/3, 'delta': 2.01, 'nu': 1.1, 'c': 0.001, 'r': 2.2, 'dt': 0.01, 'N': 1}
square_model.run_simulation("graphs", **parameters_set, is_scaled=True)
print(f"time elapsed for OOP: {(time.time() - start_time):.4f}s")
'----------------functional approach------------------------'
start_time_func_ver = time.time()
hexagonal = 0
triangular = 0
number_of_rowscols = 23
number_of_nodes = number_of_rowscols*number_of_rowscols
incidence_matrix, graph, nodes_data, edges_data = an.generate_grid_graph(number_of_rowscols, number_of_rowscols, hexagonal=hexagonal, triangular=triangular)
source_value = number_of_rowscols - 1
source_list = an.localise_source(graph, source_value, corridor_model=0, two_capacitor_plates_model=0,
square_concentric_model=1, veins_square_concentric_model=0, triangular=0)
incidence_T_inv, x, x_dagger, incidence_inv, incidence_T, pressure_list, length_list, conductivity_list, flow_list, pressure_diff_list = \
an.generate_physical_values(source_list, incidence_matrix)
arguments = {'pressure_list': pressure_list, 'length_list': length_list, 'conductivity_list': conductivity_list,
'flow_list': flow_list, 'pressure_diff_list': pressure_diff_list, 'incidence_matrix': incidence_matrix,
'incidence_T': incidence_T, 'incidence_inv': incidence_inv, 'graph': graph, 'source_list': source_list,
'edges_data': edges_data, 'nodes_data': nodes_data, 'number_of_rowscols': number_of_rowscols, 'source_value': source_value}
an.set_graph_attributes(graph, pressure_list, conductivity_list, flow_list, pressure_diff_list)
an.update_df(source_list, pressure_list, conductivity_list, flow_list, pressure_diff_list, nodes_data, edges_data, first_time=True)
#print(edges_data)
#print(nodes_data)
# dK/dt = a*(Q/Q_hat)^(2*gamma) - b*K + c
parameters_set = {'a': 3.1, 'b': 4.5, 'gamma': 2/3, 'delta': 2.01, 'nu': 1.1, 'flow_hat': np.average(np.abs(flow_list)), 'c': 0.001, 'r': 2.2, 'dt': 0.01, 'N': 1}
an.run_simulation("f_version_graphs", **arguments, **parameters_set, is_scaled=True)
#print(edges_data)
#print(nodes_data)
print(f"time elapsed for function version: {(time.time() - start_time_func_ver):.4f}s")
pr.disable()
pr.dump_stats('profile3.pstat')