NULAPACK
NUmerical Linear Algebra PACKage
Loading...
Searching...
No Matches
GaussSeidel.h
Go to the documentation of this file.
1
33#ifndef GAUSS_SEIDEL_H
34#define GAUSS_SEIDEL_H
35
36#include "types.h"
37#include "mangling.h"
38
39/* =========================
40 * FORTRAN API DECLARATIONS
41 * ========================= */
42
44 INTEGER* MAX_ITER, REAL* TOL, REAL* OMEGA, INTEGER* STATUS);
45
47 INTEGER* MAX_ITER, DOUBLE* TOL, DOUBLE* OMEGA, INTEGER* STATUS);
48
50 INTEGER* MAX_ITER, REAL* TOL, REAL* OMEGA, INTEGER* STATUS);
51
53 INTEGER* MAX_ITER, DOUBLE* TOL, DOUBLE* OMEGA, INTEGER* STATUS);
54
55
56#ifdef __cplusplus
57
58 /* ==============
59 * C++ INTERFACE
60 * ============== */
61
86 INTEGER* MAX_ITER, REAL* TOL, INTEGER* STATUS, REAL OMEGA = 1.0) {
87 API_sgegssv(N, A, B, X, MAX_ITER, TOL, &OMEGA, STATUS);
88 }
89
104 INTEGER* MAX_ITER, DOUBLE* TOL, INTEGER* STATUS, DOUBLE OMEGA = 1.0) {
105 API_dgegssv(N, A, B, X, MAX_ITER, TOL, &OMEGA, STATUS);
106 }
107
122 INTEGER* MAX_ITER, REAL* TOL, INTEGER* STATUS, REAL OMEGA = 1.0) {
123 API_cgegssv(N, A, B, X, MAX_ITER, TOL, &OMEGA, STATUS);
124 }
125
140 INTEGER* MAX_ITER, DOUBLE* TOL, INTEGER* STATUS, DOUBLE OMEGA = 1.0) {
141 API_zgegssv(N, A, B, X, MAX_ITER, TOL, &OMEGA, STATUS);
142 }
143
144#else // C-only fallback
145
146 /* ===========
147 * C INTERFACE
148 * ============ */
149
150 #define gaussSeidel(N, A, B, X, MAX_ITER, TOL, OMEGA, STATUS) \
151 _Generic((A), \
152 REAL*: API_sgegssv, \
153 DOUBLE*: API_dgegssv, \
154 COMPLEX*: API_cgegssv, \
155 DOUBLE_COMPLEX*: API_zgegssv \
156 )(N, A, B, X, MAX_ITER, TOL, OMEGA, STATUS)
157
158#endif
159
160#endif
void API_zgegssv(fortran_int *N, fortran_double_complex *A, fortran_double_complex *B, fortran_double_complex *X, fortran_int *MAX_ITER, fortran_double *TOL, fortran_double *OMEGA, fortran_int *STATUS)
void API_sgegssv(fortran_int *N, fortran_real *A, fortran_real *B, fortran_real *X, fortran_int *MAX_ITER, fortran_real *TOL, fortran_real *OMEGA, fortran_int *STATUS)
void API_cgegssv(fortran_int *N, fortran_complex *A, fortran_complex *B, fortran_complex *X, fortran_int *MAX_ITER, fortran_real *TOL, fortran_real *OMEGA, fortran_int *STATUS)
void API_dgegssv(fortran_int *N, fortran_double *A, fortran_double *B, fortran_double *X, fortran_int *MAX_ITER, fortran_double *TOL, fortran_double *OMEGA, fortran_int *STATUS)
void gaussSeidel(fortran_int *N, fortran_real *A, fortran_real *B, fortran_real *X, fortran_int *MAX_ITER, fortran_real *TOL, fortran_int *STATUS, fortran_real OMEGA=1.0)
Gauss-Seidel iterative solver for A * X = B.
Definition GaussSeidel.h:85
#define fortran
Definition types.h:99
#define SUBROUTINE
Definition types.h:96
#define REAL
Definition types.h:79
#define DOUBLE_COMPLEX
Definition types.h:82
#define DOUBLE
Definition types.h:80
#define INTEGER
Definition types.h:83
#define COMPLEX
Definition types.h:81