Пример #1
0
def test_regular_3D(backend, forward_output):
    if (backend == 'netcdf4' and forward_output is True) or skip[backend]:
        return
    K0 = Basis(N[0], 'F', dtype='D', domain=(0, np.pi))
    K1 = Basis(N[1], 'F', dtype='d', domain=(0, 2*np.pi))
    K2 = Basis(N[2], 'C', dtype='d', bc=(0, 0))
    T = TensorProductSpace(comm, (K0, K1, K2))
    filename = 'test3Dr_{}'.format(ex[forward_output])
    hfile = writer(filename, T, backend=backend)
    if forward_output:
        u = Function(T)
    else:
        u = Array(T)
    u[:] = np.random.random(u.shape)
    for i in range(3):
        hfile.write(i, {'u': [u,
                              (u, [slice(None), 4, slice(None)]),
                              (u, [slice(None), 4, 4])]}, forward_output=forward_output)
    if not forward_output and backend == 'hdf5' and comm.Get_rank() == 0:
        generate_xdmf(filename+'.h5')

    u0 = Function(T) if forward_output else Array(T)
    read = reader(filename, T, backend=backend)
    read.read(u0, 'u', forward_output=forward_output, step=1)
    assert np.allclose(u0, u)
Пример #2
0
def test_mixed_3D(backend, forward_output, as_scalar):
    if (backend == 'netcdf4' and forward_output is True) or skip[backend]:
        return
    K0 = Basis(N[0], 'F', dtype='D', domain=(0, np.pi))
    K1 = Basis(N[1], 'F', dtype='d', domain=(0, 2*np.pi))
    K2 = Basis(N[2], 'C')
    T = TensorProductSpace(comm, (K0, K1, K2))
    TT = VectorTensorProductSpace(T)
    filename = 'test3Dm_{}'.format(ex[forward_output])
    hfile = writer(filename, TT, backend=backend)
    uf = Function(TT, val=2) if forward_output else Array(TT, val=2)
    uf[0] = 1
    data = {'ux': ((uf, np.s_[0, :, :, :]),
                   (uf, [0, slice(None), 4, slice(None)]),
                   (uf, [0, slice(None), 4, 4])),
            'uy': ((uf, np.s_[1, :, :, :]),
                   (uf, [1, slice(None), 4, slice(None)]),
                   (uf, [1, slice(None), 4, 4])),
            'u': [uf, (uf, [slice(None), slice(None), 4, slice(None)])]}
    hfile.write(0, data, forward_output=forward_output, as_scalar=as_scalar)
    hfile.write(1, data, forward_output=forward_output, as_scalar=as_scalar)
    if not forward_output and backend == 'hdf5' and comm.Get_rank() == 0:
        generate_xdmf(filename+'.h5')

    if as_scalar is False:
        u0 = Function(TT) if forward_output else Array(TT)
        read = reader(filename, TT, backend=backend)
        read.read(u0, 'u', forward_output=forward_output, step=1)
        assert np.allclose(u0, uf)
    else:
        u0 = Function(T) if forward_output else Array(T)
        read = reader(filename, T, backend=backend)
        read.read(u0, 'u0', forward_output=forward_output, step=1)
        assert np.allclose(u0, uf[0])
Пример #3
0
def test_mixed_2D(backend, forward_output, as_scalar):
    if (backend == 'netcdf4' and forward_output is True) or skip[backend]:
        return
    K0 = Basis(N[0], 'F')
    K1 = Basis(N[1], 'C')
    T = TensorProductSpace(comm, (K0, K1))
    TT = MixedTensorProductSpace([T, T])
    filename = 'test2Dm_{}'.format(ex[forward_output])
    hfile = writer(filename, TT, backend=backend)
    if forward_output:
        uf = Function(TT, val=2)
    else:
        uf = Array(TT, val=2)
    hfile.write(0, {'uf': [uf]}, forward_output=forward_output, as_scalar=as_scalar)
    hfile.write(1, {'uf': [uf]}, forward_output=forward_output, as_scalar=as_scalar)
    if not forward_output and backend == 'hdf5' and comm.Get_rank() == 0:
        generate_xdmf(filename+'.h5')
    if as_scalar is False:
        u0 = Function(TT) if forward_output else Array(TT)
        read = reader(filename, TT, backend=backend)
        read.read(u0, 'uf', forward_output=forward_output, step=1)
        assert np.allclose(u0, uf)
    else:
        u0 = Function(T) if forward_output else Array(T)
        read = reader(filename, T, backend=backend)
        read.read(u0, 'uf0', forward_output=forward_output, step=1)
        assert np.allclose(u0, uf[0])
