Source code for 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.

"""

from __future__ import print_function

import math
import numpy as np

import mesh.patch as patch
from util import msg


[docs]def init_data(my_data, rp): """ initialize the incompressible converge problem """ msg.bold("initializing the incompressible converge problem...") # make sure that we are passed a valid patch object if not isinstance(my_data, patch.CellCenterData2d): print(my_data.__class__) msg.fail("ERROR: patch invalid in converge.py") # 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)