Beispiel #1
0
    r_ell_layout = domain.distributor.layouts[1]

m_start = th_m_layout.slices(scales=1)[0].start
m_end = th_m_layout.slices(scales=1)[0].stop - 1
m_size = m_end - m_start + 1
ell_start = r_ell_layout.slices(scales=1)[1].start
ell_end = r_ell_layout.slices(scales=1)[1].stop - 1

# set up ball
N_theta = int((L_max + 1) * L_dealias)
N_r = int((N_r + 1) * N_dealias)
B = ball.Ball(N_max,
              L_max,
              N_theta=N_theta,
              N_r=N_r,
              R_max=R_max,
              ell_min=ell_start,
              ell_max=ell_end,
              m_min=m_start,
              m_max=m_end,
              a=0.)

# coordinate arrays for plotting
theta_global = B.grid(0)
r_global = B.grid(1)
n_phi_global = 2 * (L_max + 1) * L_dealias
phi_global = np.expand_dims(np.linspace(0,
                                        2 * np.pi,
                                        num=n_phi_global + 1,
                                        endpoint=True),
                            axis=1)
r_global = np.pad(r_global, ((0, 0), (1, 1)),
Beispiel #2
0
import ball_wrapper as ball
import numpy as np
from scipy.sparse import linalg as spla
import scipy.sparse as sparse
import dedalus.public as de
from dedalus.core.distributor import Distributor


def err(a, b):
    print(np.max(np.abs(a - b)) / np.max(np.abs(b)))


L_max, N_max, R_max = 31, 31, 2
B_3D = ball.Ball(N_max, L_max, R_max=R_max)

L_dealias = 1
N_dealias = 1
N_r = N_max

comm = None
mesh = None
phi_basis_3D = de.Fourier('phi',
                          2 * (L_max + 1),
                          interval=(0, 2 * np.pi),
                          dealias=L_dealias)
theta_basis_3D = de.Fourier('theta',
                            L_max + 1,
                            interval=(0, np.pi),
                            dealias=L_dealias)
r_basis_3D = de.Fourier('r', N_max + 1, interval=(0, 1), dealias=N_dealias)
domain_3D = de.Domain([phi_basis_3D, theta_basis_3D, r_basis_3D],
Beispiel #3
0
theta_basis = de.Fourier('theta', 2 * L_max + 1, interval=(0, np.pi))
r_basis = de.Fourier('r', N_max + 1, interval=(0, 1))
domain = de.Domain([theta_basis, r_basis], grid_dtype=np.float64)

mesh = domain.distributor.mesh
if len(mesh) == 0:  #serial
    ell_r_layout = domain.distributor.layouts[1]
    r_ell_layout = domain.distributor.layouts[1]
else:
    ell_r_layout = domain.distributor.layouts[2]
    r_ell_layout = domain.distributor.layouts[1]

ell_min = r_ell_layout.slices(scales=1)[0].start
ell_max = r_ell_layout.slices(scales=1)[0].stop - 1
B = ball.Ball(N_max, L_max, S_max=S_max, ell_min=ell_min, ell_max=ell_max)
r = B.grid(1)[0]

m = 0
eig_num = 100
f = ball.TensorField_2D(0, m, B, domain)
f['c'][ell][:512] = vec[eig_num]
f['g'][0, 10, :] = f['g'][0, 10, :].real
f['g'][0, 10, :] /= np.max(np.abs(f['g'][0, 10, :]))
print(np.max(np.abs(f['g'][0, 10, :])))

k = np.sqrt(vals[eig_num])
sol = spec.jv(ell + 1 / 2, k * r) / np.sqrt(k * r)
sol /= np.max(np.abs(sol))

eig_axes.plot(r,
Beispiel #4
0
eigs = []

text_label = [ r'${\rm no-slip}$',
               r'${\rm stress-free}$',
               r'${\rm potential}$',
               r'${\rm perfectly-conducting}$',
               r'${\rm pseudo-vacuum}$']

text_x = 0.025
text_y = 0.875

ell = 50

L_max, R_max = 63, 3
B = ball.Ball(N_max,L_max,R_max=R_max,ell_min = 48,ell_max=52)

calculate = True

boundary_conditions = 'no-slip'
if calculate:
  vals, vecs = bd.eigensystem(N_max,ell,B,alpha_BC=2,boundary_conditions=boundary_conditions)
  np.save('data/no_slip_eigs_a2.npy',vals)
  vals_analytic = wavenumbers(ell,N_max+1,boundary_conditions)
  vals_analytic = eigenvalues(vals_analytic,len(vals))
  np.save('data/no_slip_eigs_analytic_a2.npy',vals_analytic)
  vals, vecs =     bd.eigensystem(N_max,ell,B,alpha_BC=0,boundary_conditions=boundary_conditions)
  np.save('data/no_slip_eigs_a0.npy',vals)
  vals_analytic = wavenumbers(ell,N_max+1,boundary_conditions)
  vals_analytic = eigenvalues(vals_analytic,len(vals))
  np.save('data/no_slip_eigs_analytic_a0.npy',vals_analytic)