def run(): dim = 2 _a = mkarray((dim, )) nr = _a(50) rmin = _a(0) rmax = _a(1, 2) dr = (rmax - rmin) / (nr - 1) bounds = [rmin, rmax] _p = np.zeros(nr) _b = np.zeros(nr) _r = [np.linspace(0, s, n) for s, n in zip(bounds[1], nr)] # source nx, ny = nr _b[int(nx / 4), int(ny / 4)] = 100 _b[int(3 * nx / 4), int(3 * ny / 4)] = -100 poisson(_p, _b, dr) plot_2D(_r, _p) pyplot.show()
p = np.zeros(nr) nt = 100 return solve(nt, (u, v), dt, dr, p, rho, nu) def plot_field(X, Y, p, uv): u, v = uv fig = pyplot.figure(figsize=(11, 7), dpi=100) pyplot.contour(X, Y, p, alpha=0.5, cmap=cm.viridis) pyplot.colorbar() pyplot.contour(X, Y, p, cmap=cm.viridis) # pyplot.quiver(X[::2, ::2], Y[::2, ::2], u[::2, ::2], v[::2, ::2]) pyplot.streamplot(X, Y, u, v) pyplot.xlabel('X') pyplot.ylabel('Y') dim = 2 _a = _lib.mkarray((dim,)) nr = _a(41) rmin = _a(0) rmax = _a(2) dr = (rmax - rmin)/(nr - 1) r = _lib.linspaces([rmin, rmax], nr) R = np.meshgrid(*r) if __name__ == '__main__': uv, p = run(nr, dr) plot_field(*R, p, uv) pyplot.show()
# 2D linear convection import math import numpy as np from matplotlib import pyplot, cm from mpl_toolkits.mplot3d import Axes3D ##New Library required for projected 3d plots import _lib from _lib import plot, compare, wall_boundary # def v(*a): return np.array(a) v = _lib.mkarray((2, )) # constants wall = (1) rbox = [v(0), v(2)] num_r = v(11) num_t = 100 c = 1 dr = rbox[1] / (num_r - 1) sigma = 0.2 dt = sigma * np.prod(dr) dx, dy = dr # iterative def _step_it(u): u = u.copy() for n in range(num_t): un = u.copy() row, col = u.shape