@@ -46,24 +46,17 @@ def __init__(self,h,delta_factor,iter):
4646 #index = 0
4747 for i in range (0 ,n ):
4848 for j in range (0 ,n + 2 * self .delta_factor ):
49- self .nodes .append ([i * h ,(j - self .delta_factor )* h ])
50- #index += 1
49+ self .nodes .append ([i * h ,(j - self .delta_factor )* h ])
5150
5251 self .nodes = np .array (self .nodes )
5352
54- #plt.show()
55- #sys.exit(1)
56-
57- #self.fix = np.sort(self.fix)
58-
59- #self.nodes = np.array(self.nodes)
60-
6153 self .V = np .empty (len (self .nodes ))
6254 self .V .fill (h * h )
6355
6456 self .d = np .zeros (len (self .nodes ))
6557
6658 self .VB = np .pi * self .delta * self .delta
59+
6760 # Search neighbors
6861 self .searchNeighbors ()
6962
@@ -80,25 +73,8 @@ def __init__(self,h,delta_factor,iter):
8073
8174 #Apply the boundary load to the extension
8275
83- #print(min(self.nodes[:,1]))
84- #scale = 1/7
85-
8676 for i in range (0 ,len (self .nodes )):
87- #if self.nodes[i][1] <= 0 : #and self.nodes[i][0] < 2.4 :
88- # self.wCurrentExtension[i][1] = (.125 / 11.5) * (11.5 -self.nodes[i][1])
89- # self.loadB.append(i)
90- #
91- #elif self.nodes[i][1] >= 15 : #and self.nodes[i][0] < 2.4 :
92- # self.wCurrentExtension[i][1] = 0 #-0.125
93- # self.loadT.append(i)
94- #
95- #elif self.nodes[i][1] > 0 and self.nodes[i][1] <= 2.5 :
96- # self.wCurrentDomain[i][1] = (.125 / 11.5) * (11.5 -self.nodes[i][1])
97- #
98- #elif self.nodes[i][1] < 15 and self.nodes[i][1] >= 2.5 :
99- # self.wCurrentDomain[i][1] = 0 # (-.125 / 7.5) * (self.nodes[i][1]-7.5)
100-
101-
77+
10278 if self .nodes [i ][1 ] > 7.5 :
10379 self .wCurrentExtension [i ][1 ] = (- 1e-1 ) * (self .nodes [i ][1 ] - 7.5 ) / 15.5 - 1e-2 # * (15 - self.nodes[i][0] ) / 15
10480 self .loadB .append (i )
@@ -107,23 +83,6 @@ def __init__(self,h,delta_factor,iter):
10783 self .wCurrentExtension [i ][1 ] = (1e-1 ) * ( - 7.5 + self .nodes [i ][1 ] ) / - 15.5 + 1e-2 # * (15 - self.nodes[i][0] ) / 15
10884 self .loadT .append (i )
10985
110- #if self.nodes[i][1] >= 15 :
111- # self.wCurrentExtension[i][1] = -1e-4
112-
113- #if self.nodes[i][1] <= 0 :
114- # self.wCurrentExtension[i][1] = 1e-4
115-
116-
117- #if self.nodes[i][0] > 15 - h and self.nodes[i][1] >= 7.5 and self.nodes[i][1] < 7.5 + 1*h :
118- # self.fix.append(i)
119- # self.wCurrentExtension[i][1] = 0
120- # print("d")
121-
122- #elif self.nodes[i][0] > 15-h and self.nodes[i][1] < 7.5 and self.nodes[i][1] >= 7.5 - 1*h :
123- # self.fix.append(i)
124- # self.wCurrentExtension[i][1] = 0
125- # print("d2")
126-
12786 if self .nodes [i ][0 ] > 15 - h and self .nodes [i ][1 ] > 15 + self .delta - h :
12887 self .fix .append (i )
12988 self .wCurrentExtension [i ][1 ] = 0
@@ -133,29 +92,19 @@ def __init__(self,h,delta_factor,iter):
13392 self .fix .append (i )
13493 self .wCurrentExtension [i ][1 ] = 0
13594 print ("d2" )
136-
137-
138- #elif self.nodes[i][1] >= 15 and self.nodes[i][0] > 2.4 and self.nodes[i][0] <= 15 :
139- # self.wCurrent[i][1] = -.125 / 5
140-
141- #elif self.nodes[i][1] <= 0 and self.nodes[i][0] > 2.4 and self.nodes[i][0] <= 15 :
142- # self.wCurrent[i][1] = .125 / 5
143-
144- #else:
145- #plt.scatter(self.nodes[i][0],self.nodes[i][1],color="red")
14695
14796 self .fix = np .sort (self .fix )
14897 print (self .fix )
14998
150- #self.remove = np.concatenate([self.fix,self.loadT,self.loadB] )
151- #self.remove = np.sort(self.remove)
152-
153-
154- #plt.scatter(self.nodes[:,0],self.nodes[:,1],c= self.wCurrentExtension[:,1],cmap="seismic" )
155- #for i in self.fix :
156- # plt.scatter(self.nodes[i,0],self.nodes[i,1],c="black ")
157- #plt.colorbar( )
158- #plt.show( )
99+ #ax = plt.gca( )
100+ #ax.set_facecolor('#F0F8FF')
101+ #plt.scatter(self.nodes[:,0],self.nodes[:,1],c=-self.wCurrentExtension[:,1],cmap="seismic",marker="s",s=np.sqrt(30))
102+ #v = np.linspace(min(self.wCurrentExtension[:,1]), max(self.wCurrentExtension[:,1]), 6, endpoint=True)
103+ #clb = plt.colorbar(ticks=v,format='%.1e' )
104+ #clb.set_label(r'Displacement $w_y$')
105+ #plt.xlabel(r"Position $x$ ")
106+ #plt.ylabel(r"Poistion $y$" )
107+ #plt.savefig("w.pdf",bbox_inches='tight' )
159108 #sys.exit(1)
160109
161110 else :
@@ -172,26 +121,12 @@ def searchNeighbors(self):
172121 right = np .array ([7.5 ,7.5 ])
173122 neighbor = []
174123
175-
176- #fig = plt.gcf()
177- #fig.set_size_inches(4,50)
178-
179124 for i in range (0 ,len (self .nodes )):
180125 self .neighbors .append ([])
181126 for j in range (0 ,len (self .nodes )):
182127 if i != j and self .length (j ,i ) <= self .delta :
183128 if not self .intersect (left ,right ,self .nodes [i ],self .nodes [j ]):
184129 self .neighbors [i ].append (j )
185- #plt.plot([self.nodes[i][0],self.nodes[j][0]],[self.nodes[i][1],self.nodes[j][1]],c="#91A3B0",alpha=0.15)
186- #neighbor.append(len(self.neighbors[i]))
187-
188- #plt.scatter(self.nodes[:,0],self.nodes[:,1],c=neighbor)
189- #plt.xlabel("Position $x$",fontsize = 30)
190- #plt.ylabel("Position $y$",fontsize = 30)
191- #clb = plt.colorbar()
192- #clb.set_label(r'$B_\delta(x)$',labelpad=5)
193- #plt.show()
194- #sys.exit()
195130
196131 def L (self ,i ,j ):
197132 r = np .sqrt (self .length (i ,j )) * self .S (i ,j )
@@ -204,9 +139,6 @@ def computeLoad(self,iter):
204139
205140 self .uCurrent += iter * self .wCurrentExtension
206141
207- #if iter == 1:
208- #self.uCurrent += iter * self.wCurrentDomain
209-
210142 for i in range (0 ,len (self .nodes )):
211143 for j in self .neighbors [i ]:
212144
@@ -216,24 +148,16 @@ def computeLoad(self,iter):
216148
217149 self .uCurrent -= iter * self .wCurrentExtension
218150
219- #if iter == 1:
220- #self.uCurrent -= iter * self.wCurrentDomain
221-
222151 def residual (self ,iter ):
223152 self .f .fill (0 )
224153
225- #self.uCurrent =+ iter * self.wCurrent
226-
227154 for i in range (0 ,len (self .nodes )):
228155 for j in self .neighbors [i ]:
229156
230157 tmp = self .L (i ,j )
231158 self .f [2 * i ] += tmp [0 ]
232159 self .f [2 * i + 1 ] += tmp [1 ]
233160
234- #self.uCurrent =- iter * self.wCurrent
235-
236-
237161 def computeDamage (self ):
238162
239163 for i in range (0 ,len (self .nodes )):
@@ -316,11 +240,7 @@ def solve(self,maxIt,epsilion):
316240
317241
318242 print (" ##### Load step: " + str (iter + self .iter ) + " #####" )
319- #self.residual(iter)
320-
321- #print("Residual with intial guess",np.linalg.norm(self.f))
322-
323-
243+
324244 residual = np .finfo (float ).max
325245 residual_old = 0
326246
@@ -337,6 +257,7 @@ def solve(self,maxIt,epsilion):
337257 self .matrix = np .delete (self .matrix ,index ,0 )
338258
339259 it = 1
260+
340261 while (residual > epsilion ):
341262
342263
@@ -374,47 +295,16 @@ def solve(self,maxIt,epsilion):
374295 if not i in self .fix :
375296 unew [i ] = np .array ([res [2 * j ],res [2 * j + 1 ]])
376297 j += 1
377- #elif i in self.loadT:
378- # unew[i] = iter* np.array([0,0.125])
379- #elif i in self.loadB:
380- # unew[i] = iter * np.array([0,-.125])
381-
382- #plt.scatter(self.nodes[:,0],self.nodes[:,1],c=self.uCurrent[:,1])
383- #plt.colorbar()
384- #plt.xlabel("X")
385- #plt.xlabel("Y")
386- #plt.title("u current")
387- #plt.show()
388-
389298
390299 self .uCurrent += unew
391300
392- #self.residual(iter)
393301 self .computeLoad (iter )
394- #self.residual(iter)
395-
396- #extension1 = []
397- #extension2 = []
398-
399- #for i in range(0,len(self.nodes)):
400- # if i in self.loadT or i in self.loadB :
401- # #extension.append(abs(iter*self.wCurrentExtension[i])-abs(self.uCurrent[i]))
402- # extension1.append(iter*abs(self.wCurrentExtension[i]))
403- # extension2.append(self.uCurrent[i])
404-
405- #print(np.linalg.norm(extension1),np.linalg.norm(extension2))
406- #residual = np.linalg.norm(extension1) - np.linalg.norm(extension2)
407- #residual = np.linalg.norm(iter * self.wCurrent-extension)
408- #residual = np.linalg.norm(extension)
409- #residual = np.linalg.norm(self.b+self.f)
302+
410303 residual = np .linalg .norm (self .uCurrent ) - residual_old
411304 residual_old = np .linalg .norm (self .uCurrent )
412305 print ("Iteration " ,it ," Residual: " ,residual )
413306 it += 1
414307
415- #if it == 10 :
416- # break
417-
418308 self .computeDamage ()
419309 self .plot (iter )
420310 self .dump (iter )
0 commit comments