9 #ifndef IMPATOM_BROWNIAN_DYNAMICS_H
10 #define IMPATOM_BROWNIAN_DYNAMICS_H
12 #include <IMP/atom/atom_config.h>
19 #include <IMP/internal/units.h>
22 IMPATOM_BEGIN_NAMESPACE
24 #ifdef IMP_KERNEL_CUDA_LIB
25 #define IMP_ATOM_DEFAULT_BD_RANDOM_POOL_SIZE 1000000
27 #define IMP_ATOM_DEFAULT_BD_RANDOM_POOL_SIZE 10000
31 class SimulationParameters;
83 double max_step_in_A_;
87 unsigned int i_random_pool_;
108 double wave_factor = 1.0,
109 unsigned int random_pool_size=IMP_ATOM_DEFAULT_BD_RANDOM_POOL_SIZE);
130 double dt_fs)
override;
143 virtual void do_advance_chunk(
double dtfs,
double ikt,
145 unsigned int begin,
unsigned int end);
159 void reset_random_pool();
165 if(i_random_pool_ >= random_pool_.size()){
168 return random_pool_[i_random_pool_++]*sigma;
184 {
return forces_[i]; }
189 double dtfs,
double ikT);
191 double dtfs,
double ikT);
192 void advance_orientation_0(
ParticleIndex pi,
double dtfs,
double ikT);
203 IMPATOMEXPORT
double get_harmonic_sigma(
double D,
double f);
205 IMPATOM_END_NAMESPACE
The base class for simulators.
A decorator for a diffusing particle.
algebra::Vector3D const & get_force(unsigned int i) const
get the force felt on particle i in kCal/mol/A
void set_maximum_move(double ms_in_A)
sets the maximum move in A along either x,y or z axes
void set_use_stochastic_runge_kutta(bool tf)
Set whether to use the stochastic Runge Kutta scheme.
#define IMP_OBJECT_METHODS(Name)
Define the basic things needed by any Object.
algebra::Vector3Ds const & get_forces() const
get the force vectors felt on each particle in kCal/mol/A
virtual bool get_is_simulation_particle(ParticleIndex p) const =0
Return true if the passed particle is appropriate for the simulation.
double get_max_step() const
Base class for all optimizers.
virtual double do_step(const ParticleIndexes &sc, double dt)=0
Perform a single time step.
Class for storing model, its restraints, constraints, and particles.
virtual void setup(const ParticleIndexes &)
Simple Brownian dynamics simulator.
Base class for "simulators", such as molecular dynamics.
Classes to handle individual model particles. (Note that implementation of inline functions is in int...
Macros for maintaining molecular hierarchies.
void set_force(unsigned int i, algebra::Vector3D const &f)
set the force felt on particle i to f
double get_maximum_time_step_estimate(BrownianDynamics *bd)
double get_sample(double sigma)