Hi,
On http://ab-initio.mit.edu/wiki/index.php/Meep_C-plus-plus_Tutorial
the method for calculating the quality factor is given:

int maxbands = 5;
int ttot = int(400/f.dt)+1;
complex<double> *p = new complex<double>[ttot];
complex<double> *amps = new complex<double>[maxbands];
double *freq_re = new double[maxbands];
double *freq_im = new double[maxbands];

int i=0;
while (f.time() < f.last_source_time() + 400) {
  f.step();
  p[i++] = f.get_field(Ex,vol.center());
}

int num =  do_harminv(p, ttot, f.dt, 0.8*w_midgap, 1.2*w_midgap,
maxbands, amps, freq_re, freq_im);

master_printf("frequency,amplitude,quality factor\n");
for (int i=0; i<num; ++i)
master_printf("%0.6g%+0.6gi,%0.5g%+0.5gi,%g\n",freq_re[i],freq_im[i],real(amps[i]),imag(amps[i]),-0.5*freq_re[i]/freq_im[i]);


But the example uses complex fields. In my simulation I have to use
fields::use_real_fields() which causes the
method above generate wrong results (like negative q-factor from the
formula -0.5*freq_re[i]/freq_im[i] ).
What should I change to use this method for real fields ?

Thank you for any help,
Thomas Jefferson

_______________________________________________
meep-discuss mailing list
[email protected]
http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/meep-discuss

Reply via email to