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.
Vector< VectorD< 3 > > Vector3Ds
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)