# Pass fenics form to a python function

Hello,

I want to pass a relationship based on the solution of the problem to a python function as a float in every time step. Here a sample of my solution loop:

``````while (time <= T):

# solve the system and obtain the solution (u,trz)
nIter, rNorm = NewtonRaphson(Res,Jac,bcs_,uknown,uknown0,rank)

# split the unkown
u,trz = uknown.split(True)

# Define a tensor based on the solution of the u
F = as_tensor([[u,0.,0.],[0.,u,0.],[0.,0.,1.]])

# Define a scalar quantity
FF = inner(F,F)

# pass this scalar to a python function and take the output "out" which is a float
out = reaction(FF)

# Move to next time step
u0.assign(u)
trz0.assign(trz)

time  += dt
``````

I want to pass the quantity FF, as a float, to a python function reaction() to solve a system of ODEs with solve_ivp of scipy. How can I do it ?

Thanks you

You Need to assemble FF over an integration domain. If you want FF to be a scalar over every cell, you would have to project FF into a suitable function space (`FunctionSpace(mesh, "DG", 0)`) and access the underlying array of the output function,
I.e.

``````Q = FunctionSpace(mesh, "DG", 0)
q = project(FF, Q)
print(q.vector().get_local())
``````

or alternatively, if you want FF to be a single scalar:

``````q = assemble(FF*dx)
``````

Thank you @dokken !!