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;
81 double max_step_in_A_;
85 unsigned int i_random_pool_;
106 double wave_factor = 1.0,
107 unsigned int random_pool_size=IMP_ATOM_DEFAULT_BD_RANDOM_POOL_SIZE);
110 void set_use_stochastic_runge_kutta(
bool tf) { srk_ = tf; }
141 virtual void do_advance_chunk(
double dtfs,
double ikt,
143 unsigned int begin,
unsigned int end);
157 void reset_random_pool();
163 if(i_random_pool_ >= random_pool_.size()){
166 return random_pool_[i_random_pool_++]*sigma;
182 {
return forces_[i]; }
187 double dtfs,
double ikT);
189 double dtfs,
double ikT);
190 void advance_orientation_0(
ParticleIndex pi,
double dtfs,
double ikT);
201 IMPATOMEXPORT
double get_harmonic_sigma(
double D,
double f);
203 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
#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.
Simple molecular dynamics optimizer.
Classes to handle individual model particles. (Note that implementation of inline functions is in int...
Various important macros for implementing decorators.
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)
#define IMP_OVERRIDE
Cause a compile error if this method does not override a parent method.