diff --git a/src/compute_ke.cpp b/src/compute_ke.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c9e35d3fcbca1226995a5107fb2e6c3ded9f9ad6 --- /dev/null +++ b/src/compute_ke.cpp @@ -0,0 +1,74 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "mpi.h" +#include "compute_ke.h" +#include "atom.h" +#include "force.h" +#include "domain.h" +#include "group.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define INVOKED_SCALAR 1 + +/* ---------------------------------------------------------------------- */ + +ComputeKE::ComputeKE(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg != 3) error->all("Illegal compute ke command"); + + scalar_flag = 1; + extscalar = 1; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeKE::init() +{ + pfactor = 0.5 * force->mvv2e; +} + +/* ---------------------------------------------------------------------- */ + +double ComputeKE::compute_scalar() +{ + invoked |= INVOKED_SCALAR; + + double **v = atom->v; + double *rmass = atom->rmass; + double *mass = atom->mass; + int *mask = atom->mask; + int *type = atom->type; + int nlocal = atom->nlocal; + + double ke = 0.0; + + if (mass) { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + ke += mass[type[i]] * + (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]); + + } else { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + ke += rmass[i] * (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]); + } + + MPI_Allreduce(&ke,&scalar,1,MPI_DOUBLE,MPI_SUM,world); + scalar *= pfactor; + return scalar; +} diff --git a/src/compute_ke.h b/src/compute_ke.h new file mode 100644 index 0000000000000000000000000000000000000000..48c706a823bc0836280851d6e51dbe03ec43e161 --- /dev/null +++ b/src/compute_ke.h @@ -0,0 +1,33 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef COMPUTE_KE_H +#define COMPUTE_KE_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeKE : public Compute { + public: + ComputeKE(class LAMMPS *, int, char **); + void init(); + double compute_scalar(); + + private: + double pfactor; +}; + +} + +#endif diff --git a/src/style.h b/src/style.h index ef7a3680346fca38d13a74eb05ef80c42d49a233..ec8952d41a61c323aeb6a5ec76e71d890f617bcd 100644 --- a/src/style.h +++ b/src/style.h @@ -80,6 +80,7 @@ CommandStyle(write_restart,WriteRestart) #include "compute_coord_atom.h" #include "compute_displace_atom.h" #include "compute_group_group.h" +#include "compute_ke.h" #include "compute_ke_atom.h" #include "compute_pe.h" #include "compute_pe_atom.h" @@ -101,6 +102,7 @@ ComputeStyle(centro/atom,ComputeCentroAtom) ComputeStyle(coord/atom,ComputeCoordAtom) ComputeStyle(displace/atom,ComputeDisplaceAtom) ComputeStyle(group/group,ComputeGroupGroup) +ComputeStyle(ke,ComputeKE) ComputeStyle(ke/atom,ComputeKEAtom) ComputeStyle(pe,ComputePE) ComputeStyle(pe/atom,ComputePEAtom)