FV_6.m 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. clc;clear all;close all;
  2. % comparaison de la solution numerique et analytique de l'exercice FV6
  3. % Probleme de convection-diffusion (stationaire)avec stabilisation SUPG
  4. % conditions de dirichlet nulles aux deux extremites
  5. % H.Oudin
  6. L=1;r=1;V=1;
  7. Pe = input('donner le nombre de peclet du probleme ? [10]: ');
  8. if isempty(Pe) Pe=10; end
  9. Dk=V*L/Pe; % diffusivite du milieu en fonction de Pe
  10. nelt = input('donner le nombre d''element en x (longueur) ? [3]: ');
  11. if isempty(nelt) nelt=3; end
  12. n=nelt-1;
  13. Le=L/nelt;
  14. K=zeros(n); F=r*Le*ones(n,1);
  15. taille = get(0,'ScreenSize');
  16. figure('Name','comparaison sol EF - analytique',...
  17. 'Position',[taille(3)/2.01 taille(4)/2.6 taille(3)/2 taille(4)/2])
  18. hold on,
  19. %----- solution analytique il faut utiliser la solution ue dans fa1
  20. %ue = dsolve('-k*D2u + V*Du = r','u(0)=0','u(L)=0');
  21. %ue = simple(ue);
  22. fa1=@(t) r*(-exp(V/Dk*t)*L-t+t*exp(V/Dk*L)+L)/V/(-1+exp(V/Dk*L));
  23. fplot(fa1,[0 L],'r');
  24. %fa=@(x) x/L-(exp(Pe*x/L)-1)/(exp(Pe)-1);
  25. %fplot(fa,[0 L],'r'),
  26. %----- solution numerique sans stabilisation
  27. Peh=V*Le/(2*Dk);
  28. for i=1:n-1
  29. K(i,i)=2/Peh;
  30. K(i,i+1)=1-1/Peh;
  31. K(i+1,i)=-1-1/Peh;
  32. end
  33. K(n,n)=2/Peh; %disp(K); disp(F);
  34. K=V*K/2.;
  35. U = K\F ;
  36. x1=0;x2=Le;
  37. x=x1:Le/10:x2; y=U(1)*x/Le; plot(x,y,'b');
  38. for i=2:n
  39. x1=(i-1)*Le; x2=i*Le;
  40. x=x1:Le/10:x2; y=U(i-1)+(U(i)-U(i-1))*(x-x1)/Le; plot(x,y,'b');
  41. end
  42. x1=n*Le; x2=L;
  43. x=x1:Le/10:x2; y=U(n)-U(n)*(x-x1)/Le; plot(x,y,'b');
  44. legend('sol. analytique en rouge','Sol. EF en bleu',2);
  45. grid
  46. %----- solution numerique avec stabilisation SUPG
  47. beta = input('donner la valeur du coefficient de stabilisation choisie? [nominal]: ');
  48. if isempty(beta) beta=Le*(coth(Peh)-1/Peh)/(2*V)% valeur optimale de stabilisation
  49. end
  50. figure('Name','comparaison sol EF - analytique avec stabilisation',...
  51. 'Position',[taille(3)/2.01 taille(4)/2.6 taille(3)/2 taille(4)/2])
  52. hold on,
  53. fa1=@(t) r*(-exp(V/Dk*t)*L-t+t*exp(V/Dk*L)+L)/V/(-1+exp(V/Dk*L));
  54. fplot(fa1,[0 L],'r');
  55. x1=0;x2=Le;
  56. x=x1:Le/10:x2; y=U(1)*x/Le; plot(x,y,'b');
  57. for i=2:n
  58. x1=(i-1)*Le; x2=i*Le;
  59. x=x1:Le/10:x2; y=U(i-1)+(U(i)-U(i-1))*(x-x1)/Le; plot(x,y,'b');
  60. end
  61. x1=n*Le; x2=L;
  62. x=x1:Le/10:x2; y=U(n)-U(n)*(x-x1)/Le; plot(x,y,'b');
  63. Ksup=zeros(n);
  64. for i=1:n-1
  65. Ksup(i,i)=2/Le;
  66. Ksup(i,i+1)=-1/Le;
  67. Ksup(i+1,i)=-1/Le;
  68. end
  69. Ksup(n,n)=2/Le; %disp(K); disp(F);
  70. K = K + V*V*beta*Ksup;
  71. U1 = K\F ;
  72. x1=0;x2=Le;
  73. x=x1:Le/10:x2; y=U1(1)*x/Le; plot(x,y,'g');
  74. for i=2:n
  75. x1=(i-1)*Le; x2=i*Le;
  76. x=x1:Le/10:x2; y=U1(i-1)+(U1(i)-U1(i-1))*(x-x1)/Le; plot(x,y,'g');
  77. end
  78. x1=n*Le; x2=L;
  79. x=x1:Le/10:x2; y=U1(n)-U1(n)*(x-x1)/Le; plot(x,y,'g');
  80. legend('sol. analytique en rouge','Sol. EF en bleu','avec stabilisation en vert',2);
  81. grid