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

1from petsc4py import PETSc 

2 

3from pySDC.implementations.datatype_classes.container import MultiComponentContainer 

4 

5 

6class petsc_vec(PETSc.Vec): 

7 """PETSc ``Vec`` datatype, created from a ``DMDA`` or copied from another vector.""" 

8 

9 __array_priority__ = 1000 # otherwise rmul with float64 does not work (don't ask, won't tell) 

10 

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 

23 

24 def __abs__(self): 

25 """ 

26 Overloading the abs operator 

27 

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) 

33 

34 def isend(self, dest=None, tag=None, comm=None): 

35 """ 

36 Routine for sending data forward in time (non-blocking) 

37 

38 Args: 

39 dest (int): target rank 

40 tag (int): communication tag 

41 comm: communicator 

42 

43 Returns: 

44 request handle 

45 """ 

46 return comm.Issend(self.getArray(), dest=dest, tag=tag) 

47 

48 def irecv(self, source=None, tag=None, comm=None): 

49 """ 

50 Routine for receiving in time 

51 

52 Args: 

53 source (int): source rank 

54 tag (int): communication tag 

55 comm: communicator 

56 

57 Returns: 

58 None 

59 """ 

60 return comm.Irecv(self.getArray(), source=source, tag=tag) 

61 

62 def bcast(self, root=None, comm=None): 

63 """ 

64 Routine for broadcasting values 

65 

66 Args: 

67 root (int): process with value to broadcast 

68 comm: communicator 

69 

70 Returns: 

71 broadcasted values 

72 """ 

73 comm.Bcast(self.getArray(), root=root) 

74 return self 

75 

76 

77class petsc_vec_imex(MultiComponentContainer): 

78 """ 

79 RHS data type for Vec with implicit and explicit components 

80 

81 Attributes: 

82 impl (petsc_vec): implicit part 

83 expl (petsc_vec): explicit part 

84 """ 

85 

86 components = ['impl', 'expl'] 

87 component_type = petsc_vec 

88 

89 

90class petsc_vec_comp2(MultiComponentContainer): 

91 """ 

92 RHS data type for Vec with two components 

93 

94 Attributes: 

95 comp1 (petsc_vec): first component 

96 comp2 (petsc_vec): second component 

97 """ 

98 

99 components = ['comp1', 'comp2'] 

100 component_type = petsc_vec