hxt_linear_system_petsc.h 3.04 KB
Newer Older
Jonathan Lambrechts's avatar
Jonathan Lambrechts committed
1
2
/*
 * Marblesbag - Copyright (C) <2010-2018>
3
4
 * <Universite catholique de Louvain (UCL), Belgium
 *  Universite de Montpellier, France>
Jonathan Lambrechts's avatar
Jonathan Lambrechts committed
5
 * 	
6
 * List of the contributors to the development of Marblesbag: see AUTHORS file.
Jonathan Lambrechts's avatar
Jonathan Lambrechts committed
7
8
9
 * Description and complete License: see LICENSE file.
 * 	
 * This program (Marblesbag) is free software: 
10
 * you can redistribute it and/or modify it under the terms of the GNU Lesser General 
Jonathan Lambrechts's avatar
Jonathan Lambrechts committed
11
12
13
14
15
16
 * Public License as published by the Free Software Foundation, either version
 * 3 of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 * GNU Lesser General Public License for more details.
Jonathan Lambrechts's avatar
Jonathan Lambrechts committed
18
 * 
19
20
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program (see COPYING and COPYING.LESSER files).  If not, 
Jonathan Lambrechts's avatar
Jonathan Lambrechts committed
21
22
23
 * see <http://www.gnu.org/licenses/>.
 */

Jonathan Lambrechts's avatar
Jonathan Lambrechts committed
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#ifndef HEXTREME_LINEAR_SYSTEM_PETSC_H
#define HEXTREME_LINEAR_SYSTEM_PETSC_H
#include <stdint.h>
#include "hxt_message.h"
#include <petscmat.h>

typedef struct HXTLinearSystemPETScStruct HXTLinearSystemPETSc;

HXTStatus hxtLinearSystemPETScAddToMatrix(HXTLinearSystemPETSc *lsys, int el0, int el1, const double *localMatrix);
HXTStatus hxtLinearSystemPETScAddMatrixEntry(HXTLinearSystemPETSc *lsys, int node0, int field0, int node1, int field1, double entry);
HXTStatus hxtLinearSystemPETScAddToRhs(HXTLinearSystemPETSc *lsys, double *rhs, int el0, const double *localVector);
HXTStatus hxtLinearSystemPETScZeroMatrix(HXTLinearSystemPETSc *lsys);
HXTStatus hxtLinearSystemPETScSolve(HXTLinearSystemPETSc *lsys, double *rhs, double *solution);
HXTStatus hxtLinearSystemPETScSetMatrixRowIdentity(HXTLinearSystemPETSc *lsys, int node, int field);
HXTStatus hxtLinearSystemPETScSetMatrixRowFieldCombinaison(HXTLinearSystemPETSc *system, int node, int field, double *coeff);
HXTStatus hxtLinearSystemPETScSetRhsEntry(HXTLinearSystemPETSc *lsys, double *rhs, int node, int field, double v);
HXTStatus hxtLinearSystemPETScAddRhsEntry(HXTLinearSystemPETSc *lsys, double *rhs, int node, int field, double v);
HXTStatus hxtLinearSystemPETScDelete(HXTLinearSystemPETSc **pSystem);
HXTStatus hxtLinearSystemPETScGetRhsNorm(HXTLinearSystemPETSc *lsys, double *rhs, double *norm);
43
44
HXTStatus hxtPETScInsertOptions(const char *options, const char *prefix);
HXTStatus hxtLinearSystemPETScCreate(HXTLinearSystemPETSc **pSystem, int nElements, int nNodesByElement, int nFields, uint32_t *elements, const char *petscOptionsPrefix);
Jonathan Lambrechts's avatar
Jonathan Lambrechts committed
45
46
47
48
49
50
51
52
53
54
HXTStatus hxtLinearSystemPETScHasConverged(HXTLinearSystemPETSc *lsys, int *converged);
HXTStatus hxtLinearSystemPETScSize(HXTLinearSystemPETSc *lsys, int *size);

HXTStatus hxtLinearSystemPETScGetMat(HXTLinearSystemPETSc *lsys, Mat *mat);
HXTStatus hxtLinearSystemPETScMapToVec(HXTLinearSystemPETSc *lsys, double *v, Vec vec);
HXTStatus hxtLinearSystemPETScMapFromVec(HXTLinearSystemPETSc *lsys, Vec vec, double *v);

HXTStatus hxtInitializePETSc(int *argc, char ***argv);

#endif