When performing the dispersion calculation, the entire spinwave_calc_file
driver is put into two different threads in order to calculate the dispersion
both numerically and analytically.
\spinwavecalc\spinwavepanel.OnOk
self.processManager.startAnalyticDispersion(int_file, spin_file)
self.processManager.startNumericDispersion(int_file, spin_file, data, kMin*pi,
kMax*pi, data['step'])
This is wasteful though. We can streamline the process if we calculate the
Hamiltonian (Hsave) in a single thread and then branch into two threads to
calculate the eigenvalues analytically/numerically. For big or complex
lattices, calculating the Hamiltonian is the expensive part of the calculation
and time should not be wasted calculating it twice.
In order to fix this, one driver should calculate and return the hamiltonian,
which should called first. Then two separate drivers (one numerical, other
analytical) take Hsave as an argument to calculate their different tasks. These
two drivers should be called in separate threads and run after Hsave has been
calculated.
Original issue reported on code.google.com by wfly...@gmail.com on 22 Jun 2010 at 6:03
Original issue reported on code.google.com by
wfly...@gmail.com
on 22 Jun 2010 at 6:03