Commit 101ee4fa by Francois Gygi

Added center-of-mass velocity functions.


git-svn-id: http://qboxcode.org/svn/qb/trunk@465 cba15fb0-1239-40c8-b417-11db7ca47a34
parent 79bbb99c
......@@ -3,7 +3,7 @@
// AtomSet.C
//
////////////////////////////////////////////////////////////////////////////////
// $Id: AtomSet.C,v 1.12 2006-03-07 07:02:28 fgygi Exp $
// $Id: AtomSet.C,v 1.13 2006-08-22 15:09:48 fgygi Exp $
#include "AtomSet.h"
#include "Species.h"
......@@ -343,6 +343,46 @@ void AtomSet::reset_velocities(void)
}
////////////////////////////////////////////////////////////////////////////////
D3vector AtomSet::vcm(void) const
{
D3vector mvsum;
double msum = 0.0;
for ( int is = 0; is < atom_list.size(); is++ )
{
double mass = species_list[is]->mass();
int i = 0;
for ( int ia = 0; ia < atom_list[is].size(); ia++ )
{
D3vector v = atom_list[is][ia]->velocity();
mvsum += mass * v;
msum += mass;
}
}
if ( msum == 0.0 ) return D3vector(0,0,0);
return mvsum / msum;
}
////////////////////////////////////////////////////////////////////////////////
void AtomSet::reset_vcm(void)
{
D3vector vc = vcm();
vector<vector<double> > v;
get_velocities(v);
// subtract center of mass velocity
for ( int is = 0; is < v.size(); is++ )
{
int i = 0;
for ( int ia = 0; ia < atom_list[is].size(); ia++ )
{
v[is][i++] -= vc.x;
v[is][i++] -= vc.y;
v[is][i++] -= vc.z;
}
}
set_velocities(v);
}
////////////////////////////////////////////////////////////////////////////////
void AtomSet::sync()
{
#if USE_MPI
......
......@@ -3,7 +3,7 @@
// AtomSet.h
//
////////////////////////////////////////////////////////////////////////////////
// $Id: AtomSet.h,v 1.12 2006-05-13 05:36:08 fgygi Exp $
// $Id: AtomSet.h,v 1.13 2006-08-22 15:09:48 fgygi Exp $
#ifndef ATOMSET_H
#define ATOMSET_H
......@@ -61,6 +61,8 @@ class AtomSet
void set_velocities(const vector<vector<double> >& vel);
void sync(void);
void reset_velocities(void);
D3vector vcm(void) const;
void reset_vcm(void);
int size(void);
};
ostream& operator << ( ostream &os, AtomSet &as );
......
......@@ -21,10 +21,9 @@ class D3vector
double x, y, z;
// explicit constructor to avoid implicit conversion from double to D3vector
explicit D3vector(const double& xv = 0,
const double& yv = 0,
const double& zv = 0) :
x(xv), y(yv), z(zv) {}
explicit D3vector(const double& xv, const double& yv, const double& zv) :
x(xv), y(yv), z(zv) {}
explicit D3vector(void) : x(0.0), y(0.0), z(0.0) {}
explicit D3vector(const double* r) : x(r[0]), y(r[1]), z(r[2]) {}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment