Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
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()