KIDS  ver-0.0.1
KIDS : Kernel Integrated Dynamics Simulator
Loading...
Searching...
No Matches
linalg_tpl.h File Reference

Provide linalg APIs by templating. More...

#include <cmath>
#include <complex>
#include "Eigen/Dense"
#include "Eigen/QR"
#include "kids/Types.h"
Include dependency graph for linalg_tpl.h:

Go to the source code of this file.

Macros

#define EigMajor   Eigen::RowMajor
 

Typedefs

template<class T >
using EigVX = Eigen::Matrix<T, Eigen::Dynamic, 1, EigMajor>
 
template<class T >
using EigMX = Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic, EigMajor>
 
template<class T >
using EigAX = Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic, EigMajor>
 
typedef EigVX< kids_realEigVXr
 
typedef EigVX< kids_complexEigVXc
 
typedef EigMX< kids_realEigMXr
 
typedef EigMX< kids_complexEigMXc
 
typedef EigMX< kids_realEigAXr
 
typedef EigMX< kids_complexEigAXc
 
typedef Eigen::Map< EigVXrMapVXr
 
typedef Eigen::Map< EigVXcMapVXc
 
typedef Eigen::Map< EigMXrMapMXr
 
typedef Eigen::Map< EigMXcMapMXc
 
typedef Eigen::Map< EigAXrMapAXr
 
typedef Eigen::Map< EigAXcMapAXc
 

Functions

template<class T >
bool ARRAY_ISFINITE (T *A, size_t n)
 
template<class T >
void ARRAY_CLEAR (T *A, size_t N)
 
template<class TA , class TB , class TC >
void ARRAY_MATMUL (TA *A, TB *B, TC *C, size_t N1, size_t N2, size_t N3)
 
template<class TA , class TB , class TC >
void ARRAY_MATMUL_TRANS1 (TA *A, TB *B, TC *C, size_t N1, size_t N2, size_t N3)
 
template<class TA , class TB , class TC >
void ARRAY_MATMUL_TRANS2 (TA *A, TB *B, TC *C, size_t N1, size_t N2, size_t N3)
 
template<class T >
void ARRAY_OUTER_TRANS2 (T *A, T *B, T *C, size_t N1, size_t N2)
 
template<class TA , class T , class TC >
void ARRAY_MATMUL3_TRANS1 (TA *A, T *B, TC *C, T *D, size_t N1, size_t N2, size_t N0, size_t N3)
 
template<class TA , class T , class TC >
void ARRAY_MATMUL3_TRANS2 (TA *A, T *B, TC *C, T *D, size_t N1, size_t N2, size_t N0, size_t N3)
 
template<class TB , class TC >
TB ARRAY_TRACE2 (TB *B, TC *C, size_t N1, size_t N2)
 
template<class TB , class TC >
TB ARRAY_TRACE2_DIAG (TB *B, TC *C, size_t N1, size_t N2)
 
template<class TB , class TC >
TB ARRAY_TRACE2_OFFD (TB *B, TC *C, size_t N1, size_t N2)
 
template<class TB , class TC >
TB ARRAY_INNER_TRANS1 (TB *B, TC *C, size_t N1)
 
template<class TB , class TC , class TD >
TB ARRAY_INNER_VMV_TRANS1 (TB *B, TC *C, TD *D, size_t N1, size_t N2)
 
template<class T >
void ARRAY_EYE (T *A, size_t n)
 
template<class TA , class TB >
void ARRAY_MAT_DIAG (TA *A, TB *B, size_t N1)
 
template<class TA , class TB >
void ARRAY_MAT_OFFD (TA *A, TB *B, size_t N1)
 
void LinearSolve (kids_real *x, kids_real *A, kids_real *b, size_t N)
 
void EigenSolve (kids_real *E, kids_real *T, kids_real *A, size_t N)
 
void EigenSolve (kids_real *E, kids_complex *T, kids_complex *A, size_t N)
 
void EigenSolve (kids_complex *E, kids_complex *T, kids_complex *A, size_t N)
 
void PseudoInverse (kids_real *A, kids_real *invA, size_t N, kids_real e=1E-5)
 

Detailed Description

Provide linalg APIs by templating.

using Eigen APIs

See also
eigen: https://eigen.tuxfamily.org/dox/
Author
Xin He
Date
2024-03
Version
1.0
revision:
Date Description
2024-04-25 rename to linalg_tpl.h and clean code. please use linalg.h instead!

Definition in file linalg_tpl.h.

Macro Definition Documentation

◆ EigMajor

#define EigMajor   Eigen::RowMajor

Definition at line 42 of file linalg_tpl.h.

Typedef Documentation

◆ EigAX

template<class T >
using EigAX = Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic, EigMajor>

Definition at line 51 of file linalg_tpl.h.

◆ EigAXc

Definition at line 58 of file linalg_tpl.h.

◆ EigAXr

Definition at line 57 of file linalg_tpl.h.

◆ EigMX

template<class T >
using EigMX = Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic, EigMajor>

Definition at line 48 of file linalg_tpl.h.

◆ EigMXc

Definition at line 56 of file linalg_tpl.h.

◆ EigMXr

Definition at line 55 of file linalg_tpl.h.

◆ EigVX

template<class T >
using EigVX = Eigen::Matrix<T, Eigen::Dynamic, 1, EigMajor>

Definition at line 45 of file linalg_tpl.h.

◆ EigVXc

Definition at line 54 of file linalg_tpl.h.

◆ EigVXr

Definition at line 53 of file linalg_tpl.h.

◆ MapAXc

typedef Eigen::Map<EigAXc> MapAXc

Definition at line 64 of file linalg_tpl.h.

◆ MapAXr

