Beispiel #1
0
    def testSphHarmCornerCaseWithWrongNmax(self):
        """Tests the corner case where `n_max` is not the maximum value of `n`."""
        m = jnp.array([2])
        n = jnp.array([10])
        n_clipped = jnp.array([6])
        n_max = 6
        theta = jnp.array([0.9])
        phi = jnp.array([0.2])

        expected = lsp_special.sph_harm(m, n, theta, phi, n_max)

        actual = lsp_special.sph_harm(m, n_clipped, theta, phi, n_max)

        self.assertAllClose(actual, expected, rtol=1e-8, atol=9e-5)
Beispiel #2
0
  def testSphHarmOrderZeroDegreeOne(self):
    """Tests the spherical harmonics of order one and degree zero."""
    theta = jnp.array([2.0])
    phi = jnp.array([3.1])
    n_max = 1

    expected = jnp.sqrt(3.0 / (4.0 * np.pi)) * jnp.cos(phi)
    actual = jnp.real(
        lsp_special.sph_harm(jnp.array([0]), jnp.array([1]), theta, phi, n_max))

    self.assertAllClose(actual, expected, rtol=2e-7, atol=6e-8)
Beispiel #3
0
  def testSphHarmOrderZeroDegreeZero(self):
    """Tests the spherical harmonics of order zero and degree zero."""
    theta = jnp.array([0.3])
    phi = jnp.array([2.3])
    n_max = 0

    expected = jnp.array([1.0 / jnp.sqrt(4.0 * np.pi)])
    actual = jnp.real(
        lsp_special.sph_harm(jnp.array([0]), jnp.array([0]), theta, phi, n_max))

    self.assertAllClose(actual, expected, rtol=1.1e-7, atol=3e-8)
Beispiel #4
0
    def testSphHarmOrderOneDegreeOne(self):
        """Tests the spherical harmonics of order one and degree one."""
        theta = jnp.array([2.0])
        phi = jnp.array([2.5])
        n_max = 1

        expected = (-1.0 / 2.0 * jnp.sqrt(3.0 / (2.0 * np.pi)) * jnp.sin(phi) *
                    jnp.exp(1j * theta))
        actual = lsp_special.sph_harm(jnp.array([1]), jnp.array([1]), theta,
                                      phi, n_max)

        self.assertAllClose(actual, expected, rtol=1e-8, atol=6e-8)
Beispiel #5
0
    def testSphHarmAccuracy(self):
        m = jnp.arange(-3, 3)[:, None]
        n = jnp.arange(3, 6)
        n_max = 5
        theta = 0.0
        phi = jnp.pi

        expected = lsp_special.sph_harm(m, n, theta, phi, n_max)

        actual = osp_special.sph_harm(m, n, theta, phi)

        self.assertAllClose(actual, expected, rtol=1e-8, atol=9e-5)