Example #1
0
def run(restore=False):
    if not restore:
        grid = structuredGrid([0, 0], [1, 1], [2, 2])
        grid.hierarchicalGrid.globalRefine(2)
        checkPointer = CheckPointer("dumpA", grid.hierarchicalGrid)
    else:
        checkPointer = CheckPointer("dumpA")
        grid = checkPointer.hierarchicalGrid().leafView

    space = lagrange(grid)
    df = space.interpolate([0], name="test")
    checkPointer.add(df)

    spc = lagrange(grid, storage='istl')
    df_istl = spc.interpolate([0], name="test_istl")

    # test discrete function assignment
    df.assign(df_istl)
    df_istl.assign(df)

    if not restore:
        print("interpolating grid function")

        @gridFunction(grid, name="gf", order=2)
        def gf(x):
            return x[0] * x[1] * (1 - x[0]) * (1 - x[1])

        df.interpolate(gf)
    else:
        print("restoring discrete function")
        checkPointer.restore()

    # df.plot()
    if not restore:
        checkPointer.backup()
Example #2
0
def FunctionSpace(mesh, family, degree=1, dimrange=None, **kwargs):
    from dune.fem.space import lagrange, dgonb, bdm, raviartThomas
    if (family in ['P', 'Lagrange', 'CG']):
        return lagrange(gridView=mesh,
                        order=degree,
                        dimRange=dimrange,
                        **kwargs)
    elif (family == 'DG'):
        return dgonb(gridView=mesh, order=degree, dimRange=dimrange, **kwargs)
    elif (family == 'BDM'):
        return bdm(gridView=mesh, order=degree, dimRange=dimrange, **kwargs)
    elif (family == 'RT'):
        return raviarThomas(gridView=mesh,
                            order=degree,
                            dimRange=dimrange,
                            **kwargs)
    else:
        raise ValueError('Space with identifier', spacetype, ' not known\n')
Example #3
0
for i in range(10):
    print(i, "dgSpace, 1e-5, True, True")
    gridView = newGridView()
    space = dgSpace(gridView, order=2, storage=storage)
    eoc = compute(space, 1e-5, True, True)  # , 'mol')
    test = test and (eoc[-1] - (space.order + 1)) > -0.1

    print(i, "dgSpace, 1, True, True")
    gridView = newGridView()
    space = dgSpace(gridView, order=2, storage=storage)
    eoc = compute(space, 1, True, True)
    test = test and (eoc[-1] - (space.order + 1)) > -0.1

    print(i, "lagrange, 1, True, True")
    gridView = newGridView()
    space = lagrange(gridView, order=2, storage=storage)
    eoc = compute(space, 1, True, True)
    test = test and (eoc[-1] - (space.order + 1)) > -0.1

    print(i, "lagrange, 1, False, True")
    gridView = newGridView()
    space = lagrange(gridView, order=2, storage=storage)
    eoc = compute(space, 1, False, True)
    test = test and (eoc[-1] - (space.order + 1)) > -0.1

    print(i, "lagrange, 1, False, False")
    gridView = newGridView()
    space = lagrange(gridView, order=2, storage=storage)
    eoc = compute(space, 1, False, False)
    test = test and (eoc[-1] - (space.order + 1)) > -0.1
Example #4
0
from __future__ import print_function, division

from ufl import as_vector, dot, grad, cos, pi, SpatialCoordinate, triangle
from dune.grid import structuredGrid, gridFunction
from dune.fem.space import lagrange, combined, product

x = SpatialCoordinate(triangle)
exact = as_vector([cos(2. * pi * x[0]) * cos(2. * pi * x[1]), dot(x, x)])

grid = structuredGrid([0, 0], [1, 1], [16, 16])
spc1 = lagrange(grid, dimRange=1, order=1)
spc2 = lagrange(grid, dimRange=1, order=2)
test1 = spc1.interpolate(exact[0], name="test")
test2 = spc2.interpolate(exact[1], name="test")
spc = combined(spc1, spc2)
solution = spc.interpolate(exact, name="solution")

space = product(spc1, spc2, components=["p", "s"])
df = space.interpolate(exact, name="df")
# print(df.dofVector.size,solution.dofVector.size,
#       df.components[0].dofVector.size,df.p.dofVector.size,test1.dofVector.size)
assert df.components[0].dofVector.size == test1.dofVector.size
assert df.s.dofVector.size == test2.dofVector.size
assert df.dofVector.size == solution.dofVector.size
df.interpolate(solution)
solution.interpolate(df)
test1.interpolate(df.p)
df.s.interpolate(test2)
df.components[0].interpolate(solution[0])
df.p.interpolate(solution[0])
from ufl import SpatialCoordinate, dot
from dune.grid import cartesianDomain
from dune.alugrid import aluConformGrid as leafGridView
from dune.fem.view import filteredGridView
from dune.fem.space import lagrange

gridView = leafGridView( cartesianDomain([0,0],[1,1],[16,16]) )

filteredView = filteredGridView(gridView, lambda e: e.geometry.center.two_norm > 0.5, domainId=1)
space = lagrange(filteredView, order=2)
x = SpatialCoordinate(space)
solution = space.interpolate(dot(x,x),name="solution")
solution.plot()
print("number of dofs:", solution.size,\
      "integral over filtered domain",solution.integrate())

filteredView = filteredGridView(gridView, lambda e: e.geometry.center.two_norm < 0.5, domainId=1,
                                useFilteredIndexSet=True)
space = lagrange(filteredView, order=2)
x = SpatialCoordinate(space)
solution = space.interpolate(dot(x,x),name="solution")
solution.plot()
print("number of dofs:", solution.size,\
      "integral over filtered domain",solution.integrate())

space = lagrange(gridView, order=2)
solution = space.interpolate(dot(x,x),name="solution")
solution.plot()
print("number of dofs:", solution.size,\
      "integral over filtered domain",solution.integrate())
Example #6
0
from __future__ import print_function, division

from ufl import as_vector, grad, cos, pi, SpatialCoordinate, triangle
from dune.grid import structuredGrid, cartesianDomain
from dune.fem.space import lagrange
from dune.alugrid import aluConformGrid as gridManager

grid = gridManager(cartesianDomain([0, 0], [1, 1], [16, 16]))
# grid  = structuredGrid([0, 0], [1, 1], [16, 16])
space = lagrange(grid, dimRange=1, order=1)
x = SpatialCoordinate(triangle)
exact = as_vector([cos(2. * pi * x[0]) * cos(2. * pi * x[1])])
solution = space.interpolate(exact, name="solution")

test = space.interpolate(solution[0], name="tmp")
test = space.interpolate(grad(solution)[0, 0], name="tmp")
Example #7
0
import math
from ufl import SpatialCoordinate, sin, pi, dot, as_vector

from dune.grid import structuredGrid, gridFunction
from dune.fem.space import lagrange

grid = structuredGrid([0, 0], [1, 1], [5, 5])
space = lagrange(grid, order=3, dimRange=2)
x = SpatialCoordinate(space)
df = space.interpolate([
    sin(2**i * pi * x[0] * x[1] / (0.25**(2 * i) + dot(x, x)))
    for i in range(1, 3)
],
                       name="femgf")


@gridFunction(grid)
def f(x):
    return [
        math.sin(2**i * math.pi * x[0] * x[1] /
                 (0.25**(2 * i) + x[0] * x[0] + x[1] * x[1]))
        for i in range(1, 3)
    ]


from dune.vtk import vtkWriter
writer = vtkWriter(grid,
                   "testFem",
                   pointScalar={
                       "f":
                       f,