Пример #4
0
def test_2D(backend, forward_output):
    if backend == 'netcdf4':
        assert forward_output is False
    T = PFFT(comm, (N[0], N[1]))
    for i, domain in enumerate([
            None, ((0, np.pi), (0, 2 * np.pi)),
        (np.arange(N[0], dtype=float) * 1 * np.pi / N[0],
         np.arange(N[1], dtype=float) * 2 * np.pi / N[1])
    ]):
        for rank in range(3):
            filename = "".join(
                ('test2D_{}{}{}'.format(ex[i == 0], ex[forward_output],
                                        rank), ending[backend]))
            if backend == 'netcdf4':
                remove_if_exists(filename)
            u = newDistArray(T,
                             forward_output=forward_output,
                             val=1,
                             rank=rank)
            hfile = writer[backend](filename, domain=domain)
            assert hfile.backend() == backend
            hfile.write(0, {'u': [u]})
            hfile.write(1, {'u': [u]})
            u.write(hfile, 'u', 2)
            if rank > 0:
                hfile.write(0, {'u': [u]}, as_scalar=True)
                hfile.write(1, {'u': [u]}, as_scalar=True)
                u.write(hfile, 'u', 2, as_scalar=True)
            u.write('t' + filename, 'u', 0)
            u.write('t' + filename, 'u', 0, [slice(None), 3])

            if not forward_output and backend == 'hdf5' and comm.Get_rank(
            ) == 0:
                generate_xdmf(filename)
                generate_xdmf(filename, order='visit')

            u0 = newDistArray(T, forward_output=forward_output, rank=rank)
            read = reader[backend](filename)
            read.read(u0, 'u', step=0)
            u0.read(filename, 'u', 2)
            u0.read(read, 'u', 2)
            assert np.allclose(u0, u)
            if backend == 'netcdf4':  # Test opening file in mode 'a' when not existing
                remove_if_exists('nctesta.nc')
                _ = NCFile('nctesta.nc', domain=domain, mode='a')
    T.destroy()
Пример #5
0
def test_regular_2D(backend, forward_output):
    if (backend == 'netcdf4' and forward_output is True) or skip[backend]:
        return
    K0 = Basis(N[0], 'F')
    K1 = Basis(N[1], 'C', bc=(0, 0))
    T = TensorProductSpace(comm, (K0, K1))
    filename = 'test2Dr_{}'.format(ex[forward_output])
    hfile = writer(filename, T, backend=backend)
    u = Function(T, val=1) if forward_output else Array(T, val=1)
    hfile.write(0, {'u': [u]}, forward_output=forward_output)
    hfile.write(1, {'u': [u]}, forward_output=forward_output)
    if not forward_output and backend == 'hdf5' and comm.Get_rank() == 0:
        generate_xdmf(filename+'.h5')
        generate_xdmf(filename+'.h5', order='visit')

    u0 = Function(T) if forward_output else Array(T)
    read = reader(filename, T, backend=backend)
    read.read(u0, 'u', forward_output=forward_output, step=1)
    assert np.allclose(u0, u)
Пример #6
0
def test_4D(backend, forward_output):
    if backend == 'netcdf4':
        assert forward_output is False
    T = PFFT(comm, (N[0], N[1], N[2], N[3]))
    d0 = ((0, np.pi), (0, 2 * np.pi), (0, 3 * np.pi), (0, 4 * np.pi))
    d1 = (np.arange(N[0], dtype=float) * 1 * np.pi / N[0],
          np.arange(N[1], dtype=float) * 2 * np.pi / N[1],
          np.arange(N[2], dtype=float) * 3 * np.pi / N[2],
          np.arange(N[3], dtype=float) * 4 * np.pi / N[3])
    for i, domain in enumerate([None, d0, d1]):
        for rank in range(3):
            filename = "".join(
                ('h5test4_{}{}{}'.format(ex[i == 0], ex[forward_output],
                                         rank), ending[backend]))
            if backend == 'netcdf4':
                remove_if_exists('uv' + filename)
            u = newDistArray(T, forward_output=forward_output, rank=rank)
            v = newDistArray(T, forward_output=forward_output, rank=rank)
            h0file = writer[backend]('uv' + filename, domain=domain)
            u[:] = np.random.random(u.shape)
            v[:] = 2
            for k in range(3):
                h0file.write(
                    k, {
                        'u':
                        [u, (u, [slice(None), 4,
                                 slice(None),
                                 slice(None)])],
                        'v': [v,
                              (v, [slice(None), slice(None), 5, 6])]
                    })

            if not forward_output and backend == 'hdf5' and comm.Get_rank(
            ) == 0:
                generate_xdmf('uv' + filename)

            u0 = newDistArray(T, forward_output=forward_output, rank=rank)
            read = reader[backend]('uv' + filename)
            read.read(u0, 'u', step=0)
            assert np.allclose(u0, u)
            read.read(u0, 'v', step=0)
            assert np.allclose(u0, v)
    T.destroy()
