I am solving coupled problem; I need to construct block matrix [kuu, 0; 0 kcc]. How can I construct. Thanks in advance. Please find the attached code.
from fenics import *
import numpy
parameters['form_compiler']['cpp_optimize'] = True
parameters['form_compiler']['optimize'] = True
set_log_active(False)
mesh = UnitSquareMesh(10,10)
l_o = 0.015
Gc = 2.7
lmbda, mu = 121.15e3, 80e3
def epsilon(u):
return sym(grad(u))
def sigma(u):
return lmbda*tr(epsilon(u))*Identity(2) + 2*mu*epsilon(u)
def en_dens(u):
str_ele = 0.5*(grad(u) + grad(u).T)
IC = tr(str_ele)
ICC = tr(str_ele * str_ele)
return (0.5*lmbda*IC**2) + mu*ICC
FS_Scalar = FiniteElement('CG', mesh.ufl_cell(), 1)
FS_Vector = VectorElement('CG', mesh.ufl_cell(), 1)
V = FunctionSpace(mesh, MixedElement([FS_Vector, FS_Scalar]))
U_ = TestFunction(V)
(DispTest,PhiTest) = split(U_)
DU = TrialFunction(V)
(DispTrial, PhiTrial) = split(DU)
Uold = Function(V)
(DispOld, PhiOld) = split(Uold)
Eq_Disp = (1e-6 + (1 - PhiOld) ** 2)*inner(sigma(DispTrial), grad(DispTest))*dx
Eq_Phi = Gc*l_o*inner(grad(PhiTrial),grad(PhiTest))*dx+\
(2.*en_dens(DispOld) + Gc/l_o)*inner(PhiTrial,PhiTest)*dx
form = Eq_Disp + Eq_Phi
kuu = PETScMatrix()
assemble(Eq_Disp, tensor = kuu)
kcc = PETScMatrix()
assemble(Eq_Phi, tensor = kcc)
# Now I need to contruct A = [kuu 0; 0 kcc]
# how can I do that