typedef Eigen::Map<EigAXr> MapAXr

Definition at line 63 of file linalg_tpl.h.

◆ MapMXc

typedef Eigen::Map<EigMXc> MapMXc

Definition at line 62 of file linalg_tpl.h.

◆ MapMXr

typedef Eigen::Map<EigMXr> MapMXr

Definition at line 61 of file linalg_tpl.h.

◆ MapVXc

typedef Eigen::Map<EigVXc> MapVXc

Definition at line 60 of file linalg_tpl.h.

◆ MapVXr

typedef Eigen::Map<EigVXr> MapVXr

Definition at line 59 of file linalg_tpl.h.

Function Documentation

◆ ARRAY_CLEAR()

template<class T >
void ARRAY_CLEAR ( T * A,
size_t N )

Definition at line 74 of file linalg_tpl.h.

◆ ARRAY_EYE()

template<class T >
void ARRAY_EYE ( T * A,
size_t n )

Definition at line 182 of file linalg_tpl.h.

◆ ARRAY_INNER_TRANS1()

template<class TB , class TC >
TB ARRAY_INNER_TRANS1 ( TB * B,
TC * C,
size_t N1 )

Definition at line 167 of file linalg_tpl.h.

◆ ARRAY_INNER_VMV_TRANS1()

template<class TB , class TC , class TD >
TB ARRAY_INNER_VMV_TRANS1 ( TB * B,
TC * C,
TD * D,
size_t N1,
size_t N2 )

Definition at line 174 of file linalg_tpl.h.

◆ ARRAY_ISFINITE()

template<class T >
bool ARRAY_ISFINITE ( T * A,
size_t n )

Definition at line 67 of file linalg_tpl.h.

◆ ARRAY_MAT_DIAG()

template<class TA , class TB >
void ARRAY_MAT_DIAG ( TA * A,
TB * B,
size_t N1 )

Definition at line 188 of file linalg_tpl.h.

References ARRAY_CLEAR.

◆ ARRAY_MAT_OFFD()

template<class TA , class TB >
void ARRAY_MAT_OFFD ( TA * A,
TB * B,
size_t N1 )

Definition at line 197 of file linalg_tpl.h.

◆ ARRAY_MATMUL()

template<class TA , class TB , class TC >
void ARRAY_MATMUL ( TA * A,
TB * B,
TC * C,
size_t N1,
size_t N2,
size_t N3 )

Definition at line 79 of file linalg_tpl.h.

◆ ARRAY_MATMUL3_TRANS1()

template<class TA , class T , class TC >
void ARRAY_MATMUL3_TRANS1 ( TA * A,
T * B,
TC * C,
T * D,
size_t N1,
size_t N2,
size_t N0,
size_t N3 )

Definition at line 108 of file linalg_tpl.h.

◆ ARRAY_MATMUL3_TRANS2()

template<class TA , class T , class TC >
void ARRAY_MATMUL3_TRANS2 ( TA * A,
T * B,
TC * C,
T * D,
size_t N1,
size_t N2,
size_t N0,
size_t N3 )

Definition at line 125 of file linalg_tpl.h.

◆ ARRAY_MATMUL_TRANS1()

template<class TA , class TB , class TC >
void ARRAY_MATMUL_TRANS1 ( TA * A,
TB * B,
TC * C,
size_t N1,
size_t N2,
size_t N3 )

Definition at line 87 of file linalg_tpl.h.

◆ ARRAY_MATMUL_TRANS2()

template<class TA , class TB , class TC >
void ARRAY_MATMUL_TRANS2 ( TA * A,
TB * B,
TC * C,
size_t N1,
size_t N2,
size_t N3 )

Definition at line 95 of file linalg_tpl.h.

◆ ARRAY_OUTER_TRANS2()

template<class T >
void ARRAY_OUTER_TRANS2 ( T * A,
T * B,
T * C,
size_t N1,
size_t N2 )

Definition at line 103 of file linalg_tpl.h.

References ARRAY_MATMUL_TRANS2.

◆ ARRAY_TRACE2()

template<class TB , class TC >
TB ARRAY_TRACE2 ( TB * B,
TC * C,
size_t N1,
size_t N2 )

Definition at line 142 of file linalg_tpl.h.

◆ ARRAY_TRACE2_DIAG()

template<class TB , class TC >
TB ARRAY_TRACE2_DIAG ( TB * B,
TC * C,
size_t N1,
size_t N2 )

Definition at line 150 of file linalg_tpl.h.

◆ ARRAY_TRACE2_OFFD()

template<class TB , class TC >
TB ARRAY_TRACE2_OFFD ( TB * B,
TC * C,
size_t N1,
size_t N2 )

Definition at line 158 of file linalg_tpl.h.

◆ EigenSolve() [1/3]

void EigenSolve ( kids_complex * E,
kids_complex * T,
kids_complex * A,
size_t N )
inline

Definition at line 233 of file linalg_tpl.h.

◆ EigenSolve() [2/3]

void EigenSolve ( kids_real * E,
kids_complex * T,
kids_complex * A,
size_t N )
inline

Definition at line 224 of file linalg_tpl.h.

◆ EigenSolve() [3/3]

void EigenSolve ( kids_real * E,
kids_real * T,
kids_real * A,
size_t N )
inline

Definition at line 215 of file linalg_tpl.h.

◆ LinearSolve()

void LinearSolve ( kids_real * x,
kids_real * A,
kids_real * b,
size_t N )
inline

Definition at line 208 of file linalg_tpl.h.

◆ PseudoInverse()

void PseudoInverse ( kids_real * A,
kids_real * invA,
size_t N,
kids_real e = 1E-5 )
inline

Definition at line 242 of file linalg_tpl.h.