5import scipy.sparse.linalg
12from dune.grid
import DataType
13from dune.functions
import defaultGlobalBasis, Power, Composite, Lagrange
15from fufemforms
import *
16from utilities
import *
24dirichletValues =
lambda x : np.sin(2*np.pi*x[0])
27 return np.abs(a-b) <= 1e-10
30isDirichlet =
lambda x : isNear(x[0], 0)
or isNear(x[0], 1)
or isNear(x[1], 0)
or isNear(x[1], 1)
38grid = dune.grid.structuredGrid([0,0],[1,1],[gridSize,gridSize])
43basis = defaultGlobalBasis(grid, Lagrange(order=2))
45print(
"Dimension of FE space is "+str(len(basis)))
53isConstrained = np.zeros( N, dtype=bool )
54basis.interpolate(isConstrained,isDirichlet)
57constraintDOFValues = np.zeros( N )
58basis.interpolate(constraintDOFValues, dirichletValues)
63u = trialFunction(basis)
64v = testFunction(basis)
67f = Coefficient(rhs, basis.gridView)
70a = integrate(
dot(grad(u),grad(v)))
76assembler = GlobalAssembler(basis)
77A = assembler.assembleOperator(a)
78b = assembler.assembleFunctional(l)
81incorporateEssentialConstraints(A, b, isConstrained, constraintDOFValues)
86x = scipy.sparse.linalg.spsolve(A, b)
89u = basis.asFunction(x)
91vtk = grid.vtkWriter(2)
92u.addToVTKWriter(
"sol", vtk, DataType.PointData)
93vtk.write(
"poisson-pq2-py")
field_type dot(const type &newv) const