Commit ced0d1d3 authored by HyungWon Lee's avatar HyungWon Lee

add TaylorF2Ecc waveform caculating eccentric TaylorF2 wvaform

parent 08c0d64c
......@@ -85,6 +85,7 @@ static const char *lalSimulationApproximantNames[] = {
INITIALIZE_NAME(TaylorT3),
INITIALIZE_NAME(TaylorF1),
INITIALIZE_NAME(TaylorF2),
INITIALIZE_NAME(TaylorF2Ecc),
INITIALIZE_NAME(TaylorF2NLTides),
INITIALIZE_NAME(TaylorR2F4),
INITIALIZE_NAME(TaylorF2RedSpin),
......@@ -1070,6 +1071,30 @@ int XLALSimInspiralChooseFDWaveform(
}
break;
case TaylorF2Ecc:
/* Waveform-specific sanity checks */
if( !XLALSimInspiralWaveformParamsFrameAxisIsDefault(LALparams) )
ABORT_NONDEFAULT_FRAME_AXIS(LALparams);
if( !XLALSimInspiralWaveformParamsModesChoiceIsDefault(LALparams) )
ABORT_NONDEFAULT_MODES_CHOICE(LALparams);
if( !checkTransverseSpinsZero(S1x, S1y, S2x, S2y) )
ABORT_NONZERO_TRANSVERSE_SPINS(LALparams);
/* Call the waveform driver routine */
ret = XLALSimInspiralTaylorF2Ecc(hptilde, phiRef, deltaF, m1, m2,
S1z, S2z, f_min, f_max, f_ref, distance,
eccentricity, LALparams);
if (ret == XLAL_FAILURE) XLAL_ERROR(XLAL_EFUNC);
/* Produce both polarizations */
*hctilde = XLALCreateCOMPLEX16FrequencySeries("FD hcross",
&((*hptilde)->epoch), (*hptilde)->f0, (*hptilde)->deltaF,
&((*hptilde)->sampleUnits), (*hptilde)->data->length);
for(j = 0; j < (*hptilde)->data->length; j++) {
(*hctilde)->data->data[j] = -I*cfac * (*hptilde)->data->data[j];
(*hptilde)->data->data[j] *= pfac;
}
break;
case TaylorF2NLTides:
/* Waveform-specific sanity checks */
if( !XLALSimInspiralWaveformParamsFrameAxisIsDefault(LALparams) )
......@@ -2124,6 +2149,7 @@ int XLALSimInspiralFD(
/* upper bound on the final plunge, merger, and ringdown time */
switch (approximant) {
case TaylorF2:
case TaylorF2Ecc:
case TaylorF2NLTides:
case SpinTaylorF2:
case TaylorF2RedSpin:
......@@ -4646,6 +4672,7 @@ int XLALSimInspiralImplementedFDApproximants(
case SEOBNRv4_ROM_NRTidal:
//case TaylorR2F4:
case TaylorF2:
case TaylorF2Ecc:
case TaylorF2NLTides:
case EccentricFD:
case SpinTaylorF2:
......@@ -5053,6 +5080,7 @@ int XLALSimInspiralGetSpinSupportFromApproximant(Approximant approx){
spin_support=LAL_SIM_INSPIRAL_SINGLESPIN;
break;
case TaylorF2:
case TaylorF2Ecc:
case TaylorF2NLTides:
case TaylorF2RedSpin:
case TaylorF2RedSpinTidal:
......@@ -5184,6 +5212,7 @@ int XLALSimInspiralApproximantAcceptTestGRParams(Approximant approx){
testGR_accept=LAL_SIM_INSPIRAL_NO_TESTGR_PARAMS;
break;
case TaylorF2:
case TaylorF2Ecc:
case TaylorF2NLTides:
case SpinTaylorF2:
case EccentricFD:
......@@ -5560,6 +5589,7 @@ double XLALSimInspiralGetFinalFreq(
case EccentricTD:
case EccentricFD:
case TaylorF2:
case TaylorF2Ecc:
case TaylorF2NLTides:
case TaylorF2RedSpin:
case TaylorF2RedSpinTidal:
......
......@@ -213,6 +213,7 @@ extern "C" {
#define LAL_PN_MODE_L_MAX 3
/* (2x) Highest available PN order - UPDATE IF NEW ORDERS ADDED!!*/
#define LAL_MAX_PN_ORDER 8
#define LAL_MAX_ECC_PN_ORDER 6
/**
* Enum that specifies the PN approximant to be used in computing the waveform.
......@@ -240,6 +241,8 @@ typedef enum tagApproximant {
* @remarks Implemented in lalsimulation (frequency domain). */
TaylorF2, /**< The standard stationary phase approximation; Outputs a frequency-domain wave.
* @remarks Implemented in lalsimulation (frequency domain). */
TaylorF2Ecc, /**< The standard stationary phase approximation with eccentricity; Outputs a frequency-domain wave.
* @remarks Implemented in lalsimulation (frequency domain). */
TaylorF2NLTides, /**< The standard stationary phase approximation including a phenomenological model of nonlinear tidal effects; Outputs a frequency-domain wave.
* @remarks Implemented in lalsimulation (frequency domain). */
TaylorR2F4, /**< A frequency domain model closely related to TaylorT4
......@@ -634,7 +637,8 @@ int XLALHGimriGenerator(REAL8TimeSeries **hplus, REAL8TimeSeries **hcross, REAL8
/* TaylorF2 functions */
/* in module LALSimInspiralTaylorF2.c */
int XLALSimInspiralTaylorF2CoreEcc(COMPLEX16FrequencySeries **htilde, const REAL8Sequence *freqs, const REAL8 phi_ref, const REAL8 m1_SI, const REAL8 m2_SI, const REAL8 S1z, const REAL8 S2z, const REAL8 f_ref, const REAL8 shft, const REAL8 r, const REAL8 eccentricity, LALDict *LALparams);
int XLALSimInspiralTaylorF2Ecc(COMPLEX16FrequencySeries **htilde, const REAL8 phi_ref, const REAL8 deltaF, const REAL8 m1_SI, const REAL8 m2_SI, const REAL8 S1z, const REAL8 S2z, const REAL8 fStart, const REAL8 fEnd, const REAL8 f_ref, const REAL8 r, const REAL8 eccentricity, LALDict *LALparams);
int XLALSimInspiralTaylorF2AlignedPhasing(PNPhasingSeries **pfa, const REAL8 m1, const REAL8 m2, const REAL8 chi1, const REAL8 chi2, LALDict *extraPars);
int XLALSimInspiralTaylorF2AlignedPhasingArray(REAL8Vector **phasingvals, REAL8Vector mass1, REAL8Vector mass2, REAL8Vector chi1, REAL8Vector chi2, REAL8Vector lambda1, REAL8Vector lambda2, REAL8Vector dquadmon1, REAL8Vector dquadmon2);
int XLALSimInspiralTaylorF2Core(COMPLEX16FrequencySeries **htilde, const REAL8Sequence *freqs, const REAL8 phi_ref, const REAL8 m1_SI, const REAL8 m2_SI, const REAL8 f_ref, const REAL8 shft, const REAL8 r, LALDict *LALparams, PNPhasingSeries *pfaP);
......
......@@ -2176,3 +2176,101 @@ XLALSimInspiralTaylorEtZeta_7PNCoeff(
{
return (129.817/2.304 - 320.7739/4.8384 * eta + 61.3373/1.2096 * eta*eta) * LAL_PI;
}
// added for eccentricity corrections
// the code is not approved, hence I will use function name as I want
static INT4 UNUSED
eccentricityPNCoeffs_F2(REAL8 eta, REAL8 eccPNCoeffs[LAL_MAX_ECC_PN_ORDER+1][LAL_MAX_ECC_PN_ORDER+1][LAL_MAX_ECC_PN_ORDER+1])
{
INT4 ret = 0;
memset(eccPNCoeffs, 0x00, (LAL_MAX_ECC_PN_ORDER+1)*(LAL_MAX_ECC_PN_ORDER+1)*(LAL_MAX_ECC_PN_ORDER+1)*sizeof(REAL8));
eccPNCoeffs[0][0][0] = 1.0; // lowest order constant term
eccPNCoeffs[2][2][0] = 29.9076223/8.1976608 + 18.766963/2.927736*eta; //v^2 term
eccPNCoeffs[2][1][1] = 0.0; //v*v0 term
eccPNCoeffs[2][0][2] = 2.833/1.008 - 19.7/3.6*eta; //v0^2 term
eccPNCoeffs[3][3][0] = -28.19123/2.82600*LAL_PI; //v^3 term
eccPNCoeffs[3][0][3] = 37.7/7.2*LAL_PI; //v0^3 term
eccPNCoeffs[4][4][0] = 16.237683263/3.330429696 + 241.33060753/9.71375328*eta+156.2608261/6.9383952*eta*eta; //v^4 term
eccPNCoeffs[4][2][2] = 84.7282939759/8.2632420864-7.18901219/3.68894736*eta-36.97091711/1.05398496*eta*eta; //v^2*v0^2 term
eccPNCoeffs[4][0][4] = -1.193251/3.048192 - 66.317/9.072*eta +18.155/1.296*eta*eta; //v0^4 term
eccPNCoeffs[5][5][0] = -28.31492681/1.18395270*LAL_PI - 115.52066831/2.70617760*LAL_PI*eta; //v^5 term
eccPNCoeffs[5][3][2] = -79.86575459/2.84860800*LAL_PI + 55.5367231/1.0173600*LAL_PI*eta; //v^3*v0^2 term
eccPNCoeffs[5][2][3] = 112.751736071/5.902315776*LAL_PI + 70.75145051/2.10796992*LAL_PI*eta; //v^2*v0^3 term
eccPNCoeffs[5][0][5] = 76.4881/9.0720*LAL_PI - 94.9457/2.2680*LAL_PI*eta; //v0^5 term
eccPNCoeffs[6][6][0] = -436.03153867072577087/1.32658535116800000 + 53.6803271/1.9782000*LAL_GAMMA + 157.22503703/3.25555200*LAL_PI*LAL_PI
+(2991.72861614477/6.89135247360 - 15.075413/1.446912*LAL_PI*LAL_PI)*eta
+345.5209264991/4.1019955200*eta*eta + 506.12671711/8.78999040*eta*eta*eta
+ 384.3505163/5.9346000*log(2.0) - 112.1397129/1.7584000*log(3.0); //v^6 term except log(16*v^2) term
eccPNCoeffs[6][4][2] = 46.001356684079/3.357073133568 + 253.471410141755/5.874877983744*eta
- 169.3852244423/2.3313007872*eta*eta - 307.833827417/2.497822272*eta*eta*eta; //v^4*v0^2 term
eccPNCoeffs[6][3][3] = -106.2809371/2.0347200*LAL_PI*LAL_PI; //v^3*v0^3 term
eccPNCoeffs[6][2][4] = -3.56873002170973/2.49880440692736 - 260.399751935005/8.924301453312*eta
+ 15.0484695827/3.5413894656*eta*eta + 340.714213265/3.794345856*eta*eta*eta; //v^2*v0^4 term
eccPNCoeffs[6][0][6] = 265.31900578691/1.68991764480 - 33.17/1.26*LAL_GAMMA + 12.2833/1.0368*LAL_PI*LAL_PI
+ (91.55185261/5.48674560 - 3.977/1.152*LAL_PI*LAL_PI)*eta - 5.732473/1.306368*eta*eta
- 30.90307/1.39968*eta*eta*eta + 87.419/1.890*log(2.0) - 260.01/5.60*log(3.0); //v0^6 term except log(16*v0^2) term
//printPNCoeffs_F2(eccPNCoeffs);
return ret;
}
static REAL8 UNUSED
eccentricityPhasing_F2(REAL8 v, REAL8 v0, REAL8 ecc, REAL8 eta, INT4 ecc_order)
{
static REAL8 v0_power[LAL_MAX_ECC_PN_ORDER+1];
/* following code is not efficient in memory usage, need to be improved later */
static REAL8 eccPNCoeffs[LAL_MAX_ECC_PN_ORDER+1][LAL_MAX_ECC_PN_ORDER+1][LAL_MAX_ECC_PN_ORDER+1]; // we want to calculate just one time
REAL8 v_power[LAL_MAX_ECC_PN_ORDER+1];
REAL8 phasing = 0.0;
REAL8 global_factor;
v0_power[0] = 1.0;
for(int i=1; i<=LAL_MAX_ECC_PN_ORDER; i++)
{
v0_power[i] = v0_power[i-1]*v0;
}
eccentricityPNCoeffs_F2(eta, eccPNCoeffs);
//printPNCoeffs_F2(eccPNCoeffs);
v_power[0] = 1.0;
for(int i=1; i<=LAL_MAX_ECC_PN_ORDER; i++)
{
v_power[i] = v_power[i-1]*v;
}
global_factor = -2.355/1.462*ecc*ecc*pow(v0/v, 19.0/3.0);
global_factor *= (3.0/128.0/eta); // overall factor except v^-5 in phase term, this is Newtonian phase term
if(ecc_order == -1) {
ecc_order = LAL_MAX_ECC_PN_ORDER;
}
REAL8 phaseOrder = 0;
for(int i=0; i<=ecc_order; i++)
{
phaseOrder = 0;
INT4 k = 0;
for(int j=i; j>=0; j--)
{
k = i - j;
if( j==6 )
{
phaseOrder += (eccPNCoeffs[i][j][k]+53.6803271/3.9564000*log(16.0*v_power[2]))*v_power[j]*v0_power[k];
//phasing += (eccPNCoeffs[i][j][k]+53.6803271/3.9564000*log(16.0*v_power[2]))*v_power[j]*v0_power[k];
}
else if( k == 6 )
{
phaseOrder += (eccPNCoeffs[i][j][k] - 33.17/2.52*log(16.0*v0_power[2]))*v_power[j]*v0_power[k];
//phasing += (eccPNCoeffs[i][j][k] - 33.17/2.52*log(16.0*v0_power[2]))*v_power[j]*v0_power[k];
}
else
{
phaseOrder += eccPNCoeffs[i][j][k]*v_power[j]*v0_power[k];
//phasing += eccPNCoeffs[i][j][k]*v_power[j]*v0_power[k];
}
}
phasing += phaseOrder;
//ecc_phase_order[i] = phaseOrder*global_factor;
}
//fprintf(stdout, "======== DEBUG for eccentricity ================\n");
//fprintf(stdout, "eccentricityPhasing_F2 phasing = %g, global_factor = %g, ecc_order = %d, ecc = %g\n", phasing, global_factor, ecc_order, ecc);
return phasing*global_factor;
}
......@@ -543,6 +543,8 @@ int XLALSimInspiralTaylorF2(
return ret;
}
/* include eccentric TaylorF2 waveform added by KGWG PE team */
#include "LALSimInspiralTaylorF2Ecc.c"
/** @} */
/** @} */
This diff is collapsed.
......@@ -81,6 +81,7 @@ DEFINE_INSERT_FUNC(TidalOctupolarFMode2, REAL8, "TidalOctupolarFMode2", 0)
DEFINE_INSERT_FUNC(dQuadMon1, REAL8, "dQuadMon1", 0)
DEFINE_INSERT_FUNC(dQuadMon2, REAL8, "dQuadMon2", 0)
DEFINE_INSERT_FUNC(Redshift, REAL8, "redshift", 0)
DEFINE_INSERT_FUNC(EccentricityFreq, REAL8, "f_ecc", 10)
DEFINE_INSERT_FUNC(NonGRPhi1, REAL8, "phi1", 0)
DEFINE_INSERT_FUNC(NonGRPhi2, REAL8, "phi2", 0)
......@@ -180,6 +181,7 @@ DEFINE_LOOKUP_FUNC(TidalOctupolarFMode2, REAL8, "TidalOctupolarFMode2", 0)
DEFINE_LOOKUP_FUNC(dQuadMon1, REAL8, "dQuadMon1", 0)
DEFINE_LOOKUP_FUNC(dQuadMon2, REAL8, "dQuadMon2", 0)
DEFINE_LOOKUP_FUNC(Redshift, REAL8, "redshift", 0)
DEFINE_LOOKUP_FUNC(EccentricityFreq, REAL8, "f_ecc", 10)
DEFINE_LOOKUP_FUNC(NonGRPhi1, REAL8, "phi1", 0)
DEFINE_LOOKUP_FUNC(NonGRPhi2, REAL8, "phi2", 0)
......@@ -272,6 +274,7 @@ DEFINE_ISDEFAULT_FUNC(TidalOctupolarFMode2, REAL8, "TidalOctupolarFMode2", 0)
DEFINE_ISDEFAULT_FUNC(dQuadMon1, REAL8, "dQuadMon1", 0)
DEFINE_ISDEFAULT_FUNC(dQuadMon2, REAL8, "dQuadMon2", 0)
DEFINE_ISDEFAULT_FUNC(Redshift, REAL8, "redshift", 0)
DEFINE_ISDEFAULT_FUNC(EccentricityFreq, REAL8, "f_ecc", 10)
DEFINE_ISDEFAULT_FUNC(NonGRPhi1, REAL8, "phi1", 0)
DEFINE_ISDEFAULT_FUNC(NonGRPhi2, REAL8, "phi2", 0)
......
......@@ -35,6 +35,7 @@ int XLALSimInspiralWaveformParamsInsertTidalOctupolarFMode2(LALDict *params, REA
int XLALSimInspiralWaveformParamsInsertdQuadMon1(LALDict *params, REAL8 value);
int XLALSimInspiralWaveformParamsInsertdQuadMon2(LALDict *params, REAL8 value);
int XLALSimInspiralWaveformParamsInsertRedshift(LALDict *params, REAL8 value);
int XLALSimInspiralWaveformParamsInsertEccentricityFreq(LALDict *params, REAL8 value);
int XLALSimInspiralWaveformParamsInsertNonGRPhi1(LALDict *params, REAL8 value);
int XLALSimInspiralWaveformParamsInsertNonGRPhi2(LALDict *params, REAL8 value);
......@@ -120,6 +121,7 @@ REAL8 XLALSimInspiralWaveformParamsLookupTidalOctupolarFMode2(LALDict *params);
REAL8 XLALSimInspiralWaveformParamsLookupdQuadMon1(LALDict *params);
REAL8 XLALSimInspiralWaveformParamsLookupdQuadMon2(LALDict *params);
REAL8 XLALSimInspiralWaveformParamsLookupRedshift(LALDict *params);
REAL8 XLALSimInspiralWaveformParamsLookupEccentricityFreq(LALDict *params);
REAL8 XLALSimInspiralWaveformParamsLookupNonGRPhi1(LALDict *params);
REAL8 XLALSimInspiralWaveformParamsLookupNonGRPhi2(LALDict *params);
......@@ -205,6 +207,7 @@ int XLALSimInspiralWaveformParamsTidalOctupolarFMode2IsDefault(LALDict *params);
int XLALSimInspiralWaveformParamsdQuadMon1IsDefault(LALDict *params);
int XLALSimInspiralWaveformParamsdQuadMon2IsDefault(LALDict *params);
int XLALSimInspiralWaveformParamsRedshiftIsDefault(LALDict *params);
int XLALSimInspiralWaveformParamsEccentricityFreqIsDefault(LALDict *params);
int XLALSimInspiralWaveformParamsNonGRPhi1IsDefault(LALDict *params);
int XLALSimInspiralWaveformParamsNonGRPhi2IsDefault(LALDict *params);
......
......@@ -111,6 +111,7 @@ const char * usage =
" SEOBNRv2_ROM_EffectiveSpin\n"
" SEOBNRv2_ROM_DoubleSpin\n"
" TaylorF2\n"
" TaylorF2Ecc\n"
" SpinTaylorF2\n"
" TaylorR2F4\n"
" SpinTaylorT4Fourier\n"
......@@ -141,6 +142,10 @@ const char * usage =
" (~128-2560 for NS, 0 for BH) (default 0)\n"
"--tidal-lambda2 L2 (tidal deformability of mass 2) / (mass of body 2)^5\n"
" (~128-2560 for NS, 0 for BH) (default 0)\n"
"--ecc_order eccO PN order for eccentric correction term\n"
" (-1 for maximum order) (default -1)\n"
"--f_ecc f reference frequency for initial eccentricity\n"
" (10Hz) (default 10)\n"
"--tidal-lambda-octu1 L31 (octupolar tidal deformability of mass 1) / (mass of body 1)^7\n"
" (0 for BH) (default 0)\n"
"--tidal-lambda-octu2 L32 (octupolar tidal deformability of mass 2) / (mass of body 2)^7\n"
......@@ -221,6 +226,14 @@ static GSParams *parse_args(ssize_t argc, char **argv) {
/* Note: given a LALDict, SEOBNRv2T/v4T will check wether other parameters ( TidalOctupolarLambda, TidalQuadrupolarFMode, TidalOctupolarFMode, dQuadMon) are present in the LALDict */
/* If present, this value is looked up and used, if absent, the parameter is computed from quadrupolar lambda through universal relations */
/* We therefore do not Insert default values for these parameters, they will be inserted in LALDict only if specified on the commandline */
XLALSimInspiralWaveformParamsInsertPNEccentricityOrder(params->params, -1);
XLALSimInspiralWaveformParamsInsertEccentricityFreq(params->params, 10.0);
XLALSimInspiralWaveformParamsInsertTidalOctupolarLambda1(params->params, 0.);
XLALSimInspiralWaveformParamsInsertTidalOctupolarLambda2(params->params, 0.);
XLALSimInspiralWaveformParamsInsertTidalQuadrupolarFMode1(params->params, 0.);
XLALSimInspiralWaveformParamsInsertTidalQuadrupolarFMode2(params->params, 0.);
XLALSimInspiralWaveformParamsInsertTidalOctupolarFMode1(params->params, 0.);
XLALSimInspiralWaveformParamsInsertTidalOctupolarFMode2(params->params, 0.);
strncpy(params->outname, "simulation.dat", 256); /* output to this file */
params->verbose = 0; /* No verbosity */
......@@ -284,6 +297,10 @@ static GSParams *parse_args(ssize_t argc, char **argv) {
XLALSimInspiralWaveformParamsInsertTidalLambda1(params->params, atof(argv[++i]));
} else if (strcmp(argv[i], "--tidal-lambda2") == 0) {
XLALSimInspiralWaveformParamsInsertTidalLambda2(params->params, atof(argv[++i]));
} else if (strcmp(argv[i], "--ecc_order") == 0) {
XLALSimInspiralWaveformParamsInsertPNEccentricityOrder(params->params, atoi(argv[++i]));
} else if (strcmp(argv[i], "--f_ecc") == 0) {
XLALSimInspiralWaveformParamsInsertEccentricityFreq(params->params, atof(argv[++i]));
} else if (strcmp(argv[i], "--tidal-lambda-octu1") == 0) {
XLALSimInspiralWaveformParamsInsertTidalOctupolarLambda1(params->params, atof(argv[++i]));
} else if (strcmp(argv[i], "--tidal-lambda-octu2") == 0) {
......@@ -386,7 +403,7 @@ static int dump_FD(FILE *f, COMPLEX16FrequencySeries *hptilde,
fprintf(f, "# f hptilde.re hptilde.im hctilde.re hctilde.im\n");
for (i=0; i < hptilde->data->length; i++)
fprintf(f, "%.16e %.16e %.16e %.16e %.16e\n",
fprintf(f, "%25.16e %25.16e %25.16e %25.16e %25.16e\n",
hptilde->f0 + i * hptilde->deltaF,
creal(dataPtr1[i]), cimag(dataPtr1[i]), creal(dataPtr2[i]), cimag(dataPtr2[i]));
return 0;
......@@ -422,7 +439,7 @@ static int dump_FD2(FILE *f, COMPLEX16FrequencySeries *hptilde,
fprintf(f, "# f amp_+ phase_+ amp_x phase_x\n");
for (i=0; i < hptilde->data->length; i++)
fprintf(f, "%.16e %.16e %.16e %.16e %.16e\n",
fprintf(f, "%25.16e %25.16e %25.16e %25.16e %25.16e\n",
hptilde->f0 + i * hptilde->deltaF,
amp1[i], phaseUW1[i], amp2[i], phaseUW2[i]);
return 0;
......@@ -441,7 +458,7 @@ static int dump_TD(FILE *f, REAL8TimeSeries *hplus, REAL8TimeSeries *hcross) {
fprintf(f, "# t hplus hcross\n");
for (i=0; i < hplus->data->length; i++)
fprintf(f, "%.16e %.16e %.16e\n", t0 + i * hplus->deltaT,
fprintf(f, "%25.16e %25.16e %25.16e\n", t0 + i * hplus->deltaT,
hplus->data->data[i], hcross->data->data[i]);
return 0;
}
......@@ -471,7 +488,7 @@ static int dump_TD2(FILE *f, REAL8TimeSeries *hplus, REAL8TimeSeries *hcross) {
fprintf(f, "# t amp phase\n");
for (i=0; i < hplus->data->length; i++)
fprintf(f, "%.16e %.16e %.16e\n", t0 + i * hplus->deltaT,
fprintf(f, "%25.16e %25.16e %25.16e\n", t0 + i * hplus->deltaT,
amp[i], phaseUW[i]);
return 0;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment