a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
Metastability.cpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2016 HEPfit Collaboration
3 *
4 *
5 * For the licensing terms see doc/COPYING.
6 */
7
8#include "Metastability.h"
9#include "SUSY.h"
10#include <limits>
11#include <math.h>
12#include <gsl/gsl_min.h>
13#include <gsl/gsl_roots.h>
14#include <gsl/gsl_sf_gamma.h>
15#include <gsl/gsl_sf_bessel.h>
16#include <boost/bind/bind.hpp>
17using namespace boost::placeholders;
18
20 ThObservable(SM_i),
21 potentialcoefficientspar(35,0.),
22 mySUSY(static_cast<const SUSY&> (SM_i))
23{
25}
26
28{
30}
31
33{
34
35 /* 1. Definition of all potential minima */
36
37 // define scalar potential
38 gslpp::vector<double> potentialcoefficients=mySUSYScalarPotential->coefficients();
39
40 double Vmin0=mySUSYScalarPotential->potential(potentialcoefficients, 0.0, 0.0, 0.0);
41
42// std::cout << "Vmin0 = " << Vmin0 << std::endl;
43
44 gslpp::vector<double> dV0=mySUSYScalarPotential->potentialderivative(potentialcoefficients, 0.0, 0.0, 0.0);
45
46// std::cout << "dV0 = " << dV0 << std::endl;
47
48 // calculate all minima (Ayan)
49 // calculate V and dV at origin (V0 and dV0)
50 // check whether there is a charge-breaking minimum very close to the origin
51// double S_0=0.0;
52 gslpp::vector<double> S(10,0.);
53 //define toy minima (remove this as soon as the true minimum finder is available)
54 gslpp::vector<double> minimavector(3,0.);
55 minimavector(0)=-807192.888;
56 minimavector(1)=807260.056;
57 minimavector(2)=-803413.309;
58// minimavector(3)=4.0;
59// minimavector(4)=5.0;
60// minimavector(5)=6.0;
61// minimavector(6)=7.0;
62// minimavector(7)=8.0;
63// minimavector(8)=9.0;
64 //if mod3 length of minima is not zero, throw error
65 int lengthofminima=3;
66 int NofMinima=lengthofminima/3;
67
68 gslpp::vector<double> deeperminima(lengthofminima+NofMinima,0.), dV(3,0.);
69// gslpp::vector<double> deeperminima(3,0.), dV(3,0.);
70 int i,n=0;
71 double x1, x2, x3, Vmin;
72
73 for(i=0;i<NofMinima;i++)
74 {
75 x1=minimavector(3*i);
76 x2=minimavector(3*i+1);
77 x3=minimavector(3*i+2);
78 Vmin=mySUSYScalarPotential->potential(potentialcoefficients, x1, x2, x3);
79 std::cout << "Vmin = " << Vmin << std::endl;
80 if(Vmin>=Vmin0)
81 {
82 continue;
83 }
84 else
85 {
86 deeperminima(4*n)=minimavector(3*i);
87 deeperminima(4*n+1)=minimavector(3*i+1);
88 deeperminima(4*n+2)=minimavector(3*i+2);
89 deeperminima(4*n+3)=Vmin;
90 n++;
91 }
92 }
93
94 std::cout << "2." << std::endl;
95
96 /* 2. Calculation of the tunneling rate for each of the minima */
97
98// gslpp::vector<double> path;
99 //n is now the number of deeper minima
100 for(i=0;i<n;i++)
101 {
102 x1=deeperminima(4*i);
103 x2=deeperminima(4*i+1);
104 x3=deeperminima(4*i+2);
105 Vmin=deeperminima(4*i+3);
106 dV=mySUSYScalarPotential->potentialderivative(potentialcoefficients, x1, x2, x3);
107// path=splinepath(x1,x2,x3,Vmin0,dV0,Vmin,dV);
108 //the following function is supposed to find the cubic spline of the potential along a straight line from one to the other minimum
109 int steps=100;
110 gslpp::vector<double> linearpath(steps,0.);
111 gslpp::vector<double> V(steps,0.);
112// gslpp::vector<double> spath(steps,0.);
113 //maybe the following will not work in extreme cases
114 double distance=x1*x1+x2*x2+x3*x3;
115 double stepsize=distance/double(steps-1);
116 int k;
117 for(k=0;k<steps;k++)
118 {
119 linearpath(k)=stepsize*k;
120 V(k)=mySUSYScalarPotential->potential(potentialcoefficients, x1*linearpath(k), x2*linearpath(k), x3*linearpath(k));
121// gsl_interp_accel *acc
122// = gsl_interp_accel_alloc ();
123// gsl_spline *spline
124// = gsl_spline_alloc (gsl_interp_cspline, 10);
125//
126// gsl_spline_init (spline, x, y, 10);
127//
128// for (xi = x[0]; xi < x[9]; xi += 0.01)
129// {
130// yi = gsl_spline_eval (spline, xi, acc);
131// printf ("%g %g\n", xi, yi);
132// }
133// gsl_spline_free (spline);
134// gsl_interp_accel_free (acc);
135
136 }
137
138
139 /* 2.1 Calculation of the tunneling rate along the undeformed (straight) path */
140
141 std::cout << "2.1.1" << std::endl;
142
143// double xmin = 0.001;
144// double xmax = std::numeric_limits<double>::infinity();
145
146 /* 2.1.1 Finding the edge of the tunneling barrier */
147
148 double min = 1.0e-12;
149 double pos1=0.0; //relative position of the metastable minimum
150 double pos2=1.0; //relative position of the stable minimum
151 double pos = 0.5; //relative position between metastable and stable minimum (first guess)
152 while(fabs(pos1-pos2) > min)
153 {
154 double Vpos = mySUSYScalarPotential->potential(potentialcoefficients, pos*x1, pos*x2, pos*x3);
155 if(Vpos > 0.0) //maybe this should be ">"
156 {
157 pos1 = pos;
158 }
159 else
160 {
161 pos2 = pos;
162 }
163 pos = 0.5*(pos1+pos2);
164 }
165 //pos is now the edge of the barrier
166
167 /* 2.1.2 Finding the typical scale of the barrier (using gsl 1D minimization) */
168
169 std::cout << "2.1.2" << std::endl;
170
171 int status;
172 int iter = 0, max_iter = 100;
173 const gsl_min_fminimizer_type *T;
174 gsl_min_fminimizer *s;
175 double m=0.5*pos;
176 double a=0.0, b=pos;
177 std::cout << "pos =" << pos << std::endl;
178 potentialcoefficientspar=potentialcoefficients;
179 x1par=x1;
180 x2par=x2;
181 x3par=x3;
182 gsl_function F = convertToGslFunctionS(bind(&FindAction::invertedpotential, &(*this), _1));
183// F.function = -&invertedpotential; //pointer?
184 T = gsl_min_fminimizer_brent;
185 s = gsl_min_fminimizer_alloc(T);
186 gsl_min_fminimizer_set(s, &F, m, a, b);
187 do
188 {
189 iter++;
190 status = gsl_min_fminimizer_iterate(s);
191 m = gsl_min_fminimizer_x_minimum(s);
192 std::cout << "m =" << m << std::endl;
193 a = gsl_min_fminimizer_x_lower(s);
194 b = gsl_min_fminimizer_x_upper(s);
195 status = gsl_min_test_interval(a, b, 0.0, 1.0e-3);
196 } while(status == GSL_CONTINUE && iter<max_iter);
197 gsl_min_fminimizer_free(s);
198 double barriertop=m;
199 if(barriertop<=0.0 || barriertop>=pos)
200 {
201 throw std::runtime_error("Error in Metastability.cpp: Potential barrier top outside the barrier range!");
202 }
203 double barrierheight=mySUSYScalarPotential->potential(potentialcoefficients, barriertop*x1, barriertop*x2, barriertop*x3)-Vmin0;
204
205 if(barrierheight<=0.0)
206 {
207 throw std::runtime_error("Error in Metastability.cpp: No potential barrier!");
208 }
209 double rscale = barriertop/sqrt(6.0*barrierheight);
210
211 /* 2.1.3 Finding a phi solution for the tunneling using an overshooting/undershooting algorithm */
212
213 double x = -log(pos);
214// double xincrease = 5.0;
215
216 double rmin = 1.e-4*rscale;
217 double rmax = 1.e4*rscale;
218 double dr0 = rmin;
219 double drmin = 0.01*rmin;
220
221 double delta_phi = distance;
222 double delta_phi_cutoff = 1.e-2 * delta_phi;
223 double epsabs[2] = {fabs(delta_phi)*1.e-4 , fabs(delta_phi/rscale)*1.e-4};
224 double epsfrac[2] = {1.e-4 , 1.e-4};
225
226 double eps = distance*1.e-3;
227 gslpp::vector<double> inconds(3,0.);
228 do
229 {
230 double delta_phi0 = distance - exp(-x)*delta_phi;
231 double sdp = delta_phi0/distance; //scaled_delta_phi0
232
233 double dV_at_delta_phi0 = (mySUSYScalarPotential->potential(potentialcoefficients, (delta_phi0-2.0*eps)*x1/distance, (delta_phi0-2.0*eps)*x2/distance, (delta_phi0-2.0*eps)*x3/distance)
234 -8.0*mySUSYScalarPotential->potential(potentialcoefficients, (delta_phi0-eps)*x1/distance, (delta_phi0-eps)*x2/distance, (delta_phi0-eps)*x3/distance)
235 +8.0*mySUSYScalarPotential->potential(potentialcoefficients, (delta_phi0+eps)*x1/distance, (delta_phi0+eps)*x2/distance, (delta_phi0+eps)*x3/distance)
236 -mySUSYScalarPotential->potential(potentialcoefficients, (delta_phi0+2.0*eps)*x1/distance, (delta_phi0+2.0*eps)*x2/distance, (delta_phi0+2.0*eps)*x3/distance) ) / (12.0*eps);
237
238 double d2V_at_phi0 = (-mySUSYScalarPotential->potential(potentialcoefficients, (delta_phi0-2.0*eps)*x1/distance, (delta_phi0-2.0*eps)*x2/distance, (delta_phi0-2.0*eps)*x3/distance)
239 +16.0*mySUSYScalarPotential->potential(potentialcoefficients, (delta_phi0-eps)*x1/distance, (delta_phi0-eps)*x2/distance, (delta_phi0-eps)*x3/distance)
240 -30.0*mySUSYScalarPotential->potential(potentialcoefficients, sdp*x1, sdp*x2, sdp*x3)
241 +16.0*mySUSYScalarPotential->potential(potentialcoefficients, (delta_phi0+eps)*x1/distance, (delta_phi0+eps)*x2/distance, (delta_phi0+eps)*x3/distance)
242 -mySUSYScalarPotential->potential(potentialcoefficients, (delta_phi0+2.0*eps)*x1/distance, (delta_phi0+2.0*eps)*x2/distance, (delta_phi0+2.0*eps)*x3/distance) ) / (12.0*eps*eps);
243
244 inconds = InitialConditions(delta_phi0, rmin, delta_phi_cutoff, distance, dV_at_delta_phi0, d2V_at_phi0);
245 if(!std::isfinite(inconds(0)) || !std::isfinite(x))
246 {
247 break;
248 }
249
250 //r_y = rf, yf1, yf2, convergence=1(converged), 2(undershoot), 3(overshoot)
251 gslpp::vector<double> r_y(4,0.);
252 r_y = integrateProfile(inconds(0), inconds(1), inconds(2), dr0, epsfrac, epsabs, drmin, rmax, distance);
253//
254// # Check for overshoot, undershoot
255// if ctype == "converged":
256// break
257// elif ctype == "undershoot": # x is too low
258// xmin = x
259// x = x*xincrease if xmax == np.inf else .5*(xmin+xmax)
260// elif ctype == "overshoot": # x is too high
261// xmax = x
262// x = .5*(xmin+xmax)
263// # Check if we've reached xtol
264// if (xmax-xmin) < xtol:
265// break
266
267 }
268 while(true);
269
270 /* 2.1.4 Integrate the barrier to get the tunneling action */
271
272 /* 2.2 Calculation of the tunneling rate along the deformed path */
273
274 /* 2.2.1 Deforming the path */
275 /* 2.2.2 Calculating the tunneling rate */
276
277 }//loop over the minima
278
279
280
281 // deform path between origin and i (old path is a line, new path is p_i)
282 //define splines between origin and i
283 //take origin and i
284 //for i_spline < ?
285 //add one knot, calculate its V and dV
286 //split into parallel and orthogonal components
287 //solve parallel tunneling
288 //calculate N and minimize it wrt orthogonal directions
289 // calculate action integrating along p_i
290 int rlength = 10;
291 gslpp::vector<double> r(rlength,0.);
292 gslpp::vector<double> phi(rlength,0.);
293 gslpp::vector<double> dphi(rlength,0.);
294// double rlength = length of r;
295 double VphiMin_i = deformedV(phi(rlength));
296 //integrate.simps(integrand,r)
297 double integral = 0.0;
298 for(int j=1;j<rlength;j++)
299 {
300 integral += (r(j)-r(j-1))*(Simpsonintegrand(r(j-1),phi(j-1),dphi(j-1),VphiMin_i)
301 +4.0*Simpsonintegrand((r(j)+r(j-1))/2.0,(phi(j)+phi(j-1))/2.0,(dphi(j)+dphi(j-1))/2.0,VphiMin_i)
302 +Simpsonintegrand(r(j),phi(j),dphi(j),VphiMin_i))/(3.0*(double)rlength);
303 }
304
305// double volume = r(0)*r(0)*r(0)*r(0)*M_PI*M_PI/2.0;
306
307// S.assign(j, integral+volume*(deformedV(phi(0))-VphiMin_i));
308 // check whether action is larger than S_(i-1)
309
310 return 0.0;
311}
312
313double FindAction::Simpsonintegrand(double r, double phi, double dphi, double VphiMin_i)
314{
315 return (0.5*dphi*dphi + deformedV(phi)-VphiMin_i) * 2.0*M_PI*M_PI*r*r*r;
316}
317
318double FindAction::deformedV(double phi)
319{
320 return 0.0;
321}
340
341gslpp::vector<double> FindAction::InitialConditions(double delta_phi0, double rmin, double delta_phi_cutoff, double distance, double dV_at_delta_phi0, double d2V_at_phi0)
342{
343 double phi0 = distance + delta_phi0;
344 double dV = dV_at_delta_phi0;
345 double d2V = d2V_at_phi0;
346 gslpp::vector<double> exsol(2,0.);
347//switch this on! exsol=ExactSolution(rmin, phi0, dV, d2V);
348 double phi_r0=exsol(0);
349 double dphi_r0=exsol(1);
350
351 gslpp::vector<double> inc(3,0.);
352 inc(0)=rmin;
353 inc(1)=phi_r0;
354 inc(2)=dphi_r0;
355
356 if(fabs(phi_r0)<fabs(delta_phi_cutoff) || dphi_r0*delta_phi0>0)
357 {
358 double r = rmin;
359 double rlast=r;
360 while(std::isfinite(r))
361 {
362 rlast = r;
363 r *= 10;
364//switch this on! exsol=ExactSolution(r, phi0, dV, d2V);
365 if(fabs(exsol(0))>fabs(delta_phi_cutoff))
366 {
367 break;
368 }
369 }
370
371 rpar=r;
372 phi0par=phi0;
373 dVpar=dV;
374 d2Vpar=d2V;
375 delta_phi_cutoffpar=delta_phi_cutoff;
376
377 gsl_function F = convertToGslFunctionS(bind(&FindAction::func, &(*this), _1));
378 //gsl root finding algorithm
379 int status;
380 int iter = 0, max_iter = 100;
381 const gsl_root_fsolver_type *T;
382 gsl_root_fsolver *s;
383 double r2 = 0;
384 double x_lo = rlast, x_hi = r;
385 T = gsl_root_fsolver_brent;
386 s = gsl_root_fsolver_alloc (T);
387 gsl_root_fsolver_set (s, &F, x_lo, x_hi);
388 do
389 {
390 iter++;
391 status = gsl_root_fsolver_iterate (s);
392 r2 = gsl_root_fsolver_root (s);
393 x_lo = gsl_root_fsolver_x_lower (s);
394 x_hi = gsl_root_fsolver_x_upper (s);
395 status = gsl_root_test_interval (x_lo, x_hi,
396 0, 0.001);
397 }
398 while (status == GSL_CONTINUE && iter < max_iter);
399 gsl_root_fsolver_free (s);
400 //now r2 is the root
401 exsol = ExactSolution(r2, phi0, dV, d2V);
402 inc(1)=exsol(0);
403 inc(2)=exsol(1);
404 }
405
406 return inc;
407}
408
409//This function calculates the analytical solution for barriers with low height and curvature (?)
410gslpp::vector<double> FindAction::ExactSolution(double r, double phi0, double dV, double d2V)
411{
412 gslpp::vector<double> phi_dphi(2,0.);
413 double phi = 0.0;
414 double dphi = 0.0;
415
416 double curv = sqrt(fabs(d2V));
417 double curv_r = curv*r;
418 double nu = 1.0;
423 if(curv_r<1.e-2)
424 {
425 double s = (d2V>0) ? 1.0 : -1.0;
426 double add_to_phi;
427 for(int k=1;k<=4;k++)
428 {
429 add_to_phi = pow(0.5*curv_r,2.0*k-2.0) * pow(s,k) / (gsl_sf_gamma(k+1)*gsl_sf_gamma(k+1+nu));
430 phi += add_to_phi;
431 dphi += add_to_phi * (2.0*k);
432 }
433 phi *= 0.25 * gsl_sf_gamma(nu+1) * r*r * dV * s;
434 dphi *= 0.25 * gsl_sf_gamma(nu+1) * r * dV * s;
435 phi += phi0;
436 }
437 else if(d2V>0)
438 {
439 phi = (gsl_sf_gamma(nu+1)*pow(0.5*curv_r,-nu) *gsl_sf_bessel_In(int(nu),curv_r)-1.0) * dV/d2V;
440 dphi = -nu*(pow(0.5*curv_r,-nu) / r) * gsl_sf_bessel_In(int(nu), curv_r);
441 dphi += pow(0.5*curv_r,-nu) * 0.5*curv * (gsl_sf_bessel_In(int(nu)-1, curv_r)+gsl_sf_bessel_In(int(nu)+1, curv_r));
442 dphi *= gsl_sf_gamma(nu+1) * dV/d2V;
443 phi += phi0;
444 }
445 else
446 {
447 phi = (gsl_sf_gamma(nu+1)*pow(0.5*curv_r,-nu) * gsl_sf_bessel_Jn(int(nu), curv_r)-1.0) * dV/d2V;
448 dphi = -nu*(pow(0.5*curv_r,-nu) / r) * gsl_sf_bessel_Jn(int(nu), curv_r);
449 dphi += pow(0.5*curv_r,-nu) * 0.5*curv * (gsl_sf_bessel_Jn(int(nu)-1, curv_r)-gsl_sf_bessel_Jn(int(nu)+1, curv_r));
450 dphi *= gsl_sf_gamma(nu+1) * dV/d2V;
451 phi += phi0;
452 }
453 phi_dphi(0)=phi;
454 phi_dphi(1)=dphi;
455 return phi_dphi;
456}
457
458gslpp::vector<double> FindAction::integrateProfile(double r0, double y01, double y02, double dr0, double epsfrac[2], double epsabs[2], double drmin, double rmax, double distance)
459{
460 double dr = dr0;
462 gslpp::vector<double> dydr0(2,0.);
463 dydr0 = dY(y01, y02, r0);
466 rmax += r0;
467
468// int i=1;
469// int convergence_type = 0;
470
471 gslpp::vector<double> ret_values(4,0.);
472
473 do
474 {
475 gslpp::vector<double> r_y_drnext(4,0.);
476// r_y_drnext = rkqs(y01, y02, dydr0, r0, dr, epsfrac, epsabs);
477
482
483 double r1 = r_y_drnext(0);
484 double y11 = y01+r_y_drnext(1);
485 double y12 = y02+r_y_drnext(2);
486
487 gslpp::vector<double> dydr1 = dY(y11,y12,r1);
488
489 if (r1 > rmax)
490 {
491 throw std::runtime_error("r > rmax");
492 }
493 else if (dr < drmin)
494 {
495 throw std::runtime_error("dr < drmin");
496 }
497// else if ( fabs(y11 - distance) < 3.0*epsabs[0] && fabs(y12) < 3.0*epsabs[1] )
498// {
499// ret_values(0)=r1;
500// ret_values(1)=y11;
501// ret_values(2)=y12;
502// ret_values(3)=1; //converged
503// break;
504// }
505 else if ( y12*(y01-distance) > 0 || (y11-distance)*(y01-distance) < 0 )
506 {
507// double f=y0*(1-t)**3 + 3*y1*(1-t)*(1-t)*t + 3*y2*(1-t)*t*t + y1*t**3;
508//(self, y0, dy0, y1, dy1)= y0*mt**3 + 3*y1*mt*mt*t + 3*y2*mt*t*t + y3*t**3
509// ret_values(0)=r1;
510// ret_values(1)=y11;
511// ret_values(2)=y12;
512 ret_values(3)=2; //undershoot
513 break;
514
515 }
516// else if ( fabs(y11 - distance) < 3.0*epsabs && fabs(y12) < 3.0*epsabs )
517// {
518
519// }
520
521// elif( y1[1]*(y0[0]-self.phi_metaMin) > 0 or (y1[0]-self.phi_metaMin)*(y0[0]-self.phi_metaMin) < 0 ):
522// f = cubicInterpFunction(y0, dr*dydr0, y1, dr*dydr1)
523// if(y1[1]*(y0[0]-self.phi_metaMin) > 0):
524// # Extrapolate to where dphi(r) = 0
525// x = optimize.brentq(lambda x: f(x)[1], 0, 1 )
526// convergence_type = "undershoot"
527// else:
528// # Extrapolate to where phi(r) = phi_metaMin
529// x = optimize.brentq(lambda x: f(x)[0]-self.phi_metaMin, 0,1)
530// convergence_type = "overshoot"
531// r = r0 + dr*x
532// y = f(x)
533// break
534// # Advance the integration variables
535// r0,y0,dydr0 = r1,y1,dydr1
536// dr = drnext
537 }
538 while(true);
539// # Check convergence for a second time.
540// # The extrapolation in overshoot/undershoot might have gotten us within
541// # the acceptable error.
542// if (abs(y - np.array([self.phi_metaMin,0])) < 3*epsabs).all():
543// convergence_type = "converged"
544// return self._integrateProfile_rval(r, y, convergence_type)
545
546 return ret_values;
547}
548
549gslpp::vector<double> FindAction::dY(double y1, double y2, double r)
550{
551 gslpp::vector<double> values(2,0.);
552// double alpha=3.0; /*spatial dimensions*/
553 values(0)=y2;
554// values(1)=(mySUSYScalarPotential->potential(potentialcoefficients, (y1-2.0*eps)*x1/distance, (y1-2.0*eps)*x2/distance, (y1-2.0*eps)*x3/distance)
555// -8.0*mySUSYScalarPotential->potential(potentialcoefficients, (y1-eps)*x1/distance, (y1-eps)*x2/distance, (y1-eps)*x3/distance)
556// +8.0*mySUSYScalarPotential->potential(potentialcoefficients, (y1+eps)*x1/distance, (y1+eps)*x2/distance, (y1+eps)*x3/distance)
557// -mySUSYScalarPotential->potential(potentialcoefficients, (y1+2.0*eps)*x1/distance, (y1+2.0*eps)*x2/distance, (y1+2.0*eps)*x3/distance) ) / (12.0*eps)
558// -alpha*y2/r;
559 return values;
560}
561
562int dYfunc(double r, const double y[], double ODE[], void *flags)
563{
564 gslpp::vector<double> dYvalues(2,0.);
565// dYvalues=dY(y[0],y[1],r);
566 ODE[0]=dYvalues(0);
567 ODE[1]=dYvalues(1);
568 return 0;
569}
570
571int dYJac(double r, const double y[], double *dfdy, double dfdt[], void *order)
572{
573 return 0;
574}
575
576//gslpp::vector<double> FindAction::rkqs(double y01, double y02, gslpp::vector<double> dydr0, double r0, double dr, double epsfrac[2], double epsabs[2])
577//{
578// gslpp::vector<double> step_rkqs(4,0.);
579// double mu = 0;
580// gsl_odeiv2_system ODEsystem = { dYfunc, dYJac, 2, &mu };
582// const gsl_odeiv2_step_type * T = gsl_odeiv2_step_rkck;
583// gsl_odeiv2_evolve * e = gsl_odeiv2_evolve_alloc (2);
584// //CHANGE THIS! (for the moment take only the 0 element)
585// gsl_odeiv2_control * c = gsl_odeiv2_control_y_new (epsabs[0], epsfrac[0]);
586// gsl_odeiv2_step * s = gsl_odeiv2_step_alloc (T, 2);
587// double t = r0;
588// double t1 = r0+dr;
589// double y[2] = {y01, y02};
590// int status = gsl_odeiv2_evolve_apply(e, c, s, &ODEsystem, &r0, t1, &dr, y);
592// step_rkqs(0)=t1;
593// step_rkqs(1)=y[0];
594// step_rkqs(2)=y[1];
595// step_rkqs(3)=dr;
596// gsl_odeiv2_evolve_free (e);
597// gsl_odeiv2_control_free (c);
598// gsl_odeiv2_step_free (s);
599// return step_rkqs;
600
617
618//}
619
int dYJac(double r, const double y[], double *dfdy, double dfdt[], void *order)
int dYfunc(double r, const double y[], double ODE[], void *flags)
double Simpsonintegrand(double r, double phi, double dphi, double VphiMin_i)
double invertedpotential(double x)
Definition: Metastability.h:59
gslpp::vector< double > potentialcoefficientspar
Definition: Metastability.h:43
double phi0par
Definition: Metastability.h:42
gslpp::vector< double > ExactSolution(double r, double phi0, double dV, double d2V)
double computeThValue()
gslpp::vector< double > dY(double y1, double y2, double r)
gslpp::vector< double > InitialConditions(double delta_phi0, double rmin, double delta_phi_cutoff, double distance, double dV_at_delta_phi0, double d2V_at_phi0)
~FindAction()
FindAction destructor.
double x1par
Definition: Metastability.h:42
FindAction(const StandardModel &SM_i)
FindAction constructor.
gsl_function convertToGslFunctionS(const F &f)
Definition: Metastability.h:89
double deformedV(double phi)
double d2Vpar
Definition: Metastability.h:42
double x3par
Definition: Metastability.h:42
double x2par
Definition: Metastability.h:42
SUSYScalarPotential * mySUSYScalarPotential
Definition: Metastability.h:48
double func(double rpar)
Definition: Metastability.h:53
double delta_phi_cutoffpar
Definition: Metastability.h:42
double dVpar
Definition: Metastability.h:42
gslpp::vector< double > integrateProfile(double r0, double y01, double y02, double dr0, double epsfrac[2], double epsabs[2], double drmin, double rmax, double distance)
double rpar
Definition: Metastability.h:42
A class for the form factor in .
A base class for SUSY models.
Definition: SUSY.h:33
SUSYScalarPotential.
double potential(gslpp::vector< double > coefficients, double field1, double field2, double field3)
gslpp::vector< double > coefficients()
gslpp::vector< double > potentialderivative(gslpp::vector< double > coefficients, double field1, double field2, double field3)
A model class for the Standard Model.
A class for a model prediction of an observable.
Definition: ThObservable.h:25
double min
The bin minimum.
Definition: ThObservable.h:125
Test Observable.