Forum Message

 

 

We have moved the forum to https://forum.ngsolve.org . This is an archived version of the topics until 05/05/23. All the topics were moved to the new forum and conversations can be continued there. This forum is just kept as legacy to not invalidate old links. If you want to continue a conversation just look for the topic in the new forum.

Notice

The forum is in read only mode.

Algebraic Multigrid for Compressed VectorH1 space

More
3 years 1 month ago #3567 by schruste
Dear Qi,

I can not reproduce the singular matrix problem.

However, the performance of the preconditioner is indeed not satisfactory. I am not an expert on the implemented h1amg precond, but it is not specifically tailored for unfitted FEM situations. In your examples you have stabilization for bad cuts so that it seems not surprising that an AMG tailored for more standard H1-conforming fitted discretizations suffers from bad cut situations.

Best,
Christoph
More
3 years 1 month ago - 3 years 1 month ago #3568 by Ryanleaf
Dear Christoph,

Thank you very much for the quick reply.
It's a little bit strange. Previously I got this singular matrix problem on my personal PC.
Today I updated the ngsxfem&ngsolve in cluster and run the exact the same script for maxh=1/8 & maxh=1/12.
Code:
from netgen.geom2d import SplineGeometry from netgen.meshing import MeshingParameters from xfem import * from netgen.csg import CSGeometry, OrthoBrick, Pnt import netgen.gui from netgen.geom2d import unit_square from ngsolve import * from ngsolve.la import EigenValues_Preconditioner from xfem.lsetcurv import * def eps(u): return 0.5 * (Grad(u) + Grad(u).trans) def Setup(): cube = CSGeometry() cube.Add(OrthoBrick(Pnt(-1.5, -1.5, -1.5), Pnt(1.5, 1.5, 1.5))) mesh = Mesh(cube.GenerateMesh(maxh=1/12, quad_dominated=False)) lsetmeshadap = LevelSetMeshAdaptation(mesh, order=3, threshold=1000, discontinuous_qn=True) phi = Norm(CoefficientFunction((x, y, z))) - 1 deformation = lsetmeshadap.CalcDeformation(phi) lsetp1 = lsetmeshadap.lset_p1 mesh.SetDeformation(deformation) ci = CutInfo(mesh, lsetp1) Vhbase = VectorH1(mesh, order=2, dirichlet=[1,2,3,4,5,6]) Vhneg = Restrict(Vhbase, ci.GetElementsOfType(HASNEG)) Vhpos = Restrict(Vhbase, ci.GetElementsOfType(HASPOS)) WhGV = FESpace([Vhneg, Vhpos], flags={"dgjumps": True}) lset_neg = {"levelset": lsetp1, "domain_type": NEG} lset_pos = {"levelset": lsetp1, "domain_type": POS} lset_doms = [lset_neg, lset_pos] elements_doms = [HASNEG, HASPOS] u, v = WhGV.TnT() a = BilinearForm(WhGV) for i in [0, 1]: # loop over domains a += SymbolicBFI(lset_doms[i], form=2* InnerProduct(eps(u[i]), eps(v[i])), definedonelements=ci.GetElementsOfType(elements_doms[i])) a += SymbolicBFI(lset_doms[i], form=u[i] * v[i], definedonelements=ci.GetElementsOfType(elements_doms[i])) return mesh, WhGV, a mesh, WhGV, a = Setup() gfu = GridFunction(WhGV) gfu.components[1].Set(CoefficientFunction((x,y,z)),BND) mg = Preconditioner(a, "h1amg") # register mg to a a.Assemble() print('NDOF = ', WhGV.ndof) preI = Projector(mask=WhGV.FreeDofs(), range=True) lams = EigenValues_Preconditioner(mat=a.mat, pre=mg.mat) print("condition number", max(lams)/min(lams))
I gott this singular matrix problem in both experiments on cluster too.

catch in AssembleBilinearform 2: Inverse matrix: Matrix singular
Traceback (most recent call last): 
File "<stdin>", line 42, in <module>netgen.libngpy._meshing.NgException: Inverse matrix: Matrix singularin Assemble BilinearForm 'biform_from_py'

Do you know any possible settings that may cause this problem?

Best,
Qi
Last edit: 3 years 1 month ago by Ryanleaf.
Time to create page: 0.109 seconds