1.9 DWORD CALLBACK ThreadProc(LPVOID lpdwThreadParam) |
2.9 const double ht = 1.0e-9; //time step of integration, s |
3.9 static int count = 0; //number of particles with z > zMax |
4.9 while(count < (signed)vpp.size()) |
5.9 for(int i = 0; i < (int)vpp.size(); ++i) |
6.9 if(vpp[i].stop == false) |
7.9 RK4_4eq<Particle>(&vpp[i], ht, &Particle::t, &Particle::vz, |
8.9 &Particle::vy, &Particle::z, &Particle::y, &Particle::FzFy, |
9.9 &Particle::DvzDt, &Particle::DvyDt, &Particle::DzDt, |
10.9 &Particle::DyDt); |
11.9 vpp[i].v=sqrt(vpp[i].vy*vpp[i].vy + vpp[i].vz*vpp[i].vz); |
12.9 vpp[i].W=0.5*Particle::m*vpp[i].v*vpp[i].v/Particle::q; |
13.9 vpp[i].currentData.t = vpp[i].t; |
14.9 vpp[i].currentData.z = vpp[i].z; |
15.9 vpp[i].currentData.y = vpp[i].y; |
16.9 vpp[i].currentData.vz = vpp[i].vz; |
17.9 vpp[i].currentData.vy = vpp[i].vy; |
18.9 vpp[i].currentData.v = vpp[i].v; |
19.9 vpp[i].currentData.W = vpp[i].W; |
20.9 vpp[i].history.push_back(vpp[i].currentData); |
21.9 if(vpp[i].z >= Particle::pF->zMax) |
22.9 vpp[i].stop = true; |
23.9 ++count; |
24.9 |
25.9 |
26.9 if(!vpp[particleListBox].stop) |
27.9 sprintf_s(bufListBox, " t = %.3e y = %.5f z = %.5f", |
28.9 vpp[particleListBox].history.back().t, |
29.9 vpp[particleListBox].history.back().y, |
30.9 vpp[particleListBox].history.back().z); |
31.9 SendMessage(GetDlgItem(hModalDlg, IDC_ListBox),LB_ADDSTRING, |
32.9 0, (LPARAM)bufListBox); |
33.9 SendMessage(GetDlgItem(hModalDlg, IDC_ListBox), LB_SETTOPINDEX, |
34.9 (WPARAM)(vpp[particleListBox].history.size()-1), 0); |
35.9 |
36.9 InvalidateRect(hModalDlg, NULL, FALSE); |
37.9 if(hModelessDlg != 0) |
38.9 InvalidateRect(hModelessDlg, NULL, FALSE); |
39.9 Sleep(sleep); |
40.9 |
41.9 return 0; |
42.9 |