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()
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')
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
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())
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")
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,