Chaste
Commit::1fd4e48e3990e67db148bc1bc4cf6991a0049d0c
PCBlockDiagonal.hpp
1
/*
2
3
Copyright (c) 2005-2024, University of Oxford.
4
All rights reserved.
5
6
University of Oxford means the Chancellor, Masters and Scholars of the
7
University of Oxford, having an administrative office at Wellington
8
Square, Oxford OX1 2JD, UK.
9
10
This file is part of Chaste.
11
12
Redistribution and use in source and binary forms, with or without
13
modification, are permitted provided that the following conditions are met:
14
* Redistributions of source code must retain the above copyright notice,
15
this list of conditions and the following disclaimer.
16
* Redistributions in binary form must reproduce the above copyright notice,
17
this list of conditions and the following disclaimer in the documentation
18
and/or other materials provided with the distribution.
19
* Neither the name of the University of Oxford nor the names of its
20
contributors may be used to endorse or promote products derived from this
21
software without specific prior written permission.
22
23
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
27
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
29
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
32
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
34
*/
35
36
#ifndef PCBLOCKDIAGONAL_HPP_
37
#define PCBLOCKDIAGONAL_HPP_
38
39
#include <cassert>
40
#include <petscvec.h>
41
#include <petscmat.h>
42
#include <petscksp.h>
43
#include <petscpc.h>
44
#include "
PetscTools.hpp
"
45
56
#if (PETSC_VERSION_MAJOR == 3 && PETSC_VERSION_MINOR >= 1)
//PETSc 3.1 or later
57
PetscErrorCode PCBlockDiagonalApply(PC pc_context,
Vec
x,
Vec
y);
58
#else
59
PetscErrorCode PCBlockDiagonalApply(
void
* pc_context,
Vec
x,
Vec
y);
60
#endif
61
85
class
PCBlockDiagonal
86
{
87
public
:
88
92
typedef
struct
{
93
Mat
A11_matrix_subblock
;
94
Mat
A22_matrix_subblock
;
95
PC
PC_amg_A11
;
96
PC
PC_amg_A22
;
97
Vec
x1_subvector
;
98
Vec
x2_subvector
;
99
Vec
y1_subvector
;
100
Vec
y2_subvector
;
101
VecScatter
A11_scatter_ctx
;
102
VecScatter
A22_scatter_ctx
;
103
#ifdef TRACE_KSP
104
double
mScatterTime;
105
double
mA1PreconditionerTime;
106
double
mA2PreconditionerTime;
107
double
mGatherTime;
108
#endif
109
110
}
PCBlockDiagonalContext
;
111
112
PCBlockDiagonalContext
mPCContext
;
113
PC
mPetscPCObject
;
120
PCBlockDiagonal
(KSP& rKspObject);
121
122
~PCBlockDiagonal
();
123
124
private
:
125
131
void
PCBlockDiagonalCreate
(KSP& rKspObject);
132
136
void
PCBlockDiagonalSetUp
();
137
};
138
139
#endif
/*PCBLOCKDIAGONAL_HPP_*/
PetscTools.hpp
Mat
PCBlockDiagonal
Definition
PCBlockDiagonal.hpp:86
PCBlockDiagonal::PCBlockDiagonalCreate
void PCBlockDiagonalCreate(KSP &rKspObject)
Definition
PCBlockDiagonal.cpp:89
PCBlockDiagonal::PCBlockDiagonalSetUp
void PCBlockDiagonalSetUp()
Definition
PCBlockDiagonal.cpp:198
PCBlockDiagonal::mPCContext
PCBlockDiagonalContext mPCContext
Definition
PCBlockDiagonal.hpp:112
PCBlockDiagonal::mPetscPCObject
PC mPetscPCObject
Definition
PCBlockDiagonal.hpp:113
Vec
PCBlockDiagonal::PCBlockDiagonalContext
Definition
PCBlockDiagonal.hpp:92
PCBlockDiagonal::PCBlockDiagonalContext::A11_matrix_subblock
Mat A11_matrix_subblock
Definition
PCBlockDiagonal.hpp:93
PCBlockDiagonal::PCBlockDiagonalContext::y1_subvector
Vec y1_subvector
Definition
PCBlockDiagonal.hpp:99
PCBlockDiagonal::PCBlockDiagonalContext::PC_amg_A22
PC PC_amg_A22
Definition
PCBlockDiagonal.hpp:96
PCBlockDiagonal::PCBlockDiagonalContext::A22_matrix_subblock
Mat A22_matrix_subblock
Definition
PCBlockDiagonal.hpp:94
PCBlockDiagonal::PCBlockDiagonalContext::y2_subvector
Vec y2_subvector
Definition
PCBlockDiagonal.hpp:100
PCBlockDiagonal::PCBlockDiagonalContext::x1_subvector
Vec x1_subvector
Definition
PCBlockDiagonal.hpp:97
PCBlockDiagonal::PCBlockDiagonalContext::PC_amg_A11
PC PC_amg_A11
Definition
PCBlockDiagonal.hpp:95
PCBlockDiagonal::PCBlockDiagonalContext::x2_subvector
Vec x2_subvector
Definition
PCBlockDiagonal.hpp:98
PCBlockDiagonal::PCBlockDiagonalContext::A11_scatter_ctx
VecScatter A11_scatter_ctx
Definition
PCBlockDiagonal.hpp:101
PCBlockDiagonal::PCBlockDiagonalContext::A22_scatter_ctx
VecScatter A22_scatter_ctx
Definition
PCBlockDiagonal.hpp:102
linalg
src
PCBlockDiagonal.hpp
Generated by
1.9.8