private void RpaChi0Thread(object obj) { RpaThreadInfo info = (RpaThreadInfo)obj; System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); watch.Start(); TightBinding tb = info.tb; List <RpaParams> rpa = info.RpaParams; KptList qpts = info.qpts; for (int i = 0; i < rpa.Count; i++) { SetTemperature(tb, rpa[i].Temperature, rpa[i].ChemicalPotential); rpa[i].X0 = CalcX0(tb, rpa[i].Frequency, qpts.Kpts[rpa[i].Qindex]); if (i == 0 && info.PrimaryThread) { long time = watch.ElapsedTicks * rpa.Count; TimeSpan s = new TimeSpan(time); Output.WriteLine("Estimated total time {0:+hh.mm}", s); } Complex val = rpa[i].X0.Trace(); Output.Write("q = {0}, T = {1:0.000}, mu = {2:0.000}, omega = {3:0.0000}", rpa[i].Qindex + 1, rpa[i].Temperature, rpa[i].ChemicalPotential, rpa[i].Frequency); Output.WriteLine(", Tr(X_0) = {0}", val.ToString("0.0000")); } }
private void RunRpaThread(RpaThreadInfo info) { Thread t = new Thread(RpaChi0Thread); info.Thread = t; info.Thread.Start(info); }
private RpaThreadInfo[] CreateThreadInfos(TightBinding tb, List <RpaParams> rpa, KptList qpts) { RpaThreadInfo[] infos = new RpaThreadInfo[threads]; for (int i = 0; i < infos.Length; i++) { infos[i] = new RpaThreadInfo(); infos[i].tb = tb.Clone(); infos[i].qpts = qpts; } infos[0].PrimaryThread = true; for (int i = 0; i < rpa.Count; i++) { infos[i % threads].RpaParams.Add(rpa[i]); } return(infos); }
private RpaThreadInfo[] CreateThreadInfos(TightBinding tb, List<RpaParams> rpa, KptList qpts) { RpaThreadInfo[] infos = new RpaThreadInfo[threads]; for (int i = 0; i < infos.Length; i++) { infos[i] = new RpaThreadInfo(); infos[i].tb = tb.Clone(); infos[i].qpts = qpts; } infos[0].PrimaryThread = true; for (int i = 0; i < rpa.Count; i++) { infos[i % threads].RpaParams.Add(rpa[i]); } return infos; }