Exemplo n.º 1
0
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  
Exemplo n.º 2
0
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))