Lid Driven Cavity Flow¶
Configuration¶
1. We want to have a lid driven cavity flow with (according to the QPF) :¶
Small Reynolds Number
Re = 0.000061
dom = DomainRectFluid(nu_=1.0, dimx=0.82, dimy=0.61, delta_x=0.02)
vel = 0.0001
cfd_lid_driven(10, 0.30)
2. Works also with another configuration to get another Reynolds number :¶
High Reynolds Number
Re = 300
size = 1.0
dom = DomainRectFluid(dimx=size, dimy=size, delta_x=size / 60, rho=1.0, nu_=0.01)
vel = 3.0
Because we are at high Reynolds number :
we need to have an important t_end
Moreover to avoid the following error:
RuntimeError: too many sub iterations 10101
one can put more saving moments to have weaker iterations.
Reference case¶
the script¶
"""Example on how to solve a Lid driven cavity problem with the navier stokes solver"""
from barbatruc.fluid_domain import DomainRectFluid
from barbatruc.fd_ns_2d import NS_fd_2D_explicit
# from barbatruc.lattice import Lattice
__all__ = ["cfd_lid_driven"]
# pylint: disable=duplicate-code
def cfd_lid_driven(nsave, tchar):
"""Startup computation
solve a lid_driven_cavity problem
"""
size = 1.0
dom = DomainRectFluid(dimx=size, dimy=size, delta_x=size / 60, rho=1.0, nu_=0.01)
vel = 3.0
t_end = tchar * size / vel
dom.switch_bc_xmin_wall_noslip()
dom.switch_bc_xmax_wall_noslip()
dom.switch_bc_ymax_moving_wall(vel_u=vel)
dom.switch_bc_ymin_wall_noslip()
time = 0.0
time_step = t_end / nsave
# solver = Lattice(dom, max_vel=2*vel)
solver = NS_fd_2D_explicit(
dom, obs_ib_factor=0.01, press_maxsteps=200, press_tol=5.0e-3, max_vel=4.0
)
for i in range(nsave):
time += time_step
solver.iteration(time, time_step)
print("\n\n===============================")
print(f"\n Iteration {i+1}/{nsave}, Time :, {time}s")
print(f" Reynolds : {dom.reynolds(size)}")
print(dom.fields_stats())
dom.dump_paraview(time=time)
dom.dump_global(time=time)
dom.show_fields()
dom.show_flow()
dom.show_profile_y(xtgt=0.41)
print("Normal end of execution.")
if __name__ == "__main__":
cfd_lid_driven(10, 10)
For Re = 0.000061¶
The flow output :¶
cavityflow
The fields :¶
cavityfields
The velocity profile :¶
cavityprofile
For Re = 300¶
The flow output :¶
cavity300flow
The fields :¶
cavityfields300
The velocity profile :¶
cavityeprofile300
Solver parameters:¶
cavitysolver
Before modifications:
solver = NS_fd_2D_explicit(dom, obs_ib_factor=0.9, max_vel=2*vel)
To make the residual better we used a small delta_x and we manipulated the different parameters of the solver until having satisfactory results:
solver = NS_fd_2D_explicit(
dom, obs_ib_factor=0.01, press_maxsteps=200, press_tol=5.0e-3, max_vel=4.0)
cavityVORTICITY
There is a high vorticity at the top corners, because they are singularities and the solver has difficulties to converge.
Comparison with the documentation for Re = 100¶
comparison
The curves are not exactly the same because the barbatruc solver is light weighted.
The blue curve is from the simulation and the orange curve is from the figure 5 (with AR=1) of the CFD SIMULATIONS OF LID DRIVEN CAVITY FLOW AT MODERATE REYNOLDS NUMBER, by Reyad Omari, Department of Mathematics, Al-Balqa Applied University, European Scientific Journal May 2013 edition vol.9, No.15 ISSN: 1857 – 7881 (Print) e - ISSN 1857- 7431 22
To have a better graph, one can try to:
- refine the mesh
- modify the pressure solver
Indeed, there are two main problems:
- the cavity has singularities
- there might be an issue of mass conservation, indeed the solver of Poisson did not converge enough and therefore mass conservation is not completely achieved