|
2 | 2 | # Copyright 2013-2018 pyMOR developers and contributors. All rights reserved. |
3 | 3 | # License: BSD 2-Clause License (http://opensource.org/licenses/BSD-2-Clause) |
4 | 4 |
|
5 | | -from pymor.operators.interface import Operator |
| 5 | +from pymor.operators.list import LinearComplexifiedListVectorArrayOperatorBase |
6 | 6 |
|
7 | 7 | from pymor_dealii.pymor.vectorarray import DealIIVectorSpace |
8 | 8 | import pymor_dealii_bindings as pd2 |
9 | 9 |
|
10 | 10 |
|
11 | | -class DealIIMatrixOperator(Operator): |
| 11 | +class DealIIMatrixOperator(LinearComplexifiedListVectorArrayOperatorBase): |
12 | 12 | """Wraps a dealII matrix as an |Operator|.""" |
13 | 13 |
|
14 | | - linear = True |
15 | | - |
16 | 14 | def __init__(self, matrix, name=None): |
17 | 15 | self.source = DealIIVectorSpace(matrix.m()) |
18 | 16 | self.range = DealIIVectorSpace(matrix.n()) |
19 | 17 | self.__auto_init(locals()) |
20 | 18 |
|
21 | | - def apply(self, U, mu=None): |
22 | | - assert U in self.source |
23 | | - R = self.range.zeros(len(U)) |
24 | | - for u, r in zip(U._list, R._list): |
25 | | - self.matrix.vmult(r.impl, u.impl) |
26 | | - return R |
27 | | - |
28 | | - def apply_transpose(self, V, mu=None): |
29 | | - assert V in self.range |
30 | | - U = self.source.zeros(len(V)) |
31 | | - for u, r in zip(V._list, U._list): |
32 | | - self.matrix.Tvmult(r.impl, u.impl) |
33 | | - return U |
34 | | - |
35 | | - def apply_inverse(self, V, mu=None, initial_guess=None, least_squares=False): |
36 | | - assert V in self.range |
| 19 | + def _real_apply_one_vector(self, u, mu=None, prepare_data=None): |
| 20 | + r = self.range.real_zero_vector() |
| 21 | + self.matrix.vmult(r.impl, u.impl) |
| 22 | + return r |
| 23 | + |
| 24 | + def _real_apply_inverse_one_vector( |
| 25 | + self, v, mu=None, initial_guess=None, least_squares=False, prepare_data=None |
| 26 | + ): |
37 | 27 | if least_squares: |
38 | 28 | raise NotImplementedError |
39 | | - R = self.source.zeros(len(V)) |
40 | | - for r, v in zip(R._list, V._list): |
41 | | - self.matrix.cg_solve(r.impl, v.impl) |
42 | | - return R |
| 29 | + r = self.source.real_zero_vector() |
| 30 | + self.matrix.cg_solve(r.impl, v.impl) |
| 31 | + return r |
| 32 | + |
| 33 | + def _real_apply_adjoint_one_vector(self, v, mu=None, prepare_data=None): |
| 34 | + r = self.source.real_zero_vector() |
| 35 | + self.matrix.Tvmult(r.impl, v.impl) |
| 36 | + return r |
43 | 37 |
|
44 | 38 | def _assemble_lincomb( |
45 | 39 | self, |
|
0 commit comments