Chaste
Commit::1fd4e48e3990e67db148bc1bc4cf6991a0049d0c
PCLDUFactorisation.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 PCLDUFACTORISATION_HPP_
37
#define PCLDUFACTORISATION_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 PCLDUFactorisationApply(PC pc_object,
Vec
x,
Vec
y);
58
#else
59
PetscErrorCode PCLDUFactorisationApply(
void
* pc_context,
Vec
x,
Vec
y);
60
#endif
61
107
class
PCLDUFactorisation
108
{
109
public
:
110
114
typedef
struct
{
115
Mat
A11_matrix_subblock
;
116
Mat
A22_matrix_subblock
;
117
Mat
B_matrix_subblock
;
118
PC
PC_amg_A11
;
119
PC
PC_amg_A22
;
120
Vec
x1_subvector
;
121
Vec
x2_subvector
;
122
Vec
y1_subvector
;
123
Vec
y2_subvector
;
124
Vec
z
;
125
Vec
temp
;
126
VecScatter
A11_scatter_ctx
;
127
VecScatter
A22_scatter_ctx
;
128
#ifdef TRACE_KSP
129
double
mScatterTime;
130
double
mA1PreconditionerTime;
131
double
mA2PreconditionerTime;
132
double
mExtraLAOperations;
133
double
mGatherTime;
134
#endif
135
136
}
PCLDUFactorisationContext
;
137
138
PCLDUFactorisationContext
mPCContext
;
139
PC
mPetscPCObject
;
141
public
:
142
148
PCLDUFactorisation
(KSP& rKspObject);
149
150
~PCLDUFactorisation
();
151
152
private
:
153
159
void
PCLDUFactorisationCreate
(KSP& rKspObject);
160
164
void
PCLDUFactorisationSetUp
();
165
};
166
167
#endif
/*PCLDUFACTORISATION_HPP_*/
PetscTools.hpp
Mat
PCLDUFactorisation
Definition
PCLDUFactorisation.hpp:108
PCLDUFactorisation::mPCContext
PCLDUFactorisationContext mPCContext
Definition
PCLDUFactorisation.hpp:138
PCLDUFactorisation::PCLDUFactorisationSetUp
void PCLDUFactorisationSetUp()
Definition
PCLDUFactorisation.cpp:244
PCLDUFactorisation::mPetscPCObject
PC mPetscPCObject
Definition
PCLDUFactorisation.hpp:139
PCLDUFactorisation::PCLDUFactorisationCreate
void PCLDUFactorisationCreate(KSP &rKspObject)
Definition
PCLDUFactorisation.cpp:92
Vec
PCLDUFactorisation::PCLDUFactorisationContext
Definition
PCLDUFactorisation.hpp:114
PCLDUFactorisation::PCLDUFactorisationContext::y2_subvector
Vec y2_subvector
Definition
PCLDUFactorisation.hpp:123
PCLDUFactorisation::PCLDUFactorisationContext::z
Vec z
Definition
PCLDUFactorisation.hpp:124
PCLDUFactorisation::PCLDUFactorisationContext::x1_subvector
Vec x1_subvector
Definition
PCLDUFactorisation.hpp:120
PCLDUFactorisation::PCLDUFactorisationContext::y1_subvector
Vec y1_subvector
Definition
PCLDUFactorisation.hpp:122
PCLDUFactorisation::PCLDUFactorisationContext::x2_subvector
Vec x2_subvector
Definition
PCLDUFactorisation.hpp:121
PCLDUFactorisation::PCLDUFactorisationContext::A22_scatter_ctx
VecScatter A22_scatter_ctx
Definition
PCLDUFactorisation.hpp:127
PCLDUFactorisation::PCLDUFactorisationContext::A11_matrix_subblock
Mat A11_matrix_subblock
Definition
PCLDUFactorisation.hpp:115
PCLDUFactorisation::PCLDUFactorisationContext::A11_scatter_ctx
VecScatter A11_scatter_ctx
Definition
PCLDUFactorisation.hpp:126
PCLDUFactorisation::PCLDUFactorisationContext::temp
Vec temp
Definition
PCLDUFactorisation.hpp:125
PCLDUFactorisation::PCLDUFactorisationContext::PC_amg_A22
PC PC_amg_A22
Definition
PCLDUFactorisation.hpp:119
PCLDUFactorisation::PCLDUFactorisationContext::A22_matrix_subblock
Mat A22_matrix_subblock
Definition
PCLDUFactorisation.hpp:116
PCLDUFactorisation::PCLDUFactorisationContext::PC_amg_A11
PC PC_amg_A11
Definition
PCLDUFactorisation.hpp:118
PCLDUFactorisation::PCLDUFactorisationContext::B_matrix_subblock
Mat B_matrix_subblock
Definition
PCLDUFactorisation.hpp:117
linalg
src
PCLDUFactorisation.hpp
Generated by
1.9.8