Hey there.

I’d like to use the typical Expression command to specify an expression to be applied on my boundaries, as boundary conditions. I recieve this expressions in the (r,theta) coordinates system. Now, notice these are large expressions: it’s non-viable to change from the (r,theta) coordinates system to the cartesian system by hand. So, if I had an expression like u = r*cos(theta), could I implement this in FEniCS quickly? Something like:

```
disp_x0 = Expression('r*cos(theta)', r=sqrt(x[0]*x[0]+x[1]*x[1]), theta=atan2(x[1],x[0]), degree=3)
```

(This implementation resulted in:)

```
NameError: name 'atan2' is not defined
```

But atan2 should be defined, as it is part of the C++ language, if I’m not mistaken.

Edit:

It seems that the problem with atan2 was the fact that I forgot to import math library. Now, the problem moved to:

```
NameError: name 'x' is not defined
```

Thanks in advance.

A trick like Incorrect Values Creating Expression From Other Expressions - #2 by francesco-ballarin may be of help. Define two symbols `x0 = sympy.var("x[0]")`

and `x1 = sympy.var("x[1]")`

, use `sympy`

to compute `theta`

and `r`

starting from `x0`

and `x1`

, write your expression in `theta`

and `r`

, and finally convert them to a C++ code with `sympy.printing.ccode`

.

My implementation:

```
x0 = sympy.var("x[0]")
x1 = sympy.var("x[1]")
theta = sympy.atan2(x1, x0)
r = sympy.sqrt(x0*x0 + x1*x1)
disp_x0_nod = Expression('cos(theta)*0.5*sin(theta) + pi/4*log(r)*power(r,2)', degree=3)
disp_x0 = sympy.printing.ccode(disp_x0_nod)
```

Resulted in

```
error: ‘theta’ was not declared in this scope
(later on)
raise RuntimeError("Unable to compile C++ code with dijitso")
RuntimeError: Unable to compile C++ code with dijitso
```

Thanks again!

You need to send `theta`

into expression, i.e.

```
disp_x0_nod = Expression(f'cos({theta})*0.5*sin({theta}) + pi/4*log(r)*power(r,2)', degree=3)
```

I guess.

Please make the example reproducible, i.e. all imports and minimal code to reproduce the error message you are seeing.

I guess it should be something like

```
x0 = sympy.var("x[0]")
x1 = sympy.var("x[1]")
theta = sympy.atan2(x1, x0)
r = sympy.sqrt(x0*x0 + x1*x1)
disp_x0_sym = cos(theta)*0.5*sin(theta) + sympy.pi/4*sympy.log(r)*r**2
disp_x0_ccode = sympy.printing.ccode(disp_x0_sym)
disp_x0_nod = Expression(disp_x0_ccode, degree=3)
```

but, as @dokken says, we can’t be more precise unless you give us a minimal example which we can run ourselves.