Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion docs/doxyfile_h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ USE_MATHJAX = YES
MARKDOWN_SUPPORT = YES

# 展开特定宏,使得介绍核函数的头文件(kernel_template.h)会被构建
# 定义 GCC_ALWAYS_INLINE 宏,使在构建 matrix.h 时不警告
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
PREDEFINED = __DYNAMIC_KERNEL__ __STATIC_KERNEL__
PREDEFINED = __DYNAMIC_KERNEL__ __STATIC_KERNEL__ GCC_ALWAYS_INLINE
6 changes: 2 additions & 4 deletions pygrt/C_extension/include/grt/common/kernel_template.h
Original file line number Diff line number Diff line change
Expand Up @@ -284,8 +284,7 @@ static void __KERNEL_FUNC__(
// 公式(5.7.12-14)
grt_cmat2x2_mul(M_BL->RD, M_FB->RU, tmpR2);
grt_cmat2x2_one_sub(tmpR2);
grt_cmat2x2_inv(tmpR2, tmpR2, &M_FB->stats);// (I - xx)^-1
if(M_FB->stats==GRT_INVERSE_FAILURE) goto BEFORE_RETURN;
if((M_FB->stats = grt_cmat2x2_inv(tmpR2, tmpR2)) == GRT_INVERSE_FAILURE) goto BEFORE_RETURN;// (I - xx)^-1
grt_cmat2x2_mul(M_FB->invT, tmpR2, tmp2x2);

if(calc_uiz) grt_cmat2x2_assign(tmp2x2, tmp2x2_uiz); // 为后续计算空间导数备份
Expand Down Expand Up @@ -323,8 +322,7 @@ static void __KERNEL_FUNC__(
// 公式(5.7.26-27)
grt_cmat2x2_mul(M_FA->RU, M_AL->RD, tmpR2);
grt_cmat2x2_one_sub(tmpR2);
grt_cmat2x2_inv(tmpR2, tmpR2, &M_AL->stats);// (I - xx)^-1
if(M_AL->stats==GRT_INVERSE_FAILURE) goto BEFORE_RETURN;
if((M_AL->stats = grt_cmat2x2_inv(tmpR2, tmpR2)) == GRT_INVERSE_FAILURE) goto BEFORE_RETURN;// (I - xx)^-1
grt_cmat2x2_mul(M_AL->invT, tmpR2, tmp2x2);

if(calc_uiz) grt_cmat2x2_assign(tmp2x2, tmp2x2_uiz); // 为后续计算空间导数备份
Expand Down
10 changes: 5 additions & 5 deletions pygrt/C_extension/include/grt/common/matrix.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@
*
* @param[in] M 原矩阵
* @param[out] invM 逆矩阵
* @param[out] stats 状态代码,是否有除零错误,非0为异常值
*
* @return 状态代码,是否有除零错误,非0为异常值
*/
inline GCC_ALWAYS_INLINE void grt_cmat2x2_inv(const cplx_t M[2][2], cplx_t invM[2][2], int *stats) {
inline GCC_ALWAYS_INLINE int grt_cmat2x2_inv(const cplx_t M[2][2], cplx_t invM[2][2]) {
cplx_t M00 = M[0][0];
cplx_t M01 = M[0][1];
cplx_t M10 = M[1][0];
Expand All @@ -31,16 +32,15 @@ inline GCC_ALWAYS_INLINE void grt_cmat2x2_inv(const cplx_t M[2][2], cplx_t invM[
// fprintf(stderr, "%.5e+%.5ej %.5e+%.5ej \n", creal(M[1][0]), cimag(M[1][0]), creal(M[1][1]), cimag(M[1][1]));
// fprintf(stderr, "matrix2x2 det=0.0, set matrix inv = 0.0.\n");
// det = 0.0;
*stats = GRT_INVERSE_FAILURE;
return;
return GRT_INVERSE_FAILURE;
}
det = 1.0 / det;

invM[0][0] = M11 * det;
invM[0][1] = - M01 * det;
invM[1][0] = - M10 * det;
invM[1][1] = M00 * det;
*stats = GRT_INVERSE_SUCCESS;
return GRT_INVERSE_SUCCESS;
}

/**
Expand Down
12 changes: 6 additions & 6 deletions pygrt/C_extension/src/common/RT_matrix.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ void grt_recursion_RD_PSV(const RT_MATRIX *M1, const RT_MATRIX *M2, RT_MATRIX *M
// RD, RDL
grt_cmat2x2_mul(M1->RU, M2->RD, tmp1);
grt_cmat2x2_one_sub(tmp1);
grt_cmat2x2_inv(tmp1, tmp1, &M->stats); if(M->stats==GRT_INVERSE_FAILURE) return;
if((M->stats = grt_cmat2x2_inv(tmp1, tmp1)) == GRT_INVERSE_FAILURE) return;
grt_cmat2x2_mul(tmp1, M1->TD, tmp2);
grt_cmat2x2_assign(tmp2, M->invT);

Expand Down Expand Up @@ -69,7 +69,7 @@ void grt_recursion_TD_PSV(const RT_MATRIX *M1, const RT_MATRIX *M2, RT_MATRIX *M
// TD, TDL
grt_cmat2x2_mul(M1->RU, M2->RD, tmp2);
grt_cmat2x2_one_sub(tmp2);
grt_cmat2x2_inv(tmp2, tmp1, &M->stats); if(M->stats==GRT_INVERSE_FAILURE) return;
if((M->stats = grt_cmat2x2_inv(tmp2, tmp1)) == GRT_INVERSE_FAILURE) return;
grt_cmat2x2_mul(tmp1, M1->TD, tmp2);
grt_cmat2x2_assign(tmp2, M->invT);
grt_cmat2x2_mul(M2->TD, tmp2, M->TD);
Expand Down Expand Up @@ -102,7 +102,7 @@ void grt_recursion_RU_PSV(const RT_MATRIX *M1, const RT_MATRIX *M2, RT_MATRIX *M
// RU, RUL
grt_cmat2x2_mul(M2->RD, M1->RU, tmp2);
grt_cmat2x2_one_sub(tmp2);
grt_cmat2x2_inv(tmp2, tmp1, &M->stats); if(M->stats==GRT_INVERSE_FAILURE) return;
if((M->stats = grt_cmat2x2_inv(tmp2, tmp1)) == GRT_INVERSE_FAILURE) return;
grt_cmat2x2_mul(tmp1, M2->TU, tmp2);
grt_cmat2x2_assign(tmp2, M->invT);

Expand Down Expand Up @@ -141,7 +141,7 @@ void grt_recursion_TU_PSV(const RT_MATRIX *M1, const RT_MATRIX *M2, RT_MATRIX *M
// TU, TUL
grt_cmat2x2_mul(M2->RD, M1->RU, tmp2);
grt_cmat2x2_one_sub(tmp2);
grt_cmat2x2_inv(tmp2, tmp1, &M->stats); if(M->stats==GRT_INVERSE_FAILURE) return;
if((M->stats = grt_cmat2x2_inv(tmp2, tmp1)) == GRT_INVERSE_FAILURE) return;
grt_cmat2x2_mul(tmp1, M2->TU, tmp2);
grt_cmat2x2_assign(tmp2, M->invT);
grt_cmat2x2_mul(M1->TU, tmp2, M->TU);
Expand Down Expand Up @@ -178,7 +178,7 @@ void grt_recursion_RT_matrix_PSV(const RT_MATRIX *M1, const RT_MATRIX *M2, RT_MA

grt_cmat2x2_mul(M1->RU, M2->RD, tmp1);
grt_cmat2x2_one_sub(tmp1);
grt_cmat2x2_inv(tmp1, tmp1, &M->stats); if(M->stats==GRT_INVERSE_FAILURE) return;
if((M->stats = grt_cmat2x2_inv(tmp1, tmp1)) == GRT_INVERSE_FAILURE) return;
grt_cmat2x2_mul(tmp1, M1->TD, tmp2);

// TD
Expand All @@ -191,7 +191,7 @@ void grt_recursion_RT_matrix_PSV(const RT_MATRIX *M1, const RT_MATRIX *M2, RT_MA

grt_cmat2x2_mul(M2->RD, M1->RU, tmp1);
grt_cmat2x2_one_sub(tmp1);
grt_cmat2x2_inv(tmp1, tmp1, &M->stats); if(M->stats==GRT_INVERSE_FAILURE) return;
if((M->stats = grt_cmat2x2_inv(tmp1, tmp1)) == GRT_INVERSE_FAILURE) return;
grt_cmat2x2_mul(tmp1, M2->TU, tmp2);

// TU
Expand Down
2 changes: 1 addition & 1 deletion pygrt/C_extension/src/dynamic/layer.c
Original file line number Diff line number Diff line change
Expand Up @@ -728,7 +728,7 @@ void grt_RT_matrix_from_4x4(

// 计算反射透射系数
// TD
grt_cmat2x2_inv(Q22, TD, stats);
grt_cmat2x2_inv(Q22, TD);
// RD
grt_cmat2x2_mul(Q12, TD, RD);
// RU
Expand Down