Пример #7
0
    },
                 as_scalar=True)

    file_v.write(tstep, {
        'U': [
            U, (U, [4, slice(None), slice(None)]),
            (U, [4, slice(None), slice(None)]),
            (U, [0, slice(None), slice(None)]), (U, [5, 5, slice(None)])
        ],
        'u': [u]
    },
                 as_scalar=False)  # A scalar in the vector component space T
    tstep += 1

if backend == 'hdf5' and MPI.COMM_WORLD.Get_rank() == 0:
    generate_xdmf('myfile.h5')
    generate_xdmf('mixfile.h5')
    generate_xdmf('vecfile.h5')

N = (8, 24, 25, 26)
K0 = FunctionSpace(N[0], 'F', dtype='D')
K1 = FunctionSpace(N[1], 'F', dtype='D')
K2 = FunctionSpace(N[2], 'F', dtype='D')
K3 = FunctionSpace(N[3], 'F', dtype='d')

T = TensorProductSpace(MPI.COMM_WORLD, (K0, K1, K2, K3))
TT = CompositeSpace([T, T])
d4file_s = ShenfunFile('my4Dfile', T, backend=backend, mode='w')
d4file_m = ShenfunFile('mix4Dfile', TT, backend=backend, mode='w')

u = Array(T)
Пример #8
0
        'write_slice_tstep': (10, {
            'fu': [(fu, [slice(None),
                         slice(None), 10,
                         slice(None)]),
                   (fu, [slice(None), 10,
                         slice(None),
                         slice(None)])]
        }),
        'write_tstep': (50, {
            'fu': [fu]
        }),
        'Compute_energy':
        100,
        'plot_tstep':
        100,
        'end_time':
        100.,
        'file':
        file0
    }
    dt = 0.005
    integrator = ETDRK4(TT, N=NonlinearRHS, update=update, **par)
    #integrator = RK4(TT, N=NonlinearRHS, update=update)
    integrator.setup(dt)
    t0 = time()
    fu_hat = integrator.solve(fu, fu_hat, dt, (0, par['end_time']))
    timer.final(True)

    if rank == 0:
        generate_xdmf("KleinGordon{}.h5".format(N[0]))
Пример #9
0
        image.ax.clear()
        image.ax.contourf(X[0], X[1], uv[0].real, 100)
        plt.pause(1e-6)
        print(np.linalg.norm(uv[0] - uv0[0]), np.linalg.norm(uv[1] - uv0[1]),
              np.linalg.norm(uv[0]), np.linalg.norm(uv[1]))
        uv0[:] = uv

    if tstep % params['write_tstep'][0] == 0:
        uv = uv_hat.backward(uv)
        params['file'].write(tstep, params['write_tstep'][1], as_scalar=True)


if __name__ == '__main__':
    file0 = HDF5File("Gray_Scott_{}.h5".format(N[0]), mode='w')
    par = {
        'plot_step': 200,
        'write_tstep': (200, {
            'uv': [UV]
        }),
        'file': file0,
        'kappa': 0.061,
        'alpha1': 1.5,
        'alpha2': 1.9
    }
    dt = 10.
    end_time = 1000000
    integrator = ETDRK4(TV, L=LinearRHS, N=NonlinearRHS, update=update, **par)
    integrator.setup(dt)
    UV_hat = integrator.solve(UV, UV_hat, dt, (0, end_time))
    generate_xdmf("Gray_Scott_{}.h5".format(N[0]))
Пример #10
0
        rhs[0] = self.w1
        rhs.mask_nyquist(self.mask)
        return rhs


