def discSol(h): (p,t,e,z,be)=mesh.generate_quad_adapt_triangulation(h,1,False) width=mesh.max_mesh_width() nDN=FE.notDiricNodes(p,t,be) Stiff=FE.stiffness(p,t).tocsr() #Mass=FE.mass(p,t).tocsr() Load=FE.load(p,t,3,f) N=sp.lil_matrix((nDN.size,p[0:,0].size)) for j in range(nDN.size): # Initialisierung von Reduktionsmatrizen, aehnlich der T Matrizen. N[j,nDN[j]]=1 # Dies sind quasi NxN Einheitsmatrizen bei denen die Zeilen entfernt # sind, deren Indizes mit denen der Boundary Nodes korrelieren. rStiff=N.dot(Stiff).dot(N.transpose()) # Durch Multiplikation der N Matrizen von Links und Rechts werden die #rMass=N.dot(Mass).dot(N.transpose()) rLoad=N.dot(Load) run=spla.spsolve(rStiff,rLoad) un=N.transpose().dot(run) """ if h==0.2: FE.plot(p,t,un) plt.title('Diskrete Loesung') plt.show() #""" return (np.dot(un, Load),width) #nDN.size
import FEM as FE import numpy as np import scipy.sparse as sp import scipy.sparse.linalg as spla import math as m import meshes as mesh import matplotlib.pyplot as plt (p,t,e,z,be)=mesh.generate_quad_adapt_triangulation(0.5,1,False) Diff=np.zeros((8,1)) M=p[:,0].size+t[:,0].size for j in range(7): h=0.5*m.pow(0.5,(j+1)/2.) (p,t,e,z,be)=mesh.generate_quad_adapt_triangulation(h,1,False) N=p[:,0].size+t[:,0].size Diff[j,0]=N/M M=N print('The average multiplier of nodes and cells when dividing the mesh width with sqRoot(2) over 7 steps is:') print(np.mean(Diff))