1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
'''
This module test the matrix class
'''
import pytest
pytest.importorskip("ngsolve")
from ngsolve import Mesh, H1, VectorH1, BilinearForm, grad, div, dx
from netgen.geom2d import unit_square
import netgen.meshing as ngm
from mpi4py.MPI import COMM_WORLD
from ngsPETSc import Matrix
def test_poisson_mat():
'''
Testing that the matrix for the Poisson problem is correctly exported.
'''
if COMM_WORLD.rank == 0:
mesh = Mesh(unit_square.GenerateMesh(maxh=0.1).Distribute(COMM_WORLD))
else:
mesh = Mesh(ngm.Mesh.Receive(COMM_WORLD))
fes = H1(mesh, order=1, dirichlet="left|right|top|bottom")
u,v = fes.TnT()
a = BilinearForm(grad(u)*grad(v)*dx).Assemble()
Matrix(a.mat, fes)
def test_poisson_mat_filling():
'''
Testing that the matrix for the Poisson problem is correctly exported.
'''
if COMM_WORLD.rank == 0:
mesh = Mesh(unit_square.GenerateMesh(maxh=0.1).Distribute(COMM_WORLD))
else:
mesh = Mesh(ngm.Mesh.Receive(COMM_WORLD))
fes = H1(mesh, order=1, dirichlet="left|right|top|bottom")
u,v = fes.TnT()
a = BilinearForm(grad(u)*grad(v)*dx).Assemble()
M = Matrix(a.mat, fes)
Matrix(a.mat, fes, petscMat=M.mat)
def test_nonsquare_mat():
'''
Testing that a nonsquare matrix is correctly exported.
'''
if COMM_WORLD.rank == 0:
mesh = Mesh(unit_square.GenerateMesh(maxh=0.1).Distribute(COMM_WORLD))
else:
mesh = Mesh(ngm.Mesh.Receive(COMM_WORLD))
V = VectorH1(mesh, order=2, dirichlet="left|right|top|bottom")
Q = H1(mesh, order=1)
u,_ = V.TnT()
_,q = Q.TnT()
b = BilinearForm(trialspace=V, testspace=Q)
b += div(u)*q*dx
b.Assemble()
Matrix(b.mat, (Q, V))
if __name__ == '__main__':
test_poisson_mat()
test_poisson_mat_filling()
test_nonsquare_mat()
|