if __name__ == '__main__':
    from time import time
    from mpi4py_fft import generate_xdmf
    t0 = time()
    d = {
        'N': (100, 256),
        'Ra': 10000.,
        'dt': 0.02,
        'filename': 'RB100',
        'conv': 1,
        'modplot': 100,
        'modsave': 50,
        'bcT': (0.9 + 0.1 * sympy.sin(2 * (y - tt)), 0),
        #'bcT': (1, 0),
        'family': 'C',
        'quad': 'GC'
    }
    c = RayleighBenard(**d)
    c.initialize(rand=0.0001)
    c.assemble()
    c.solve(end_time=200)
    print('Computing time %2.4f' % (time() - t0))
    if comm.Get_rank() == 0:
        generate_xdmf('_'.join((d['filename'], 'U')) + '.h5')
        generate_xdmf('_'.join((d['filename'], 'T')) + '.h5')
Пример #11
0
    if tstep % plot_tstep == 0 and plot_tstep > 0:
        u = u_hat.backward(u)
        image.ax.clear()
        image.ax.contourf(X[0], X[1], u.real, 100)
        plt.pause(1e-6)
        count += 1
        #plt.savefig('Ginzburg_Landau_{}_{}.png'.format(N[0], count))
    if tstep % write_tstep[0] == 0:
        u = u_hat.backward(u)
        file.write(tstep, write_tstep[1])


if __name__ == '__main__':
    file0 = HDF5File("Ginzburg_Landau_{}.h5".format(N[0]), mode='w')
    par = {
        'plot_tstep': 100,
        'write_tstep': (50, {
            'u': [U.real]
        }),
        'file': file0
    }
    t = 0.0
    dt = 0.01
    end_time = 100
    integrator = ETDRK4(T, L=LinearRHS, N=NonlinearRHS, update=update, **par)
    integrator.setup(dt)
    U_hat = integrator.solve(U, U_hat, dt, (0, end_time))
    if comm.Get_rank() == 0:
        generate_xdmf("Ginzburg_Landau_{}.h5".format(N[0]))
    fftw.export_wisdom('GL.wisdom')
Пример #12
0
def test_3D(backend, forward_output):
    if backend == 'netcdf4':
        assert forward_output is False
    T = PFFT(comm, (N[0], N[1], N[2]))
    d0 = ((0, np.pi), (0, 2 * np.pi), (0, 3 * np.pi))
    d1 = (np.arange(N[0], dtype=float) * 1 * np.pi / N[0],
          np.arange(N[1], dtype=float) * 2 * np.pi / N[1],
          np.arange(N[2], dtype=float) * 3 * np.pi / N[2])
    for i, domain in enumerate([None, d0, d1]):
        for rank in range(3):
            filename = ''.join(
                ('test_{}{}{}'.format(ex[i == 0], ex[forward_output],
                                      rank), ending[backend]))
            if backend == 'netcdf4':
                remove_if_exists('uv' + filename)
                remove_if_exists('v' + filename)

            u = newDistArray(T, forward_output=forward_output, rank=rank)
            v = newDistArray(T, forward_output=forward_output, rank=rank)
            h0file = writer[backend]('uv' + filename, domain=domain)
            h1file = writer[backend]('v' + filename, domain=domain)
            u[:] = np.random.random(u.shape)
            v[:] = 2
            for k in range(3):
                h0file.write(
                    k, {
                        'u': [
                            u, (u, [slice(None), slice(None), 4]),
                            (u, [5, 5, slice(None)])
                        ],
                        'v': [v,
                              (v, [slice(None), 6, slice(None)])]
                    })
                h1file.write(
                    k, {
                        'v': [
                            v,
                            (v, [slice(None), 6, slice(None)]),
                            (v, [6, 6, slice(None)])
                        ]
                    })
            # One more time with same k
            h0file.write(
                k, {
                    'u': [
                        u, (u, [slice(None), slice(None), 4]),
                        (u, [5, 5, slice(None)])
                    ],
                    'v': [v, (v, [slice(None), 6, slice(None)])]
                })
            h1file.write(
                k, {
                    'v': [
                        v, (v, [slice(None), 6, slice(None)]),
                        (v, [6, 6, slice(None)])
                    ]
                })

            if rank > 0:
                for k in range(3):
                    u.write('uv' + filename, 'u', k, as_scalar=True)
                    u.write('uv' + filename,
                            'u',
                            k, [slice(None), slice(None), 4],
                            as_scalar=True)
                    u.write('uv' + filename,
                            'u',
                            k, [5, 5, slice(None)],
                            as_scalar=True)
                    v.write('uv' + filename, 'v', k, as_scalar=True)
                    v.write('uv' + filename,
                            'v',
                            k, [slice(None), 6, slice(None)],
                            as_scalar=True)

            if not forward_output and backend == 'hdf5' and comm.Get_rank(
            ) == 0:
                generate_xdmf('uv' + filename)
                generate_xdmf('v' + filename, periodic=False)
                generate_xdmf('v' + filename, periodic=(True, True, True))
                generate_xdmf('v' + filename, order='visit')

            u0 = newDistArray(T, forward_output=forward_output, rank=rank)
            read = reader[backend]('uv' + filename)
            read.read(u0, 'u', step=0)
            assert np.allclose(u0, u)
            read.read(u0, 'v', step=0)
            assert np.allclose(u0, v)
    T.destroy()
