<< Click to Display Table of Contents >> equation_iteration |
{ EQUATION_ITERATION.PDE
This example is a modification of the LOWVISC.PDE problem to show the use
of the START_ITERATION - END_ITERATION construct. The X and Y velocities
(U and V) are calculated independently, but iterated until mutual convergence.
This is not a better way to solve this particular problem, but simply an exanple
of the usage for the START_ITERATATION - END_ITERATION construct.
}
title 'Viscous flow in 2D channel, Re > 40'
variables
u(0.1)
v(0.01)
p(1)
psi
select
ngrid=40
definitions
Lx = 5 Ly = 1.5
p0 = 2
speed2 = u^2+v^2
speed = sqrt(speed2)
dens = 1
visc = 0.04
vxx = -(p0/(2*visc*(2*Lx)))*(Ly^2-y^2) { open-channel x-velocity }
rball=0.4
cut = 0.1 { value for bevel at the corners of the obstruction }
penalty = 100*visc/rball^2
Re = globalmax(speed)*(Ly/2)/(visc/dens)
w = zcomp(curl(u,v)) ! vorticity is the source for streamline equation
initial values
u = 0.5*vxx v = 0 p = p0*(Lx+x)/(2*Lx)
equations
! Iterate U and V until mutual convergence
start_iteration
u: visc*div(grad(u)) - dx(p) = dens*(u*dx(u) + v*dy(u))
p: div(grad(p)) = penalty*(dx(u)+dy(v))
then
v: visc*div(grad(v)) - dy(p) = dens*(u*dx(v) + v*dy(v))
p: div(grad(p)) = penalty*(dx(u)+dy(v))
end_iteration
then
psi: div(grad(psi)) + w = 0 ! solve streamline equation separately from velocities
boundaries
region 1
start(-Lx,0)
load(u) = 0 value(v) = 0 load(p) = 0 value(psi)=0
line to (Lx/2-rball,0)
value(u) = 0 value(v) = 0 load(p) = 0
mesh_spacing=rball/10 ! dense mesh to resolve obstruction
line to (Lx/2-rball,rball) bevel(cut)
to (Lx/2+rball,rball) bevel(cut)
to (Lx/2+rball,0)
mesh_spacing=10*rball ! cancel dense mesh requirement
load(u) = 0 value(v) = 0 load(p) = 0
line to (Lx,0)
load(u) = 0 value(v) = 0 value(p) = p0 natural(psi)=0
line to (Lx,Ly)
value(u) = 0 value(v) = 0 load(p) = 0 natural(psi)=normal(-v,u)
line to (-Lx,Ly)
load(u) = 0 value(v) = 0 value(p) = 0 natural(psi)=0
line to close
monitors
contour(speed) report(Re)
contour(psi) as "Streamlines"
contour(max(psi,-0.003)) zoom(Lx/2-3*rball,0, 3*rball,3*rball) as "Vortex Streamlines"
vector(u,v) as "flow" zoom(Lx/2-3*rball,0, 3*rball,3*rball) norm
plots
contour(u) report(Re)
contour(v) report(Re)
contour(speed) painted report(Re)
vector(u,v) as "flow" report(Re)
contour(p) as "Pressure" painted
contour(dx(u)+dy(v)) as "Continuity Error"
elevation(u) from (-Lx,0) to (-Lx,Ly)
elevation(u) from (0,0) to (0,Ly)
elevation(u) from (Lx/2,0) to (Lx/2,Ly)
elevation(u) from (Lx,0) to (Lx,Ly)
contour(psi) as "Streamlines"
contour(max(psi,-0.003)) zoom(Lx/2-3*rball,0, 3*rball,3*rball) as "Vortex Streamlines"
vector(u,v) as "flow" zoom(Lx/2-3*rball,0, 3*rball,3*rball) norm
Transfer(u,v,p) ! write flow solution as initial values for Coupled_contaminant.pde
end