Esempio n. 1
0
print('Number dofs: {}'.format(dofmap.dim))

# Run and time assembly
t = -timeit.default_timer()
A = assemble(dofmap, a, dtype=numpy.complex128)
t += timeit.default_timer()
print('Assembly time a: {}'.format(t))

# Prepare solution and rhs vectors and apply boundary conditions
x = numpy.zeros(A.shape[1], dtype=A.dtype)
b = numpy.zeros(A.shape[0], dtype=A.dtype)

# Set Dirichlet BCs

t = -timeit.default_timer()
bc_dofs, bc_vals = build_dirichlet_dofs(dofmap, u_exact, dtype=A.dtype)

print(bc_vals.dtype)
bc_apply(bc_dofs, bc_vals, A, b)

t += timeit.default_timer()
print('Apply BCs: {}'.format(t))

# Solve linear system
t = -timeit.default_timer()
x = scipy.sparse.linalg.spsolve(A, b)

r = (A * x - b)
print(r.max(), r.min())

t += timeit.default_timer()
Esempio n. 2
0
)  # noqa

element = ufl.FiniteElement("P", ufl.triangle, 1)
u, v = ufl.TrialFunction(element), ufl.TestFunction(element)
x = ufl.SpatialCoordinate(ufl.triangle)
a = ufl.inner(ufl.grad(u), ufl.grad(v)) * ufl.dx
L = 50.0 * ufl.cos(6.28 * x[0]) * v * ufl.dx
dofmap = build_dofmap(element, mesh)


def u_bound(x):
    return x[0]


t = time.time()
bc_dofs, bc_vals = build_dirichlet_dofs(dofmap, u_bound, dtype=numpy.float64)
bc_map = {i: v for i, v in zip(bc_dofs, bc_vals)}
elapsed = time.time() - t
print('BC time = ', elapsed)

t = time.time()
A, b = symass(dofmap, a, L, bc_map, dtype=numpy.float64)

elapsed = time.time() - t
print('Ass time = ', elapsed)

# Smoothed aggregation -------------
print("****** Smoothed Aggregation solver ******")
ml = pyamg.smoothed_aggregation_solver(A, coarse_solver='lu')
print(ml)
Esempio n. 3
0
mesh = read_mesh(
    'https://raw.githubusercontent.com/chrisrichardson/meshdata/master/data/rectangle_mesh.xdmf'
)  # noqa

element = ufl.FiniteElement("P", ufl.triangle, 1)
u, v = ufl.TrialFunction(element), ufl.TestFunction(element)
f = ufl.Coefficient(element)
a = ufl.inner(ufl.grad(u), ufl.grad(v)) * ufl.dx
L = ufl.cos(1.0) * v * ufl.dx
dofmap = build_dofmap(element, mesh)


def u_bound(x):
    return x[0]


t = time.time()
bc_dofs, bc_vals = build_dirichlet_dofs(dofmap, u_bound)
bc_map = {i: v for i, v in zip(bc_dofs, bc_vals)}
elapsed = time.time() - t
print('BC time = ', elapsed)

t = time.time()
A, b = symass(dofmap, a, L, bc_map, dtype=numpy.float64)

petsc_mat = PETSc.Mat().createAIJ(size=A.shape,
                                  csr=(A.indptr, A.indices, A.data))

print(petsc_mat)
Esempio n. 4
0
print('Number dofs: {}'.format(dofmap.dim))

# Build sparsity pattern and create matrix
pattern = build_sparsity_pattern(dofmap)
i, j = pattern_to_csr(pattern)
A = create_matrix_from_csr((i, j))

# Run and time assembly
t = -timeit.default_timer()
assemble(A, dofmap, a, form_compiler_parameters)
t += timeit.default_timer()
print('Assembly time a: {}'.format(t))

# Prepare solution and rhs vectors and apply boundary conditions
x, b = A.createVecs()
bc_dofs, bc_vals = build_dirichlet_dofs(dofmap, u_exact)
x.setValues(bc_dofs, bc_vals)
A.zeroRowsColumns(bc_dofs, diag=1, x=x, b=b)

# Solve linear system
ksp = PETSc.KSP().create(A.comm)
ksp.setType(PETSc.KSP.Type.PREONLY)
ksp.pc.setType(PETSc.PC.Type.CHOLESKY)
set_solver_package(ksp.pc, "mumps")
#A.setOption(PETSc.Mat.Option.SPD, True)  # FIXME: Is that true?
t = -timeit.default_timer()
ksp.setOperators(A)
ksp.setUp()
t += timeit.default_timer()
print('Setup linear solver time: {}'.format(t))
t = -timeit.default_timer()