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

utils for manipulation of array More...

#include <type_traits>
Include dependency graph for array_macro.h:

Go to the source code of this file.

Macros

#define ARRAY_0_OP1(_A, _op1, _C, _n)
 
#define ARRAY_1_OP1(_A, _op1, _C, _n)
 
#define ARRAY_0_OP2(_A, _B, _op2, _C, _n)
 
#define ARRAY_1_OP2(_A, _B, _op2, _C, _n)
 
#define ARRAY_CLEAR(_A, _n)   (memset((_A), 0, (_n) * sizeof(*(_A))))
 
#define ARRAY_0_COPY(_A, _C, _n)   (ARRAY_0_OP1(_A, =, _C, _n))
 
#define ARRAY_1_COPY(_A, _C, _n)   (ARRAY_1_OP1(_A, =, _C, _n))
 
#define ARRAY_1_ADD(_A, _B, _C, _n)   (ARRAY_1_OP2(_A, _B, +, _C, _n))
 
#define ARRAY_1_MIN(_A, _B, _C, _n)   (ARRAY_1_OP2(_A, _B, -, _C, _n))
 
#define ARRAY_1_MUL(_A, _B, _C, _n)   (ARRAY_1_OP2(_A, _B, *, _C, _n))
 
#define ARRAY_1_DIV(_A, _B, _C, _n)   (ARRAY_1_OP2(_A, _B, /, _C, _n))
 
#define ARRAY_SUM(_A, _n)
 
#define ARRAY_0_FUN(_A, _fun, _C, _n)
 
#define ARRAY_1_FUN(_A, _fun, _C, _n)
 
#define ARRAY_SIN(_A, _C, _n)   (ARRAY_1_FUN(_A, std::sin, _C, _n))
 
#define ARRAY_COS(_A, _C, _n)   (ARRAY_1_FUN(_A, std::cos, _C, _n))
 
#define ARRAY_EXP(_A, _C, _n)   (ARRAY_1_FUN(_A, std::exp, _C, _n))
 
#define ARRAY_LOG(_A, _C, _n)   (ARRAY_1_FUN(_A, std::log, _C, _n))
 
#define ARRAY_CONJ(_A, _C, _n)   (ARRAY_1_FUN(_A, CONJ_OF, _C, _n))
 
#define ARRAY_REAL(_A, _C, _n)   (ARRAY_1_FUN(_A, REAL_OF, _C, _n))
 
#define ARRAY_IMAG(_A, _C, _n)   (ARRAY_1_FUN(_A, IMAG_OF, _C, _n))
 
#define ARRAY_NORM(_A, _C, _n)   (ARRAY_1_FUN(_A, NORM_OF, _C, _n))
 
#define ARRAY_PHAS(_A, _C, _n)   (ARRAY_1_FUN(_A, PHAS_OF, _C, _n))
 
#define ARRAY_ABS(_A, _C, _n)   (ARRAY_1_FUN(_A, ABS_OF, _C, _n))
 
#define ARRAY_EYE(_A, _n)
 
#define ARRAY_ONES(_A, _n1, _n2)
 
#define ARRAY_ZEROS(_A, _n1, _n2)
 
#define ARRAY_VDIAGM(_A, _B, _n)
 
#define ARRAY_MDIAGV(_A, _B, _n)
 
#define ARRAY_TRACE2(_B, _C, _n1, _n2)
 
#define ARRAY_OUTER_CONJ2(_A, _B, _C, _n1, _n2)
 
#define ARRAY_MATMUL(_A, _B, _C, _n1, _n2, _n3)
 
#define ARRAY_MATMUL_TRANS1(_A, _B, _C, _n1, _n2, _n3)
 
#define ARRAY_MATMUL_TRANS2(_A, _B, _C, _n1, _n2, _n3)
 
#define ARRAY_MATMUL3_TRANS1(_A, _B, _C, _D, _n1, _n2, _n0, _n3)
 
#define ARRAY_MATMUL3_TRANS2(_A, _B, _C, _D, _n1, _n2, _n0, _n3)
 

