33{
34
35
36
37
39
41
42
43
45
46
47
48
49
50
51
52 gslpp::vector<double>
S(10,0.);
53
54 gslpp::vector<double> minimavector(3,0.);
55 minimavector(0)=-807192.888;
56 minimavector(1)=807260.056;
57 minimavector(2)=-803413.309;
58
59
60
61
62
63
64
65 int lengthofminima=3;
66 int NofMinima=lengthofminima/3;
67
68 gslpp::vector<double> deeperminima(lengthofminima+NofMinima,0.), dV(3,0.);
69
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);
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
97
98
99
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);
107
108
109 int steps=100;
110 gslpp::vector<double> linearpath(steps,0.);
111 gslpp::vector<double> V(steps,0.);
112
113
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;
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136 }
137
138
139
140
141 std::cout << "2.1.1" << std::endl;
142
143
144
145
146
147
148 double min = 1.0e-12;
149 double pos1=0.0;
150 double pos2=1.0;
151 double pos = 0.5;
152 while(fabs(pos1-pos2) >
min)
153 {
155 if(Vpos > 0.0)
156 {
157 pos1 = pos;
158 }
159 else
160 {
161 pos2 = pos;
162 }
163 pos = 0.5*(pos1+pos2);
164 }
165
166
167
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;
183
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 }
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
212
213 double x = -log(pos);
214
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;
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)
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
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
255
256
257
258
259
260
261
262
263
264
265
266
267 }
268 while(true);
269
270
271
272
273
274
275
276
277 }
278
279
280
281
282
283
284
285
286
287
288
289
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
295 double VphiMin_i =
deformedV(phi(rlength));
296
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)
303 }
304
305
306
307
308
309
310 return 0.0;
311}
double Simpsonintegrand(double r, double phi, double dphi, double VphiMin_i)
double invertedpotential(double x)
gslpp::vector< double > InitialConditions(double delta_phi0, double rmin, double delta_phi_cutoff, double distance, double dV_at_delta_phi0, double d2V_at_phi0)
gsl_function convertToGslFunctionS(const F &f)
double deformedV(double phi)
gslpp::vector< double > integrateProfile(double r0, double y01, double y02, double dr0, double epsfrac[2], double epsabs[2], double drmin, double rmax, double distance)
A class for the form factor in .
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)
double min
The bin minimum.