-
Notifications
You must be signed in to change notification settings - Fork 0
/
April24_main_coupling.py
159 lines (82 loc) · 2.92 KB
/
April24_main_coupling.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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# In here I will import everything, set parameters, and run codes
# This will be my main code if you will :)
# import tools
import math
import numpy as np
from scipy.linalg import solve_banded
from numpy.linalg import norm
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d
import os
# import files
from automatic_solver import *
from classic_arclength import *
from coupling import *
from deflated_continuation_code import *
from deflation import *
from equidistribute import *
from solution_discovery_code import *
from initial_guess_pool import *
from L2_optimal import *
from physical_solver import *
from system_and_jacobian import *
# set parameters
u_0 = 3/2
u_n = 1/2
N = 100
power = 2.5
alpha = 1
physical_tol = 1e-8
boor_tol = 1e-8
damping = True
#eps_0 = 0.05
#eps = eps_0
#eps_f = 1e-6
#delta_eps = 1e-6
eps_list_1 = np.logspace(-1, -6, 41) # set the range of epsilons
eps_list = [eps_list_1[i] for i in range(1, len(eps_list_1))] # take out the initial
E = 0.1 # set the initial
# set grids
grid = np.linspace(0, 1, N)
mesh = np.array([grid]).T
uni_grid = np.array([grid]).T
# set guesses
guess_list = []
guesses = [initial_guess_1, initial_guess_2, initial_guess_3, initial_guess_4, initial_guess_5]
for j in range(5):
initial_guess = guesses[j]
guess = []
for i in range(len(mesh)):
if i != 0:
if i != (len(mesh)-1):
val = [ initial_guess(mesh[i][0]) ]
guess.append(val)
guess = np.array( guess )
guess_list.append(guess)
# call solution discovery
chosen_sols, chosen_mesh = solution_discovery(mesh, uni_grid, guess_list, M_calc_optimal_L2, \
E, N, damping, alpha, power, [], [], 0, boor_tol, physical_tol, u_0, u_n)
# save the chosen solutions
# create the file path
my_path = '/home/margaretam/github_output/Output_From_MacLachlans_Computer/Continued_Deflation_Codes/output_plots_test2/test2_try2_'
print('My path is', my_path)
for i in range(len(chosen_sols)):
str_eps_i = str(E)
str_eps = str_eps_i.replace('0.', '')
my_plot = 'Solution_' + str(i+1) + '_at_eps_' + str_eps + '.pdf'
plt.figure()
plt.plot(chosen_mesh[i], chosen_sols[i], 'blue')
plt.plot(chosen_mesh[i], [0 for j in range(len(chosen_mesh[i]))], 'blue', marker = "|")
plt.title('Solution ' + str(i+1) + " found at eps = " + str(E))
plt.xlabel('grid')
plt.ylabel('u(x) approximation')
# print('The path to save the file is', os.path.join(my_path, my_plot))
print("The path to save the file is", my_path + my_plot)
print()
# plt.savefig(os.path.join(my_path, my_plot))
plt.savefig(my_path + my_plot)
plt.close()
# now lets call continued deflation
cont_defl_results = continued_deflation(eps_list, chosen_sols, chosen_mesh, guess, mesh, uni_grid, M_calc_optimal_L2, boor_tol, physical_tol, N, alpha, power, u_0, u_n, guess_list, damping, my_path)