milupHPC documentation
  • src
  • integrator
explicit_euler.cpp
Go to the documentation of this file.
1#include "../../include/integrator/explicit_euler.h"
2
3/*ExplicitEuler::ExplicitEuler(SimulationParameters simulationParameters, integer numParticles,
4 integer numNodes) : Miluphpc(simulationParameters, numParticles, numNodes) {
5 //integratedParticles = new IntegratedParticles[1];
6 printf("ExplicitEuler()\n");
7}*/
8
9ExplicitEuler::ExplicitEuler(SimulationParameters simulationParameters) : Miluphpc(simulationParameters) {
10 Logger(DEBUG) << "ExplicitEuler()";
11}
12
13ExplicitEuler::~ExplicitEuler() {
14 Logger(DEBUG) << "~ExplicitEuler()";
15}
16
17void ExplicitEuler::integrate(int step) {
18
19 Timer timer;
20 real time = 0.;
21
22 real timeElapsed;
23
24 Logger(INFO) << "ExplicitEuler::integrate()... currentTime: " << *simulationTimeHandler->h_currentTime
25 << " | subEndTime: " << *simulationTimeHandler->h_subEndTime
26 << " | endTime: " << *simulationTimeHandler->h_endTime;
27
28 while (*simulationTimeHandler->h_currentTime < *simulationTimeHandler->h_subEndTime) {
29
30 //profiler.setStep(subStep);
31 subStep++;
32
33 Logger(INFO) << "ExplicitEuler::integrate while...";
34
35 timer.reset();
36 if (simulationParameters.removeParticles) {
37 time = removeParticles();
38 }
39 timeElapsed = timer.elapsed();
40 profiler.value2file(ProfilerIds::Time::removeParticles, timeElapsed);
41 Logger(TIME) << "removing particles: " << timeElapsed << " ms";
42
43 Logger(INFO) << "rhs::loadBalancing()";
44 timer.reset();
45 if (simulationParameters.loadBalancing && step != 0 && step % simulationParameters.loadBalancingInterval == 0) {
46 dynamicLoadBalancing(simulationParameters.loadBalancingBins);
47 }
48 real elapsed = timer.elapsed();
49 //totalTime += elapsed;
50 Logger(TIME) << "rhs::loadBalancing(): " << elapsed << " ms";
51 profiler.value2file(ProfilerIds::Time::loadBalancing, elapsed);
52
53 //Logger(INFO) << "checking for nans before update() ..";
54 //ParticlesNS::Kernel::Launch::check4nans(particleHandler->d_particles, numParticlesLocal);
55
56 timer.reset();
57 //real time;
58 // -------------------------------------------------------------------------------------------------------------
59 time = rhs(step, true, true);
60 // -------------------------------------------------------------------------------------------------------------
61 timeElapsed = timer.elapsed();
62 Logger(TIME) << "rhs: " << time << " ms";
63 Logger(TIME) << "rhsElapsed: " << timeElapsed << " ms";
64 profiler.value2file(ProfilerIds::Time::rhs, time);
65 profiler.value2file(ProfilerIds::Time::rhsElapsed, timeElapsed);
66
67 time = ExplicitEulerNS::Kernel::Launch::update(particleHandler->d_particles, numParticlesLocal,
68 *simulationTimeHandler->h_dt); //(real) simulationParameters.timestep);
69
70 profiler.value2file(ProfilerIds::Time::integrate, time);
71
72 //Logger(INFO) << "timestep: " << (real) simulationParameters.timestep;
73
74 *simulationTimeHandler->h_currentTime += *simulationTimeHandler->h_dt;
75 simulationTimeHandler->copy(To::device);
76
77#if INTEGRATE_SML
78 cuda::set(particleHandler->d_dsmldt, (real)0, numParticles);
79#endif
80
81 Logger(TRACE) << "finished sub step - simulation time: " << *simulationTimeHandler->h_currentTime
82 << " (STEP: " << step << " | subStep: " << subStep
83 << " | time = " << *simulationTimeHandler->h_currentTime << "/"
84 << *simulationTimeHandler->h_subEndTime << "/"
85 << *simulationTimeHandler->h_endTime << ")";
86
87 subDomainKeyTreeHandler->copy(To::host, true, false);
88 profiler.vector2file(ProfilerIds::ranges, subDomainKeyTreeHandler->h_range);
89
90 boost::mpi::communicator comm;
91 sumParticles = numParticlesLocal;
92 all_reduce(comm, boost::mpi::inplace_t<integer*>(&sumParticles), 1, std::plus<integer>());
93
94 profiler.value2file(ProfilerIds::numParticles, sumParticles);
95 profiler.value2file(ProfilerIds::numParticlesLocal, numParticlesLocal);
96
97 }
98
99 //Logger(INFO) << "checking for nans after update()...";
100 //ParticlesNS::Kernel::Launch::check4nans(particleHandler->d_particles, numParticlesLocal);
101
102
103
104}
ExplicitEuler::~ExplicitEuler
~ExplicitEuler()
Destructor.
Definition: explicit_euler.cpp:13
ExplicitEuler::ExplicitEuler
ExplicitEuler(SimulationParameters simulationParameters)
Constructor.
Definition: explicit_euler.cpp:9
ExplicitEuler::integrate
void integrate(int step)
Implementation of the abstract integration method.
Definition: explicit_euler.cpp:17
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
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
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
ExplicitEulerNS::Kernel::Launch::update
real update(Particles *particles, integer n, real dt)
Wrapper for ExplicitEulerNS::Kernel::update().
Definition: device_explicit_euler.cu:56
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/explicit_euler.cpp Source File
Generated on Wed Aug 31 2022 12:16:52 by Doxygen 1.9.3