Skip to content
Snippets Groups Projects
Commit d6837143 authored by Laura Christine Kühle's avatar Laura Christine Kühle
Browse files

Vectorized 'do_initial_projection()'.

parent a1951eb1
No related branches found
No related tags found
No related merge requests found
...@@ -181,26 +181,25 @@ def do_initial_projection(init_cond, mesh, basis, quadrature, ...@@ -181,26 +181,25 @@ def do_initial_projection(init_cond, mesh, basis, quadrature,
number of mesh cells and p being the polynomial degree of the basis. number of mesh cells and p being the polynomial degree of the basis.
""" """
# Initialize matrix and set first entry to accommodate for ghost cell # Initialize output matrix
output_matrix = [0] output_matrix = np.zeros((basis.polynomial_degree+1, mesh.num_cells+2))
for eval_point in mesh.non_ghost_cells: # Calculate basis based on quadrature
new_row = [] basis_matrix = np.array([np.vectorize(basis.basis[degree].subs)(
for degree in range(basis.polynomial_degree + 1): x, quadrature.nodes) for degree in range(basis.polynomial_degree+1)])
new_row.append(np.float64(sum(init_cond.calculate(
x=eval_point + mesh.cell_len/2 # Calculate points based on initial condition
* quadrature.nodes[point] - x_shift, mesh=mesh) points = quadrature.nodes[:, np.newaxis] @ \
* basis.basis[degree].subs( np.repeat(mesh.cell_len/2, mesh.num_cells)[:, np.newaxis].T + \
x, quadrature.nodes[point]) np.tile(mesh.non_ghost_cells - x_shift, (quadrature.num_nodes, 1))
* quadrature.weights[point] init_matrix = np.vectorize(init_cond.calculate, otypes=[np.float])(
for point in range(quadrature.num_nodes)))) x=points, mesh=mesh)
new_row = np.array(new_row) # Set output matrix for regular cells
output_matrix.append(basis.inverse_mass_matrix @ new_row) output_matrix[:, 1:-1] = (basis_matrix * quadrature.weights) @ init_matrix
# Set ghost cells to respective value # Set ghost cells
output_matrix[0] = output_matrix[mesh.num_cells] output_matrix[:, 0] = output_matrix[:, -2]
output_matrix.append(output_matrix[1]) output_matrix[:, -1] = output_matrix[:, 1]
# print(np.array(output_matrix).shape) return output_matrix
return np.transpose(np.array(output_matrix))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment