Example #1
0
logger.debug(' r: {}\n{}'.format(r_global.shape, r_global[0, :]))
logger.debug('th: {}\n{}'.format(theta_global.shape, theta_global[0, :]))
logger.debug('ph: {}\n{}'.format(phi_global.shape, phi_global[0, :]))

z, R = r_global * np.cos(theta_global), r_global * np.sin(
    theta_global)  # global

grid_slices = phi_layout.slices(domain.dealias)
phi = domain.grid(0, scales=domain.dealias)[grid_slices[0], :, :]
theta = B.grid(1, dimensions=3)[:, grid_slices[1], :]  # local
r = B.grid(2, dimensions=3)[:, :, grid_slices[2]]  # local

weight_theta = B.weight(1, dimensions=3)[:, grid_slices[1], :]
weight_r = B.weight(2, dimensions=3)[:, :, grid_slices[2]]

om = ball.TensorField_3D(1, B, domain)
u = ball.TensorField_3D(1, B, domain)
p = ball.TensorField_3D(0, B, domain)
T = ball.TensorField_3D(0, B, domain)
DT = ball.TensorField_3D(1, B, domain)

u_rhs = ball.TensorField_3D(1, B, domain)
p_rhs = ball.TensorField_3D(0, B, domain)
T_rhs = ball.TensorField_3D(0, B, domain)

# initial condition
T['g'] = 0.5 * (1 - r**2) + 0.1 / 8. * np.sqrt(35 / np.pi) * r**3 * (
    1 - r**2) * (np.cos(3 * phi) + np.sin(3 * phi)) * np.sin(theta)**3

# build state vector
state_vector = StateVector(u, p, T)
weight_theta = B.weight(1,dimensions=3)[:,grid_slices[1],:]
weight_r = B.weight(2,dimensions=3)[:,:,grid_slices[2]]

# BC array
local_rell_shape = r_ell_layout.local_shape(scales=domain.dealias)
BC_shape = np.array(local_rell_shape)[:-1]
BC = np.zeros(BC_shape,dtype=np.complex128)

for ell in range(ell_start,ell_end+1):
    ell_local = ell-ell_start
    for m in range(m_start,m_end+1):
        m_local = m-m_start
        BC[m_local,ell_local] = f(m,ell)

T  = ball.TensorField_3D(0,B,domain)
T_rhs = ball.TensorField_3D(0,B,domain)

# initial condition
T['g'] = 50 * (0.5*(1-r**2) + 1/8.*np.sqrt(35/np.pi)*r**3*(1-r**2)*(np.cos(3*phi)+np.sin(3*phi))*np.sin(theta)**3)

# build state vector
state_vector = StateVector(T)
NL = StateVector(T)
timestepper = timesteppers.SBDF2(StateVector, T)

# build matrices
M,L,P,LU = [],[],[],[]
for ell in range(ell_start,ell_end+1):
    N = B.N_max - B.N_min(ell-B.R_max)
    M_ell,L_ell = matrices(N,ell)
Example #3
0
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],
                      grid_dtype=np.float64,
                      comm=comm,
                      mesh=mesh)

domain_3D.global_coeff_shape = np.array([L_max + 1, L_max + 1, N_max + 1])
domain_3D.distributor = Distributor(domain_3D, comm, mesh)

phi_layout = domain_3D.distributor.layouts[3]
grid_slices = phi_layout.slices(domain_3D.dealias)
phi = domain_3D.grid(0, scales=domain_3D.dealias)
theta = B_3D.grid(1, dimensions=3)[:, grid_slices[1], :]  # local
r = B_3D.grid(2, dimensions=3)[:, :, grid_slices[2]]  # local

H = ball.TensorField_3D(1, B_3D, domain_3D)
H2 = ball.TensorField_3D(1, B_3D, domain_3D)
A = ball.TensorField_3D(1, B_3D, domain_3D)

H['g'][1] = -3. / 2. * r * (-1 + 4 * r**2 - 6 * r**4 +
                            3 * r**6) * (np.cos(phi) + np.sin(phi))
H['g'][2] = -3./4.*r*(-1+r**2)*np.cos(theta)* \
                 ( 3*r*(2-5*r**2+4*r**4)*np.sin(theta)
                  +2*(1-3*r**2+3*r**4)*(np.cos(phi)-np.sin(phi)))

for ell in range(1, L_max + 1):
    N = N_max - B_3D.N_min(ell - R_max)

    Z = B_3D.op('0', N, 0, ell)

    xim = B_3D.xi(-1, ell)
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)
theta_global = B.grid(0)
r_global = B.grid(1)
z, R = r_global*np.cos(theta_global), r_global*np.sin(theta_global) # global

grid_slices = phi_layout.slices(domain.dealias)
phi = domain.grid(0,scales=domain.dealias)[grid_slices[0],:,:]
theta = B.grid(1,dimensions=3)[:,grid_slices[1],:] # local
r = B.grid(2,dimensions=3)[:,:,grid_slices[2]] # local

weight_theta = B.weight(1,dimensions=3)
weight_r = B.weight(2,dimensions=3)

Du = ball.TensorField_3D(2,B,domain)
u  = ball.TensorField_3D(1,B,domain)
p  = ball.TensorField_3D(0,B,domain)
T  = ball.TensorField_3D(0,B,domain)
DT = ball.TensorField_3D(1,B,domain)
A  = ball.TensorField_3D(1,B,domain)
H  = ball.TensorField_3D(1,B,domain)
DH = ball.TensorField_3D(2,B,domain)
pi = ball.TensorField_3D(0,B,domain)

u_rhs = ball.TensorField_3D(1,B,domain)
p_rhs = ball.TensorField_3D(0,B,domain)
T_rhs = ball.TensorField_3D(0,B,domain)
A_rhs = ball.TensorField_3D(1,B,domain)
pi_rhs= ball.TensorField_3D(0,B,domain)
              m_max=m_end,
              a=0.)
theta_global = B.grid(0)
r_global = B.grid(1)
z, R = r_global * np.cos(theta_global), r_global * np.sin(
    theta_global)  # global

grid_slices = phi_layout.slices(domain.dealias)
phi = domain.grid(0, scales=domain.dealias)[grid_slices[0], :, :]
theta = B.grid(1, dimensions=3)[:, grid_slices[1], :]  # local
r = B.grid(2, dimensions=3)[:, :, grid_slices[2]]  # local

weight_theta = B.weight(1, dimensions=3)
weight_r = B.weight(2, dimensions=3)

Du = ball.TensorField_3D(2, B, domain)
u = ball.TensorField_3D(1, B, domain)
p = ball.TensorField_3D(0, B, domain)

u_rhs = ball.TensorField_3D(1, B, domain)
p_rhs = ball.TensorField_3D(0, B, domain)

# create boundary conditions
BC_vec = ball.TensorField_3D(1, B, domain)
BC_vec['g'][0] = 0.  # u_r = 0
BC_vec['g'][1] = -u0 * r**2 * np.cos(theta) * np.cos(phi)
BC_vec['g'][2] = u0 * r**2 * np.sin(phi)

BC_vec.require_grid_space()

local_rell_shape = r_ell_layout.local_shape(scales=domain.dealias)