NULAPACK
NUmerical Linear Algebra PACKage
Loading...
Searching...
No Matches
Jacobi.h
Go to the documentation of this file.
1
33#ifndef JACOBI_H
34#define JACOBI_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_sgejsv(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_dgejsv(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_cgejsv(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_zgejsv(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 jacobi(N, A, B, X, MAX_ITER, TOL, OMEGA, STATUS) \
151 _Generic((A), \
152 REAL*: API_sgejsv, \
153 DOUBLE*: API_dgejsv, \
154 COMPLEX*: API_cgejsv, \
155 DOUBLE_COMPLEX*: API_zgejsv \
156 )(N, A, B, X, MAX_ITER, TOL, OMEGA, STATUS)
157
158#endif
159
160#endif
void API_zgejsv(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_dgejsv(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 API_sgejsv(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 jacobi(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)
Jacobi iterative solver for A * X = B.
Definition Jacobi.h:85
void API_cgejsv(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)
#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