Ejemplo n.º 1
0
void MolecularDynamics::assign_velocities(Float temperature) {
  ParticleIndexes ips = get_simulation_particle_indexes();
  setup_degrees_of_freedom(ips);
  ParticlesTemp ps = IMP::internal::get_particle(get_model(), ips);

  boost::normal_distribution<Float> mrng(0., 1.);
  boost::variate_generator<RandomNumberGenerator &,
                           boost::normal_distribution<Float> >
      sampler(random_number_generator, mrng);

  for (ParticlesTemp::iterator iter = ps.begin(); iter != ps.end();
       ++iter) {
    Particle *p = *iter;
    LinearVelocity(p).set_velocity(algebra::Vector3D(sampler(), sampler(),
                                                     sampler()));
  }

  Float rescale =
      sqrt(temperature / get_kinetic_temperature(get_kinetic_energy()));

  for (ParticlesTemp::iterator iter = ps.begin(); iter != ps.end();
       ++iter) {
    Particle *p = *iter;
    LinearVelocity v(p);

    algebra::Vector3D velocity = v.get_velocity();
    velocity *= rescale;
    v.set_velocity(velocity);
  }
}
Ejemplo n.º 2
0
MissionControlSpeedFilter::MissionControlSpeedFilter()
:
  baseTwistInHeadingFrame_(),
  maximumBaseTwistInHeadingFrame_(LinearVelocity(std::numeric_limits<LinearVelocity::Scalar>::max(),
                                                 std::numeric_limits<LinearVelocity::Scalar>::max(),
                                                 std::numeric_limits<LinearVelocity::Scalar>::max()),
                                  LocalAngularVelocity(std::numeric_limits<LinearVelocity::Scalar>::max(),
                                                       std::numeric_limits<LinearVelocity::Scalar>::max(),
                                                       std::numeric_limits<LinearVelocity::Scalar>::max()) )
{
  filteredVelocities_[0].setAlpha(0.005);
  filteredVelocities_[1].setAlpha(0.05);
  filteredVelocities_[2].setAlpha(0.05);
}
Ejemplo n.º 3
0
Float MolecularDynamics::get_kinetic_energy() const {
  // Conversion factor to get energy in kcal/mol from velocities in A/fs and
  // mass in g/mol
  static const Float conversion = 1.0 / 4.1868e-4;

  Float ekinetic = 0.;
  ParticlesTemp ps = get_simulation_particles();
  for (ParticlesTemp::iterator iter = ps.begin(); iter != ps.end();
       ++iter) {
    Particle *p = *iter;
    algebra::Vector3D v = LinearVelocity(p).get_velocity();
    Float mass = Mass(p).get_mass();

    ekinetic += mass * (v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
  }
  return 0.5 * ekinetic * conversion;
}
Ejemplo n.º 4
0
 void ICreature::CastEigenToInduced()
 {
   SetLinearVelocity(LinearVelocity(ZERO, GetTotalLinVelocity()));
   SetAngularSpeed(AngularSpeed(ZERO, GetTotalAngSpeed()));
 }