PISM, A Parallel Ice Sheet Model
2.3.0-79cae578d committed by Constantine Khrulev on 2026-03-22
Loading...
Searching...
No Matches
src
util
petscwrappers
Vec.hh
Go to the documentation of this file.
1
/* Copyright (C) 2015, 2016, 2025 PISM Authors
2
*
3
* This file is part of PISM.
4
*
5
* PISM is free software; you can redistribute it and/or modify it under the
6
* terms of the GNU General Public License as published by the Free Software
7
* Foundation; either version 3 of the License, or (at your option) any later
8
* version.
9
*
10
* PISM is distributed in the hope that it will be useful, but WITHOUT ANY
11
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
13
* details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with PISM; if not, write to the Free Software
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
*/
19
20
#ifndef _VEC_H_
21
#define _VEC_H_
22
23
#include <petscvec.h>
24
#include <memory>
25
26
#include "pism/util/Wrapper.hh"
27
28
namespace
pism
{
29
namespace
petsc {
30
31
class
DM;
32
33
/** Wrapper around PETSc's Vec. Simplifies memory management.
34
*
35
* The constructor takes ownership of the Vec argument passed to it.
36
*
37
* The destructor call VecDestroy().
38
*/
39
class
Vec
:
public
Wrapper
< ::Vec > {
40
public
:
41
Vec
();
42
Vec
(
::Vec
v);
43
~Vec
();
44
};
45
46
//! Wrapper around VecGetArray and VecRestoreArray.
47
class
VecArray
{
48
public
:
49
VecArray
(::Vec v);
50
~VecArray
();
51
double
*
get
();
52
private
:
53
::Vec
m_v
;
54
double
*
m_array
;
55
};
56
57
//! Wrapper around VecGetArray2d and VecRestoreArray2d.
58
class
VecArray2D
{
59
public
:
60
VecArray2D
(::Vec vec,
int
my_Mx,
int
my_My);
61
VecArray2D
(::Vec vec,
int
my_Mx,
int
my_My,
int
i0,
int
j0);
62
~VecArray2D
();
63
64
inline
double
&
operator()
(
int
i,
int
j) {
65
return
m_array
[j +
m_j_offset
][i +
m_i_offset
];
66
}
67
private
:
68
int
m_Mx
,
m_My
,
m_i_offset
,
m_j_offset
;
69
::Vec
m_v
;
70
double
**
m_array
;
71
};
72
73
class
DMDAVecArray
{
74
public
:
75
DMDAVecArray
(std::shared_ptr<DM> dm, ::Vec v);
76
~DMDAVecArray
();
77
void
*
get
();
78
private
:
79
std::shared_ptr<DM>
m_dm
;
80
::Vec
m_v
;
81
void
*
m_array
;
82
};
83
84
class
DMDAVecArrayDOF
{
85
public
:
86
DMDAVecArrayDOF
(std::shared_ptr<DM> dm, ::Vec v);
87
~DMDAVecArrayDOF
();
88
void
*
get
();
89
private
:
90
std::shared_ptr<DM>
m_dm
;
91
::Vec
m_v
;
92
void
*
m_array
;
93
};
94
95
class
TemporaryGlobalVec
:
public
Vec
{
96
public
:
97
TemporaryGlobalVec
(std::shared_ptr<DM> dm);
98
~TemporaryGlobalVec
();
99
private
:
100
std::shared_ptr<DM>
m_dm
;
101
};
102
103
}
// end of namespace petsc
104
}
// end of namespace pism
105
106
107
#endif
/* _VEC_H_ */
pism::Wrapper
Definition
Wrapper.hh:26
pism::petsc::DMDAVecArrayDOF::m_dm
std::shared_ptr< DM > m_dm
Definition
Vec.hh:90
pism::petsc::DMDAVecArrayDOF::get
void * get()
Definition
Vec.cc:105
pism::petsc::DMDAVecArrayDOF::m_v
::Vec m_v
Definition
Vec.hh:91
pism::petsc::DMDAVecArrayDOF::~DMDAVecArrayDOF
~DMDAVecArrayDOF()
Definition
Vec.cc:101
pism::petsc::DMDAVecArrayDOF::m_array
void * m_array
Definition
Vec.hh:92
pism::petsc::DMDAVecArrayDOF
Definition
Vec.hh:84
pism::petsc::DMDAVecArray::~DMDAVecArray
~DMDAVecArray()
Definition
Vec.cc:85
pism::petsc::DMDAVecArray::m_dm
std::shared_ptr< DM > m_dm
Definition
Vec.hh:79
pism::petsc::DMDAVecArray::m_array
void * m_array
Definition
Vec.hh:81
pism::petsc::DMDAVecArray::m_v
::Vec m_v
Definition
Vec.hh:80
pism::petsc::DMDAVecArray::get
void * get()
Definition
Vec.cc:89
pism::petsc::DMDAVecArray
Definition
Vec.hh:73
pism::petsc::TemporaryGlobalVec::m_dm
std::shared_ptr< DM > m_dm
Definition
Vec.hh:100
pism::petsc::TemporaryGlobalVec::~TemporaryGlobalVec
~TemporaryGlobalVec()
Definition
Vec.cc:117
pism::petsc::TemporaryGlobalVec
Definition
Vec.hh:95
pism::petsc::VecArray2D::m_i_offset
int m_i_offset
Definition
Vec.hh:68
pism::petsc::VecArray2D::~VecArray2D
~VecArray2D()
Definition
Vec.cc:73
pism::petsc::VecArray2D::m_array
double ** m_array
Definition
Vec.hh:70
pism::petsc::VecArray2D::m_My
int m_My
Definition
Vec.hh:68
pism::petsc::VecArray2D::m_Mx
int m_Mx
Definition
Vec.hh:68
pism::petsc::VecArray2D::m_v
::Vec m_v
Definition
Vec.hh:69
pism::petsc::VecArray2D::operator()
double & operator()(int i, int j)
Definition
Vec.hh:64
pism::petsc::VecArray2D::m_j_offset
int m_j_offset
Definition
Vec.hh:68
pism::petsc::VecArray2D
Wrapper around VecGetArray2d and VecRestoreArray2d.
Definition
Vec.hh:58
pism::petsc::VecArray::m_array
double * m_array
Definition
Vec.hh:54
pism::petsc::VecArray::m_v
::Vec m_v
Definition
Vec.hh:53
pism::petsc::VecArray::~VecArray
~VecArray()
Definition
Vec.cc:51
pism::petsc::VecArray::get
double * get()
Definition
Vec.cc:55
pism::petsc::VecArray
Wrapper around VecGetArray and VecRestoreArray.
Definition
Vec.hh:47
pism::petsc::Vec::Vec
Vec()
Definition
Vec.cc:29
pism::petsc::Vec::~Vec
~Vec()
Definition
Vec.cc:37
pism::petsc::Vec
Definition
Vec.hh:39
pism
Definition
AgeColumnSystem.cc:23
Generated by
1.9.8