milupHPC documentation
  • src
main.cpp
Go to the documentation of this file.
1#include "../include/miluphpc.h"
2#include "../include/integrator/explicit_euler.h"
3#include "../include/integrator/predictor_corrector_euler.h"
4#include "../include/integrator/leapfrog.h"
5#include "../include/utils/config_parser.h"
6#include <boost/filesystem.hpp>
7
8#include <fenv.h>
9#include <iostream>
10#include <fstream>
11#include <stdlib.h>
12#include <string.h>
13#include <random>
14
15#define ENV_LOCAL_RANK "OMPI_COMM_WORLD_LOCAL_RANK"
16
17bool checkFile(const std::string file, bool terminate=false, const std::string message="");
18bool checkFile(const std::string file, bool terminate, const std::string message) {
19 std::ifstream fileStream(file.c_str());
20 if (fileStream.good()) {
21 return true;
22 }
23 else {
24 if (terminate) {
25 Logger(WARN) << message;
26 Logger(ERROR) << "Provided file: " << file << " not available!";
27 MPI_Finalize();
28 exit(0);
29 }
30 return false;
31 }
32}
33
34void SetDeviceBeforeInit()
35{
36 char * localRankStr = NULL;
37 int rank = 0;
38 int devCount = 2;
39
40 if ((localRankStr = getenv(ENV_LOCAL_RANK)) != NULL)
41 {
42 rank = atoi(localRankStr);
43 }
44
45 gpuErrorcheck(cudaGetDeviceCount(&devCount));
46 //gpuErrorcheck(cudaSetDevice(rank % devCount));
47 gpuErrorcheck(cudaSetDevice(rank % devCount));
48}
49
50structLog LOGCFG = {};
51
52int main(int argc, char** argv)
53{
54
56 // -----------------------------------------------------------------------------------------------------------------
57
59 SetDeviceBeforeInit();
60
61 boost::mpi::environment env(argc, argv);
62 boost::mpi::communicator comm;
63
64 int rank = comm.rank();
65 int numProcesses = comm.size();
66
68 //cudaSetDevice(rank);
69 int device;
70 cudaGetDevice(&device);
71 int numDevices;
72 cudaGetDeviceCount(&numDevices);
73 cudaDeviceSynchronize();
74
75 cudaDeviceProp deviceProp;
76 cudaGetDeviceProperties(&deviceProp, device);
77 int numberOfMultiprocessors = deviceProp.multiProcessorCount;
78 printf("numberOfMultiprocessors: %i\n", numberOfMultiprocessors);
79
80 // testing whether MPI works ...
81 //int mpi_test = rank;
82 //all_reduce(comm, boost::mpi::inplace_t<int*>(&mpi_test), 1, std::plus<int>());
83 //Logger(INFO) << "mpi_test = " << mpi_test;
84
86 cxxopts::Options options("HPC NBody", "Multi-GPU CUDA Barnes-Hut NBody/SPH code");
87
88 bool loadBalancing = false;
89
90 options.add_options()
91 ("n,number-output-files", "number of output files", cxxopts::value<int>()->default_value("100"))
92 ("t,max-time-step", "time step", cxxopts::value<real>()->default_value("-1."))
93 ("l,load-balancing", "load balancing", cxxopts::value<bool>(loadBalancing))
94 ("L,load-balancing-interval", "load balancing interval", cxxopts::value<int>()->default_value("-1"))
95 ("C,config", "config file", cxxopts::value<std::string>()->default_value("config/config.info"))
96 ("m,material-config", "material config file", cxxopts::value<std::string>()->default_value("config/material.cfg"))
97 ("c,curve-type", "curve type (Lebesgue: 0/Hilbert: 1)", cxxopts::value<int>()->default_value("-1"))
98 ("f,input-file", "File name", cxxopts::value<std::string>()->default_value("-"))
99 ("v,verbosity", "Verbosity level", cxxopts::value<int>()->default_value("0"))
100 ("h,help", "Show this help");
101
102 cxxopts::ParseResult result;
103 try {
104 result = options.parse(argc, argv);
105 }
106 catch (cxxopts::OptionException &exception) {
107 std::cerr << exception.what();
108 MPI_Finalize();
109 exit(0);
110 }
111 catch (...) {
112 std::cerr << "Error parsing ...";
113 MPI_Finalize();
114 exit(0);
115 }
116
117 if (result.count("help")) {
118 if (rank == 0) {
119 std::cout << options.help() << std::endl;
120 }
121 MPI_Finalize();
122 exit(0);
123 }
124
126 std::string configFile = result["config"].as<std::string>();
127 checkFile(configFile, true, std::string{"Provided config file not available!"});
128
130 SimulationParameters parameters;
131
132 parameters.verbosity = result["verbosity"].as<int>();
134 LOGCFG.headers = true;
135 if (parameters.verbosity == 0) {
136 LOGCFG.level = TRACE;
137 }
138 else if (parameters.verbosity == 1) {
139 LOGCFG.level = INFO;
140 }
141 else if (parameters.verbosity >= 2) {
142 LOGCFG.level = DEBUG;
143 }
144 else {
145 LOGCFG.level = TRACE;
146 }
147 //LOGCFG.level = static_cast<typeLog>(1); //TRACE; //DEBUG;
148 LOGCFG.rank = rank;
149 //LOGCFG.outputRank = 0;
150 //Logger(DEBUG) << "DEBUG output";
151 //Logger(WARN) << "WARN output";
152 //Logger(ERROR) << "ERROR output";
153 //Logger(INFO) << "INFO output";
154 //Logger(TRACE) << "TRACE output";
155 //Logger(TIME) << "TIME output";
156
157 Logger(DEBUG) << "rank: " << rank << " | number of processes: " << numProcesses;
158 Logger(DEBUG) << "device: " << device << " | num devices: " << numDevices;
159
160 Logger(INFO) << "sizeof(keyType) = " << (int)sizeof(keyType); // intmax_t, uintmax_t
161 Logger(INFO) << "sizeof(intmax_t) = " << (int)sizeof(intmax_t);
162 Logger(INFO) << "sizeof(uintmax_t) = " << (int)sizeof(uintmax_t); // __int128
163 Logger(INFO) << "sizeof(__int128) = " << (int)sizeof(__int128);
164
165 ConfigParser confP{ConfigParser(configFile.c_str())}; //"config/config.info"
166 LOGCFG.write2LogFile = confP.getVal<bool>("log");
167 LOGCFG.omitTime = confP.getVal<bool>("omitTime");
168
169 parameters.directory = confP.getVal<std::string>("directory");
170 if (boost::filesystem::create_directories(parameters.directory)) {
171 Logger(DEBUG) << "Created directory: " << parameters.directory;
172 }
173 parameters.logDirectory = parameters.directory + std::string{"log/"};
174 if (boost::filesystem::create_directories(parameters.logDirectory)) {
175 Logger(DEBUG) << "Created directory: " << parameters.logDirectory;
176 }
177
178 std::stringstream logFileName;
179 logFileName << parameters.logDirectory << "miluphpc.log";
180 LOGCFG.logFileName = logFileName.str();
181 Logger(TRACE) << "log file to: " << logFileName.str();
182 //MPI_Finalize();
183 //exit(0);
184
185 parameters.timeStep = confP.getVal<real>("timeStep");
186 parameters.maxTimeStep = result["max-time-step"].as<real>();
187 if (parameters.maxTimeStep < 0.) {
188 parameters.maxTimeStep = confP.getVal<real>("maxTimeStep");
189 }
190 parameters.timeEnd = confP.getVal<real>("timeEnd");
191 parameters.outputRank = confP.getVal<int>("outputRank");
192 if (parameters.outputRank < 0 || parameters.outputRank >= numProcesses) {
193 parameters.outputRank = -1; // if selected output rank is not valid, log all processes
194 }
195 LOGCFG.outputRank = parameters.outputRank;
196 parameters.performanceLog = confP.getVal<bool>("performanceLog");
197 parameters.particlesSent2H5 = confP.getVal<bool>("particlesSent2H5");
198 parameters.sfcSelection = confP.getVal<int>("sfc");
199 if (result["curve-type"].as<int>() != -1) {
200 parameters.sfcSelection = result["curve-type"].as<int>();
201 }
202 parameters.integratorSelection = confP.getVal<int>("integrator");
203//#if GRAVITY_SIM
204 parameters.theta = confP.getVal<real>("theta");
205 parameters.smoothing = confP.getVal<real>("smoothing");
206 parameters.gravityForceVersion = confP.getVal<int>("gravityForceVersion");
207//#endif
208//#if SPH_SIM
209 parameters.smoothingKernelSelection = confP.getVal<int>("smoothingKernel");
210 parameters.sphFixedRadiusNNVersion = confP.getVal<int>("sphFixedRadiusNNVersion");
211//#endif
212 parameters.removeParticles = confP.getVal<bool>("removeParticles");
213 parameters.removeParticlesCriterion = confP.getVal<int>("removeParticlesCriterion");
214 parameters.removeParticlesDimension = confP.getVal<real>("removeParticlesDimension");
215 parameters.numOutputFiles = result["number-output-files"].as<int>();
216 parameters.timeKernels = true;
217 parameters.loadBalancing = confP.getVal<bool>("loadBalancing");
218 if (parameters.loadBalancing || loadBalancing) {
219 parameters.loadBalancing = true;
220 }
221 parameters.loadBalancingInterval = confP.getVal<int>("loadBalancingInterval");
222 if (result["load-balancing-interval"].as<int>() > 0) {
223 parameters.loadBalancingInterval = result["load-balancing-interval"].as<int>();
224 }
225 parameters.loadBalancingBins = confP.getVal<int>("loadBalancingBins");
226 parameters.verbosity = result["verbosity"].as<int>();
227 parameters.materialConfigFile = result["material-config"].as<std::string>();
228 parameters.inputFile = result["input-file"].as<std::string>();
229 parameters.particleMemoryContingent = confP.getVal<real>("particleMemoryContingent");
230 if (parameters.particleMemoryContingent > 1.0 || parameters.particleMemoryContingent < 0.0) {
231 parameters.particleMemoryContingent = 1.0;
232 Logger(WARN) << "Setting particle memory contingent to: " << parameters.particleMemoryContingent;
233 }
234 parameters.calculateCenterOfMass = confP.getVal<bool>("calculateCenterOfMass");
235 //TODO: apply those
236 parameters.calculateAngularMomentum = confP.getVal<bool>("calculateAngularMomentum");
237 parameters.calculateEnergy = confP.getVal<bool>("calculateEnergy");
238
239 // + 1 should not be necessary, but need to investigate whether this is a problem for 1 GPU sims
240 parameters.domainListSize = POW_DIM * MAX_LEVEL * (numProcesses - 1) + 1;
241 Logger(DEBUG) << "domainListSize: " << parameters.domainListSize;
242
243 if (!checkFile(parameters.materialConfigFile, false)) {
244 parameters.materialConfigFile = std::string{"config/material.cfg"};
245 checkFile(parameters.materialConfigFile, true,
246 std::string{"Provided material config file and default (config/material.cfg) not available!"});
247 }
248 checkFile(parameters.inputFile, true, std::string{"Provided input file not available!"});
249
250
252 // profiling
253 std::stringstream profilerFile;
254 profilerFile << parameters.logDirectory << "performance.h5";
255 H5Profiler &profiler = H5Profiler::getInstance(profilerFile.str());
256 profiler.setRank(comm.rank());
257 profiler.setNumProcs(comm.size());
258 if (!parameters.performanceLog) {
259 profiler.disableWrite();
260 }
261 // General
262 profiler.createValueDataSet<int>(ProfilerIds::numParticles, 1);
263 profiler.createValueDataSet<int>(ProfilerIds::numParticlesLocal, 1);
264 profiler.createVectorDataSet<keyType>(ProfilerIds::ranges, 1, comm.size() + 1);
265 // Timing
266 profiler.createValueDataSet<real>(ProfilerIds::Time::rhs, 1);
267 profiler.createValueDataSet<real>(ProfilerIds::Time::rhsElapsed, 1);
268 profiler.createValueDataSet<real>(ProfilerIds::Time::loadBalancing, 1);
269 profiler.createValueDataSet<real>(ProfilerIds::Time::reset, 1);
270 profiler.createValueDataSet<real>(ProfilerIds::Time::removeParticles, 1);
271 profiler.createValueDataSet<real>(ProfilerIds::Time::boundingBox, 1);
272 profiler.createValueDataSet<real>(ProfilerIds::Time::assignParticles, 1);
273 profiler.createValueDataSet<real>(ProfilerIds::Time::tree, 1);
274 profiler.createValueDataSet<real>(ProfilerIds::Time::pseudoParticle, 1);
275#if GRAVITY_SIM
276 profiler.createValueDataSet<real>(ProfilerIds::Time::gravity, 1);
277 profiler.createVectorDataSet<int>(ProfilerIds::SendLengths::gravityParticles, 1, numProcesses);
278 profiler.createVectorDataSet<int>(ProfilerIds::SendLengths::gravityPseudoParticles, 1, numProcesses);
279 profiler.createVectorDataSet<int>(ProfilerIds::ReceiveLengths::gravityParticles, 1, numProcesses);
280 profiler.createVectorDataSet<int>(ProfilerIds::ReceiveLengths::gravityPseudoParticles, 1, numProcesses);
281#endif
282#if SPH_SIM
283 profiler.createValueDataSet<real>(ProfilerIds::Time::sph, 1);
284 profiler.createVectorDataSet<int>(ProfilerIds::SendLengths::sph, 1, numProcesses);
285 profiler.createVectorDataSet<int>(ProfilerIds::ReceiveLengths::sph, 1, numProcesses);
286#endif
287 // Detailed timing
288 profiler.createValueDataSet<real>(ProfilerIds::Time::Tree::createDomain, 1);
289 profiler.createValueDataSet<real>(ProfilerIds::Time::Tree::tree, 1);
290 profiler.createValueDataSet<real>(ProfilerIds::Time::Tree::buildDomain, 1);
291#if GRAVITY_SIM
292 profiler.createValueDataSet<real>(ProfilerIds::Time::Gravity::compTheta, 1);
293 profiler.createValueDataSet<real>(ProfilerIds::Time::Gravity::symbolicForce, 1);
294 profiler.createValueDataSet<real>(ProfilerIds::Time::Gravity::sending, 1);
295 profiler.createValueDataSet<real>(ProfilerIds::Time::Gravity::insertReceivedPseudoParticles, 1);
296 profiler.createValueDataSet<real>(ProfilerIds::Time::Gravity::insertReceivedParticles, 1);
297 profiler.createValueDataSet<real>(ProfilerIds::Time::Gravity::force, 1);
298 profiler.createValueDataSet<real>(ProfilerIds::Time::Gravity::repairTree, 1);
299#endif
300#if SPH_SIM
301 profiler.createValueDataSet<real>(ProfilerIds::Time::SPH::compTheta, 1);
302 profiler.createValueDataSet<real>(ProfilerIds::Time::SPH::determineSearchRadii, 1);
303 profiler.createValueDataSet<real>(ProfilerIds::Time::SPH::symbolicForce, 1);
304 profiler.createValueDataSet<real>(ProfilerIds::Time::SPH::sending, 1);
305 profiler.createValueDataSet<real>(ProfilerIds::Time::SPH::insertReceivedParticles, 1);
306 profiler.createValueDataSet<real>(ProfilerIds::Time::SPH::fixedRadiusNN, 1);
307 profiler.createValueDataSet<real>(ProfilerIds::Time::SPH::density, 1);
308 profiler.createValueDataSet<real>(ProfilerIds::Time::SPH::soundSpeed, 1);
309 profiler.createValueDataSet<real>(ProfilerIds::Time::SPH::pressure, 1);
310 profiler.createValueDataSet<real>(ProfilerIds::Time::SPH::resend, 1);
311 profiler.createValueDataSet<real>(ProfilerIds::Time::SPH::internalForces, 1);
312 profiler.createValueDataSet<real>(ProfilerIds::Time::SPH::repairTree, 1);
313#endif
314 profiler.createValueDataSet<real>(ProfilerIds::Time::integrate, 1);
315 profiler.createValueDataSet<real>(ProfilerIds::Time::IO, 1);
316
317
318#if !SPH_SIM
319 // TODO: default integrator for gravity-only simulation
320 if (parameters.integratorSelection == IntegratorSelection::predictor_corrector_euler) {
321 Logger(INFO) << "Gravity is decoupled! Therefore switching to explicit Euler integrator!";
322 parameters.integratorSelection = IntegratorSelection::explicit_euler;
323 }
324#endif
325
327 // -----------------------------------------------------------------------------------------------------------------
328 Miluphpc *miluphpc;
329 // miluphpc = new Miluphpc(parameters, numParticles, numNodes); // not possible since abstract class
330 switch (parameters.integratorSelection) {
331 case IntegratorSelection::explicit_euler: {
332 miluphpc = new ExplicitEuler(parameters);
333 } break;
334 case IntegratorSelection::predictor_corrector_euler: {
335 miluphpc = new PredictorCorrectorEuler(parameters);
336 } break;
337 case IntegratorSelection::leapfrog: {
338 miluphpc = new Leapfrog(parameters);
339 } break;
340 default: {
341 Logger(ERROR) << "Integrator not available!";
342 MPI_Finalize();
343 exit(1);
344 }
345 }
346
347 if (rank == 0) {
348 Logger(TRACE) << "---------------STARTING---------------";
349 }
350
351 Timer timer;
352 real timeElapsed;
354 // -----------------------------------------------------------------------------------------------------------------
355 real t = 0;
356 for (int i_step=0; i_step<parameters.numOutputFiles; i_step++) {
357
358 //profiler.setStep(i_step);
359
360 Logger(TRACE) << "-----------------------------------------------------------------";
361 Logger(TRACE, true) << "STEP: " << i_step;
362 Logger(TRACE) << "-----------------------------------------------------------------";
363
364 *miluphpc->simulationTimeHandler->h_subEndTime += (parameters.timeEnd/(real)parameters.numOutputFiles);
365 Logger(DEBUG) << "subEndTime += " << (parameters.timeEnd/(real)parameters.numOutputFiles);
366
367 miluphpc->simulationTimeHandler->copy(To::device);
368
369 miluphpc->integrate(i_step);
370 miluphpc->afterIntegrationStep();
371
372 timer.reset();
373 auto time = miluphpc->particles2file(i_step);
374 timeElapsed = timer.elapsed();
375 Logger(TIME) << "particles2file: " << timeElapsed << " ms";
376 profiler.value2file(ProfilerIds::Time::IO, timeElapsed);
377
378
379 t += parameters.timeStep;
380
381 }
382
384 // -----------------------------------------------------------------------------------------------------------------
385 comm.barrier();
386 LOGCFG.outputRank = -1;
387 if (rank == 0) {
388 Logger(TRACE) << "\n\n";
389 Logger(TRACE) << "---------------FINISHED---------------";
390 Logger(TRACE) << "Input file: " << parameters.inputFile;
391 Logger(TRACE) << "Config file: " << parameters.materialConfigFile;
392 Logger(TRACE) << "Material config: " << parameters.materialConfigFile;
393 if (LOGCFG.write2LogFile) {
394 Logger(TRACE) << "Log file saved to: " << LOGCFG.logFileName;
395 }
396 if (parameters.performanceLog) {
397 Logger(TRACE) << "Performance log saved to " << profilerFile.str();
398 }
399 if (parameters.particlesSent2H5) {
400 Logger(TRACE) << "(Most recent) particles sent saved to: " << parameters.logDirectory;
401 }
402 Logger(TRACE) << "Generated " << parameters.numOutputFiles << " files!";
403 Logger(TRACE) << "Data saved to " << parameters.directory;
404 Logger(TRACE) << "---------------FINISHED---------------";
405 }
406
407 return 0;
408}
ConfigParser
Config parser class for reading input parameter/settings.
Definition: config_parser.h:43
ExplicitEuler
Definition: explicit_euler.h:16
H5Profiler
Singleton class for HDF5 profiler.
Definition: h5profiler.h:118
H5Profiler::getInstance
static H5Profiler & getInstance(const std::string &outfile="")
Constructor/Instance getter for HDF5 profiler.
Definition: h5profiler.h:130
H5Profiler::setNumProcs
void const setNumProcs(const int &_numProcs)
Set number of MPI processes.
Definition: h5profiler.h:156
H5Profiler::createVectorDataSet
void createVectorDataSet(const std::string &path, int steps, std::size_t size, std::size_t maxSteps=HighFive::DataSpace::UNLIMITED)
Track vector values (per MPI rank).
Definition: h5profiler.h:226
H5Profiler::createValueDataSet
void createValueDataSet(const std::string &path, int steps, std::size_t maxSteps=HighFive::DataSpace::UNLIMITED)
Track single value (per MPI rank).
Definition: h5profiler.h:185
H5Profiler::setRank
void const setRank(const int &_myRank)
Set MPI rank.
Definition: h5profiler.h:150
H5Profiler::disableWrite
void const disableWrite()
Disable write to output file.
Definition: h5profiler.h:160
H5Profiler::value2file
void value2file(const std::string &path, T value)
Write value to single value data set.
Definition: h5profiler.h:202
Leapfrog
Definition: leapfrog.h:16
Logger
Logger class.
Definition: logger.h:80
Miluphpc
MilupHPC class.
Definition: miluphpc.h:74
Miluphpc::afterIntegrationStep
void afterIntegrationStep()
Definition: miluphpc.cpp:471
Miluphpc::integrate
virtual void integrate(int step=0)=0
Miluphpc::simulationTimeHandler
SimulationTimeHandler * simulationTimeHandler
Instance to handle the SimulationTime instances on device and host.
Definition: miluphpc.h:282
Miluphpc::particles2file
real particles2file(int step)
Definition: miluphpc.cpp:3409
PredictorCorrectorEuler
Definition: predictor_corrector_euler.h:42
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
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
gpuErrorcheck
#define gpuErrorcheck(ans)
check CUDA call
Definition: cuda_utilities.cuh:41
DEBUG
@ DEBUG
Definition: logger.h:47
ERROR
@ ERROR
warning log type
Definition: logger.h:51
INFO
@ INFO
debug log type
Definition: logger.h:48
WARN
@ WARN
trace log type
Definition: logger.h:50
TRACE
@ TRACE
info log type
Definition: logger.h:49
TIME
@ TIME
error log type
Definition: logger.h:52
ENV_LOCAL_RANK
#define ENV_LOCAL_RANK
Definition: main.cpp:15
main
int main(int argc, char **argv)
Definition: main.cpp:52
SetDeviceBeforeInit
void SetDeviceBeforeInit()
Definition: main.cpp:34
checkFile
bool checkFile(const std::string file, bool terminate=false, const std::string message="")
Definition: main.cpp:18
LOGCFG
structLog LOGCFG
Definition: main.cpp:50
ProfilerIds::ReceiveLengths::gravityParticles
const char *const gravityParticles
Definition: h5profiler.h:42
ProfilerIds::ReceiveLengths::gravityPseudoParticles
const char *const gravityPseudoParticles
Definition: h5profiler.h:43
ProfilerIds::ReceiveLengths::sph
const char *const sph
Definition: h5profiler.h:44
ProfilerIds::SendLengths::gravityPseudoParticles
const char *const gravityPseudoParticles
Definition: h5profiler.h:36
ProfilerIds::SendLengths::gravityParticles
const char *const gravityParticles
Definition: h5profiler.h:35
ProfilerIds::SendLengths::sph
const char *const sph
Definition: h5profiler.h:37
ProfilerIds::Time::Gravity::compTheta
const char *const compTheta
Definition: h5profiler.h:87
ProfilerIds::Time::Gravity::force
const char *const force
Definition: h5profiler.h:92
ProfilerIds::Time::Gravity::repairTree
const char *const repairTree
Definition: h5profiler.h:93
ProfilerIds::Time::Gravity::symbolicForce
const char *const symbolicForce
Definition: h5profiler.h:88
ProfilerIds::Time::Gravity::insertReceivedParticles
const char *const insertReceivedParticles
Definition: h5profiler.h:91
ProfilerIds::Time::Gravity::insertReceivedPseudoParticles
const char *const insertReceivedPseudoParticles
Definition: h5profiler.h:90
ProfilerIds::Time::Gravity::sending
const char *const sending
Definition: h5profiler.h:89
ProfilerIds::Time::SPH::insertReceivedParticles
const char *const insertReceivedParticles
Definition: h5profiler.h:101
ProfilerIds::Time::SPH::internalForces
const char *const internalForces
Definition: h5profiler.h:107
ProfilerIds::Time::SPH::soundSpeed
const char *const soundSpeed
Definition: h5profiler.h:104
ProfilerIds::Time::SPH::symbolicForce
const char *const symbolicForce
Definition: h5profiler.h:99
ProfilerIds::Time::SPH::pressure
const char *const pressure
Definition: h5profiler.h:105
ProfilerIds::Time::SPH::sending
const char *const sending
Definition: h5profiler.h:100
ProfilerIds::Time::SPH::fixedRadiusNN
const char *const fixedRadiusNN
Definition: h5profiler.h:102
ProfilerIds::Time::SPH::determineSearchRadii
const char *const determineSearchRadii
Definition: h5profiler.h:98
ProfilerIds::Time::SPH::repairTree
const char *const repairTree
Definition: h5profiler.h:108
ProfilerIds::Time::SPH::density
const char *const density
Definition: h5profiler.h:103
ProfilerIds::Time::SPH::compTheta
const char *const compTheta
Definition: h5profiler.h:97
ProfilerIds::Time::SPH::resend
const char *const resend
Definition: h5profiler.h:106
ProfilerIds::Time::Tree::tree
const char *const tree
Definition: h5profiler.h:78
ProfilerIds::Time::Tree::buildDomain
const char *const buildDomain
Definition: h5profiler.h:79
ProfilerIds::Time::Tree::createDomain
const char *const createDomain
Definition: h5profiler.h:77
ProfilerIds::Time::pseudoParticle
const char *const pseudoParticle
Definition: h5profiler.h:58
ProfilerIds::Time::gravity
const char *const gravity
Definition: h5profiler.h:59
ProfilerIds::Time::IO
const char *const IO
Definition: h5profiler.h:62
ProfilerIds::Time::removeParticles
const char *const removeParticles
Definition: h5profiler.h:54
ProfilerIds::Time::rhs
const char *const rhs
Definition: h5profiler.h:50
ProfilerIds::Time::reset
const char *const reset
Definition: h5profiler.h:53
ProfilerIds::Time::tree
const char *const tree
Definition: h5profiler.h:57
ProfilerIds::Time::loadBalancing
const char *const loadBalancing
Definition: h5profiler.h:52
ProfilerIds::Time::assignParticles
const char *const assignParticles
Definition: h5profiler.h:56
ProfilerIds::Time::boundingBox
const char *const boundingBox
Definition: h5profiler.h:55
ProfilerIds::Time::integrate
const char *const integrate
Definition: h5profiler.h:61
ProfilerIds::Time::sph
const char *const sph
Definition: h5profiler.h:60
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
real
double real
Definition: parameter.h:15
keyType
unsigned long keyType
Definition: parameter.h:18
MAX_LEVEL
#define MAX_LEVEL
Definition: parameter.h:25
POW_DIM
#define POW_DIM
Definition: parameter.h:40
IntegratorSelection::predictor_corrector_euler
@ predictor_corrector_euler
Definition: parameter.h:222
IntegratorSelection::leapfrog
@ leapfrog
Definition: parameter.h:222
IntegratorSelection::explicit_euler
@ explicit_euler
Definition: parameter.h:222
SimulationParameters
Definition: parameter.h:122
SimulationParameters::verbosity
int verbosity
verbosity level
Definition: parameter.h:125
To::device
@ device
Definition: parameter.h:165
structLog
Logger settings.
Definition: logger.h:58
structLog::level
typeLog level
Minimum logging level to be shown.
Definition: logger.h:62
structLog::omitTime
bool omitTime
omit time output/logging
Definition: logger.h:72
structLog::headers
bool headers
show headers
Definition: logger.h:60
structLog::logFileName
std::string logFileName
log file to be written
Definition: logger.h:70
structLog::write2LogFile
bool write2LogFile
write additionally to log file
Definition: logger.h:68
structLog::outputRank
int outputRank
MPI rank to be displayed (default: -1 -> display all)
Definition: logger.h:66
structLog::rank
int rank
whether to use MPI
Definition: logger.h:64

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