diff --git a/docs/doxyfile_h b/docs/doxyfile_h index f98ee3f7..5fc77b52 100755 --- a/docs/doxyfile_h +++ b/docs/doxyfile_h @@ -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__ \ No newline at end of file +PREDEFINED = __DYNAMIC_KERNEL__ __STATIC_KERNEL__ GCC_ALWAYS_INLINE \ No newline at end of file diff --git a/pygrt/C_extension/include/grt/common/kernel_template.h b/pygrt/C_extension/include/grt/common/kernel_template.h index 6651f08b..9621cc24 100644 --- a/pygrt/C_extension/include/grt/common/kernel_template.h +++ b/pygrt/C_extension/include/grt/common/kernel_template.h @@ -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); // 为后续计算空间导数备份 @@ -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); // 为后续计算空间导数备份 diff --git a/pygrt/C_extension/include/grt/common/matrix.h b/pygrt/C_extension/include/grt/common/matrix.h index 90a1f1c3..21924767 100755 --- a/pygrt/C_extension/include/grt/common/matrix.h +++ b/pygrt/C_extension/include/grt/common/matrix.h @@ -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]; @@ -31,8 +32,7 @@ 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; @@ -40,7 +40,7 @@ inline GCC_ALWAYS_INLINE void grt_cmat2x2_inv(const cplx_t M[2][2], cplx_t invM[ invM[0][1] = - M01 * det; invM[1][0] = - M10 * det; invM[1][1] = M00 * det; - *stats = GRT_INVERSE_SUCCESS; + return GRT_INVERSE_SUCCESS; } /** diff --git a/pygrt/C_extension/src/common/RT_matrix.c b/pygrt/C_extension/src/common/RT_matrix.c index 6c6c0630..9be98961 100644 --- a/pygrt/C_extension/src/common/RT_matrix.c +++ b/pygrt/C_extension/src/common/RT_matrix.c @@ -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); @@ -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); @@ -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); @@ -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); @@ -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 @@ -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 diff --git a/pygrt/C_extension/src/dynamic/layer.c b/pygrt/C_extension/src/dynamic/layer.c index 7c4b9061..62f20264 100644 --- a/pygrt/C_extension/src/dynamic/layer.c +++ b/pygrt/C_extension/src/dynamic/layer.c @@ -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