HP-HEM  1.0.2
High Performance implementation of the Hybrid Electromagnetic Model
linalg.h
Go to the documentation of this file.
1 /* High Performance implementation of the Hybrid Electromagnetic Model
2 Released under the General Public License 3 (GPLv3).
3 All parameters' units are in the SI base if omitted.
4 
5 Routines to build and solve the electrode system that depend on linear
6 algebra libraries (e.g. LAPACK and BLAS).
7 
8 Every matrix is stored as a flat array in column major format.
9 */
10 #ifndef LINALG_H_
11 #define LINALG_H_
12 
13 #include <complex.h>
14 #include <string.h>
15 #include "electrode.h"
16 #include "blas.h"
17 #include "lapack.h"
18 //#include "mkl.h"
19 //#include "mkl_lapacke.h"
20 
21 /* ================= Immittance Formulation ================= */
38 int
39 fill_incidence_imm (_Complex double* wg, const Electrode* electrodes,
40  size_t num_electrodes, const double* nodes,
41  size_t num_nodes);
42 
56 int
57 fill_impedance_imm (_Complex double* wg, const _Complex double* zl,
58  const _Complex double* zt, size_t num_electrodes,
59  size_t num_nodes);
60 
79 int
80 solve_immittance (_Complex double* wg, _Complex double* ie, size_t num_electrodes,
81  size_t num_nodes);
82 
83 /* ================= Admittance Formulation ================= */
103 int
104 fill_incidence_adm (_Complex double* a, _Complex double* b,
105  const Electrode* electrodes, size_t num_electrodes,
106  const double* nodes, size_t num_nodes);
107 
123 int
124 fill_impedance_adm (_Complex double* yn, _Complex double* zl, _Complex double* zt,
125  _Complex double* a, _Complex double* b, size_t num_electrodes,
126  size_t num_nodes);
127 
145 int
146 calculate_yla_ytb (_Complex double* yla, _Complex double* ytb,
147  _Complex double* zl, _Complex double* zt,
148  _Complex double* a, _Complex double* b,
149  size_t num_electrodes, size_t num_nodes);
150 
169 int
170 fill_impedance_adm2 (_Complex double* yn, _Complex double* yla,
171  _Complex double* ytb, _Complex double* a,
172  _Complex double* b, size_t num_electrodes,
173  size_t num_nodes);
174 
192 int
193 solve_admittance (_Complex double* yn, _Complex double* ic, size_t num_nodes);
194 
195 #endif /* LINALG_H_ */
int fill_impedance_imm(_Complex double *wg, const _Complex double *zl, const _Complex double *zt, size_t num_electrodes, size_t num_nodes)
int fill_impedance_adm(_Complex double *yn, _Complex double *zl, _Complex double *zt, _Complex double *a, _Complex double *b, size_t num_electrodes, size_t num_nodes)
int fill_incidence_imm(_Complex double *wg, const Electrode *electrodes, size_t num_electrodes, const double *nodes, size_t num_nodes)
int calculate_yla_ytb(_Complex double *yla, _Complex double *ytb, _Complex double *zl, _Complex double *zt, _Complex double *a, _Complex double *b, size_t num_electrodes, size_t num_nodes)
int fill_impedance_adm2(_Complex double *yn, _Complex double *yla, _Complex double *ytb, _Complex double *a, _Complex double *b, size_t num_electrodes, size_t num_nodes)
int solve_immittance(_Complex double *wg, _Complex double *ie, size_t num_electrodes, size_t num_nodes)
int fill_incidence_adm(_Complex double *a, _Complex double *b, const Electrode *electrodes, size_t num_electrodes, const double *nodes, size_t num_nodes)
int solve_admittance(_Complex double *yn, _Complex double *ic, size_t num_nodes)