Detailed Description

utils for manipulation of array

Author
xshinhe
Version
1.0
Date
2019-01-01
 https://en.cppreference.com/w/cpp/header/type_traits
Author
xshinhe
Version
1.0
Date
2019-01-01
See also
https://en.cppreference.com/w/cpp/algorithm/generate https://en.cppreference.com/w/cpp/header/functional https://en.cppreference.com/w/cpp/iterator https://en.cppreference.com/w/cpp/header/random

Definition in file array_macro.h.

Macro Definition Documentation

◆ ARRAY_0_COPY

#define ARRAY_0_COPY ( _A,
_C,
_n )   (ARRAY_0_OP1(_A, =, _C, _n))

Definition at line 37 of file array_macro.h.

◆ ARRAY_0_FUN

#define ARRAY_0_FUN ( _A,
_fun,
_C,
_n )
Value:
({ \
for (int _i = 0; _i < (_n); ++_i) (_A)[_i] = _fun((_C)); \
})

Definition at line 52 of file array_macro.h.

◆ ARRAY_0_OP1

#define ARRAY_0_OP1 ( _A,
_op1,
_C,
_n )
Value:
({ \
for (int _i = 0; _i < (_n); ++_i) (_A)[_i] _op1(_C); \
})

Definition at line 16 of file array_macro.h.

◆ ARRAY_0_OP2

#define ARRAY_0_OP2 ( _A,
_B,
_op2,
_C,
_n )
Value:
({ \
for (int _i = 0; _i < (_n); ++_i) (_A)[_i] = (_B)[_i] _op2(_C); \
})

Definition at line 26 of file array_macro.h.

◆ ARRAY_1_ADD

#define ARRAY_1_ADD ( _A,
_B,
_C,
_n )   (ARRAY_1_OP2(_A, _B, +, _C, _n))

Definition at line 39 of file array_macro.h.

◆ ARRAY_1_COPY

#define ARRAY_1_COPY ( _A,
_C,
_n )   (ARRAY_1_OP1(_A, =, _C, _n))

Definition at line 38 of file array_macro.h.

◆ ARRAY_1_DIV

#define ARRAY_1_DIV ( _A,
_B,
_C,
_n )   (ARRAY_1_OP2(_A, _B, /, _C, _n))

Definition at line 42 of file array_macro.h.

◆ ARRAY_1_FUN

#define ARRAY_1_FUN ( _A,
_fun,
_C,
_n )
Value:
({ \
for (int _i = 0; _i < (_n); ++_i) (_A)[_i] = _fun((_C)[_i]); \
})

Definition at line 57 of file array_macro.h.

◆ ARRAY_1_MIN

#define ARRAY_1_MIN ( _A,
_B,
_C,
_n )   (ARRAY_1_OP2(_A, _B, -, _C, _n))

Definition at line 40 of file array_macro.h.

◆ ARRAY_1_MUL

#define ARRAY_1_MUL ( _A,
_B,
_C,
_n )   (ARRAY_1_OP2(_A, _B, *, _C, _n))

Definition at line 41 of file array_macro.h.

◆ ARRAY_1_OP1

#define ARRAY_1_OP1 ( _A,
_op1,
_C,
_n )
Value:
({ \
for (int _i = 0; _i < (_n); ++_i) (_A)[_i] _op1(_C)[_i]; \
})

Definition at line 21 of file array_macro.h.

◆ ARRAY_1_OP2

#define ARRAY_1_OP2 ( _A,
_B,
_op2,
_C,
_n )
Value:
({ \
for (int _i = 0; _i < (_n); ++_i) (_A)[_i] = (_B)[_i] _op2(_C)[_i]; \
})

Definition at line 31 of file array_macro.h.

◆ ARRAY_ABS

#define ARRAY_ABS ( _A,
_C,
_n )   (ARRAY_1_FUN(_A, ABS_OF, _C, _n))

Definition at line 73 of file array_macro.h.

◆ ARRAY_CLEAR

◆ ARRAY_CONJ

#define ARRAY_CONJ ( _A,
_C,
_n )   (ARRAY_1_FUN(_A, CONJ_OF, _C, _n))

Definition at line 68 of file array_macro.h.

◆ ARRAY_COS

#define ARRAY_COS ( _A,
_C,
_n )   (ARRAY_1_FUN(_A, std::cos, _C, _n))

Definition at line 65 of file array_macro.h.

◆ ARRAY_EXP

#define ARRAY_EXP ( _A,
_C,
_n )   (ARRAY_1_FUN(_A, std::exp, _C, _n))

Definition at line 66 of file array_macro.h.

◆ ARRAY_EYE

#define ARRAY_EYE ( _A,
_n )
Value:
({ \
for (int _i = 0, _idx = 0; _i < (_n); ++_i) { \
for (int _j = 0; _j < (_n); ++_j, ++_idx) { (_A)[_idx] = ((_i == _j) ? 1.0f : 0.0f); } \
} \
})

Definition at line 75 of file array_macro.h.

Referenced by PROJECT_NS::Kernel_Elec_NAD::initializeKernel_impl(), PROJECT_NS::Kernel_Elec_Switch::initializeKernel_impl(), and PROJECT_NS::Kernel_GWP::initializeKernel_impl().

◆ ARRAY_IMAG

#define ARRAY_IMAG ( _A,
_C,
_n )   (ARRAY_1_FUN(_A, IMAG_OF, _C, _n))

Definition at line 70 of file array_macro.h.

◆ ARRAY_LOG

#define ARRAY_LOG ( _A,
_C,
_n )   (ARRAY_1_FUN(_A, std::log, _C, _n))

Definition at line 67 of file array_macro.h.

◆ ARRAY_MATMUL

◆ ARRAY_MATMUL3_TRANS1

#define ARRAY_MATMUL3_TRANS1 ( _A,
_B,
_C,
_D,
_n1,
_n2,
_n0,
_n3 )
Value:
({ \
int _size_A = (_n1) * (_n3); \
ARRAY_CLEAR(_A, _size_A); \
int _iaddC = (_n0) + 1; \
for (int _i = 0; _i < (_n1); ++_i) { \
int _idxB = _i; \
int _idxC = 0, _idxD = 0; \
for (int _j = 0; _j < (_n2); ++_j) { \
auto _tmp = CONJ_OF((_B)[_idxB]) * (_C)[_idxC]; \
_idxB += (_n1); \
_idxC += _iaddC; \
int _idxA = _i * (_n3); \
for (int _k = 0; _k < (_n3); ++_k) { (_A)[_idxA++] += _tmp * (_D)[_idxD++]; } \
} \
} \
})

Definition at line 199 of file array_macro.h.

Referenced by PROJECT_NS::ARRAY_INNER_VMV_TRANS1(), PROJECT_NS::ARRAY_INNER_VMV_TRANS1(), PROJECT_NS::ARRAY_INNER_VMV_TRANS1(), PROJECT_NS::ARRAY_INNER_VMV_TRANS1(), PROJECT_NS::Kernel_GWP::executeKernel_impl(), PROJECT_NS::Kernel_Representation::executeKernel_impl(), PROJECT_NS::Kernel_GWP::impl_0(), and PROJECT_NS::Kernel_GWP::initializeKernel_impl().

◆ ARRAY_MATMUL3_TRANS2

#define ARRAY_MATMUL3_TRANS2 ( _A,
_B,
_C,
_D,
_n1,
_n2,
_n0,
_n3 )
Value:
({ \
int _size_A = (_n1) * (_n3); \
ARRAY_CLEAR(_A, _size_A); \
int _idxB = 0; \
int _iaddC = (_n0) + 1; \
for (int _i = 0; _i < (_n1); ++_i) { \
int _idxC = 0; \
for (int _j = 0; _j < (_n2); ++_j) { \
auto _tmp = (_B)[_idxB++] * (_C)[_idxC]; \
_idxC += _iaddC; \
int _idxD = _j; \
int _idxA = _i * (_n3); \
for (int _k = 0; _k < (_n3); ++_k) { \
(_A)[_idxA++] += _tmp * CONJ_OF((_D)[_idxD]); \
_idxD += (_n2); \
} \
} \
} \
})

