Advertisement
Guest User

Untitled

a guest
Aug 12th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scilab 4.44 KB | None | 0 0
  1. u = 1 //velocidade de propagação da onda
  2. p = 1 //periodo
  3. N = 100//valor
  4. te=0.8;
  5. dt = 0.008 //variação do tempo
  6. L = 1;
  7. dx = L/N; //variação do espaço
  8. C = u*(dt/dx) //número de Courant
  9. passodetempo=tempomax/dt
  10. count=0;
  11. x = 0:dx:dx
  12. tempomax=0.5
  13. c0=0
  14. condcontorno=1 //concentração
  15. Q0=zeros(1,N+5)
  16. //solanalitica
  17. solanalitica=Q0
  18. i=1
  19. for j=0:dt*2:te
  20.     solanalitica(i)=condcontorno
  21.     i=i+1
  22. end
  23. disp (solanalitica)
  24. function superbee = superbe(theta)
  25.         superbee = max(0,max (min(1,2*theta),min(2,theta)));
  26. endfunction
  27.  
  28. function mc = mcc(theta)
  29.         mc= max(0,min(min((1+theta)/2,2),2*theta ) );
  30. endfunction
  31.  
  32. function vanleer=vanlee(theta)
  33.          vanleer = (theta+abs(theta))/(1+abs(theta));
  34. endfunction
  35.  
  36. function thetanegativo= tneg(Q, i)
  37.    
  38.     if((Q(i) - Q(i-1)) == 0) then
  39.         thetanegativo= 0;
  40.     else
  41.         thetanegativo= (Q(i-1) - Q(i-2))/(Q(i) - Q(i-1));
  42.     end
  43.    
  44. endfunction
  45.  
  46. function thetapositivo= tpos(Q, i)
  47.    
  48.     if ((Q(i+1)-Q(i)) == 0) then
  49.        
  50.         thetapositivo= 0;
  51.        
  52.     else
  53.        
  54.         thetapositivo= (Q(i)-Q(i-1))/(Q(i+1) - Q(i));
  55.        
  56.     end
  57.    
  58. endfunction
  59.  
  60. //botando c0 no vetor de zeros e a cond de contorno
  61. //atribuindo o a condição inicial no vetos a partir da segunda posicao
  62. atrQmaisumUpwind=zeros(1,N+5)
  63. atrQUpwind=zeros(1,N+5)
  64. atrQmaisumVan=zeros(1,N+5)
  65. atrQVan=zeros(1,N+5)
  66. atrQmaisumMC=zeros(1,N+5)
  67. atrQMC=zeros(1,N+5)
  68. atrQmaisumSuperB=zeros(1,N+5)
  69. atrQSuperB=zeros(1,N+5)
  70.  
  71. for i = 1 : 1
  72.     atrQmaisumUpwind(i) = condcontorno;
  73.     atrQUpwind(i)=condcontorno;
  74.     atrQmaisumVan(i) = condcontorno;
  75.     atrQVan(i) = condcontorno;
  76.     atrQmaisumMC(i)=condcontorno;
  77.     atrQMC(i)=condcontorno;
  78.     atrQmaisumSuperB(i)=condcontorno;
  79.     atrQSuperB(i)=condcontorno;
  80.     Q0(i)=condcontorno;      
  81. end
  82. for i=2:N+5
  83.     atrQmaisumUpwind(i)=c0;
  84.     atrQUpwind(i)=c0;
  85.     atrQmaisumVan(i) = c0;
  86.     atrQVan(i) = c0;
  87.     atrQmaisumMC(i)=c0;
  88.     atrQMC(i)=c0;
  89.     atrQmaisumSuperB(i)=c0;
  90.     atrQSuperB(i)=c0;  
  91.     Q0(i)=c0;
  92. end
  93. //disp(atrQSuperB)
  94.    
  95. //utilizando a expressão fornecida
  96. for n = 1 : passodetempo
  97.        
  98.     i=2;
  99. //utilizando o metodo upwind pra atribuir o valor e começar as contas
  100.     atrQmaisumUpwind(i) = atrQUpwind(i) - C*(atrQUpwind(i)-atrQUpwind(i-1));
  101.     atrQmaisumSuperB(i) = atrQSuperB(i) - C*(atrQSuperB(i)-atrQSuperB(i-1));
  102.     atrQmaisumVan(i) = atrQVan(i) - C*(atrQVan(i)-atrQVan(i-1));
  103.     atrQmaisumMC(i) = atrQMC(i) - C*(atrQMC(i)-atrQMC(i-1));
  104.    
  105.         for i = 3 : N
  106.             //upwind
  107.             atrQmaisumUpwind(i) = atrQUpwind(i) - C*(atrQUpwind(i)-atrQUpwind(i-1));
  108.             //vanlee
  109.             D=(atrQVan(i) - C*(atrQVan(i)-atrQVan(i-1)))
  110.             F=((1/2)*C*(1 - C))*(vanlee(tpos(atrQVan,i))*(atrQVan(i+1)-atrQVan(i))-vanlee(tneg(atrQVan, i))*(atrQVan(i)-atrQVan(i-1)))
  111.             atrQmaisumVan(i) =  (D)-(F)
  112.            
  113.        
  114.             //superbee
  115.             A= (atrQSuperB(i) - C*(atrQSuperB(i)-atrQSuperB(i-1)))
  116.             B=((1/2)*C*(1 - C))*(superbe(tpos(atrQSuperB,i))*(atrQSuperB(i+1)-atrQSuperB(i))-superbe(tneg(atrQSuperB, i))*(atrQSuperB(i)-atrQSuperB(i-1)))
  117.             atrQmaisumSuperB(i) =(A)-(B)
  118.          
  119.             //mc
  120.             G=atrQMC(i) - C*(atrQMC(i)-atrQMC(i-1))
  121.             H=((1/2)*C*(1-C))*(mcc(tpos(atrQMC, i))*(atrQMC(i+1)-atrQMC(i)) - mcc(tneg(atrQMC, i))*(atrQMC(i)-atrQMC(i-1)))
  122.             atrQmaisumMC(i) = (G)-(H)
  123.             count = count + 1;
  124.         end
  125.    
  126.     x = x + dt;
  127.     atrQSuperB = atrQmaisumSuperB;
  128.     atrQMC = atrQmaisumMC;
  129.     atrQUpwind = atrQmaisumUpwind;
  130.     atrQVan = atrQmaisumVan;  
  131. end  
  132.  
  133. figure(1)
  134. titulo='Solução para Superbee para t=0.8'
  135. xtitle(titulo)
  136. plot(atrQSuperB,'y-','thickness', 2)
  137. plot(solanalitica,'b-','linest','--')
  138. a=get("current_axes")
  139. a.data_bounds=[-10,-0.5;110,1.5];
  140.  
  141. figure(2)
  142. titulo='Solução Van Leer para t=0.8'
  143. xtitle(titulo)
  144. plot(atrQVan,'y-','thickness', 2)
  145. plot(solanalitica,'b-','linest','--')
  146. a=get("current_axes")
  147. a.data_bounds=[-10,-0.5;110,1.5];
  148.  
  149. figure(3)
  150. titulo='Solução Upwind para t=0.8'
  151. xtitle(titulo)
  152. plot(atrQUpwind,'y-','thickness', 2)
  153. plot(solanalitica,'b-','linest','--')
  154. a=get("current_axes")
  155. a.data_bounds=[-10,-0.5;110,1.5];
  156.  
  157. figure (4)
  158. titulo='Solução MC para t=0.8'
  159. xtitle(titulo)
  160. plot(atrQMC,'y-','thickness', 2)
  161. plot(solanalitica,'b-','linest','--')
  162. a=get("current_axes")
  163. a.data_bounds=[-10,-0.5;110,1.5];
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement