| 40 | } |
| 41 | |
| 42 | double freq_at_resolution(double e(const vec &), double a, component c, double beta) { |
| 43 | const grid_volume gv = vol2d(2.0, 1.0, a); |
| 44 | structure s(gv, e); |
| 45 | s.set_epsilon(e); |
| 46 | |
| 47 | fields f(&s, 0, beta); |
| 48 | f.use_real_fields(); |
| 49 | f.use_bloch(vec(0, 0)); |
| 50 | f.add_point_source(c, 0.18, 2.5, 0.0, 6.0, vec(0.5, 0.5), 1.0); |
| 51 | f.add_point_source(c, 0.18, 2.5, 0.0, 6.0, vec(1.5, 0.5), -1.0); |
| 52 | |
| 53 | while (f.time() <= f.last_source_time() + 10.0) |
| 54 | f.step(); |
| 55 | const double fourier_timesteps = 3000.0; |
| 56 | const double ttot = fourier_timesteps / a + f.time(); |
| 57 | monitor_point *p = NULL; |
| 58 | while (f.time() <= ttot) { |
| 59 | f.step(); |
| 60 | p = f.get_new_point(vec(0.52, 0.97), p); |
| 61 | } |
| 62 | const double freq = get_the_freq(p, c); |
| 63 | delete p; |
| 64 | return freq; |
| 65 | } |
| 66 | |
| 67 | void check_convergence(component c, double best_guess, double beta) { |
| 68 | const double amin = 5.0, amax = 30.0, adelta = 5.0; |
no test coverage detected