milupHPC documentation
  • src
  • integrator
leapfrog.cpp
Go to the documentation of this file.
1#include "../../include/integrator/leapfrog.h"
2
3/*Leapfrog::Leapfrog(SimulationParameters simulationParameters, integer numParticles,
4 integer numNodes) : Miluphpc(simulationParameters, numParticles, numNodes) {
5 //integratedParticles = new IntegratedParticles[1];
6 printf("Leapfrog()\n");
7}*/
8
9Leapfrog::Leapfrog(SimulationParameters simulationParameters) : Miluphpc(simulationParameters) {
10
11 particleHandler->initLeapfrog();
12 Logger(DEBUG) << "Leapfrog()";
13}
14
15Leapfrog::~Leapfrog() {
16
17 particleHandler->freeLeapfrog();
18 Logger(DEBUG) << "~Leapfrog()";
19}
20
21void Leapfrog::integrate(int step) {
22
23 Timer timer;
24 real time = 0.;
25
26 real timeElapsed;
27
28 Logger(INFO) << "Leapfrog::integrate()... currentTime: " << *simulationTimeHandler->h_currentTime
29 << " | subEndTime: " << *simulationTimeHandler->h_subEndTime
30 << " | endTime: " << *simulationTimeHandler->h_endTime;
31
32 while (*simulationTimeHandler->h_currentTime < *simulationTimeHandler->h_subEndTime) {
33
34 //profiler.setStep(subStep);
35
36 if (step == 0 && subStep == 0) {
37 Logger(TRACE) << "First rhs()";
38 rhs(step, true, true);
39 }
40
41 subStep++;
42
43 Logger(INFO) << "Leapfrog::integrate while...";
44
45 timer.reset();
46 if (simulationParameters.removeParticles) {
47 time = removeParticles();
48 }
49 timeElapsed = timer.elapsed();
50 profiler.value2file(ProfilerIds::Time::removeParticles, timeElapsed);
51 Logger(TIME) << "removing particles: " << timeElapsed << " ms";
52
53 Logger(INFO) << "rhs::loadBalancing()";
54 timer.reset();
55 if (simulationParameters.loadBalancing && step != 0 && step % simulationParameters.loadBalancingInterval == 0) {
56 dynamicLoadBalancing(simulationParameters.loadBalancingBins);
57 }
58 real elapsed = timer.elapsed();
59 //totalTime += elapsed;
60 Logger(TIME) << "rhs::loadBalancing(): " << elapsed << " ms";
61 profiler.value2file(ProfilerIds::Time::loadBalancing, elapsed);
62
63 //Logger(INFO) << "checking for nans before update() ..";
64 //ParticlesNS::Kernel::Launch::check4nans(particleHandler->d_particles, numParticlesLocal);
65
66 time = LeapfrogNS::Kernel::Launch::updateX(particleHandler->d_particles, numParticlesLocal,
67 *simulationTimeHandler->h_dt); //(real) simulationParameters.timestep);
68
69 timer.reset();
70 //real time;
71 // -------------------------------------------------------------------------------------------------------------
72 time = rhs(step, true, true);
73 // -------------------------------------------------------------------------------------------------------------
74 timeElapsed = timer.elapsed();
75 Logger(TIME) << "rhs: " << time << " ms";
76 Logger(TIME) << "rhsElapsed: " << timeElapsed << " ms";
77 profiler.value2file(ProfilerIds::Time::rhs, time);
78 profiler.value2file(ProfilerIds::Time::rhsElapsed, timeElapsed);
79
80 time = LeapfrogNS::Kernel::Launch::updateV(particleHandler->d_particles, numParticlesLocal,
81 *simulationTimeHandler->h_dt); //(real) simulationParameters.timestep);
82
83 profiler.value2file(ProfilerIds::Time::integrate, time);
84
85 //Logger(INFO) << "timestep: " << (real) simulationParameters.timestep;
86
87 *simulationTimeHandler->h_currentTime += *simulationTimeHandler->h_dt;
88 simulationTimeHandler->copy(To::device);
89
90#if INTEGRATE_SML
91 cuda::set(particleHandler->d_dsmldt, (real)0, numParticles);
92#endif
93
94 Logger(TRACE) << "finished sub step - simulation time: " << *simulationTimeHandler->h_currentTime
95 << " (STEP: " << step << " | subStep: " << subStep
96 << " | time = " << *simulationTimeHandler->h_currentTime << "/"
97 << *simulationTimeHandler->h_subEndTime << "/"
98 << *simulationTimeHandler->h_endTime << ")";
99
100 subDomainKeyTreeHandler->copy(To::host, true, false);
101 profiler.vector2file(ProfilerIds::ranges, subDomainKeyTreeHandler->h_range);
102
103 boost::mpi::communicator comm;
104 sumParticles = numParticlesLocal;
105 all_reduce(comm, boost::mpi::inplace_t<integer*>(&sumParticles), 1, std::plus<integer>());
106
107 profiler.value2file(ProfilerIds::numParticles, sumParticles);
108 profiler.value2file(ProfilerIds::numParticlesLocal, numParticlesLocal);
109
110 }
111
112 //Logger(INFO) << "checking for nans after update()...";
113 //ParticlesNS::Kernel::Launch::check4nans(particleHandler->d_particles, numParticlesLocal);
114
115
116
117}
H5Profiler::vector2file
void vector2file(const std::string &path, std::vector< T > data)
Definition: h5profiler.h:246
H5Profiler::value2file
void value2file(const std::string &path, T value)
Write value to single value data set.
Definition: h5profiler.h:202
Leapfrog::integrate
void integrate(int step)
Implementation of the abstract integration method.
Definition: leapfrog.cpp:21
Leapfrog::Leapfrog
Leapfrog(SimulationParameters simulationParameters)
Constructor.
Definition: leapfrog.cpp:9
Leapfrog::~Leapfrog
~Leapfrog()
Destructor.
Definition: leapfrog.cpp:15
Logger
Logger class.
Definition: logger.h:80
Miluphpc
MilupHPC class.
Definition: miluphpc.h:74
Miluphpc::particleHandler
ParticleHandler * particleHandler
Instance to handle the Particles instance on device and host.
Definition: miluphpc.h:309
Miluphpc::rhs
real rhs(int step, bool selfGravity=true, bool assignParticlesToProcess=true)
Definition: miluphpc.cpp:294
Miluphpc::profiler
H5Profiler & profiler
H5 profiler instance.
Definition: miluphpc.h:274
Miluphpc::dynamicLoadBalancing
void dynamicLoadBalancing(int bins=5000)
Pre-calculations for updateRangeApproximately.
Definition: miluphpc.cpp:2885
Miluphpc::subDomainKeyTreeHandler
SubDomainKeyTreeHandler * subDomainKeyTreeHandler
Instance to handle the SubDomainKeyTree instance on device and host.
Definition: miluphpc.h:311
Miluphpc::numParticles
integer numParticles
number of particles (to be allocated)
Definition: miluphpc.h:285
Miluphpc::subStep
int subStep
current sub-step (there are possibly more sub-steps within a step!)
Definition: miluphpc.h:212
Miluphpc::removeParticles
real removeParticles()
Remove particles in dependence of some criterion.
Definition: miluphpc.cpp:3040
Miluphpc::simulationParameters
SimulationParameters simulationParameters
buffer (need for revising)
Definition: miluphpc.h:351
Miluphpc::numParticlesLocal
integer numParticlesLocal
Definition: miluphpc.h:294
Miluphpc::sumParticles
integer sumParticles
(real) number of particles on all processes
Definition: miluphpc.h:287
Miluphpc::simulationTimeHandler
SimulationTimeHandler * simulationTimeHandler
Instance to handle the SimulationTime instances on device and host.
Definition: miluphpc.h:282
ParticleHandler::d_particles
Particles * d_particles
device instance of particles class
Definition: particle_handler.h:350
ParticleHandler::freeLeapfrog
void freeLeapfrog()
Definition: particle_handler.cpp:588
ParticleHandler::initLeapfrog
void initLeapfrog()
Definition: particle_handler.cpp:549
SimulationTimeHandler::copy
void copy(To::Target target)
Definition: simulation_time_handler.cpp:56
SimulationTimeHandler::h_subEndTime
real * h_subEndTime
Definition: simulation_time_handler.h:21
SimulationTimeHandler::h_dt
real * h_dt
Definition: simulation_time_handler.h:19
SimulationTimeHandler::h_endTime
real * h_endTime
Definition: simulation_time_handler.h:22
SimulationTimeHandler::h_currentTime
real * h_currentTime
Definition: simulation_time_handler.h:23
SubDomainKeyTreeHandler::h_range
keyType * h_range
host range(s)
Definition: subdomain_handler.h:31
SubDomainKeyTreeHandler::copy
void copy(To::Target target=To::device, bool range=true, bool counter=true)
Copy (parts of the) SubDomainKeyTree instance(s) between host and device.
Definition: subdomain_handler.cpp:43
Timer
Definition: timer.h:15
Timer::elapsed
double elapsed() const
Get elapsed time since instantiation/latest reset.
Definition: timer.cpp:22
Timer::reset
void reset()
Reset timer instance.
Definition: timer.cpp:11
DEBUG
@ DEBUG
Definition: logger.h:47
INFO
@ INFO
debug log type
Definition: logger.h:48
TRACE
@ TRACE
info log type
Definition: logger.h:49
TIME
@ TIME
error log type
Definition: logger.h:52
LeapfrogNS::Kernel::Launch::updateX
real updateX(Particles *particles, integer n, real dt)
Wrapper for LeapfrogNS::Kernel::update().
Definition: device_leapfrog.cu:60
LeapfrogNS::Kernel::Launch::updateV
real updateV(Particles *particles, integer n, real dt)
Definition: device_leapfrog.cu:67
ProfilerIds::Time::removeParticles
const char *const removeParticles
Definition: h5profiler.h:54
ProfilerIds::Time::rhs
const char *const rhs
Definition: h5profiler.h:50
ProfilerIds::Time::loadBalancing
const char *const loadBalancing
Definition: h5profiler.h:52
ProfilerIds::Time::integrate
const char *const integrate
Definition: h5profiler.h:61
ProfilerIds::Time::rhsElapsed
const char *const rhsElapsed
Definition: h5profiler.h:51
ProfilerIds::numParticlesLocal
const char *const numParticlesLocal
Definition: h5profiler.h:30
ProfilerIds::ranges
const char *const ranges
Definition: h5profiler.h:31
ProfilerIds::numParticles
const char *const numParticles
Definition: h5profiler.h:29
cuda::set
void set(T *d_var, T val, std::size_t count=1)
Set device memory to a specific value.
Definition: cuda_runtime.h:56
real
double real
Definition: parameter.h:15
SimulationParameters
Definition: parameter.h:122
SimulationParameters::loadBalancing
bool loadBalancing
apply load balancing
Definition: parameter.h:131
SimulationParameters::loadBalancingInterval
int loadBalancingInterval
apply load balancing each x interval/simulation step
Definition: parameter.h:132
SimulationParameters::loadBalancingBins
int loadBalancingBins
Definition: parameter.h:133
SimulationParameters::removeParticles
bool removeParticles
Definition: parameter.h:150
To::device
@ device
Definition: parameter.h:165
To::host
@ host
Definition: parameter.h:165

milupHPC - src/integrator/leapfrog.cpp Source File
Generated on Wed Aug 31 2022 12:16:52 by Doxygen 1.9.3