329     JParser<> zap(
"Example program for sound ray tracing.");
 
  338   catch(
const exception &error) {
 
  339     FATAL(error.what() << endl);
 
  345   const JBellhop bellhop(V, precision);
 
  360       cout << 
"> " << flush;
 
  361       cin  >> x0 >> z0 >> x1 >> z1;
 
  366         const double     D      = hypot(x1 - x0, z1 - z0);
 
  367         const sin_t      s0     = bellhop(x0, z0, x1, z1); 
 
  368         const JBellhop_t 
result = bellhop(s0, x0, z0, x1, z1);
 
  370         cout << 
"s  " << 
SCIENTIFIC(12,5) << (x1 - x0) / D                    << endl;
 
  371         cout << 
"s0 " << 
SCIENTIFIC(12,5) << s0.value << 
' ' << s0.option     << endl;
 
  373         cout << 
"x' " << 
FIXED     (12,5) << 
result.x             << 
" [m]"   << endl;
 
  374         cout << 
"z' " << 
FIXED     (12,5) << 
result.z             << 
" [m]"   << endl;
 
  375         cout << 
"D  " << 
FIXED     (12,5) << D                    << 
" [m]"   << endl;
 
  376         cout << 
"D' " << 
FIXED     (12,5) << 
result.d             << 
" [m]"   << endl;
 
  377         cout << 
"t  " << 
FIXED     (12,5) << V.
getTime(D, z0, z1) << 
" [s]"   << endl;
 
  378         cout << 
"t' " << 
FIXED     (12,5) << 
result.t             << 
" [s]"   << endl;
 
  381         const double v0 = V(z0);
 
  382         const double v1 = V(z1);
 
  383         const double b  = (v1 - v0) / (z1 - z0);
 
  384         const double c  =  v1 / v0;
 
  385         const double u  = (v0 + v1) / v1;
 
  386         const double v  = (v0 - v1) / v1;
 
  387         const double st = s0.value;
 
  389         cout << 
"v0 " << 
FIXED     (12,5) << v0                   << 
" [m/s]" << endl;
 
  390         cout << 
"v1 " << 
FIXED     (12,5) << v1                   << 
" [m/s]" << endl;
 
  396           dx = (sqrt(2.0 + st) * sqrt(0.0 - st) - sqrt(1.0 + c + c * st) * sqrt(1.0 - c - c * st)) * v0 / (1.0 + st) / b;
 
  400           dx = (sqrt(1.0 + st) * sqrt(1.0 - st) - sqrt(1.0   +   c * st) * sqrt(1.0   -   c * st)) * v0 / (   st   ) / b;
 
  403         cout << 
"x' " << 
FIXED     (12,5) << dx                   << 
" [m]"   << endl;
 
  405         const double x =  s0.getc();
 
  406         const double y = (s0.option ? c * sqrt(
u + st) * sqrt(
v - st) : sqrt(1.0 + c * st) * sqrt(1.0 - c * st));
 
  408         cout << 
"t' " << 
FIXED     (12,5) << (atanh(
x) - atanh(
y)) / b        << endl;
 
  410       catch(
const exception& error) {
 
  411         cerr << error.what() << endl;
 
  417     const double x0 =    0.0;
 
  418     const double z0 =    0.0;
 
  425     TH2D h2(
"h2", NULL, 50, 1.0, 3.5, 50, -1.0, 3.0);
 
  427     for (
int ix = 1; ix <= h2.GetXaxis()->GetNbins(); ++ix) {
 
  428       for (
int iy = 1; iy <= h2.GetYaxis()->GetNbins(); ++iy) {
 
  430         const double x1 = 
pow(10.0, h2.GetXaxis()->GetBinCenter(ix));
 
  431         const double z1 = 
pow(10.0, h2.GetYaxis()->GetBinCenter(iy));
 
  438           const double     D      = hypot(x1 - x0, z1 - z0);
 
  439           const sin_t      s0     = bellhop(x0, z0, x1, z1); 
 
  440           const JBellhop_t 
result = bellhop(s0, x0, z0, x1, z1);
 
  445           h2.SetBinContent(ix, iy, (
result.t - V.
getTime(D, z0, z1)) * 1.0e6);  
 
  447         catch(
const exception& error) {
 
  448           ERROR(error.what() << endl);
 
#define DEBUG(A)
Message macros.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
Utility class to parse command line options.
 
static const JSoundVelocity getSoundVelocity(1541.0, -17.0e-3, -2000.0)
Function object for velocity of sound.
 
T pow(const T &x, const double y)
Power .
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Auxiliary data structure for floating point format specification.
 
Implementation for depth dependend velocity of sound.
 
JSoundVelocity & set(const double z0)
Set depth.
 
virtual double getTime(const double D_m, const double z1, const double z2) const override
Get propagation time of sound.
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
Auxiliary data structure for floating point format specification.