diff --git a/AMSS_NCKU_source/TwoPunctures.C b/AMSS_NCKU_source/TwoPunctures.C index ea84474..79b73a2 100644 --- a/AMSS_NCKU_source/TwoPunctures.C +++ b/AMSS_NCKU_source/TwoPunctures.C @@ -2111,10 +2111,19 @@ void TwoPunctures::JFD_times_dv(int i, int j, int k, int nvar, int n1, int n2, double sin_be, sin_be_i1, sin_be_i2, sin_be_i3, cos_be; double dV0, dV1, dV2, dV3, dV11, dV12, dV13, dV22, dV23, dV33, ha, ga, ga2, hb, gb, gb2, hp, gp, gp2, gagb, gagp, gbgp; - derivs dU, U; - allocate_derivs(&dU, nvar); - allocate_derivs(&U, nvar); + // Stack-allocated derivs (nvar=1) — no malloc/free! + double dU_d0[1], dU_d1[1], dU_d2[1], dU_d3[1]; + double dU_d11[1], dU_d12[1], dU_d13[1], dU_d22[1], dU_d23[1], dU_d33[1]; + double U_d0[1], U_d1[1], U_d2[1], U_d3[1]; + double U_d11[1], U_d12[1], U_d13[1], U_d22[1], U_d23[1], U_d33[1]; + derivs dU, U; + dU.d0=dU_d0; dU.d1=dU_d1; dU.d2=dU_d2; dU.d3=dU_d3; + dU.d11=dU_d11; dU.d12=dU_d12; dU.d13=dU_d13; + dU.d22=dU_d22; dU.d23=dU_d23; dU.d33=dU_d33; + U.d0=U_d0; U.d1=U_d1; U.d2=U_d2; U.d3=U_d3; + U.d11=U_d11; U.d12=U_d12; U.d13=U_d13; + U.d22=U_d22; U.d23=U_d23; U.d33=U_d33; if (k < 0) k = k + n3; @@ -2182,12 +2191,9 @@ void TwoPunctures::JFD_times_dv(int i, int j, int k, int nvar, int n1, int n2, dV11 = ga2 * (dv.d0[ipcc] + dv.d0[imcc] - 2 * dv.d0[iccc]); dV22 = gb2 * (dv.d0[icpc] + dv.d0[icmc] - 2 * dv.d0[iccc]); dV33 = gp2 * (dv.d0[iccp] + dv.d0[iccm] - 2 * dv.d0[iccc]); - dV12 = - 0.25 * gagb * (dv.d0[ippc] - dv.d0[ipmc] + dv.d0[immc] - dv.d0[impc]); - dV13 = - 0.25 * gagp * (dv.d0[ipcp] - dv.d0[imcp] + dv.d0[imcm] - dv.d0[ipcm]); - dV23 = - 0.25 * gbgp * (dv.d0[icpp] - dv.d0[icpm] + dv.d0[icmm] - dv.d0[icmp]); + dV12 = 0.25 * gagb * (dv.d0[ippc] - dv.d0[ipmc] + dv.d0[immc] - dv.d0[impc]); + dV13 = 0.25 * gagp * (dv.d0[ipcp] - dv.d0[imcp] + dv.d0[imcm] - dv.d0[ipcm]); + dV23 = 0.25 * gbgp * (dv.d0[icpp] - dv.d0[icpm] + dv.d0[icmm] - dv.d0[icmp]); /* Derivatives of (dv) w.r.t. (A,B,phi):*/ dV11 = sin_al_i3 * (sin_al * dV11 - cos_al * dV1); dV12 = sin_al_i1 * sin_be_i1 * dV12; @@ -2230,11 +2236,12 @@ void TwoPunctures::JFD_times_dv(int i, int j, int k, int nvar, int n1, int n2, /* (dU, dU_x, dU_y, dU_z, dU_xx, dU_xy, dU_xz, dU_yy, dU_yz, dU_zz)*/ rx3_To_xyz(nvar, x, r, phi, &y, &z, dU); LinEquations(A, B, X, R, x, r, phi, y, z, dU, U, values); - for (ivar = 0; ivar < nvar; ivar++) - values[ivar] *= FAC; - free_derivs(&dU, nvar); - free_derivs(&U, nvar); + double FAC_val = sin_al * sin_be * sin_al * sin_be * sin_al * sin_be; + for (ivar = 0; ivar < nvar; ivar++) + values[ivar] *= FAC_val; + + // No free_derivs needed — everything is on the stack } #undef FAC /*-----------------------------------------------------------*/