| 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 |