def test15(self): instance = QGmodel(redirection="none") dx = instance.parameters.dx Lx = instance.parameters.Lx instance.grid[1:-1, 1:-1, 0].psi = 1. | units.m**2 / units.s psi, dpsi = instance.get_psi_state_at_point(dx / 2, Lx / 2., Lx / 2.) self.assertEqual(psi, 1. | units.m**2 / units.s) psi, dpsi = instance.get_psi_state_at_point(dx, Lx / 2., Lx / 2.) self.assertEqual(psi, 1. | units.m**2 / units.s) psi, dpsi = instance.get_psi_state_at_point(2 * dx, Lx / 2., Lx / 2.) self.assertEqual(psi, 1. | units.m**2 / units.s) psi, dpsi = instance.get_psi_state_at_point(dx, dx / 2., Lx / 2.) self.assertEqual(psi, 0.5 | units.m**2 / units.s) psi, dpsi = instance.get_psi_state_at_point(dx, dx / 2., dx / 2.) self.assertEqual(psi, 0.25 | units.m**2 / units.s) instance.stop()
def test16(self): instance = QGmodel() dx = instance.parameters.dx instance.evolve_model(1 | units.hour) x = instance.grid[:, 10, 0].x y = instance.grid[:, 10, 0].y dpsi1 = instance.grid[:, 10, 0].dpsi_dt psi2, dpsi2 = instance.get_psi_state_at_point(0. * x + dx, x, y) self.assertAlmostEquals(dpsi1, dpsi2) instance.stop()
def semi_domain_test_multires(tend=1. | units.hour, dt=3600. | units.s): q1 = QGmodel(redirection="none") q1.parameters.dt = dt / 2 Lx = q1.parameters.Lx.value_in(1000 * units.km) dx = q1.parameters.dx * 8 q1.parameters.dx = dx q1.parameters.dy = dx q2 = QGmodel(redirection="none") q2.parameters.dt = dt / 2 q2.parameters.Lx /= 2 q2.parameters.boundary_east = "interface" Nx, Ny, Nm = q1.grid.shape pyplot.ion() f = pyplot.figure(figsize=(12, 5)) pyplot.show() i = 0 while q1.model_time < tend: i = i + 1 tnow = q1.model_time q1.evolve_model(tnow + dt / 2) west = q2.boundaries("west").copy() x = west[:, 1:-1, 0].x.flatten() y = west[:, 1:-1, 0].y.flatten() psi, dpsi_dt = q1.get_psi_state_at_point(0. * x + dx, x, y) west[:, 1:-1, 0].psi = psi.reshape(west[:, 1:-1, 0].shape) west[:, 1:-1, 0].dpsi_dt = dpsi_dt.reshape(west[:, 1:-1, 0].shape) channel = west.new_channel_to(q2.boundaries("west")) channel.copy() q1.evolve_model(tnow + dt) q2.evolve_model(tnow + dt) # print(q1.grid[(Nx+1)/2,1,0].dpsi_dt) # print(q2.boundaries("west")[0:2,0,0].x) if i % 5 == 0: psi1_complete = q1.grid.psi.number[:, :, 0] psi1 = q1.grid[:(Nx + 1) / 2, :, 0].psi.number psi2 = q2.grid[:, :, 0].psi.number # d=abs(psi2-psi1) # print(d.max(),d.mean(),abs(psi1).max()) f.clf() f1 = pyplot.subplot(131) f1.imshow(psi1_complete.transpose() / psi1.max(), vmin=0, vmax=1, extent=[0, Lx, 0, Lx], origin="lower") f1.set_xlabel("x (x1000 km)") f2 = pyplot.subplot(132) f2.imshow(psi2.transpose() / psi1.max(), vmin=0, vmax=1, extent=[0, Lx / 2, 0, Lx], origin="lower") f2.set_xlabel("x (x1000 km)") # f3=pyplot.subplot(133) # f3.imshow(d.transpose()/psi1.max(),vmin=0,vmax=0.001,extent=[0,Lx/2,0,Lx],origin="lower") # f3.set_xlabel("x (x1000 km)") pyplot.draw() pyplot.savefig("snapshots/half_domain_test-%6.6i.png" % i) raw_input()