diff --git a/AMSS_NCKU_source/fdderivs_sh_c.C b/AMSS_NCKU_source/fdderivs_sh_c.C index d061231..497ec93 100644 --- a/AMSS_NCKU_source/fdderivs_sh_c.C +++ b/AMSS_NCKU_source/fdderivs_sh_c.C @@ -5,7 +5,7 @@ * fdderivs_sh — second derivatives on shell patch in (rho, sigma, R) coords. * Same stencil coefficients as Cartesian fdderivs. Uses symmetry_stbd. */ -void fdderivs_sh(const int ex[3], +extern "C" void fdderivs_sh_(const int ex[3], const double *f, double *fxx, double *fxy, double *fxz, double *fyy, double *fyz, double *fzz, diff --git a/AMSS_NCKU_source/fdderivs_shc_c.C b/AMSS_NCKU_source/fdderivs_shc_c.C index dfd49bf..fc9c140 100644 --- a/AMSS_NCKU_source/fdderivs_shc_c.C +++ b/AMSS_NCKU_source/fdderivs_shc_c.C @@ -2,30 +2,22 @@ #include "share_func.h" #include -/* Forward declarations */ -void fderivs_sh(const int ex[3], const double *f, - double *fx, double *fy, double *fz, - const double *X, const double *Y, const double *Z, - double SYM1, double SYM2, double SYM3, - int Symmetry, int onoff, int sst); - -void fdderivs_sh(const int ex[3], const double *f, - double *fxx, double *fxy, double *fxz, - double *fyy, double *fyz, double *fzz, +/* Forward declarations — Fortran-mangled names from shell C kernels */ +extern "C" { +void fderivs_sh_(const int ex[3], const double *f, + double *fx, double *fy, double *fz, const double *X, const double *Y, const double *Z, double SYM1, double SYM2, double SYM3, int Symmetry, int onoff, int sst); -/* - * fdderivs_shc — shell second derivatives converted to Cartesian via chain rule. - * - * Calls fderivs_sh and fdderivs_sh internally, then applies: - * f_{,ij} = sum_{a,b} (dx^a/dx^i)(dx^b/dx^j) f_{,ab} + sum_a (d^2 x^a/dx^i dx^j) f_{,a} - * where a,b ∈ {rho, sigma, R}. - */ -extern "C" { +void fdderivs_sh_(const int ex[3], const double *f, + double *fxx, double *fxy, double *fxz, + double *fyy, double *fyz, double *fzz, + const double *X, const double *Y, const double *Z, + double SYM1, double SYM2, double SYM3, + int Symmetry, int onoff, int sst); -void f_fdderivs_shc(int *ex, +void fdderivs_shc_(int *ex, double *f, double *fxx, double *fxy, double *fxz, double *fyy, double *fyz, double *fzz, @@ -60,8 +52,8 @@ void f_fdderivs_shc(int *ex, return; } - fderivs_sh(ex3, f, gx, gy, gz, crho, sigma, R, SYM1, SYM2, SYM3, Symmetry, Lev, sst); - fdderivs_sh(ex3, f, gxx, gxy, gxz, gyy, gyz, gzz, crho, sigma, R, SYM1, SYM2, SYM3, Symmetry, Lev, sst); + fderivs_sh_(ex3, f, gx, gy, gz, crho, sigma, R, SYM1, SYM2, SYM3, Symmetry, Lev, sst); + fdderivs_sh_(ex3, f, gxx, gxy, gxz, gyy, gyz, gzz, crho, sigma, R, SYM1, SYM2, SYM3, Symmetry, Lev, sst); for (size_t i = 0; i < n; ++i) { const double rx=drhodx[i], ry=drhody[i], rz=drhodz[i]; diff --git a/AMSS_NCKU_source/fderivs_sh_c.C b/AMSS_NCKU_source/fderivs_sh_c.C index de07157..0a28f23 100644 --- a/AMSS_NCKU_source/fderivs_sh_c.C +++ b/AMSS_NCKU_source/fderivs_sh_c.C @@ -10,7 +10,7 @@ * - SoA is 2-element only (x/y), no z-symmetry * - sst parameter (shell surface type, not used in stencil computation) */ -void fderivs_sh(const int ex[3], +extern "C" void fderivs_sh_(const int ex[3], const double *f, double *fx, double *fy, double *fz, const double *X, const double *Y, const double *Z, diff --git a/AMSS_NCKU_source/fderivs_shc_c.C b/AMSS_NCKU_source/fderivs_shc_c.C index beec39c..54baafc 100644 --- a/AMSS_NCKU_source/fderivs_shc_c.C +++ b/AMSS_NCKU_source/fderivs_shc_c.C @@ -11,16 +11,15 @@ * fz = drhodz * df/drho + dsigmadz * df/dsigma + dRdz * df/dR */ -// Forward declaration (defined in fderivs_sh_c.C) -void fderivs_sh(const int ex[3], const double *f, - double *fx, double *fy, double *fz, - const double *X, const double *Y, const double *Z, - double SYM1, double SYM2, double SYM3, - int Symmetry, int onoff, int sst); - +// Forward declaration (defined in fderivs_sh_c.C with extern "C" name fderivs_sh_) extern "C" { +void fderivs_sh_(const int ex[3], const double *f, + double *fx, double *fy, double *fz, + const double *X, const double *Y, const double *Z, + double SYM1, double SYM2, double SYM3, + int Symmetry, int onoff, int sst); -void f_fderivs_shc(int *ex, +void fderivs_shc_(int *ex, double *f, double *fx, double *fy, double *fz, double *crho, double *sigma, double *R, @@ -40,7 +39,7 @@ void f_fderivs_shc(int *ex, if (!gx || !gy || !gz) { free(gx); free(gy); free(gz); return; } // Compute shell-coordinate derivatives - fderivs_sh(ex3, f, gx, gy, gz, crho, sigma, R, SYM1, SYM2, SYM3, Symmetry, Lev, sst); + fderivs_sh_(ex3, f, gx, gy, gz, crho, sigma, R, SYM1, SYM2, SYM3, Symmetry, Lev, sst); // Chain rule to Cartesian for (size_t i = 0; i < n; ++i) { diff --git a/AMSS_NCKU_source/kodiss_sh_c.C b/AMSS_NCKU_source/kodiss_sh_c.C index 579c98a..5dfa69d 100644 --- a/AMSS_NCKU_source/kodiss_sh_c.C +++ b/AMSS_NCKU_source/kodiss_sh_c.C @@ -5,7 +5,7 @@ * kodis_sh — Kreiss-Oliger dissipation on shell patches. * Same stencil coefficients as Cartesian kodis. Uses symmetry_stbd. */ -void kodis_sh(const int ex[3], +extern "C" void kodis_sh_(const int ex[3], const double *X, const double *Y, const double *Z, const double *f, double *f_rhs, const double SoAi[2],