Пример #13
0
    )
    config.channel.add_argument("--compute_energy", type=int, default=10)
    config.channel.add_argument("--plot_result", type=int, default=100)
    config.channel.add_argument("--Ra", type=float, default=10000.0)
    config.channel.add_argument("--Pr", type=float, default=0.7)
    config.channel.add_argument("--sample_stats", type=int, default=10)
    solver = get_solver(update=update, mesh="channel")
    config.params.nu = np.sqrt(config.params.Pr/config.params.Ra)
    config.params.kappa = 1./np.sqrt(config.params.Pr*config.params.Ra)
    context = solver.get_context()
    initialize(solver, context)
    #init_from_file("KMMRK3_RB_677g_c.h5", solver, context)
    context.hdf5file.filename = "KMM_RB_677a"

    # Just store slices
    context.hdf5file.results['space'] = context.FST
    context.hdf5file.results['data'] = {'U0': [(context.U[0], [slice(None), slice(None), 0]),
                                               (context.U[0], [slice(None), 0, slice(None)])],
                                        'U1': [(context.U[1], [slice(None), slice(None), 0]),
                                               (context.U[1], [slice(None), 0, slice(None)])],
                                        'U2': [(context.U[2], [slice(None), slice(None), 0]),
                                               (context.U[2], [slice(None), 0, slice(None)])],
                                        'phi': [(context.phi, [slice(None), slice(None), 0]),
                                                (context.phi, [slice(None), 0, slice(None)])]
                                       }
    solver.stats = Stats(context.U, solver.comm, filename="KMM_RB_stats")
    solve(solver, context)
    if solver.rank == 0:
        from mpi4py_fft import generate_xdmf
        generate_xdmf('KMM_RB_677a_w.h5')
Пример #14
0
                                       type=int,
                                       default=100)
    config.triplyperiodic.add_argument("--compute_spectrum",
                                       type=int,
                                       default=1000)
    config.triplyperiodic.add_argument("--plot_step", type=int, default=1000)
    config.triplyperiodic.add_argument("--Kf2", type=int, default=3)
    config.triplyperiodic.add_argument("--kd", type=float, default=50.)
    config.triplyperiodic.add_argument("--Re_lam", type=float, default=84.)
    sol = get_solver(update=update, mesh="triplyperiodic")
    config.params.nu = (1. / config.params.kd**(4. / 3.))

    context = sol.get_context()
    initialize(sol, context)
    #init_from_file("NS_isotropic_60_60_60_c.h5", sol, context)
    context.hdf5file.filename = "NS_isotropic_{}_{}_{}".format(
        *config.params.N)

    Ek, bins, E0, E1, E2 = spectrum(sol, context)
    context.spectrumname = context.hdf5file.filename + ".h5"
    f = h5py.File(context.spectrumname, mode='w', driver='mpio', comm=sol.comm)
    f.create_group("Turbulence")
    f["Turbulence"].create_group("Ek")
    bins = np.array(bins)
    f["Turbulence"].create_dataset("bins", data=bins)
    f.close()
    solve(sol, context)
    from mpi4py_fft import generate_xdmf
    if sol.rank == 0:
        generate_xdmf(context.hdf5file.filename + "_w.h5")
 def write_xdmf_file(self, files):
     if not isinstance(files, (list, tuple)):
         generate_xdmf(files)
     else:
         for f in files:
             generate_xdmf(f)