7#include "ensemble/CavityEnsemble.h"
8#include "io/TimerProfiler.h"
9#include "thermostats/VelocityScalingThermostat.h"
10#include "utils/FixedSizeQueue.h"
11#include "utils/FunctionWrapper.h"
15#include "plugins/PluginFactory.h"
17#if !defined (SIMULATION_SRC) or defined (IN_IDE_PARSER)
23class ParticleInsertion;
29#define _simulation (*global_simulation)
34#include <io/TaskTimingProfiler.h>
37class SteereoSimSteering;
38class SteereoCouplingSim;
58const int VELSCALE_THERMOSTAT = 1;
61class FastMultipoleMethod;
132 static void exit(
int exitcode);
238 global_log->info() <<
"Max loop-abort-time set: " <<
time <<
"\n";
239 _wallTimeEnabled =
true;
243 double getcutoffRadius()
const {
return _cutoffRadius; }
244 void setcutoffRadius(
double cutoffRadius) { _cutoffRadius = cutoffRadius; }
245 double getLJCutoff()
const {
return _LJCutoffRadius; }
246 void setLJCutoff(
double LJCutoffRadius) { _LJCutoffRadius = LJCutoffRadius; }
247 unsigned long getTotalNumberOfMolecules()
const;
275 double Tfactor(
unsigned long simstep);
277 void initCanonical(
unsigned long t) { this->_initCanonical = t; }
278 void initGrandCanonical(
unsigned long t) { this->_initGrandCanonical = t; }
279 void initStatistics(
unsigned long t) { this->_initStatistics = t; }
280 unsigned long getInitStatistics()
const {
return this->_initStatistics; }
282 void setSimulationTime(
double curtime) { _simulationTime = curtime; }
283 void advanceSimulationTime(
double timestep) { _simulationTime += timestep; }
284 double getSimulationTime() {
return _simulationTime; }
286 void setEnsemble(
Ensemble *ensemble) { _ensemble = ensemble; }
287 Ensemble* getEnsemble() {
return _ensemble; }
289 std::shared_ptr<MemoryProfiler> getMemoryProfiler() {
290 return _memoryProfiler;
294 return &_timerProfiler;
300 void setH(
double h_extern) {h = h_extern;}
305 double _simulationTime;
310 unsigned long _maxMoleculeId;
313 double _cutoffRadius;
316 double _LJCutoffRadius;
331 unsigned _collectThermostatDirectedVelocity;
337 unsigned long _numberOfTimesteps;
339 unsigned long getNumberOfTimesteps()
const;
344 unsigned long _simstep;
347 unsigned long _initSimulation;
349 unsigned long _initCanonical;
351 unsigned long _initGrandCanonical;
353 unsigned long _initStatistics;
382 unsigned _momentumInterval;
400 std::shared_ptr<MemoryProfiler> _memoryProfiler;
402#ifdef TASKTIMINGPROFILE
404 TaskTimingProfiler* _taskTimingProfiler;
407#ifdef TASKTIMINGPROFILE
408 TaskTimingProfiler* getTaskTimingProfiler(){
409 return _taskTimingProfiler;
414 if(_loopCompTimeSteps==0){
417 double t = _loopCompTime/_loopCompTimeSteps;
419 _loopCompTimeSteps = 0;
422 void setOutputPrefix(
std::string prefix ) { _outputPrefix = prefix; }
423 void setOutputPrefix(
char *prefix ) { _outputPrefix =
std::string( prefix ); }
424 std::string getOutputPrefix() {
return _outputPrefix; }
426 void enableFinalCheckpoint() { _finalCheckpoint =
true; }
427 void disableFinalCheckpoint() { _finalCheckpoint =
false; }
429 void useLegacyCellProcessor() { _legacyCellProcessor =
true; }
431 void enableMemoryProfiler() {
432 _memoryProfiler = std::make_shared<MemoryProfiler>();
433 _memoryProfiler->registerObject(
reinterpret_cast<MemoryProfilable**
>(&_moleculeContainer));
434 _memoryProfiler->registerObject(
reinterpret_cast<MemoryProfilable**
>(&_domainDecomposition));
437 void setForcedCheckpointTime(
double time) { _forced_checkpoint_time =
time; }
447 std::list<PluginBase*>* getPluginList(){
453 void writeGlobalEnergyLog(
const double& globalUpot,
const double& globalT,
const double& globalPressure);
466 Timer* _timerForLoad{
nullptr};
468 Timer _timeFromStart;
469 double _maxWallTime = -1;
470 bool _wallTimeEnabled =
false;
473 bool _finalCheckpoint;
476 bool _legacyCellProcessor =
false;
483 bool _overlappingP2P {
false};
486 std::list<PluginBase*> _plugins;
493 std::map<std::string, FunctionWrapper> _callbacks;
507 double _forced_checkpoint_time;
510 double _loopCompTime;
512 int _loopCompTimeSteps;
515 unsigned long _nWriteFreqGlobalEnergy;
524 struct PrepareStartOptions {
526 } _prepare_start_opt;
Definition: CellProcessor.h:29
handle boundary region and multiple processes
Definition: DomainDecompBase.h:51
This class is used to read in the phasespace and to handle macroscopic values.
Definition: Domain.h:47
Base class for ensembles.
Definition: EnsembleBase.h:47
Definition: FixedSizeQueue.h:15
Definition: FlopCounter.h:60
Definition: Homogeneous.h:15
Update velocities and positions.
Definition: Integrator.h:32
Definition: LongRangeCorrection.h:12
Definition: MemoryProfiler.h:13
Definition: MemoryProfiler.h:22
This Interface is used to get access to particles and pairs of particles.
Definition: ParticleContainer.h:69
interface for defining the action performed when processing a pair
Definition: ParticlePairsHandler.h:38
The PluginBase class provides the interface for any kind of output/plugin classes - called "(output) ...
Definition: PluginBase.h:47
This class calculates the Radial Distribution Function (RDF).
Definition: RDF.h:37
Controls the simulation process.
Definition: Simulation.h:70
void pluginEndStepCall(unsigned long simstep)
call plugins every nth-simstep
Definition: Simulation.cpp:1216
void setDomainDecomposition(DomainDecompBase *domainDecomposition)
Definition: Simulation.cpp:1321
Domain * getDomain()
Definition: Simulation.h:220
Integrator * getIntegrator()
Definition: Simulation.h:223
double getAndResetOneLoopCompTime()
computational time for one execution of traverseCell
Definition: Simulation.h:413
void performOverlappingDecompositionAndCellTraversalStep(double etime)
Definition: Simulation.cpp:1301
void readXML(XMLfileUnits &xmlconfig)
Read in XML configuration for simulation and all its included objects.
Definition: Simulation.cpp:160
void simulate()
Controls the main loop of the simulation.
Definition: Simulation.cpp:920
void initConfigXML(const std::string &inputfilename)
Opens given XML file and reads in parameters for the simulaion.
Definition: Simulation.cpp:687
double getH()
get Planck constant
Definition: Simulation.h:298
void refreshParticleIDs()
Refresh particle IDs to continuous numbering.
Definition: Simulation.cpp:1408
void readConfigFile(std::string filename)
process configuration file
Definition: Simulation.cpp:675
Simulation()
Definition: Simulation.cpp:85
PluginBase * getPlugin(const std::string &name)
get plugin
Definition: Simulation.cpp:1391
static void exit(int exitcode)
Terminate simulation with given exit code.
Definition: Simulation.cpp:155
void updateParticleContainerAndDecomposition(double lastTraversalTime, bool useTimers)
Definition: Simulation.cpp:1265
void initialize()
Definition: Simulation.cpp:1345
void setLoopAbortTime(double time)
Definition: Simulation.h:237
DomainDecompBase & domainDecomposition()
Definition: Simulation.h:217
unsigned long getSimulationStep()
Definition: Simulation.h:235
void setNumTimesteps(unsigned long steps)
Definition: Simulation.h:229
~Simulation()
Definition: Simulation.cpp:127
unsigned long getNumInitTimesteps()
Definition: Simulation.h:233
void setH(double h_extern)
set Planck constant
Definition: Simulation.h:300
void prepare_start()
calculate all values for the starting timepoint
Definition: Simulation.cpp:764
bool keepRunning()
Checks if Simsteps or MaxWallTime are reached.
Definition: Simulation.cpp:1372
void finalize()
clean up simulation
Definition: Simulation.cpp:1242
double Tfactor(unsigned long simstep)
Temperature increase factor function during automatic equilibration.
Definition: Simulation.cpp:1331
ParticleContainer * getMoleculeContainer()
Definition: Simulation.h:226
void initGlobalEnergyLog()
unsigned long getNumTimesteps()
Definition: Simulation.h:231
Definition: TemperatureControl.h:166
Class for managing timers across the simulation.
Definition: TimerProfiler.h:28
This class is used to measure times in sequential and parallel versions.
Definition: Timer.h:59
Definition: VelocityScalingThermostat.h:9
XML file with unit attributes abstraction.
Definition: xmlfileUnits.h:25
Definition: FastMultipoleMethod.h:45
Definition: L2PCellProcessor.cpp:15
::xsd::cxx::tree::name< char, token > name
C++ type corresponding to the Name XML Schema built-in type.
Definition: vtk-punstructured.h:288
::xsd::cxx::tree::time< char, simple_type > time
C++ type corresponding to the time XML Schema built-in type.
Definition: vtk-punstructured.h:438
::xsd::cxx::tree::string< char, simple_type > string
C++ type corresponding to the string XML Schema built-in type.
Definition: vtk-punstructured.h:270