-- FreeFem++ v4.14 (mer. 06 mars 2024 16:59:04 CET - git v4.14-1-g2b2052ae) file : driven_cavity_navier_stokes.edp Load: lg_fem lg_mesh lg_mesh3 eigenvalue 1 : // driven_cavity_navier_stokes.edp 2 : // 3 : // Discussion: 4 : // 5 : // Steady Navier-Stokes problem in a cavity. 6 : // 7 : // - uxx - uyy + u ux + v uy + px = uf 8 : // - vxx - vyy + u vx + v vy + py = vf 9 : // ux + vy = pf 10 : // 11 : // u = 1 along top wall. 12 : // 13 : // Licensing: 14 : // 15 : // This code is distributed under the MIT license. 16 : // 17 : // Modified: 18 : // 19 : // 22 May 2020 20 : // 21 : // Reference: 22 : // 23 : // John Chrispell, Jason Howell, 24 : // Finite Element Approximation of Partial Differential Equations 25 : // Using FreeFem++, or, How I Learned to Stop Worrying and Love 26 : // Numerical Analysis. 27 : // 28 : // Frederic Hecht, 29 : // New development in FreeFem++, 30 : // Journal of Numerical Mathematics, 31 : // Volume 20, Number 3-4, 2012, pages 251-265. 32 : // 33 : cout << "\n"; 34 : cout << "driven_cavity_navier_stokes():\n"; 35 : cout << " FreeFem++ version.\n"; 36 : cout << " Solve for steady Navier Stokes flow in a cavity ... : .\n"; 37 : // 38 : // eps: the penalty coefficient for the continuity equation. 39 : // 40 : real eps = 1.0E-10; 41 : // 42 : // n: the number of nodes in each spatial direction. 43 : // 44 : int n = 30; 45 : // 46 : // Th: the triangulation of the square. 47 : // 48 : mesh Th = square ( n, n ); 49 : // 50 : // Vh: the finite element space for 2D velocity vector (piecewise linear "bubble") 51 : // 52 : fespace Vh ( Th, P1b ); 53 : // 54 : // Qh: the finite element space for the scalar pressure (piecewise linear). 55 : // 56 : fespace Qh ( Th, P1 ); 57 : // 58 : // u1, u1o, u2, u2o: velocity trial functions. 59 : // 60 : Vh u1, u1o, u2, u2o; 61 : // 62 : // p: pressure trial functions. 63 : // 64 : Qh p; 65 : // 66 : // v1, v2: velocity test functions. 67 : // 68 : Vh v1, v2; 69 : // 70 : // q: pressure test functions. 71 : // 72 : Qh q; 73 : // 74 : // Define the problem. 75 : // 76 : problem navierstokes ( [u1,u2,p], [v1,v2,q] ) 77 : = int2d ( Th, qforder = 3 ) 78 : ( 79 : dx(u1) * dx(v1) 80 : + dy(u1) * dy(v1) 81 : + dx(p) * v1 82 : + u1*dx(u1o) * v1 83 : + u2*dy(u1o) * v1 84 : + u1o*dx(u1) * v1 85 : + u2o*dy(u1) * v1 86 : + dx(u2) * dx(v2) 87 : + dy(u2) * dy(v2) 88 : + dy(p) * v2 89 : + u1*dx(u2o) * v2 90 : + u2*dy(u2o) * v2 91 : + u1o*dx(u2) * v2 92 : + u2o*dy(u2) * v2 93 : + dx(u1) * q 94 : + dy(u2) * q 95 : - eps * p * q 96 : ) 97 : - int2d ( Th, qforder = 3 ) 98 : ( 99 : u1o*dx(u1o) * v1 100 : + u2o*dy(u1o) * v1 101 : + u1o*dx(u2o) * v2 102 : + u2o*dy(u2o) * v2 103 : ) 104 : + on ( 1, 2, 4, u1 = 0.0 ) 105 : + on ( 3, u1 = 1.0 ) 106 : + on ( 1, 2, 3, 4, u2 = 0.0 ); 107 : // 108 : // Initialize u1 and u2. 109 : // 110 : u1 = 0.0; 111 : u2 = 0.0; 112 : // 113 : // Seek a solution [u1,u2,p] of the nonlinear equations via a fixed point iteration. 114 : // 115 : for ( int i = 0; i < 10; i++ ) 116 : { 117 : u1o = u1; 118 : u2o = u2; 119 : navierstokes; 120 : } 121 : // 122 : // Plot the velocity vectors, using 1 color for the vectors. 123 : // 124 : string filename1 = "driven_cavity_navier_stokes_velocity.ps"; 125 : cout << " Graphics saved as '" + filename1 + "'"; 126 : plot ( [ u1, u2 ], nbarrow = 1, wait = false, 127 : cmm = "driven_cavity_navier_stokes velocity", ps = filename1 ); 128 : // 129 : // Plot the pressure. 130 : // 131 : string filename2 = "driven_cavity_navier_stokes_pressure.ps"; 132 : cout << " Graphics saved as '" + filename2 + "'"; 133 : plot ( p, wait = false, 134 : cmm = "driven_cavity_navier_stokes pressure", ps = filename2 ); 135 : // 136 : // Terminate. 137 : // 138 : cout << "\n"; 139 : cout << "driven_cavity_navier_stokes():\n"; 140 : cout << " Normal end of execution.\n"; 141 : 142 : exit ( 0 ); 143 : sizestack + 1024 =4264 ( 3240 ) driven_cavity_navier_stokes(): FreeFem++ version. Solve for steady Navier Stokes flow in a cavity. -- Square mesh : nb vertices =961 , nb triangles = 1800 , nb boundary edges 120 -- Solve : min -0.190866 max 1 min -0.326409 max 0.313182 min -487.151 max 399.511 -- Solve : min -0.190704 max 1 min -0.327774 max 0.311796 min -486.503 max 399.2 -- Solve : min -0.190704 max 1 min -0.327774 max 0.311796 min -486.503 max 399.2 -- Solve : min -0.190704 max 1 min -0.327774 max 0.311796 min -486.503 max 399.2 -- Solve : min -0.190704 max 1 min -0.327774 max 0.311796 min -486.503 max 399.2 -- Solve : min -0.190704 max 1 min -0.327774 max 0.311796 min -486.503 max 399.2 -- Solve : min -0.190704 max 1 min -0.327774 max 0.311796 min -486.503 max 399.2 -- Solve : min -0.190704 max 1 min -0.327774 max 0.311796 min -486.503 max 399.2 -- Solve : min -0.190704 max 1 min -0.327774 max 0.311796 min -486.503 max 399.2 -- Solve : min -0.190704 max 1 min -0.327774 max 0.311796 min -486.503 max 399.2 Graphics saved as 'driven_cavity_navier_stokes_velocity.ps' Graphics saved as 'driven_cavity_navier_stokes_pressure.ps' driven_cavity_navier_stokes(): Normal end of execution. current line = 142 exit(0) err code 0 , mpirank 0 CodeAlloc : nb ptr 4077, size :532616 mpirank: 0 Ok: Normal End