Exemple #1
0
def test_jacobi_intergrate(N, a, b, k, dtype):
    c = coords.Coordinate('x')
    d = distributor.Distributor((c,))
    b = basis.Jacobi(c, size=N, a0=a, b0=b, a=a+k, b=b+k, bounds=(0, 1))
    x = b.local_grid(1)
    f = field.Field(dist=d, bases=(b,), dtype=dtype)
    f['g'] = x**5
    fi = operators.Integrate(f, c).evaluate()
    assert np.allclose(fi['g'], 1/6)
Exemple #2
0
 def add_property(self, property, name, precompute_integral=False):
     """Add a property."""
     self.properties.add_task(property, layout='g', name=name)
     if precompute_integral:
         # Add integral under slightly obscured name
         task_op = self.properties.tasks[-1]['operator']
         integral_op = operators.Integrate(task_op)
         integral_name = '_{}_integral'.format(name)
         self.properties.add_task(integral_op,
                                  layout='g',
                                  name=integral_name)
Exemple #3
0
def test_integrate_scalar(Nphi, Nr, k, dealias, dtype, basis, n):
    c, d, b, phi, r, x, y = basis(Nphi, Nr, k, dealias, dtype)
    f = field.Field(dist=d, bases=(b, ), dtype=dtype)
    f.preset_scales(b.domain.dealias)
    f['g'] = r**(2 * n)
    h = operators.Integrate(f, c).evaluate()
    if isinstance(b, DiskBasis):
        r_inner, r_outer = 0, b.radius
    else:
        r_inner, r_outer = b.radii
    hg = 2 * np.pi * (r_outer**(2 + 2 * n) - r_inner**(2 + 2 * n)) / (2 +
                                                                      2 * n)
    assert np.allclose(h['g'], hg)
Exemple #4
0
def test_fourier_integrate(N, bounds, dtype):
    c = coords.Coordinate('x')
    d = distributor.Distributor((c, ))
    if dtype == np.float64:
        b = basis.RealFourier(c, size=N, bounds=bounds)
    elif dtype == np.complex128:
        b = basis.ComplexFourier(c, size=N, bounds=bounds)
    x = b.local_grid(1)
    f = field.Field(dist=d, bases=(b, ), dtype=dtype)
    k = 4 * np.pi / (bounds[1] - bounds[0])
    f['g'] = 1 + np.sin(k * x + 0.1)
    fi = operators.Integrate(f, c).evaluate()
    assert np.allclose(fi['g'], bounds[1] - bounds[0])
Exemple #5
0
 def volume_integral(self, name):
     """Compute volume integral of a property."""
     # Check for precomputed integral
     try:
         integral_name = '_{}_integral'.format(name)
         integral_field = self.properties[integral_name]
     except KeyError:
         # Compute volume integral
         field = self.properties[name]
         integral_op = operators.Integrate(field)
         integral_field = integral_op.evaluate()
     # Communicate integral value to all processes
     integral_value = self.reducer.global_max(integral_field['g'])
     return integral_value