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

Vectorized '_calculate_reconstructions()' in OrthonormalLegendre basis.

parent d0c50bb4
No related branches found
No related tags found
No related merge requests found
......@@ -533,17 +533,44 @@ class OrthonormalLegendre(Legendre):
Notes
-----
To increase speed. this function uses a simplified calculation
To increase speed, this function uses a simplified calculation
specific to the orthonormal Legendre polynomial basis.
"""
left_reconstructions = [
sum(projection[degree][cell] * (-1)**degree
* np.sqrt(degree + 0.5)
for degree in range(self._polynomial_degree+1))
for cell in range(len(projection[0]))]
right_reconstructions = [
sum(projection[degree][cell] * np.sqrt(degree + 0.5)
for degree in range(self._polynomial_degree+1))
for cell in range(len(projection[0]))]
return left_reconstructions, right_reconstructions
left_reconstruction = projection.T @ (self._root_vector *
self._sign_vector)
right_reconstruction = projection.T @ self._sign_vector
return left_reconstruction, right_reconstruction
@property
@cache
def _root_vector(self):
"""Return root vector.
Return vector with the roots of all degrees plus 0.5.
Returns
-------
ndarray
Root vector.
"""
return np.array([np.sqrt(degree+0.5)
for degree in range(self.polynomial_degree+1)])
@property
@cache
def _sign_vector(self):
"""Return sign vector.
Return identity vector with sign changes for all even degrees.
Returns
-------
ndarray
Sign vector.
"""
return np.array([-1 if degree % 2 else 1
for degree in range(self._polynomial_degree+1)])
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment