Small fix
This commit is contained in:
parent
0fc1ec1e33
commit
95432102ea
@ -178,15 +178,15 @@ void PenningTrap::evolve_RK4(double dt, bool particle_interaction)
|
|||||||
p->v_vec = original_particles[j].v_vec + this->v_func(i, j, dt);
|
p->v_vec = original_particles[j].v_vec + this->v_func(i, j, dt);
|
||||||
p->r_vec = original_particles[j].r_vec + this->r_func(i, j, dt);
|
p->r_vec = original_particles[j].r_vec + this->r_func(i, j, dt);
|
||||||
}
|
}
|
||||||
this->particles = tmp_particles;
|
this->particles.swap(tmp_particles);
|
||||||
}
|
}
|
||||||
this->t += dt;
|
this->t += dt;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PenningTrap::evolve_forward_euler(double dt, bool particle_interaction)
|
void PenningTrap::evolve_forward_euler(double dt, bool particle_interaction)
|
||||||
{
|
{
|
||||||
std::vector<Particle> new_state = this->particles;
|
size_t size = this->particles.size();
|
||||||
|
vec_3d force_res[size];
|
||||||
Particle *p;
|
Particle *p;
|
||||||
|
|
||||||
vec_3d (PenningTrap::*force)(unsigned int);
|
vec_3d (PenningTrap::*force)(unsigned int);
|
||||||
@ -197,14 +197,18 @@ void PenningTrap::evolve_forward_euler(double dt, bool particle_interaction)
|
|||||||
force = &PenningTrap::total_force_external;
|
force = &PenningTrap::total_force_external;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma omp parallel for private(p)
|
#pragma omp parallel for
|
||||||
for (size_t i = 0; i < this->particles.size(); i++) {
|
for (size_t i = 0; i < size; i++) {
|
||||||
p = &new_state[i];
|
force_res[i] = (this->*force)(i);
|
||||||
p->v_vec += dt * (this->*force)(i) / p->m;
|
}
|
||||||
p->r_vec += dt * this->particles[i].v_vec;
|
|
||||||
|
#pragma omp parallel for private(p)
|
||||||
|
for (size_t i = 0; i < size; i++) {
|
||||||
|
p = &this->particles[i];
|
||||||
|
p->r_vec += dt * p->v_vec;
|
||||||
|
p->v_vec += dt * force_res[i] / p->m;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->particles = new_state;
|
|
||||||
this->t += dt;
|
this->t += dt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
10
src/main.cpp
10
src/main.cpp
@ -85,7 +85,7 @@ void simulate_100_particles()
|
|||||||
|
|
||||||
double time = 500.; // microseconds
|
double time = 500.; // microseconds
|
||||||
|
|
||||||
trap.write_simulation_to_dir("output/simulate_100_particles", time, N*5);
|
trap.write_simulation_to_dir("output/simulate_100_particles", time, N*4);
|
||||||
}
|
}
|
||||||
|
|
||||||
void simulate_100_particles_with_time_potential()
|
void simulate_100_particles_with_time_potential()
|
||||||
@ -132,13 +132,15 @@ int main()
|
|||||||
|
|
||||||
double start = omp_get_wtime();
|
double start = omp_get_wtime();
|
||||||
|
|
||||||
//simulate_100_particles();
|
for (int i=0; i<5; i++) {
|
||||||
|
simulate_100_particles();
|
||||||
|
}
|
||||||
|
|
||||||
simulate_100_particles_with_time_potential();
|
//simulate_100_particles_with_time_potential();
|
||||||
|
|
||||||
double end = omp_get_wtime();
|
double end = omp_get_wtime();
|
||||||
|
|
||||||
std::cout << "Time: " << end - start << " seconds" << std::endl;
|
std::cout << "Average time: " << (end - start) / 5. << " seconds" << std::endl;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user