def test_average(geometry, mesh): vec_CG1 = VectorFunctionSpace(mesh, "CG", 1) # We will fill DG_field with values, and average them to CG_field weights = Function(vec_CG1) true_values = Function(vec_CG1) true_values = setup_values(geometry, true_values) kernel = kernels.AverageWeightings(vec_CG1) kernel.apply(weights) tolerance = 1e-12 if geometry == "1D": for i, (weight, true) in enumerate( zip(weights.dat.data[:], true_values.dat.data[:])): assert abs(weight - true ) < tolerance, "Weight not correct at position %i" % i elif geometry == "2D": for i, (weight, true) in enumerate( zip(weights.dat.data[:], true_values.dat.data[:])): for weight_j, true_j in zip(weight, true): assert abs( weight_j - true_j ) < tolerance, "Weight not correct at position %i" % i
def _weighting(self): """ Generates a weight function for computing a projection via averaging. """ w = Function(self.V) weight_kernel = kernels.AverageWeightings(self.V) weight_kernel.apply(w) return w