Skip to content

ElementTriN1 on different length-scales #1016

@HelgeGehring

Description

@HelgeGehring

The ElementTriN1()*ElementTriP1() works fine for me as long as the lengthscale of the system is ~1, if I change it to the order of ~ 1e-6 the results become unprecise. This seems especially for solutions which have non-zero values in both subspaces.
I've had a look on the assembly:

from skfem import *

@BilinearForm
def test_form(u_n, u_p, v_n, v_p, w):
    print(u_n.max(), u_p.max())
    return u_p * v_p

mesh = MeshTri().refined(2)
basis = Basis(mesh, ElementTriN1()*ElementTriP1())
test_form.assemble(basis)

print('-' * 80)

mesh = MeshTri().refined(2).scaled((1e-6,1e-6))
basis = Basis(mesh, ElementTriN1()*ElementTriP1())
test_form.assemble(basis)

The first assembly has values like

0.0 0.816847572980459
3.6336951459609206 0.0

while the second one is like

0.0 0.816847572980459
3633695.1459609214 0.0

Could this be the problem, that there are orders of magnitude between the values and eigs cannot solve the system precisely?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions