'Circle' object is not callable


106
views
0
6 months ago by
BW  
Hi,
I've been writing a program to try and model the deformation of annular membrane under a load and electric field.

When running the code I get the error " 'Circle' object is not callable "
My issue seems to come from the inner(P, f)*ds term.

Any help would be appreciated.

My code is:
import os
import sys
from dolfin import *
from mshr import *
import numpy as np

parameters.form_compiler.quadrature_degree = 4
parameters["form_compiler"]["representation"] = "uflacs"

args = [sys.argv[0]] + """
                       --petsc.snes_max_it 100
                       --petsc.snes_atol 1.0e-7
                       --petsc.snes_rtol 1.0e-7
                       --petsc.snes_monitor
                       --petsc.snes_converged_reason

                       --petsc.ksp_type preonly
                       --petsc.pc_type lu
                       --petsc.pc_factor_mat_solver_package mumps
                       """.split()
parameters.parse(args)

# controlled parameters
B = 20e-3 # outer radius in m
A = 7.5e-3 # inner radius in m
weight = 1.0
P = Constant((0.0, 0.0, -weight)) # Load
E = 0 # Electric Field

# define mesh and finite element(s)
outer = Circle(Point(0.0, 0.0), B, 25)
inner = Circle(Point(0.0, 0.0), A, 25)

annulus = outer - inner
mesh = generate_mesh(annulus, 50)


# define the function space
V = VectorFunctionSpace(mesh, 'Lagrange', 1, 3)

# functions
v = TestFunction(V)
u = TrialFunction(V)
# tensors and energy
Grad_X = as_tensor([[1, 0],
               [0, 1],
               [0, 0]]) 

F = Grad_X + grad(u) 
C = F.T*F
i = tr(C)
j = det(C)
mu = 1.0
energy_density = (mu/2.0)*(i - 2.0) + (E/2)*j

# define boundary and boundary condtion
def boundary(x, on_boundary):
    return bool(x[0]*x[0]+x[1]*x[1] >= B - DOLFIN_EPS and on_boundary)

u_initial = Constant((0.0, 0.0, 0.0))
bc = DirichletBC(V, u_initial, boundary)

# variational form and energy minimisation
f = Expression(("x[0], x[1], x[2]"), degree = 1) # current configuration

form = energy_density*dx - inner(P, f)*ds

deriv = derivative(form, u, v)
J = derivative(deriv, u, du) # jacobian​
Community: FEniCS Project

1 Answer


4
6 months ago by
You redefine the UFL function 'inner' to be a 'Circle' object, and then use it in your form, hence the error.
Oh, I see now thanks.
written 6 months ago by BW  
Please login to add an answer/comment or follow this question.

Similar posts:
Search »