It is stated here that FiPy was not good at handling Hyperbolic PDE's. However this forum was written in 2016 so maybe things have changed a bit.
I would like to implement the 2D Burgers Equation:
$$
u_t + (u \partial_x + v \partial_y) u = -\nu * \nabla^{2} u \
v_t + (u \partial_x + v \partial_y) v = -\nu * \nabla^{2} v
$$
where $u$ and $v$ are the x and y components of that fluid flow $ U = (u, v) $.
To make my life a bit easier, I employed the chain rule to rewrite the equations as
$$
u_t + \nabla \cdot (U u) = (\nabla \cdot U) u - \nu * \nabla^{2} u \
v_t + \nabla \cdot (U v) = (\nabla \cdot U) v - \nu * \nabla^{2} v
$$
What this translates to in FiPy would be something like this:
u = CellVariable(name='u', mesh=m)
v = CellVariable(name='v', mesh=m)
U = CellVariable(name='U', mesh=m, value=(u, v))
eqn1 = TransientTerm(var=u) + ConvectionTerm(coeff=U, var=u) == DiffusionTerm(coeff=-nu, var=u) + # Not Sure what
eqn2 = TransientTerm(var=v) + ConvectionTerm(coeff=U, var=v) == DiffusionTerm(coeff=-nu, var=v) + # Not Sure what
burgersEq2D = eqn1 & eqn2
My question is: How do I finish implementing eqn1
and eqn2
?
I would write
Writing
will leave
U
with the value of the initial condition and will not update as the problem evolves, whereas the expression I wrote will update as necessary.Also, I believe you have a sign error in the diffusion term. A negative diffusion coefficient on the right-hand side is destabilizing and is also not consistent with the statements of Burgers' equation I've seen.