Advertisement
Guest User

Untitled

a guest
Jun 17th, 2013
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.69 KB | None | 0 0
  1. function elastic_wave_simplified( )
  2.  
  3. rho = 1000;
  4. E = 100;
  5. N = 201;
  6. L = 4;
  7. xp = linspace(0,L,N);
  8.  
  9. kh = 1;
  10. h = kh*(xp(2)-xp(1));
  11.  
  12. vp(1:N) = 0;
  13. sp(1:N) = 0;
  14.  
  15. m = L*rho/(N-1);
  16.  
  17. t = 0;
  18. dt = 0.01/kh;
  19. tfinal = 20;
  20.  
  21. while(t<tfinal)
  22.     t = t+dt;
  23.    
  24.     %calculate spatial derivative of stress
  25.     dsdxp(1:N) = 0;    
  26.     for i=1:N
  27.         xi = xp(i);
  28.         si = sp(i);
  29.        
  30.         dsdx = 0;
  31.         frac = 0;
  32.        
  33.         for j=1:N
  34.             if (i==j)
  35.                 continue;
  36.             end
  37.             xj = xp(j);
  38.             sj = sp(j);
  39.             [~,dwdx] = myzeta(h,xi-xj);
  40.             if (dwdx == 0)
  41.                 continue;
  42.             end
  43.             dsdx = dsdx + m/rho*(sj-si)*dwdx;            
  44.         end
  45.        
  46.         dsdxp(i) = dsdx;      
  47.     end
  48.    
  49.     %integrate velocity in time
  50.     vp = vp +dt*1/rho*dsdxp;    
  51.    
  52.     %calculate spatial derivative of velocity
  53.     dvdxp(1:N) = 0;
  54.     for i=1:N
  55.         xi = xp(i);
  56.         vi = vp(i);
  57.        
  58.         dvdx = 0;
  59.         frac = 0;
  60.        
  61.         for j=1:N
  62.             if (i==j)
  63.                 continue;
  64.             end
  65.             xj = xp(j);
  66.             vj = vp(j);
  67.             [~,dwdx] = myzeta(h,xi-xj);
  68.             if (dwdx == 0)
  69.                 continue;
  70.             end
  71.             dvdx = dvdx + m/rho*(vj-vi)*dwdx;            
  72.         end
  73.        
  74.         dvdxp(i) = dvdx;        
  75.     end
  76.    
  77.     sp = sp + dt*E*dvdxp;
  78.    
  79.     %enforce boundary conditions
  80.     if (t<4)
  81.         sp(N) = 10*sin(pi/4*t);            
  82.     else
  83.         sp(N) = 0;        
  84.     end
  85.        
  86.     plot(xp,vp);
  87.     axis([0,4,-0.04,0.04]);
  88.     drawnow;    
  89. end
  90.  
  91. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement