Arcane
v4.1.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
AlinaLib.h
1
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2
//-----------------------------------------------------------------------------
3
// Copyright 2000-2026 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4
// See the top-level COPYRIGHT file for details.
5
// SPDX-License-Identifier: Apache-2.0
6
//-----------------------------------------------------------------------------
7
/*---------------------------------------------------------------------------*/
8
/* AlinaLib.h (C) 2000-2026 */
9
/* */
10
/* Public API for Alina. . */
11
/*---------------------------------------------------------------------------*/
12
#ifndef ARCCORE_ALINA_ALINALIB_H
13
#define ARCCORE_ALINA_ALINALIB_H
14
/*---------------------------------------------------------------------------*/
15
/*---------------------------------------------------------------------------*/
16
/*
17
* This file is based on the work on AMGCL library (version march 2026)
18
* which can be found at https://github.com/ddemidov/amgcl.
19
*
20
* Copyright (c) 2012-2022 Denis Demidov <dennis.demidov@gmail.com>
21
* SPDX-License-Identifier: MIT
22
*/
23
/*---------------------------------------------------------------------------*/
24
/*---------------------------------------------------------------------------*/
25
26
#include "arccore/alina/AlinaGlobal.h"
27
28
#include <mpi.h>
29
30
// Convergence info
31
struct
ARCCORE_ALINA_EXPORT
AlinaConvergenceInfo
32
{
33
int
iterations;
34
double
residual;
35
};
36
37
typedef
double(* AlinaDefVecFunction)(
int
vec, ptrdiff_t coo,
void
* data);
38
40
struct
AlinaParameters
;
41
43
struct
AlinaPreconditioner
;
44
46
struct
AlinaSequentialSolver
;
47
49
struct
AlinaDistributedSolver
;
50
51
class
ARCCORE_ALINA_EXPORT
AlinaLib
52
{
53
public
:
54
55
// Set integer parameter in a parameter list.
56
static
void
params_set_int(
AlinaParameters
* prm,
const
char
* name,
int
value);
57
58
// Set floating point parameter in a parameter list.
59
static
void
params_set_float(
AlinaParameters
* prm,
const
char
* name,
float
value);
60
61
// Set floating point parameter in a parameter list.
62
static
void
params_set_string(
AlinaParameters
* prm,
const
char
* name,
const
char
* value);
63
64
// Read parameters from a JSON file
65
static
void
params_read_json(
AlinaParameters
* prm,
const
char
* fname);
66
67
// Destroy parameter list.
68
static
void
params_destroy(
AlinaParameters
* prm);
69
70
// Create parameter list.
71
static
AlinaParameters
* params_create();
72
73
// Create AMG preconditioner.
74
static
AlinaPreconditioner
* preconditioner_create(
int
n,
75
const
int
* ptr,
76
const
int
* col,
77
const
double
* val,
78
AlinaParameters
* parameters);
79
80
// Apply AMG preconditioner (x = M^(-1) * rhs).
81
static
void
preconditioner_apply(
AlinaPreconditioner
* amg,
const
double
* rhs,
double
* x);
82
83
// Printout preconditioner structure
84
static
void
preconditioner_report(
AlinaPreconditioner
* amg);
85
86
// Destroy AMG preconditioner
87
static
void
preconditioner_destroy(
AlinaPreconditioner
* amg);
88
89
// Create iterative solver preconditioned by AMG.
90
static
AlinaSequentialSolver
* solver_create(
int
n,
91
const
int
* ptr,
92
const
int
* col,
93
const
double
* val,
94
AlinaParameters
* parameters);
95
96
// Solve the problem for the given right-hand side.
97
static
AlinaConvergenceInfo
solver_solve(
AlinaSequentialSolver
* solver,
98
double
const
* rhs,
99
double
* x);
100
101
// Solve the problem for the given matrix and the right-hand side.
102
static
AlinaConvergenceInfo
solver_solve_matrix(
AlinaSequentialSolver
* solver,
103
int
const
* A_ptr,
104
int
const
* A_col,
105
double
const
* A_val,
106
double
const
* rhs,
107
double
* x);
108
109
// Printout solver structure
110
static
void
solver_report(
AlinaSequentialSolver
* solver);
111
112
// Destroy iterative solver.
113
static
void
solver_destroy(
AlinaSequentialSolver
* solver);
114
115
// Create distributed solver.
116
static
AlinaDistributedSolver
* solver_mpi_create(MPI_Comm comm,
117
ptrdiff_t n,
118
const
ptrdiff_t* ptr,
119
const
ptrdiff_t* col,
120
const
double
* val,
121
int
n_def_vec,
122
AlinaDefVecFunction def_vec_func,
123
void
* def_vec_data,
124
AlinaParameters
* params);
125
126
// Find solution for the given RHS.
127
static
AlinaConvergenceInfo
solver_mpi_solve(
AlinaDistributedSolver
* solver,
128
double
const
* rhs,
129
double
* x);
130
131
// Destroy the distributed solver.
132
static
void
solver_mpi_destroy(
AlinaDistributedSolver
* solver);
133
};
134
135
/*---------------------------------------------------------------------------*/
136
/*---------------------------------------------------------------------------*/
137
138
#endif
139
140
/*---------------------------------------------------------------------------*/
141
/*---------------------------------------------------------------------------*/
AlinaLib
Definition
AlinaLib.h:52
AlinaConvergenceInfo
Definition
AlinaLib.h:32
AlinaDistributedSolver
Definition
AlinaLib.cc:86
AlinaParameters
Definition
AlinaLib.cc:47
AlinaPreconditioner
Definition
AlinaLib.cc:55
AlinaSequentialSolver
Definition
AlinaLib.cc:71
arccore
src
alina
arccore
alina
AlinaLib.h
Généré le Lundi 20 Avril 2026 04:39:51 pour Arcane par
1.13.2