Definition at line 219 of file array_macro.h.

Referenced by PROJECT_NS::ARRAY_CORRECT_U(), PROJECT_NS::ARRAY_EXP_MAT_GENERAL(), PROJECT_NS::Kernel_Elec_NAD::executeKernel_impl(), PROJECT_NS::Kernel_Elec_Switch::executeKernel_impl(), PROJECT_NS::Kernel_Update_c::executeKernel_impl(), PROJECT_NS::Kernel_GWP::impl_0(), PROJECT_NS::Kernel_GWP::impl_1(), and PROJECT_NS::Kernel_GWP::initializeKernel_impl().

◆ ARRAY_MATMUL_TRANS1

#define ARRAY_MATMUL_TRANS1 ( _A,
_B,
_C,
_n1,
_n2,
_n3 )
Value:
({ \
int _size_A = (_n1) * (_n3); \
ARRAY_CLEAR(_A, _size_A); \
for (int _i = 0; _i < (_n1); ++_i) { \
int _idxB = _i; \
int _idxC = 0; \
for (int _j = 0; _j < (_n2); ++_j) { \
auto _tmp = CONJ_OF((_B)[_idxB]); \
_idxB += (_n1); \
int _idxA = _i * (_n3); \
for (int _k = 0; _k < (_n3); ++_k) { (_A)[_idxA++] += _tmp * (_C)[_idxC++]; } \
} \
} \
})

Definition at line 162 of file array_macro.h.

Referenced by PROJECT_NS::ARRAY_EXP_MAT_GENERAL(), PROJECT_NS::ARRAY_INNER_TRANS1(), PROJECT_NS::ARRAY_INNER_TRANS1(), PROJECT_NS::ARRAY_INNER_TRANS1(), PROJECT_NS::ARRAY_INNER_TRANS1(), PROJECT_NS::ARRAY_MATMUL3_TRANS1(), PROJECT_NS::ARRAY_MATMUL3_TRANS1(), PROJECT_NS::ARRAY_MATMUL3_TRANS1(), PROJECT_NS::ARRAY_MATMUL3_TRANS1(), PROJECT_NS::Kernel_Representation::executeKernel_impl(), PROJECT_NS::Kernel_GWP::impl_1(), and PROJECT_NS::Kernel_Representation::transform().

◆ ARRAY_MATMUL_TRANS2

#define ARRAY_MATMUL_TRANS2 ( _A,
_B,
_C,
_n1,
_n2,
_n3 )
Value:
({ \
int _size_A = (_n1) * (_n3); \
int _idxB = 0; \
ARRAY_CLEAR(_A, _size_A); \
for (int _i = 0; _i < (_n1); ++_i) { \
for (int _j = 0; _j < (_n2); ++_j) { \
auto _tmp = (_B)[_idxB++]; \
int _idxC = _j; \
int _idxA = _i * (_n3); \
for (int _k = 0; _k < (_n3); ++_k) { \
(_A)[_idxA++] += _tmp * CONJ_OF((_C)[_idxC]); \
_idxC += (_n2); \
} \
} \
} \
})

Definition at line 179 of file array_macro.h.

Referenced by PROJECT_NS::ARRAY_MATMUL3_TRANS2(), PROJECT_NS::ARRAY_MATMUL3_TRANS2(), PROJECT_NS::ARRAY_MATMUL3_TRANS2(), PROJECT_NS::ARRAY_MATMUL3_TRANS2(), ARRAY_EG::ARRAY_OUTER_CONJ2(), ARRAY_XT::ARRAY_OUTER_CONJ2(), PROJECT_NS::ARRAY_OUTER_TRANS2(), PROJECT_NS::ARRAY_OUTER_TRANS2(), ARRAY_OUTER_TRANS2(), PROJECT_NS::Kernel_GWP::cloning(), and PROJECT_NS::Kernel_Representation::transform().

