SymPy defines gradient only for scalar valued function.
Do you mean that gradient of vector valued function should return other 
stuff like jacobian?

On Saturday, April 25, 2020 at 3:44:15 AM UTC+9, Alexander Lindsay wrote:
>
> I've been using the capabilities in sympy.vector for generating MMS 
> solutions for verifying FEM in MOOSE. I'm curious whether sympy supports 
> calculation of the gradient of a vector field (e.g. with the result being a 
> tensor)? It doesn't appear to me that it does, but I'm hoping I overlooked 
> something. Below is the sample code I'd like to be able to execute and the 
> corresponding backtrace. If the ability to take the gradient of a vector 
> doesn't exist, I'm curious whether it would be difficult to add? If it's 
> not too much anticipated work, I'd be willing to take a stab at it.
>
> from sympy.vector import gradient, CoordSys3D
> R = CoordSys3D('R')
> u = R.x*R.y * (R.i + R.j)
> gradient(u)
>
> ---------------------------------------------------------------------------
> ValueError                                Traceback (most recent call last)
> <ipython-input-49-c095794df196> in <module>
>       5 u = R.x*R.y * (R.i + R.j)
>       6 
> ----> 7 gradient(u)
>
> ~/miniconda3/envs/moose-boost/lib/python3.7/site-packages/sympy/vector/operators.py
>  in gradient(scalar_field, coord_sys, doit)
>     317 
>     318         if doit:
> --> 319             return (vx * i + vy * j + vz * k).doit()
>     320         return vx * i + vy * j + vz * k
>     321     else:
>
> ~/miniconda3/envs/moose-boost/lib/python3.7/site-packages/sympy/vector/basisdependent.py
>  in doit(self, **hints)
>     169         """Calls .doit() on each term in the Dyadic"""
>     170         doit_components = [self.components[x].doit(**hints) * x
> --> 171                            for x in self.components]
>     172         return self._add_func(*doit_components)
>     173 
>
> ~/miniconda3/envs/moose-boost/lib/python3.7/site-packages/sympy/vector/basisdependent.py
>  in <listcomp>(.0)
>     169         """Calls .doit() on each term in the Dyadic"""
>     170         doit_components = [self.components[x].doit(**hints) * x
> --> 171                            for x in self.components]
>     172         return self._add_func(*doit_components)
>     173 
>
> ~/miniconda3/envs/moose-boost/lib/python3.7/site-packages/sympy/core/decorators.py
>  in __sympifyit_wrapper(a, b)
>      89                 if not hasattr(b, '_op_priority'):
>      90                     b = sympify(b, strict=True)
> ---> 91                 return func(a, b)
>      92             except SympifyError:
>      93                 return retval
>
> ~/miniconda3/envs/moose-boost/lib/python3.7/site-packages/sympy/core/decorators.py
>  in binary_op_wrapper(self, other)
>     127                     if f is not None:
>     128                         return f(self)
> --> 129             return func(self, other)
>     130         return binary_op_wrapper
>     131     return priority_decorator
>
> ~/miniconda3/envs/moose-boost/lib/python3.7/site-packages/sympy/vector/basisdependent.py
>  in __mul__(self, other)
>      34     @call_highest_priority('__rmul__')
>      35     def __mul__(self, other):
> ---> 36         return self._mul_func(self, other)
>      37 
>      38     @_sympifyit('other', NotImplemented)
>
> ~/miniconda3/envs/moose-boost/lib/python3.7/site-packages/sympy/vector/vector.py
>  in __new__(cls, *args, **options)
>     412 
>     413     def __new__(cls, *args, **options):
> --> 414         obj = BasisDependentMul.__new__(cls, *args, **options)
>     415         return obj
>     416 
>
> ~/miniconda3/envs/moose-boost/lib/python3.7/site-packages/sympy/vector/basisdependent.py
>  in __new__(cls, *args, **options)
>     257         # Make sure incompatible types weren't multiplied
>     258         if count > 1:
> --> 259             raise ValueError("Invalid multiplication")
>     260         elif count == 0:
>     261             return Mul(*args, **options)
>
> ValueError: Invalid multiplication
>
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sympy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/e5093927-3e96-4d3e-8e81-e4b0288f5a6c%40googlegroups.com.

Reply via email to