New question #113926 on DOLFIN:
https://answers.launchpad.net/dolfin/+question/113926
I am solving a coupled problem: Nonlinear advection-diffusion and hyperelasticity
#Function spaces are:
Q = FunctionSpace(mesh, "CG", 1);
V = VectorFunctionSpace(mesh, "CG", 1);
U = VectorFunctionSpace(mesh, "CG", 1);
#Functions for advection-diff
u1c = Function(Q) #Solution from current time step
u10 = Function(Q) #Initial condition
#Functions for hyperelasticity
v2 = TestFunction(U) # Test function
du2 = TrialFunction(U) # Incremental displacement
u2c = Function(U) # Displacement in current time step
#Concentration field influencing the stress. Strain energy function psi(C), where C is the right Cauchy-Green tensor.
psi = ((u10/u1c)**1.333333)*const1*(tr(C))**2 - ((u10/u1c)**0.666666)*const2*tr(C) + ((u1c/u10)**1.333333)*const3*tr(C*C)
P = 2*((u1c/u10)**0.333333)*F*diff(psi, C) #Stress
#Variational form
L2 = inner(P, grad(v2))*dx(1) - inner(B, v2)*dx(1) - inner(T2, v2)*ds(1)
a2 = derivative(L2, u2c, du2)
# Solve nonlinear variational problem
problem = VariationalProblem(a2, L2, [bclm, bcrm],
cell_domains=sub_domains,
exterior_facet_domains=boundary,
nonlinear=True)
This code takes inordinately long to form the matrices, but appears to converge quadratically to the correct solution.
If instead I move the multiplication by (u10/u1c) from
P = 2*((u1c/u10)**0.333333)*F*diff(psi, C) to the previous line
psi = ((u10/u1c))*const1*(tr(C))**2 - ((u10/u1c)**0.333333)*const2*tr(C) + ((u1c/u10))*const3*tr(C*C)
P = 2*F*diff(psi, C) #Stress
psi = ((u10/u1c)**1.333333)*const1*(tr(C))**2 - ((u10/u1c)**0.666666)*const2*tr(C) + ((u1c/u10)**1.333333)*const3*tr(C*C)
P = 2*((u1c/u10)**0.333333)*F*diff(psi, C) #Stress