Hello everybody,
i have a problem where i want to combine test and trial functions from different spaces at the end. Is this somehow possible in fenics?
Thanks!
Hello everybody,
i have a problem where i want to combine test and trial functions from different spaces at the end. Is this somehow possible in fenics?
Thanks!
This is common in mixed problems, and can be done. However, if you mix the trial and test functions for your global system, you end up with a non-square (rectangular) matrix, that will not be invertible.
Thank you dokken.
Does this mean that i have to use a semi-implicit method to solve the discrete equation or should i use the pseudoinvers? What are you suggesting please?
I am sorry dokken. How is it possible please?
I am just getting the error
Did you combine test or trial functions from different spaces?
The Arguments found are:
v_1
v_1
v_0
v_0
You can for instance do:
from dolfin import *
mesh = UnitSquareMesh(10, 10)
V1 = FiniteElement("Lagrange", triangle, 1)
V2 = FiniteElement("Lagrange", triangle, 1)
el = MixedElement([V1, V2])
V = FunctionSpace(mesh, el)
u1,u2 = TrialFunctions(V)
v1,v2 = TestFunctions(V)
a = inner(u1, v2) * dx
assemble(a)
However, this is assembled into a rectangular matrix.
The following minimal example shows how to assemble with different test and trial functions:
from dolfin import *
mesh = UnitSquareMesh(10, 10)
V1 = FunctionSpace(mesh, "CG", 1)
V2 = FunctionSpace(mesh, "CG", 2)
u = TrialFunction(V1)
v = TestFunction(V2)
A = assemble(inner(u,v)*dx)
A_petsc = as_backend_type(A)
A_dense = A_petsc.mat()[:,:]
print(A_dense.shape)
Thank you very much again dokken!
You are so great!
Hi @dokken ,
Could you please post this minimal example using dolfinX?
Thank you very much in advance!
import dolfinx
import ufl
from mpi4py import MPI
mesh = dolfinx.UnitSquareMesh(MPI.COMM_WORLD, 10, 10)
V1 = dolfinx.FunctionSpace(mesh, ("CG", 1))
V2 = dolfinx.FunctionSpace(mesh, ("CG", 2))
u = ufl.TrialFunction(V1)
v = ufl.TestFunction(V2)
A = dolfinx.fem.assemble_matrix(ufl.inner(u, v) * ufl.dx)
A.assemble()
A_dense = A[:, :]
print(A_dense.shape)
print(A_dense)
Thank you very much @dokken !