def minimum(f): fmin = op2.Global(1, [1000], dtype=float) op2.par_loop(op2.Kernel(""" static void minify(double *a, double *b) { a[0] = a[0] > fabs(b[0]) ? fabs(b[0]) : a[0]; } """, "minify"), f.dof_dset.set, fmin(op2.MIN), f.dat(op2.READ)) return fmin.data[0]
def max(f): fmax = op2.Global(1, np.finfo(float).min, dtype=float) op2.par_loop(op2.Kernel(""" static void maxify(double *a, double *b) { a[0] = a[0] < fabs(b[0]) ? fabs(b[0]) : a[0]; } """, "maxify"), f.dof_dset.set, fmax(op2.MAX), f.dat(op2.READ)) return fmax.data[0]
def min(f): fmin = op2.Global(1, np.finfo(float).max, dtype=float) op2.par_loop(op2.Kernel(""" void minify(double *a, double *b) { a[0] = a[0] > fabs(b[0]) ? fabs(b[0]) : a[0]; } """, "minify"), f.dof_dset.set, fmin(op2.MIN), f.dat(op2.READ)) return fmin.data[0]
def min(f_in): fmin = op2.Global(1, [np.finfo(float).max], dtype=float) if len(f_in.ufl_shape) > 0: mesh = f_in.function_space().mesh() V = FunctionSpace(mesh, "DG", 1) f = Function(V).project(sqrt(inner(f_in, f_in))) else: f = f_in op2.par_loop( op2.Kernel( """void minify(double *a, double *b) { a[0] = a[0] > fabs(b[0]) ? fabs(b[0]) : a[0]; }""", "minify"), f.dof_dset.set, fmin(op2.MIN), f.dat(op2.READ)) return fmin.data[0]