Sympy to Fenics - Unable to compile

The following works for me

import dolfin
import sympy
from sympy import symbols, atan2, sqrt, pi, log, sin, cos, Matrix

def calculate_displacements():
    # Definir símbolos
    x, y = symbols('x[0] x[1]')

    # Definir r en términos de x e y
    r_expr = sqrt(x**2 + y**2)

    # Definir theta en términos de x e y
    theta_expr = atan2(y, x)

    # Definir expresiones analíticas
    gr = 1
    a_expr = cos(theta_expr)
    b_expr = -sin(theta_expr)
    c_expr = sin(theta_expr)
    d_expr = cos(theta_expr)
    u_r_expr = -1/2*cos(theta_expr)-gr*r_expr/(4*pi)*(-1+2*log(r_expr)+cos(2*theta_expr)*(1+2*log(r_expr))+2*(pi-theta_expr)*sin(2*theta_expr))
    u_theta_expr = 1/2*sin(theta_expr)+gr*r_expr/(4*pi)*(2*(theta_expr-pi)*(2-2*cos(2*theta_expr))-(1+2*log(r_expr))*sin(2*theta_expr))

    # Definir las matrices con expresiones
    matriz_2x2 = Matrix([[a_expr, b_expr], [c_expr, d_expr]])
    matriz_2x1 = Matrix([u_r_expr, u_theta_expr])

    # Realizar la multiplicación de matrices con expresiones
    displacements = matriz_2x2 * matriz_2x1
    return displacements

disp = calculate_displacements()
disp_ccode = [sympy.printing.ccode(disp[i]).replace("log", "std::log") for i in (0, 1)]
disp_x0 = dolfin.Expression(disp_ccode[0], degree=1)
disp_x1 = dolfin.Expression(disp_ccode[1], degree=1)
1 Like