def run_simulation(save=False, dx=0.01, dy=0.01, a=0.5, timesteps=100):
nx, ny = int(1 / dx), int(1 / dy)
dx2, dy2 = dx**2, dy**2
dt = dx2 * dy2 / (2 * a * (dx2 + dy2))
grid = Grid(shape=(nx, ny))
u = TimeFunction(
name='u', grid=grid, save=timesteps, initializer=initializer,
time_order=1, space_order=2
)
eqn = Eq(u.dt, a * (u.dx2 + u.dy2))
stencil = solve(eqn, u.forward)[0]
op = Operator(Eq(u.forward, stencil), time_axis=Forward)
op.apply(time=timesteps, dt=dt)
if save:
return u.data[timesteps - 1, :]
else:
return u.data[(timesteps+1) % 2, :]
评论列表
文章目录