def _new_operator3(shape, time_order, **kwargs):
grid = Grid(shape=shape)
spacing = 0.1
a = 0.5
c = 0.5
dx2, dy2 = spacing**2, spacing**2
dt = dx2 * dy2 / (2 * a * (dx2 + dy2))
# Allocate the grid and set initial condition
# Note: This should be made simpler through the use of defaults
u = TimeFunction(name='u', grid=grid, time_order=1, space_order=2)
u.data[0, :] = np.arange(reduce(mul, shape), dtype=np.int32).reshape(shape)
# Derive the stencil according to devito conventions
eqn = Eq(u.dt, a * (u.dx2 + u.dy2) - c * (u.dxl + u.dyl))
stencil = solve(eqn, u.forward, rational=False)[0]
op = Operator(Eq(u.forward, stencil), **kwargs)
# Execute the generated Devito stencil operator
op.apply(u=u, t=10, dt=dt)
return u.data[1, :], op
评论列表
文章目录