◆ ARRAY_MDIAGV

#define ARRAY_MDIAGV ( _A,
_B,
_n )
Value:
({ \
int _idx = 0, _add = (_n) + 1; \
for (int _i = 0; _i < (_n); ++_i) { \
(_A)[_idx] = (_B)[i]; \
_idx += _add; \
} \
})

Definition at line 111 of file array_macro.h.

◆ ARRAY_NORM

#define ARRAY_NORM ( _A,
_C,
_n )   (ARRAY_1_FUN(_A, NORM_OF, _C, _n))

Definition at line 71 of file array_macro.h.

◆ ARRAY_ONES

#define ARRAY_ONES ( _A,
_n1,
_n2 )
Value:
({ \
for (int _i = 0, _idx = 0; _i < (_n1); ++_i) { \
for (int _j = 0; _j < (_n2); ++_j, ++_idx) { (_A)[_idx] = 1.0f; } \
} \
})

Definition at line 83 of file array_macro.h.

◆ ARRAY_OUTER_CONJ2

#define ARRAY_OUTER_CONJ2 ( _A,
_B,
_C,
_n1,
_n2 )
Value:
({ \
int _idxA = 0; \
for (int _i = 0; _i < (_n1); ++_i) { \
for (int _j = 0; _j < (_n2); ++_j) { (_A)[_idxA++] = (_B)[_i] * CONJ_OF((_C)[_j]); } \
} \
})

Definition at line 136 of file array_macro.h.

◆ ARRAY_PHAS

#define ARRAY_PHAS ( _A,
_C,
_n )   (ARRAY_1_FUN(_A, PHAS_OF, _C, _n))

Definition at line 72 of file array_macro.h.

◆ ARRAY_REAL

#define ARRAY_REAL ( _A,
_C,
_n )   (ARRAY_1_FUN(_A, REAL_OF, _C, _n))

Definition at line 69 of file array_macro.h.

◆ ARRAY_SIN

#define ARRAY_SIN ( _A,
_C,
_n )   (ARRAY_1_FUN(_A, std::sin, _C, _n))

Definition at line 64 of file array_macro.h.

◆ ARRAY_SUM

#define ARRAY_SUM ( _A,
_n )
Value:
({ \
auto _res = (std::remove_reference<decltype(*_A)>::type)(0); \
for (int _i = 0; _i < (_n); ++_i) _res += (_A)[_i]; \
_res; \
})

Definition at line 45 of file array_macro.h.

◆ ARRAY_TRACE2

#define ARRAY_TRACE2 ( _B,
_C,
_n1,
_n2 )
Value:
({ \
auto _res = (std::remove_reference<decltype(*_B)>::type)(0); \
int _idxB = 0; \
for (int _i = 0; _i < (_n1); ++_i) { \
int _idxC = _i; \
for (int _j = 0; _j < (_n2); ++_j) { \
_res += (_B)[_idxB++] * (_C)[_idxC]; \
_idxC += (_n1); \
} \
} \
_res; \
})

Definition at line 121 of file array_macro.h.

Referenced by PROJECT_NS::Kernel_NADForce::executeKernel_impl().

◆ ARRAY_VDIAGM

#define ARRAY_VDIAGM ( _A,
_B,
_n )
Value:
({ \
int _idx = 0, _add = (_n) + 1; \
for (int _i = 0; _i < (_n); ++_i) { \
(_A)[_i] = (_B)[_idx]; \
_idx += _add; \
} \
})

Definition at line 100 of file array_macro.h.

◆ ARRAY_ZEROS

#define ARRAY_ZEROS ( _A,
_n1,
_n2 )
Value:
({ \
for (int _i = 0, _idx = 0; _i < (_n1); ++_i) { \
for (int _j = 0; _j < (_n2); ++_j, ++_idx) { (_A)[_idx] = 0.0f; } \
} \
})

Definition at line 91 of file array_macro.h.