11#ifndef __P_inverse_phase_h
12#define __P_inverse_phase_h
23 extern unsigned inverse_phase_calls;
25 extern unsigned inverse_phase_iterations;
47 MJD inverse_phase (
const P& predictor,
const Phase& p, MJD guess)
53 double precision = std::max (P::precision, MJD::precision);
55 std::cerr <<
"inverse_phase: precision=" << precision*1e6
56 <<
" us" << std::endl;
58 inverse_phase_calls ++;
60 for (gi=0; gi<10000; gi++) {
62 inverse_phase_iterations ++;
64 dt = (predictor.phase(guess) - p) / predictor.frequency(guess);
66 if (!::true_math::finite(dt.in_seconds()))
67 throw Error (InvalidState,
"inverse_phase",
68 "dt not finite; freq=%lf", predictor.frequency(guess));
73 std::cerr <<
"inverse_phase: guess=" << guess.printdays(20)
74 <<
" dt=" << dt.in_seconds()*1e6 <<
" us" << std::endl;
76 if (fabs (dt.in_seconds()) < precision)
80 std::cerr <<
"inverse_phase maximum iterations exceeded - error="
81 << dt.in_seconds() * 1e6 <<
"us" << std::endl;
110 MJD inverse_phase (
const P& predictor,
const Phase& p)
112 MJD guess = predictor.get_reftime()
113 + (p - predictor.get_refphase()) / predictor.get_reffrequency();
116 std::cerr <<
"inverse_phase: reftime=" << predictor.get_reftime()
117 <<
" refphase=" << predictor.get_refphase()
118 <<
" reffreq=" << predictor.get_reffrequency()
119 <<
" first guess = " << guess << std::endl;
121 return inverse_phase (predictor, p, guess);
static bool verbose
Verbosity flag.
Definition Predictor.h:47