LALInspiralChooseModel.c

Go to the documentation of this file.
00001 /*
00002 *  Copyright (C) 2007 David Churches, Jolien Creighton, David McKechan, B.S. Sathyaprakash, Thomas Cokelaer, Duncan Brown
00003 *
00004 *  This program is free software; you can redistribute it and/or modify
00005 *  it under the terms of the GNU General Public License as published by
00006 *  the Free Software Foundation; either version 2 of the License, or
00007 *  (at your option) any later version.
00008 *
00009 *  This program is distributed in the hope that it will be useful,
00010 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012 *  GNU General Public License for more details.
00013 *
00014 *  You should have received a copy of the GNU General Public License
00015 *  along with with program; see the file COPYING. If not, write to the
00016 *  Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
00017 *  MA  02111-1307  USA
00018 */
00019 
00020 /*  <lalVerbatim file="LALInspiralChooseModelCV">
00021 Author: Sathyaprakash, B. S.
00022 $Id: LALInspiralChooseModel.c,v 1.30 2008/06/03 12:00:58 thomas Exp $
00023 </lalVerbatim>  */
00024 
00025 /*  <lalLaTeX>
00026 
00027 \subsection{Module \texttt{LALInspiralChooseModel.c}}
00028 
00029 Module to set the pointers to the required energy and flux functions.
00030 Normally, a user is not required to call this function to generate a waveform.
00031 \subsubsection*{Prototypes}
00032 \vspace{0.1in}
00033 \input{LALInspiralChooseModelCP}
00034 \index{\verb&LALInspiralChooseModel()&}
00035 \begin{itemize}
00036 \item {\tt f:} Output containing the pointers to the appropriate
00037 energy, flux, frequency, timing and phasing functions.
00038 \item {\tt ak:} Output containing the PN expnasion coefficients.
00039 \item {\tt params:} Input containing binary chirp parameters.
00040 \end{itemize}
00041 
00042 \subsubsection*{Description}
00043 This module gives the post-Newtonian expansions and/or P-approximants 
00044 to the energy, its derivative and gravitational-wave flux functions. More
00045 specifically, the {\tt static REAL8} functions below give Taylor expansions 
00046 of $dE/dv,$ and ${\cal F}(v),$ P-approximants of $e(v),$ $dE/dv$ 
00047 (derived from $e(v)$) and ${\cal F}(v).$ 
00048 
00049 {\tt LALInspiralChooseModel}
00050 is used to set pointers to the required energy and flux functions 
00051 $E^{\prime}_T(v),$ $\mathcal{F}_T(v),$ $E^{\prime}_P(v)$ and $\mathcal{F}_P(v),$
00052 in {\tt expnFunc,} as also the GW phasing and frequency fucntions used in 
00053 the various approximants to generate the waveform.
00054 More specifically pointers are set to the following functions in the structure
00055 {\tt expnFunc}:
00056 \begin{itemize}
00057   \item {\tt EnergyFunction *dEnergy}
00058   \item {\tt FluxFunction *flux}
00059   \item {\tt InspiralTiming2 *timing2}
00060   \item {\tt InspiralPhasing2 *phasing2}
00061   \item {\tt InspiralPhasing3 *phasing3}
00062   \item {\tt InspiralFrequency3 *frequency3}
00063 \end{itemize}
00064 {\tt LALInspiralChooseModel} also outputs in {\tt ak} the 
00065 last stable orbit (LSO) velocity $v_{\rm LSO}$ (as {\tt ak->vn})
00066 defined by the equation $E'(v_{\rm LSO})=0,$
00067 the values of the GW frequency $f_{\rm LSO}=v_{\rm LSO}^3/(\pi m)$ 
00068 (as {\tt ak->fn}) and time (as {\tt ak->tn}) elapsed from {\tt params->fLower} 
00069 to smaller of {\tt fCutOff} and {\tt ak->fn} by evaluating the integral
00070 \begin{equation}
00071 t_n = t_{0} - m \int^{v_n}_{v_0} \frac{E^{\prime}(v)}{\mathcal{F}(v)} \, dv\,,
00072 \end{equation}
00073 where $t_{0}$ (usually equal to zero) is the user specified starting 
00074 time for the waveform when the wave frequency reaches {\tt params->fLower}
00075 and $v_{0}= (\pi m f)^{1/3}$ (with $f={\tt params->fLower}$) is the  velocity 
00076 at time $t_{0}.$  Note that $E'(v)$ and ${\cal F}(v)$ are defined in
00077 {\tt f->dEnergy} and {\tt f->flux.} 
00078 
00079 \subsubsection*{Algorithm}
00080 Numerical integration is used to compute {\tt ak->tn.}
00081 \subsubsection*{Uses}
00082 LALInspiralTofV
00083 
00084 \subsubsection*{Notes}
00085 \begin{itemize}
00086 \item See Damour, Iyer and Sathyaprakash, PRD 57, 885, 1998 for further details.
00087 Damour, Iyer and Sathyaprakash, PRD 63, 044023, 2001 is a resource paper that
00088 summarizes how to generate waveforms in different approximations to the dynamics
00089 of a compact binary under radiation reaction.
00090 \item The Pade Approximant for the 1PN expansion is undefined as also
00091 EOB at orders less than 2PN. BCV is independent of the PN order.
00092 Spinning waveforms are only defined at the highest PN order.
00093 \end{itemize}
00094 
00095 
00096 \vfill{\footnotesize\input{LALInspiralChooseModelCV}}
00097 
00098 </lalLaTeX>  */
00099 
00100 #include <math.h>
00101 #include <lal/LALStdlib.h>
00102 #include <lal/LALInspiral.h>
00103 
00104 NRCSID (LALINSPIRALCHOOSEMODELC, "$Id: LALInspiralChooseModel.c,v 1.30 2008/06/03 12:00:58 thomas Exp $");
00105 
00106 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00107 static REAL8 dEt0(REAL8 v, expnCoeffs *ak) 
00108 { /* </lalVerbatim>  */
00109    REAL8 dEnergy;
00110    dEnergy = ak->dETaN * v;
00111    return (dEnergy);
00112 } 
00113 
00114 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00115 static REAL8 dEt2(REAL8 v, expnCoeffs *ak) 
00116 { /* </lalVerbatim>  */
00117    REAL8 dEnergy, x;
00118    x = v*v;
00119    dEnergy = ak->dETaN * v * (1. + ak->dETa1*x);
00120    return (dEnergy);
00121 }
00122 
00123 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00124 static REAL8 dEt4(REAL8 v, expnCoeffs *ak) 
00125 { /* </lalVerbatim>  */
00126    REAL8 dEnergy, x;
00127    x = v*v;
00128    dEnergy = ak->dETaN * v * (1. + ak->dETa1*x + ak->dETa2*x*x);
00129    return (dEnergy);
00130 }
00131 
00132 
00133 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00134 static REAL8 dEt6(REAL8 v, expnCoeffs *ak) 
00135 { /* </lalVerbatim>  */
00136    REAL8 dEnergy, x;
00137    x = v*v;
00138    dEnergy = ak->dETaN * v * (1. + ak->dETa1*x + ak->dETa2*x*x + ak->dETa3*x*x*x);
00139    return (dEnergy);
00140 }
00141 
00142 
00143 
00144 
00145 
00146 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00147 static REAL8 Ft0(REAL8 v, expnCoeffs *ak) 
00148 { /* </lalVerbatim>  */
00149    REAL8 flux,v2,v4,v8,v10;
00150    v2 = v*v;
00151    v4 = v2*v2;
00152    v8 = v4*v4;
00153    v10 = v8*v2;
00154    flux = ak->FTaN * v10;
00155    return (flux);
00156 }
00157 
00158 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00159 static REAL8 Ft2(REAL8 v, expnCoeffs *ak) 
00160 { /* </lalVerbatim>  */
00161    REAL8 flux,v2,v4,v8,v10;
00162    v2 = v*v;
00163    v4 = v2*v2;
00164    v8 = v4*v4;
00165    v10 = v8*v2;
00166    flux = ak->FTaN * v10 * (1. + ak->FTa2*v2);
00167    return (flux);
00168 }
00169 
00170 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00171 static REAL8 Ft3(REAL8 v, expnCoeffs *ak) 
00172 { /* </lalVerbatim>  */
00173    REAL8 flux,v2,v4,v8,v10;
00174    v2 = v*v;
00175    v4 = v2*v2;
00176    v8 = v4*v4;
00177    v10 = v8*v2;
00178    flux = ak->FTaN * v10 * (1. + ak->FTa2*v2 + ak->FTa3*v2*v);
00179    return (flux);
00180 }
00181 
00182 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00183 static REAL8 Ft4(REAL8 v, expnCoeffs *ak) 
00184 { /* </lalVerbatim>  */
00185    REAL8 flux,v2,v4,v8,v10;
00186    v2 = v*v;
00187    v4 = v2*v2;
00188    v8 = v4*v4;
00189    v10 = v8*v2;
00190    flux = ak->FTaN * v10 * (1. + ak->FTa2*v2 + ak->FTa3*v2*v + ak->FTa4*v4);
00191    return (flux);
00192 }
00193 
00194 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00195 static REAL8 Ft5(REAL8 v, expnCoeffs *ak) 
00196 { /* </lalVerbatim>  */
00197    REAL8 flux,v2,v4,v8,v10;
00198    v2 = v*v;
00199    v4 = v2*v2;
00200    v8 = v4*v4;
00201    v10 = v8*v2;
00202    flux = ak->FTaN * v10 * (1.+ ak->FTa2*v2 + ak->FTa3*v2*v + ak->FTa4*v4 
00203         + ak->FTa5*v4*v);
00204    return (flux);
00205 }
00206 
00207 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00208 static REAL8 Ft6(REAL8 v, expnCoeffs *ak) 
00209 { /* </lalVerbatim>  */
00210    REAL8 flux,v2,v4,v6,v8,v10;
00211    v2 = v*v;
00212    v4 = v2*v2;
00213    v6 = v4*v2;
00214    v8 = v4*v4;
00215    v10 = v8*v2;
00216    flux = ak->FTaN * v10 * (1.+ ak->FTa2*v2 + ak->FTa3*v2*v + ak->FTa4*v4 
00217         + ak->FTa5*v4*v + (ak->FTa6 + ak->FTl6*log(v))*v6);
00218    return (flux);
00219 }
00220 
00221 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00222 static REAL8 Ft7(REAL8 v, expnCoeffs *ak) 
00223 { /* </lalVerbatim>  */
00224    REAL8 flux,v2,v4,v6,v8,v10;
00225    v2 = v*v;
00226    v4 = v2*v2;
00227    v6 = v4*v2;
00228    v8 = v4*v4;
00229    v10 = v8*v2;
00230    flux = ak->FTaN * v10 * (1.+ ak->FTa2*v2 + ak->FTa3*v2*v + ak->FTa4*v4 
00231         + ak->FTa5*v4*v + (ak->FTa6 + ak->FTl6*log(v))*v6 + ak->FTa7*v6*v);
00232    return (flux);
00233 }
00234 
00235 
00236 #if 0 /* NOT USED */
00237 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00238 static REAL8 ep0(REAL8 v, expnCoeffs *ak) 
00239 { /* </lalVerbatim>  */
00240    REAL8 x, energy;
00241    ak = NULL;
00242    x = v*v;
00243    energy = -x;
00244    return (energy);
00245 }
00246 #endif
00247 
00248 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00249 static REAL8 ep2(REAL8 v, expnCoeffs *ak) 
00250 { /* </lalVerbatim>  */
00251    REAL8 x, energy;
00252    x = v*v;
00253    energy = -x / (1. + ak->ePa1 * x);
00254    return (energy);
00255 }
00256 
00257 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00258 static REAL8 ep4(REAL8 v, expnCoeffs *ak) 
00259 { /* </lalVerbatim>  */
00260    REAL8 x, energy;
00261    x = v*v;
00262    energy = -x / (1. + ak->ePa1*x /(1. + ak->ePa2*x));
00263    return (energy);
00264 }
00265 
00266 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00267 static REAL8 ep6(REAL8 v, expnCoeffs *ak) 
00268 { /* </lalVerbatim>  */
00269    REAL8 x, energy;
00270    x = v*v;
00271    energy = -x / (1. + ak->ePa1*x /(1. + ak->ePa2*x /(1. + ak->ePa3*x)));
00272    return (energy);
00273 }
00274 
00275 #if 0 /* NOT USED */
00276 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00277 static REAL8 dEp0(REAL8 v, expnCoeffs *ak) 
00278 { /* </lalVerbatim>  */
00279    REAL8 energy, denergy, Energy, dEnergy, y;
00280    energy = ep0(v, ak);
00281    y = sqrt(1.+energy);
00282    Energy = sqrt(1. + 2.* ak->eta * (y - 1.)) - 1.;
00283    denergy = -1;
00284    dEnergy = v * ak->eta * denergy /((1.+Energy) * y);
00285    return(dEnergy);
00286 }
00287 #endif
00288 
00289 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00290 static REAL8 dEp2(REAL8 v, expnCoeffs *ak) 
00291 { /* </lalVerbatim>  */
00292    REAL8 energy, denergy, Energy, dEnergy, x, y;
00293    x = v*v;
00294    energy = ep2(v, ak);
00295    y = sqrt(1.+energy);
00296    Energy = sqrt(1. + 2.* ak->eta * (y - 1.)) - 1.;
00297    denergy = -1. / ((1. + ak->ePa1*x)*(1. + ak->ePa1*x));
00298    dEnergy = v * ak->eta * denergy /((1.+Energy) * y);
00299    return(dEnergy);
00300 }
00301 
00302 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00303 static REAL8 dEp4(REAL8 v, expnCoeffs *ak) 
00304 { /* </lalVerbatim>  */
00305    REAL8 energy, denergy, Energy, dEnergy, x, y;
00306    x = v*v;
00307    energy = ep4(v, ak);
00308    y = sqrt(1.+energy);
00309    Energy = sqrt(1. + 2.* ak->eta * (y - 1.)) - 1.;
00310    denergy = (1. + 2.*ak->ePa2*x + ((ak->ePa1 + ak->ePa2) * ak->ePa2 * x*x))/pow(1. + (ak->ePa1 + ak->ePa2) * x ,2.);
00311    dEnergy = - v * ak->eta * denergy /((1.+Energy) * y);
00312    return(dEnergy);
00313 }
00314 
00315 
00316 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00317 static REAL8 dEp6(REAL8 v, expnCoeffs *ak) 
00318 { /* </lalVerbatim>  */
00319    REAL8 energy, denergy, Energy, dEnergy, x, y;
00320    x = v*v;
00321    energy = ep6(v, ak);
00322    y = sqrt(1.+energy);
00323    Energy = sqrt(1. + 2.* ak->eta * (y - 1.)) - 1.;
00324    denergy = (1. + 2.*(ak->ePa2+ak->ePa3)*x + (ak->ePa1*ak->ePa2 
00325            + ak->ePa2*ak->ePa2 + 2.* ak->ePa2*ak->ePa3 
00326            + ak->ePa3*ak->ePa3) * x*x)
00327            /pow(1. + (ak->ePa1 + ak->ePa2 + ak->ePa3) * x 
00328            + ak->ePa1*ak->ePa3*x*x,2.);
00329    dEnergy = - v * ak->eta * denergy /((1.+Energy) * y);
00330    return(dEnergy);
00331 }
00332 
00333 
00334 
00335 #if 0 /* NOT USED */
00336 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00337 static REAL8 Fp0(REAL8 v, expnCoeffs *ak) 
00338 { /* </lalVerbatim>  */
00339    REAL8 flux,v2,v4,v8,v10;
00340    v2 = v*v;
00341    v4 = v2*v2;
00342    v8 = v4*v4;
00343    v10 = v8*v2;
00344    flux = ak->fPaN * v10;
00345    return (flux);
00346 }
00347 #endif
00348 
00349 #if 0 /* NOT USED */
00350 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00351 static REAL8 Fp1(REAL8 v, expnCoeffs *ak) 
00352 { /* </lalVerbatim>  */
00353    REAL8 flux,v2,v4,v8,v10;
00354    v2 = v*v;
00355    v4 = v2*v2;
00356    v8 = v4*v4;
00357    v10 = v8*v2;
00358    flux = ak->fPaN * v10/ ((1.+ak->fPa1*v) * (1.-v/ak->vpoleP4));
00359    return (flux);
00360 }
00361 #endif
00362 
00363 #if 0 /* NOT USED */
00364 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00365 static REAL8 Fp2(REAL8 v, expnCoeffs *ak) 
00366 { /* </lalVerbatim>  */
00367    REAL8 flux,v2,v4,v8,v10;
00368    v2 = v*v;
00369    v4 = v2*v2;
00370    v8 = v4*v4;
00371    v10 = v8*v2;
00372    flux = ak->fPaN * v10/ ((1.+ak->fPa1*v / (1.+ak->fPa2*v)) * (1.-v/ak->vpoleP4));
00373    return (flux);
00374 }
00375 #endif
00376 
00377 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00378 static REAL8 Fp3(REAL8 v, expnCoeffs *ak) 
00379 { /* </lalVerbatim>  */
00380    REAL8 flux,v2,v4,v8,v10;
00381    v2 = v*v;
00382    v4 = v2*v2;
00383    v8 = v4*v4;
00384    v10 = v8*v2;
00385    flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v))) 
00386         * (1.-v/ak->vpoleP4));
00387    return (flux);
00388 }
00389 
00390 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00391 static REAL8 Fp4(REAL8 v, expnCoeffs *ak) 
00392 { /* </lalVerbatim>  */
00393    REAL8 flux,v2,v4,v8,v10;
00394    v2 = v*v;
00395    v4 = v2*v2;
00396    v8 = v4*v4;
00397    v10 = v8*v2;
00398    flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v 
00399         / (1.+ak->fPa4*v)))) * (1.-v/ak->vpoleP4));
00400    return (flux);
00401 }
00402 
00403 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00404 static REAL8 Fp5(REAL8 v, expnCoeffs *ak) 
00405 { /* </lalVerbatim>  */
00406    REAL8 flux,v2,v4,v8,v10;
00407    v2 = v*v;
00408    v4 = v2*v2;
00409    v8 = v4*v4;
00410    v10 = v8*v2;
00411    flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v 
00412         / (1.+ak->fPa4*v / (1.+ak->fPa5*v))))) * (1.-v/ak->vpoleP4));
00413    return (flux);
00414 }
00415 
00416 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00417 static REAL8 Fp6(REAL8 v, expnCoeffs *ak) 
00418 { /* </lalVerbatim>  */
00419    REAL8 flux,v2,v4,v6,v8,v10;
00420    v2 = v*v;
00421    v4 = v2*v2;
00422    v6 = v4*v2;
00423    v8 = v4*v4;
00424    v10 = v8*v2;
00425    flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v 
00426         / (1.+ak->fPa4*v / (1.+ak->fPa5*v / (1.+ak->fPa6*v)))))) 
00427         * (1.-v/ak->vpoleP6));
00428    /* */
00429    flux *= (1.+  log(v/ak->vlsoP4) * ak->FTl6*v6) ;
00430    return (flux);
00431 }
00432 
00433 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00434 static REAL8 Fp7(REAL8 v, expnCoeffs *ak) 
00435 { /* </lalVerbatim>  */
00436    REAL8 flux,v2,v4,v6,v8,v10;
00437    v2 = v*v;
00438    v4 = v2*v2;
00439    v6 = v4*v2;
00440    v8 = v4*v4;
00441    v10 = v8*v2;
00442    flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v 
00443         / (1.+ak->fPa4*v / (1.+ak->fPa5*v / (1.+ak->fPa6*v / (1.+ak->fPa7*v))))))) 
00444         * (1.-v/ak->vpoleP6));
00445    flux *= (1.+  log(v/ak->vlsoP4) * ak->FTl6*v6) ;
00446    return (flux);
00447 }
00448 
00449 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00450 static REAL8 Fp8(REAL8 v, expnCoeffs *ak)
00451 { /* </lalVerbatim>  */
00452    REAL8 flux,v2,v4,v6,v8,v10, l6, l8;
00453    v2 = v*v;
00454    v4 = v2*v2;
00455    v6 = v4*v2;
00456    v8 = v4*v4;
00457    v10 = v8*v2;
00458    l6 = ak->FTl6;
00459    l8 = ak->FTl8 - ak->FTa2*ak->FTl6;
00460    flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v
00461         / (1.+ak->fPa4*v / (1.+ak->fPa5*v / (1.+ak->fPa6*v / (1.+ak->fPa7*v 
00462         / (1.+ak->fPa8*v))))))))
00463         * (1.-v/ak->vpoleP6));
00464    flux *= (1.+  log(v/ak->vlsoP4) * (l6*v6 + l8*v8) ) ;
00465    return (flux);
00466 }
00467 
00468 /*  <lalVerbatim file="LALInspiralChooseModelCP"> */
00469 void 
00470 LALInspiralChooseModel(
00471    LALStatus        *status,
00472    expnFunc         *f,
00473    expnCoeffs       *ak,
00474    InspiralTemplate *params
00475    )
00476 { /* </lalVerbatim>  */
00477 
00478    REAL8 vn, vlso;
00479    TofVIn in1;
00480    REAL8 tofv;
00481    void *in2;
00482 
00483    INITSTATUS (status, "LALInspiralChooseModel", LALINSPIRALCHOOSEMODELC);
00484    ATTATCHSTATUSPTR(status);
00485 
00486    ASSERT (f,  status, LALINSPIRALH_ENULL, LALINSPIRALH_MSGENULL);
00487    ASSERT (ak,  status, LALINSPIRALH_ENULL, LALINSPIRALH_MSGENULL);
00488    ASSERT (params,  status, LALINSPIRALH_ENULL, LALINSPIRALH_MSGENULL);
00489    ASSERT (params->order != oneHalfPN,status,LALINSPIRALH_ENULL,LALINSPIRALH_MSGENULL);
00490    ASSERT((INT4)params->order >= 0, status, LALINSPIRALH_ESIZE, LALINSPIRALH_MSGESIZE);
00491    ASSERT((INT4)params->order <= 8, status, LALINSPIRALH_ESIZE, LALINSPIRALH_MSGESIZE);
00492 
00493    vlso = 0;
00494 
00495    switch (params->order) 
00496    {
00497       case newtonian:
00498       switch (params->approximant) 
00499       {
00500          case AmpCorPPN:
00501          case Eccentricity:
00502          case TaylorT1:
00503          case TaylorT2:
00504          case TaylorT3:
00505          case TaylorF1:
00506          case TaylorF2:
00507          case SpinTaylorT3:
00508          case SpinTaylor:
00509             ak->vn = ak->vlso = vlso = ak->vlsoT0;
00510             f->dEnergy = dEt0;
00511             f->flux = Ft0;
00512             f->phasing2 = &LALInspiralPhasing2_0PN;
00513             f->timing2 = &LALInspiralTiming2_0PN;
00514             f->phasing3 = &LALInspiralPhasing3_0PN;
00515             f->frequency3 = &LALInspiralFrequency3_0PN;
00516             break;
00517          case PadeT1:
00518          case PadeF1:
00519          case EOB:
00520          case EOBNR:
00521             ABORT(status, LALINSPIRALH_ECHOICE, LALINSPIRALH_MSGECHOICE);
00522             break;
00523          default:
00524             break;
00525       }
00526       break;
00527       case oneHalfPN:
00528         ABORT(status, LALINSPIRALH_ECHOICE, "OneHalfPN is not valid");
00529         break;
00530       case onePN:
00531       switch (params->approximant) 
00532       {
00533          case Eccentricity:
00534             ABORT(status, LALINSPIRALH_EORDERMISSING, LALINSPIRALH_MSGEORDERMISSING);
00535             break;
00536          case AmpCorPPN:
00537          case TaylorT1:
00538          case TaylorT2:
00539          case TaylorT3:
00540          case TaylorF1:
00541          case TaylorF2:
00542          case SpinTaylorT3: 
00543          case SpinTaylor:
00544 
00545             ak->vn = ak->vlso = vlso = ak->vlsoT2;
00546             f->dEnergy = dEt2;
00547             f->flux = Ft2;
00548             f->phasing2 = &LALInspiralPhasing2_2PN;
00549             f->timing2 = &LALInspiralTiming2_2PN;
00550             f->phasing3 = &LALInspiralPhasing3_2PN;
00551             f->frequency3 = &LALInspiralFrequency3_2PN;
00552             break;
00553          case PadeT1:
00554          case PadeF1:
00555          case EOB:
00556          case EOBNR:
00557             ABORT(status, LALINSPIRALH_ECHOICE, LALINSPIRALH_MSGECHOICE);
00558             break;
00559          default:
00560             break;
00561       }
00562       break;
00563       case onePointFivePN:
00564       switch (params->approximant) 
00565       {
00566          case Eccentricity:
00567             ABORT(status, LALINSPIRALH_EORDERMISSING, LALINSPIRALH_MSGEORDERMISSING);
00568             break;
00569          case AmpCorPPN:
00570          case TaylorT1:
00571          case TaylorT2:
00572          case TaylorT3:
00573          case TaylorF1:
00574          case TaylorF2:
00575          case SpinTaylorT3: 
00576          case SpinTaylor:
00577             ak->vn = ak->vlso = vlso = ak->vlsoT2;
00578             f->dEnergy = dEt2;
00579             f->flux = Ft3;
00580             f->phasing3 = &LALInspiralPhasing3_3PN;
00581             f->frequency3 = &LALInspiralFrequency3_3PN;
00582             f->phasing2 = &LALInspiralPhasing2_3PN;
00583             f->timing2 = &LALInspiralTiming2_3PN;
00584             break;
00585          case PadeT1:
00586             ak->vn = ak->vlso = vlso = ak->vlsoP0;
00587             f->dEnergy = dEp2;
00588             f->flux = Fp3;
00589             break;
00590          case PadeF1:
00591          case EOB:
00592          case EOBNR:
00593             ABORT(status, LALINSPIRALH_ECHOICE, LALINSPIRALH_MSGECHOICE);
00594             break;
00595          default:
00596             break;
00597       }
00598       break;
00599       case twoPN:
00600       switch (params->approximant) 
00601       {
00602          case Eccentricity:
00603             ABORT(status, LALINSPIRALH_EORDERMISSING, LALINSPIRALH_MSGEORDERMISSING);
00604             break;
00605          case AmpCorPPN:
00606          case TaylorT1:
00607          case TaylorT2:
00608          case TaylorT3:
00609          case TaylorF1:
00610          case TaylorF2:
00611          case SpinTaylorT3:
00612          case SpinTaylor:
00613 /* 
00614    The value vlsoT4 is too large and doesn't work sometimes;
00615    so we use vlsoT2.
00616 */
00617             ak->vn = ak->vlso = vlso = ak->vlsoT2;
00618             f->dEnergy = dEt4;
00619             f->flux = Ft4;
00620             f->phasing2 = &LALInspiralPhasing2_4PN;
00621             f->timing2 = &LALInspiralTiming2_4PN;
00622             f->phasing3 = &LALInspiralPhasing3_4PN;
00623             f->frequency3 = &LALInspiralFrequency3_4PN;
00624             break;
00625          case PadeT1:
00626          case EOB:
00627          case EOBNR:
00628             ak->vn = ak->vlso = vlso = ak->vlsoP4;
00629             f->dEnergy = dEp4;
00630             f->flux = Fp4;
00631             break;
00632          case PadeF1:
00633             ABORT(status, LALINSPIRALH_ECHOICE, LALINSPIRALH_MSGECHOICE);
00634             break;
00635          default:
00636             break;
00637       }
00638       break;
00639       case twoPointFivePN:
00640       switch (params->approximant) 
00641       {
00642          case Eccentricity:
00643             ABORT(status, LALINSPIRALH_EORDERMISSING, LALINSPIRALH_MSGEORDERMISSING);
00644             break;
00645          case AmpCorPPN:
00646          case TaylorT1:
00647          case TaylorT2:
00648          case TaylorT3:
00649          case TaylorF1:
00650          case TaylorF2:
00651          case SpinTaylorT3:
00652          case SpinTaylor:
00653 /* 
00654    The value vlsoT4 is too large and doesn't work with 2.5 PN
00655    Taylor approximant; so we use vlsoT2.
00656 */
00657             ak->vn = ak->vlso = vlso = ak->vlsoT2;
00658             f->dEnergy = dEt4;
00659             f->flux = Ft5;
00660             f->phasing2 = &LALInspiralPhasing2_5PN;
00661             f->timing2 = &LALInspiralTiming2_5PN;
00662             f->phasing3 = &LALInspiralPhasing3_5PN;
00663             f->frequency3 = &LALInspiralFrequency3_5PN;
00664             break;
00665          case PadeT1:
00666          case EOB:
00667          case EOBNR:
00668             ak->vn = ak->vlso = vlso = ak->vlsoP4;
00669             f->dEnergy = dEp4;
00670             f->flux = Fp5;
00671             break;
00672          case PadeF1:
00673             ABORT(status, LALINSPIRALH_ECHOICE, LALINSPIRALH_MSGECHOICE);
00674             break;
00675          default:
00676             /* FIXME: TODO: DO SOMETHING HERE!!!! */
00677             break;
00678       }
00679       break;
00680       case threePN:
00681       switch (params->approximant) 
00682       {
00683          case Eccentricity:
00684             ABORT(status, LALINSPIRALH_EORDERMISSING, LALINSPIRALH_MSGEORDERMISSING);
00685             break;
00686          case AmpCorPPN:
00687          case TaylorT1:
00688          case TaylorT2:
00689          case TaylorT3:
00690          case TaylorF1:
00691          case TaylorF2:
00692          case SpinTaylorT3:
00693       case SpinTaylor:
00694 /* 
00695    vlsoT6 is as yet undetermined and vlsoT4 is too large in 
00696    certain cases (TaylorT2 crashes for (1.4,10)); using vlsoT2;
00697 */
00698             ak->vn = ak->vlso = vlso = ak->vlsoT2;
00699             f->dEnergy = dEt6;
00700             f->flux = Ft6;
00701             f->phasing2 = &LALInspiralPhasing2_6PN;
00702             f->timing2 = &LALInspiralTiming2_6PN;
00703             f->phasing3 = &LALInspiralPhasing3_6PN;
00704             f->frequency3 = &LALInspiralFrequency3_6PN;
00705             break;
00706          case PadeT1:
00707          case EOB:
00708          case EOBNR:
00709             ak->vn = ak->vlso = vlso = ak->vlsoP6;
00710             f->dEnergy = dEp6;
00711             f->flux = Fp6;
00712             break;
00713          case PadeF1:
00714             ABORT(status, LALINSPIRALH_ECHOICE, LALINSPIRALH_MSGECHOICE);
00715             break;
00716          default:
00717             /* FIXME: TODO: DO SOMETHING HERE!!!! */
00718             break;
00719       }
00720       break;
00721       case threePointFivePN:
00722       switch (params->approximant) 
00723       {
00724          case Eccentricity:
00725             ABORT(status, LALINSPIRALH_EORDERMISSING, LALINSPIRALH_MSGEORDERMISSING);
00726             break;
00727          case AmpCorPPN:
00728          case TaylorT1:
00729          case TaylorT2:
00730          case TaylorT3:
00731          case TaylorF1:
00732          case TaylorF2:
00733          case SpinTaylorT3:
00734          case SpinTaylor:
00735             ak->vn = ak->vlso = vlso = ak->vlsoT2;
00736             f->dEnergy = dEt6;
00737             f->flux = Ft7;
00738             f->phasing2 = &LALInspiralPhasing2_7PN;
00739             f->timing2 = &LALInspiralTiming2_7PN;
00740             f->phasing3 = &LALInspiralPhasing3_7PN;
00741             f->frequency3 = &LALInspiralFrequency3_7PN;
00742             break;
00743          case PadeT1:
00744          case EOB:
00745          case EOBNR:
00746             ak->vn = ak->vlso = vlso = ak->vlsoP6;
00747             f->dEnergy = dEp6;
00748             f->flux = Fp7;
00749             break;
00750          case PadeF1:
00751             ABORT(status, LALINSPIRALH_ECHOICE, LALINSPIRALH_MSGECHOICE);
00752             break;
00753          default:
00754             break;
00755       }
00756       break;
00757       case pseudoFourPN:
00758       switch (params->approximant)
00759       {
00760          case Eccentricity:
00761             ABORT(status, LALINSPIRALH_EORDERMISSING, LALINSPIRALH_MSGEORDERMISSING);
00762             break;
00763          case EOB:
00764          case EOBNR:
00765             ak->vn = ak->vlso = vlso = ak->vlsoP6;
00766             f->dEnergy = dEp6;
00767             f->flux = Fp8;
00768             break;
00769          case AmpCorPPN:
00770          case TaylorT1:
00771          case TaylorT2:
00772          case TaylorT3:
00773          case TaylorF1:
00774          case TaylorF2:
00775          case SpinTaylorT3:
00776          case SpinTaylor:
00777          case PadeT1:
00778          case PadeF1:
00779             ABORT(status, LALINSPIRALH_ECHOICE, LALINSPIRALH_MSGECHOICE);
00780             break;
00781          default:
00782             break;
00783       }
00784       default:
00785          break;
00786    }
00787 
00788 
00789    switch (params->approximant){
00790    case AmpCorPPN:
00791    case TaylorT1:
00792    case TaylorT2:
00793    case TaylorT3:
00794    case TaylorF1:
00795    case EOB:
00796    case EOBNR:
00797    case PadeT1:
00798    case PadeF1:
00799    case TaylorF2:
00800    case SpinTaylorT3:
00801    case SpinTaylor:
00802      ak->flso = pow(ak->vlso,3.)/(LAL_PI * ak->totalmass);
00803      
00804      if (ak->fn) {
00805        vn = pow(LAL_PI * ak->totalmass * ak->fn, oneby3);
00806        ak->vn = (vn < vlso) ? vn :  vlso;
00807      } 
00808      
00809      in1.t=0.0;
00810      in1.v0=ak->v0;
00811      in1.t0=ak->t0;
00812      in1.vlso=ak->vlso;
00813      in1.totalmass = ak->totalmass;
00814      in1.dEnergy = f->dEnergy;
00815      in1.flux = f->flux;
00816      in1.coeffs = ak;
00817      
00818      in2 = (void *) &in1;      
00819      
00820      LALInspiralTofV(status->statusPtr, &tofv, ak->vn, in2);
00821      CHECKSTATUSPTR(status);
00822      
00823      ak->tn = -tofv - ak->samplinginterval;
00824      params->fCutoff = ak->fn = pow(ak->vn, 3.)/(LAL_PI * ak->totalmass);
00825      /*
00826        for (v=0; v<ak->vn; v+=0.001) 
00827        {
00828        FtN = Ft0(v,ak);
00829        printf("%e %e %e %e %e %e %e\n", v,
00830        Ft2(v,ak)/FtN, Ft3(v,ak)/FtN, Ft4(v,ak)/FtN, Ft5(v,ak)/FtN,
00831        Ft6(v,ak)/FtN, Ft7(v,ak)/FtN);
00832        }
00833        exit(0); 
00834      */
00835      break;
00836  case BCV:
00837  case BCVSpin:
00838    ak->tn = 100.;
00839    break;
00840  case Eccentricity:
00841    /* The eccentric waveforms contain harmonic, so similarly to amplitude corrected waveforms
00842     * the duration are longer than non eccentric waveform and starts at 2fl/3*/
00843    ak->tn = 5.*ak->totalmass/256./ak->eta/pow(LAL_PI*ak->totalmass*params->fLower/3.*2.,8./3.);
00844    ak->flso = pow(ak->vlso,3.)/(LAL_PI * ak->totalmass);   
00845    break;
00846  default:
00847    ABORT( status, 9999, "Unknown case in switch." );
00848 }
00849 
00850    DETATCHSTATUSPTR(status);
00851    RETURN