Source code for pyro.incompressible.problems.converge
r"""
Initialize a smooth incompressible convergence test. Here, the
velocities are initialized as
.. math::
u(x,y) = 1 - 2 \cos(2 \pi x) \sin(2 \pi y)
v(x,y) = 1 + 2 \sin(2 \pi x) \cos(2 \pi y)
and the exact solution at some later time t is then
.. math::
u(x,y,t) = 1 - 2 \cos(2 \pi (x - t)) \sin(2 \pi (y - t))
v(x,y,t) = 1 + 2 \sin(2 \pi (x - t)) \cos(2 \pi (y - t))
p(x,y,t) = -\cos(4 \pi (x - t)) - \cos(4 \pi (y - t))
The numerical solution can be compared to the exact solution to
measure the convergence rate of the algorithm. These initial
conditions come from Minion 1996.
"""
import math
import numpy as np
from pyro.util import msg
DEFAULT_INPUTS = "inputs.converge.64"
PROBLEM_PARAMS = {}
[docs]
def init_data(my_data, rp):
""" initialize the incompressible converge problem """
if rp.get_param("driver.verbose"):
msg.bold("initializing the incompressible converge problem...")
# get the velocities
u = my_data.get_var("x-velocity")
v = my_data.get_var("y-velocity")
myg = my_data.grid
if (myg.xmin != 0 or myg.xmax != 1 or
myg.ymin != 0 or myg.ymax != 1):
msg.fail("ERROR: domain should be a unit square")
u[:, :] = 1.0 - 2.0*np.cos(2.0*math.pi*myg.x2d)*np.sin(2.0*math.pi*myg.y2d)
v[:, :] = 1.0 + 2.0*np.sin(2.0*math.pi*myg.x2d)*np.cos(2.0*math.pi*myg.y2d)
[docs]
def finalize():
""" print out any information to the user at the end of the run """
ostr = """
Comparisons to the analytic solution can be done using
analysis/incomp_converge_error.py
"""
print(ostr)