Defining function space for free boundary problem


I am trying to solve a fiber drawing model with a free boundary.
After making a change of variables I have the weak form

\int_{d\eta d\zeta} R^2 \eta q \left( \frac{1}{R \eta} \frac{\partial }{\partial \eta} \left(\eta u \right) + \left[\frac{\partial}{\partial \zeta} - \eta \frac{R'}{R}\frac{\partial}{\partial \eta}\right]w \right) = 0 \\ \int_{d\eta d\zeta} - \frac{\partial \phi_1}{\partial \eta} R \eta \left(-p + \frac{2}{R}\frac{\partial u}{\partial \eta} \right) - \textcolor{red}{\epsilon} \left(\eta \frac{\partial }{\partial \zeta} \left(\phi_1 R^2 \right) + R' R \frac{\partial }{\partial \eta} \left( \phi_1 \eta^2 \right) \right) \left[ \epsilon \left(\frac{\partial u }{\partial \zeta} + \eta \frac{R'}{R}\frac{\partial u }{\partial \eta} \right) + \epsilon^{-1} \frac{1}{R} \frac{\partial w }{\partial \eta} \right] \\ - \phi_1 R \left( - p + 2 \frac{u}{R\eta }\right) = 0 \\ \int_{d\eta d\zeta} \frac{\partial \phi_2}{\partial \eta} \left[ \epsilon \left(\frac{\partial u }{\partial \zeta} + \eta \frac{R'}{R}\frac{\partial u }{\partial \eta} \right) + \epsilon^{-1} \frac{1}{R} \frac{\partial w }{\partial \eta} \right] \\ + \textcolor{red}{\epsilon} \left[ \eta \frac{\partial}{\partial \zeta} \left(R^2 \phi_2 \right) + R R' \frac{\partial}{\partial \eta } \left( \eta^2 \phi_2 \right)\right] \left[ - p + 2 \frac{\partial w}{\partial \zeta} - 2 \eta \frac{R'}{R}\frac{\partial w}{\partial \eta} \right] \\ = 0 \\ \int_{d \eta d \zeta} \frac{\partial R}{\partial \eta} + \int_{dS} u - w \frac{\partial R}{\partial \eta} = 0

However when I am creating my function space R, the free boundary variable is a vector valued function rather than a scalar function like the pressure.

Define Taylor–Hood function space W

V = VectorElement(“Lagrange”, triangle, 2)
Q = FiniteElement(“Lagrange”, triangle, 1)
S = VectorElement(“Lagrange”, triangle, 1)

W = FunctionSpace(mesh, MixedElement([V, Q, S]))

Define Function and TestFunction(s)

w = Function(W)
(u, p, r) = split(w)
(v, q, s) = split(TestFunction(W))


Any ideas what I am doing wrong?

Do you just mean you want your s and r functions to be scalar?

If so, simply change:

S = VectorElement(“Lagrange”, triangle, 1)


S = FiniteElement(“Lagrange”, triangle, 1)
1 Like

God I really should have seen that.

cheers nate!

1 Like