forked from mfem/PyMFEM
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_blockoperator.py
54 lines (44 loc) · 1.25 KB
/
test_blockoperator.py
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
import sys
import numpy as np
from scipy.sparse import csr_matrix
if len(sys.argv) > 1 and sys.argv[1] == '-p':
import mfem.par as mfem
use_parallel = True
from mfem.common.mpi_debug import nicePrint as print
from mpi4py import MPI
myid = MPI.COMM_WORLD.rank
else:
import mfem.ser as mfem
use_parallel = False
myid = 0
smat = csr_matrix([[1,2,3,], [0, 0, 1], [2, 0, 0]])
mmat = mfem.SparseMatrix(smat)
offset1 = mfem.intArray([0, 3, 6])
offset2 = mfem.intArray([0, 3, 6])
print('BlockOperator')
m = mfem.BlockOperator(offset1, offset2)
m.SetBlock(0, 0, mmat)
print(m._offsets[0].ToList())
print(m._offsets[1].ToList())
print(m._linked_op)
print('BlockOperator')
m = mfem.BlockOperator(offset1)
m.SetBlock(0, 1, mmat)
m.SetDiagonalBlock(1, mmat)
print(m._offsets.ToList())
print(m._linked_op)
print('BlockDiagonalPreconditioner')
m = mfem.BlockDiagonalPreconditioner(offset1)
m.SetDiagonalBlock(1, mmat)
print(m._offsets.ToList())
print(m._linked_op)
print('BlockLowerTriangularPreconditioner')
m = mfem.BlockLowerTriangularPreconditioner(offset1)
m.SetDiagonalBlock(1, mmat)
try:
m.SetBlock(0, 1, mmat)
except ValueError:
print("this cause value error")
m.SetBlock(1, 0, mmat)
print(m._offsets.ToList())
print(m._linked_op)