Based on the resonance parameters place knots for linear piece-wise approximation with enough precision.
The current method might be not optimal but the better strategy requires more investigations.
298 {
300 double w = 0.6;
301 double smin = (Mv - w * Gv) * (Mv - w * Gv);
302 double smax = (Mv + w * Gv) * (Mv + w * Gv);
303 en.push_back(Mv * Mv);
304 for (int i = 0, n = 30; i < n; i++) {
305 double s = smin + (smax - smin) * (i + 0.5) / n;
306 en.push_back(s);
307 }
308 w = 2;
309 double smin1 = (Mv - w * Gv) * (Mv - w * Gv);
310 double smax1 = (Mv + w * Gv) * (Mv + w * Gv);
311 for (int i = 0, n = 30; i < n; i++) {
312 double s = smin1 + (smax1 - smin1) * (i + 0.5) / n;
313 if (s >= smin && s <= smax)
314 continue;
315 en.push_back(s);
316 }
317 w = 8;
318 double smin2 = (Mv - w * Gv) * (Mv - w * Gv);
319 double smax2 = (Mv + w * Gv) * (Mv + w * Gv);
320 for (int i = 0, n = 30; i < n; i++) {
321 double s = smin2 + (smax2 - smin2) * (i + 0.5) / n;
322 if (s >= smin1 && s <= smax1)
323 continue;
324 en.push_back(s);
325 }
326 w = 30;
327 double smin3 = (Mv - w * Gv) * (Mv - w * Gv);
328 double smax3 = (Mv + w * Gv) * (Mv + w * Gv);
329 for (int i = 0, n = 30; i < n; i++) {
330 double s = smin3 + (smax3 - smin3) * (i + 0.5) / n;
331 if (s >= smin2 && s <= smax2)
332 continue;
333 en.push_back(s);
334 }
335 w = 100;
336 double smin4 = (Mv - w * Gv) * (Mv - w * Gv);
337 double smax4 = (Mv + w * Gv) * (Mv + w * Gv);
338 for (int i = 0, n = 20; i < n; i++) {
339 double s = smin4 + (smax4 - smin4) * (i + 0.5) / n;
340 if (s >= smin3 && s <= smax3)
341 continue;
342 en.push_back(s);
343 }
344 }
double sqrt(double a)
sqrt for double