Advertisement
Guest User

Newton

a guest
Jan 23rd, 2021
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. load "gmsh"
  2. int Verbosity = verbosity;
  3. verbosity = 0;
  4. mesh Th = gmshload("Mesh/teslaSmall02.msh");
  5.  
  6. bool backward = 1;
  7.  
  8. int INLET = 2-backward;
  9. int OUTLET = 1+backward;
  10. int WALL = 3;
  11.  
  12. real Remax = 500;
  13. int steps = 10;
  14. real k = 6e3;
  15. int maxIters = 50;
  16. real tol = 1e-8;
  17. real Re = Remax/steps;
  18.  
  19. fespace Vh(Th, P2);
  20. Vh u1, u2, v1, v2, du1, du2, w;
  21.  
  22. fespace Ph(Th, P1);
  23. Ph p, q, dp;
  24.  
  25. macro grad(u) [dx(u),dy(u)]//
  26. macro Grad(u1, u2) [grad(u1), grad(u2)]//
  27. macro div(u1, u2) (dx(u1)+dy(u2))//
  28. macro S(u1, u2) (0.5*(Grad(u1,u2)'+Grad(u1,u2)))//
  29. macro coord(x) ((x+1.333018)*sqrt(2))//
  30.  
  31. func gbackward = k*coord(x)*(coord(x)-0.1);
  32. func gforward = k*y*(y+0.1);
  33. solve Stokes(u1,u2,p,v1,v2,q) =
  34. int2d(Th) (
  35. q*div(u1,u2)
  36. -p*div(v1,v2)
  37. +2*(S(u1,u2):S(v1,v2))
  38. )
  39. +on(INLET, u1=(backward ? gbackward : gforward)*N.x, u2=(backward ? gbackward : gforward)*N.y)
  40. +on(WALL, u1=0, u2=0)
  41. ;
  42.  
  43. plot(p, fill=1, value=1, wait=1);
  44.  
  45. problem NewtonNS(du1,du2,dp,v1,v2,q) =
  46. int2d(Th) (
  47. q*div(du1,du2)
  48. +Re*([du1, du2]'*Grad(u1, u2))*[v1, v2]
  49. +Re*([u1, u2]'*Grad(du1, du2))*[v1, v2]
  50. -dp*div(v1,v2)
  51. +2*(S(du1,du2):S(v1,v2))
  52. +dp*q*1e-8
  53. )
  54. +int2d(Th) (
  55. q*div(u1,u2)
  56. +Re*([u1,u2]'*Grad(u1,u2))*[v1,v2]
  57. -p*div(v1,v2)
  58. +2*(S(u1,u2):S(v1,v2))
  59. )
  60. +on(INLET, OUTLET, WALL, du1=0, du2=0)
  61. ;
  62.  
  63. for (int i = 1; i <= maxIters; i++) {
  64. if (Re > Remax) break;
  65. NewtonNS;
  66. real err = int2d(Th) (sqrt(du1^2+du2^2));
  67. u1 = u1+du1;
  68. u2 = u2+du2;
  69. p = p+dp;
  70. real norm = int2d(Th) (sqrt(u1^2+u2^2));
  71. cout << i << ": " << err/norm << endl;
  72. if (err/norm < tol) {
  73. Vh w;
  74. w = sqrt(u1^2+u2^2);
  75. // plot(w, fill=1, value=1, cmm=Re);
  76. plot(p, fill=1, value=1, cmm=Re);
  77. cout << "SOLUTION REYNOLDS " << Re << endl;
  78. real inflow = int1d(Th, INLET) (u1*N.x+u2*N.y);
  79. real outflow = int1d(Th, OUTLET) (u1*N.x+u2*N.y);
  80. cout << "Inflow: " << inflow << endl;
  81. cout << "Outflow: " << outflow << endl;
  82. real pin = int1d(Th, INLET) (p);
  83. real pout = int1d(Th, OUTLET) (p);
  84. cout << "PRESSURE DROP: " << pin-pout << endl;
  85. Re+=Remax/steps;
  86. i = 0;
  87. }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement