def _norm_2_op(discr, num_components): from pytential import sym, bind if num_components is not None: from pymbolic.primitives import make_sym_vector v = make_sym_vector("integrand", num_components) integrand = sym.real(np.dot(sym.conj(v), v)) else: integrand = sym.abs(sym.var("integrand"))**2 return bind(discr, sym.integral(discr.ambient_dim, discr.dim, integrand))
def _norm_inf_op(discr, num_components): from pytential import sym, bind if num_components is not None: from pymbolic.primitives import make_sym_vector v = make_sym_vector("arg", num_components) max_arg = sym.abs(v) else: max_arg = sym.abs(sym.var("arg")) return bind(discr, sym.NodeMax(max_arg))
def _norm_op(discr, num_components): from pytential import sym, bind if num_components is not None: from pymbolic.primitives import make_sym_vector v = make_sym_vector("integrand", num_components) integrand = sym.real(np.dot(sym.conj(v), v)) else: integrand = sym.abs(sym.var("integrand"))**2 return bind(discr, sym.integral(integrand))
def _norm_inf_op(discr, num_components): from pytential import sym, bind if num_components is not None: from pymbolic.primitives import make_sym_vector v = make_sym_vector("arg", num_components) max_arg = sym.abs(v) else: max_arg = sym.abs(sym.var("arg")) return bind(discr, sym.NodeMax(max_arg))
def map_num_reference_derivative(self, expr): rec_operand = self.rec(expr.operand) assert isinstance(rec_operand, np.ndarray) if self.is_kind_matrix(rec_operand): raise NotImplementedError("derivatives") where_discr = self.places[expr.where] op = sym.NumReferenceDerivative(expr.ref_axes, sym.var("u")) return bind(where_discr, op)( self.queue, u=cl.array.to_device(self.queue, rec_operand)).get()
def map_num_reference_derivative(self, expr): rec_operand = self.rec(expr.operand) assert isinstance(rec_operand, np.ndarray) if self.is_kind_matrix(rec_operand): raise NotImplementedError("derivatives") rec_operand = cl.array.to_device(self.queue, rec_operand) op = sym.NumReferenceDerivative(ref_axes=expr.ref_axes, operand=sym.var("u"), dofdesc=expr.dofdesc) return bind(self.places, op)(self.queue, u=rec_operand).get()
def map_call(self, expr): arg, = expr.parameters rec_arg = self.rec(arg) if isinstance(rec_arg, np.ndarray) and self.is_kind_matrix(rec_arg): raise RuntimeError("expression is nonlinear in variable") if isinstance(rec_arg, np.ndarray): rec_arg = cl.array.to_device(self.queue, rec_arg) op = expr.function(sym.var("u")) result = bind(self.dep_source, op)(self.queue, u=rec_arg) if isinstance(result, cl.array.Array): result = result.get() return result
def map_call(self, expr): arg, = expr.parameters rec_arg = self.rec(arg) if isinstance(rec_arg, np.ndarray) and self.is_kind_matrix(rec_arg): raise RuntimeError("expression is nonlinear in variable") if isinstance(rec_arg, np.ndarray): rec_arg = cl.array.to_device(self.queue, rec_arg) op = expr.function(sym.var("u")) result = bind(self.dep_source, op)(self.queue, u=rec_arg) if isinstance(result, cl.array.Array): result = result.get() return result
def _integral_op(discr): from pytential import sym, bind return bind( discr, sym.integral(discr.ambient_dim, discr.dim, sym.var("integrand")))
def _integral_op(discr): from pytential import sym, bind return bind(discr, sym.integral(sym.var("integrand")))
def _integral_op(discr): from pytential import sym, bind return bind(discr, sym.integral( discr.ambient_dim, discr.dim, sym.var("integrand")))