def test_several_steps(): sim = Simulation() sim.addQuantity('time', Quantity(0, 'simulation time')) sim.addQuantity('dt', Quantity(1, 'time step')) def timeupdate(time): time += time.owner.dt sim.time.updater = timeupdate sim.diastoler = DataUpdater(['time']) sim.update() sim.update() sim.update() sim.update() assert sim.time == 4 assert np.all(sim.data['time'][:, 0] == [1, 2, 3, 4])
def test_simulation(): """run a toy simulation set up a dummy simulation to check if the values update as we expect. """ sim = Simulation() yinit = 2.0 zinit = 3.0 sim.addQuantity('nx', Quantity(100, 'size of x', constant=True)) sim.addQuantity('x', Quantity(np.linspace(0, 1, sim.nx), info='x grid', constant=True)) sim.addQuantity('y', Quantity(yinit * np.ones_like(sim.x), info='y value', constant=False)) sim.addQuantity('z', Quantity(zinit * np.ones_like(sim.x), info='z value', constant=False)) sim.addQuantity('time', Quantity(0.0, 'simulation time [s]')) sim.addQuantity('dt', Quantity(1.0, 'time step [s]')) def timeupdate(time): time += time.owner.dt def dummyupdate(y): y *= 2 sim.time.updater = timeupdate sim.y.updater = dummyupdate sim.z.updater = dummyupdate sim.diastoler = DataUpdater(['time', 'y', 'z']) # check if the update order properties work as desired order = ['nx', 'x', 'y', 'z', 'time', 'dt'] new_order = order[::-1] for _order in [sim.systole_order, sim.update_order, sim.diastole_order]: assert _order == order sim.systole_order = new_order sim.update_order = new_order sim.diastole_order = new_order for _order in [sim.systole_order, sim.update_order, sim.diastole_order]: assert _order == new_order # now check that things after the update are as expected sim.update() # check if time and values were updated assert sim.time == sim.dt assert sim.y[0] == yinit * 2.0 assert sim.z[1] == zinit * 2.0 assert sim.data['y'].shape[0] == 1 assert sim.data['y'].shape[1] == sim.nx sim.update() assert sim.time == 2.0 * sim.dt assert sim.y[-2] == yinit * 4.0 assert sim.z[-1] == zinit * 4.0 assert sim.data['z'].shape[0] == 2 assert sim.data['z'].shape[1] == sim.nx