Coverage for pySDC/implementations/datatype_classes/petsc_vec.py: 100%
30 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-11-02 12:30 +0000
« prev ^ index » next coverage.py v7.17.0, created at 2026-11-02 12:30 +0000
1from petsc4py import PETSc
3from pySDC.implementations.datatype_classes.container import MultiComponentContainer
6class petsc_vec(PETSc.Vec):
7 """PETSc ``Vec`` datatype, created from a ``DMDA`` or copied from another vector."""
9 __array_priority__ = 1000 # otherwise rmul with float64 does not work (don't ask, won't tell)
11 def __new__(cls, init=None, val=0.0):
12 if isinstance(init, petsc_vec) or isinstance(init, PETSc.Vec):
13 obj = PETSc.Vec.__new__(cls)
14 init.copy(obj)
15 elif isinstance(init, PETSc.DMDA):
16 tmp = init.createGlobalVector()
17 obj = petsc_vec(tmp)
18 objarr = init.getVecArray(obj)
19 objarr[:] = val
20 else:
21 obj = PETSc.Vec.__new__(cls)
22 return obj
24 def __abs__(self):
25 """
26 Overloading the abs operator
28 Returns:
29 float: absolute maximum of all vec values
30 """
31 # take absolute values of the mesh values (INF = 3)
32 return self.norm(3)
34 def isend(self, dest=None, tag=None, comm=None):
35 """
36 Routine for sending data forward in time (non-blocking)
38 Args:
39 dest (int): target rank
40 tag (int): communication tag
41 comm: communicator
43 Returns:
44 request handle
45 """
46 return comm.Issend(self.getArray(), dest=dest, tag=tag)
48 def irecv(self, source=None, tag=None, comm=None):
49 """
50 Routine for receiving in time
52 Args:
53 source (int): source rank
54 tag (int): communication tag
55 comm: communicator
57 Returns:
58 None
59 """
60 return comm.Irecv(self.getArray(), source=source, tag=tag)
62 def bcast(self, root=None, comm=None):
63 """
64 Routine for broadcasting values
66 Args:
67 root (int): process with value to broadcast
68 comm: communicator
70 Returns:
71 broadcasted values
72 """
73 comm.Bcast(self.getArray(), root=root)
74 return self
77class petsc_vec_imex(MultiComponentContainer):
78 """
79 RHS data type for Vec with implicit and explicit components
81 Attributes:
82 impl (petsc_vec): implicit part
83 expl (petsc_vec): explicit part
84 """
86 components = ['impl', 'expl']
87 component_type = petsc_vec
90class petsc_vec_comp2(MultiComponentContainer):
91 """
92 RHS data type for Vec with two components
94 Attributes:
95 comp1 (petsc_vec): first component
96 comp2 (petsc_vec): second component
97 """
99 components = ['comp1', 'comp2']
100 component_type = petsc_vec