v0.15.0
Loading...
Searching...
No Matches
PetscSmartObj.cpp
Go to the documentation of this file.
1
2/** @file PetscSmartObj.cpp
3 * @brief Implementation of smart pointer for PETSc objects.
4 * @author Anonymous author(s) committing under MIT license
5 */
6
7template <> void intrusive_ptr_release<Vec>(Vec obj) {
8 int cnt = 0;
9 PetscErrorCode ierr =
10 PetscObjectGetReference(MoFEM::getPetscObject(obj), &cnt);
11 if (!ierr) {
12 if (cnt) {
13 ierr = VecDestroy(&obj);
14 auto comm = PetscObjectComm(MoFEM::getPetscObject(obj));
15 CHKERRABORT(comm, ierr);
16 }
17 }
18}
19
20template <> void intrusive_ptr_release<Mat>(Mat obj) {
21 int cnt = 0;
22 PetscErrorCode ierr =
23 PetscObjectGetReference(MoFEM::getPetscObject(obj), &cnt);
24 if (!ierr) {
25 if (cnt) {
26 ierr = MatDestroy(&obj);
27 auto comm = PetscObjectComm(MoFEM::getPetscObject(obj));
28 CHKERRABORT(comm, ierr);
29 }
30 }
31}
32
33template <> void intrusive_ptr_release<DM>(DM obj) {
34 int cnt = 0;
35 PetscErrorCode ierr =
36 PetscObjectGetReference(MoFEM::getPetscObject(obj), &cnt);
37 if (!ierr) {
38 if (cnt) {
39 ierr = DMDestroy(&obj);
40 auto comm = PetscObjectComm(MoFEM::getPetscObject(obj));
41 CHKERRABORT(comm, ierr);
42 }
43 }
44}
45
46template <> void intrusive_ptr_release<IS>(IS obj) {
47 int cnt = 0;
48 PetscErrorCode ierr =
49 PetscObjectGetReference(MoFEM::getPetscObject(obj), &cnt);
50 if (!ierr) {
51 if (cnt) {
52 ierr = ISDestroy(&obj);
53 auto comm = PetscObjectComm(MoFEM::getPetscObject(obj));
54 CHKERRABORT(comm, ierr);
55 }
56 }
57}
58
59template <> void intrusive_ptr_release<AO>(AO obj) {
60 int cnt = 0;
61 PetscErrorCode ierr =
62 PetscObjectGetReference(MoFEM::getPetscObject(obj), &cnt);
63 if (!ierr) {
64 if (cnt) {
65 ierr = AODestroy(&obj);
66 auto comm = PetscObjectComm(MoFEM::getPetscObject(obj));
67 CHKERRABORT(comm, ierr);
68 }
69 }
70}
71
72template <> void intrusive_ptr_release<KSP>(KSP obj) {
73 int cnt = 0;
74 PetscErrorCode ierr =
75 PetscObjectGetReference(MoFEM::getPetscObject(obj), &cnt);
76 if (!ierr) {
77 if (cnt) {
78 ierr = KSPDestroy(&obj);
79 auto comm = PetscObjectComm(MoFEM::getPetscObject(obj));
80 CHKERRABORT(comm, ierr);
81 }
82 }
83}
84
85template <> void intrusive_ptr_release<SNES>(SNES obj) {
86 int cnt = 0;
87 PetscErrorCode ierr =
88 PetscObjectGetReference(MoFEM::getPetscObject(obj), &cnt);
89 if (!ierr) {
90 if (cnt) {
91 ierr = SNESDestroy(&obj);
92 auto comm = PetscObjectComm(MoFEM::getPetscObject(obj));
93 CHKERRABORT(comm, ierr);
94 }
95 }
96}
97
98template <> void intrusive_ptr_release<TS>(TS obj) {
99 int cnt = 0;
100 PetscErrorCode ierr =
101 PetscObjectGetReference(MoFEM::getPetscObject(obj), &cnt);
102 if (!ierr) {
103 if (cnt) {
104 ierr = TSDestroy(&obj);
105 auto comm = PetscObjectComm(MoFEM::getPetscObject(obj));
106 CHKERRABORT(comm, ierr);
107 }
108 }
109}
110
111template <> void intrusive_ptr_release<Tao>(Tao obj) {
112 int cnt = 0;
113 PetscErrorCode ierr =
114 PetscObjectGetReference(MoFEM::getPetscObject(obj), &cnt);
115 if (!ierr) {
116 if (cnt) {
117 ierr = TaoDestroy(&obj);
118 auto comm = PetscObjectComm(MoFEM::getPetscObject(obj));
119 CHKERRABORT(comm, ierr);
120 }
121 }
122}
void intrusive_ptr_release< TS >(TS obj)
void intrusive_ptr_release< AO >(AO obj)
void intrusive_ptr_release< KSP >(KSP obj)
void intrusive_ptr_release< Tao >(Tao obj)
void intrusive_ptr_release< Vec >(Vec obj)
void intrusive_ptr_release< DM >(DM obj)
void intrusive_ptr_release< IS >(IS obj)
void intrusive_ptr_release< SNES >(SNES obj)
void intrusive_ptr_release< Mat >(Mat obj)
static PetscErrorCode ierr
PetscObject getPetscObject(T obj)