Merge pull request #1529 from rupertnash/compute_momentum
add compute momentum command
This commit is contained in:
@ -81,6 +81,7 @@ KOKKOS, o = USER-OMP, t = OPT.
|
|||||||
"meso/e/atom"_compute_meso_e_atom.html,
|
"meso/e/atom"_compute_meso_e_atom.html,
|
||||||
"meso/rho/atom"_compute_meso_rho_atom.html,
|
"meso/rho/atom"_compute_meso_rho_atom.html,
|
||||||
"meso/t/atom"_compute_meso_t_atom.html,
|
"meso/t/atom"_compute_meso_t_atom.html,
|
||||||
|
"momentum"_compute_momentum.html,
|
||||||
"msd"_compute_msd.html,
|
"msd"_compute_msd.html,
|
||||||
"msd/chunk"_compute_msd_chunk.html,
|
"msd/chunk"_compute_msd_chunk.html,
|
||||||
"msd/nongauss"_compute_msd_nongauss.html,
|
"msd/nongauss"_compute_msd_nongauss.html,
|
||||||
|
|||||||
@ -228,6 +228,7 @@ compute"_Commands_compute.html doc page are followed by one or more of
|
|||||||
"meso/e/atom"_compute_meso_e_atom.html - per-atom internal energy of Smooth-Particle Hydrodynamics atoms
|
"meso/e/atom"_compute_meso_e_atom.html - per-atom internal energy of Smooth-Particle Hydrodynamics atoms
|
||||||
"meso/rho/atom"_compute_meso_rho_atom.html - per-atom mesoscopic density of Smooth-Particle Hydrodynamics atoms
|
"meso/rho/atom"_compute_meso_rho_atom.html - per-atom mesoscopic density of Smooth-Particle Hydrodynamics atoms
|
||||||
"meso/t/atom"_compute_meso_t_atom.html - per-atom internal temperature of Smooth-Particle Hydrodynamics atoms
|
"meso/t/atom"_compute_meso_t_atom.html - per-atom internal temperature of Smooth-Particle Hydrodynamics atoms
|
||||||
|
"momentum"_compute_momentum.html - translational momentum
|
||||||
"msd"_compute_msd.html - mean-squared displacement of group of atoms
|
"msd"_compute_msd.html - mean-squared displacement of group of atoms
|
||||||
"msd/chunk"_compute_msd_chunk.html - mean-squared displacement for each chunk
|
"msd/chunk"_compute_msd_chunk.html - mean-squared displacement for each chunk
|
||||||
"msd/nongauss"_compute_msd_nongauss.html - MSD and non-Gaussian parameter of group of atoms
|
"msd/nongauss"_compute_msd_nongauss.html - MSD and non-Gaussian parameter of group of atoms
|
||||||
|
|||||||
49
doc/src/compute_momentum.txt
Normal file
49
doc/src/compute_momentum.txt
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
|
||||||
|
|
||||||
|
:link(lws,http://lammps.sandia.gov)
|
||||||
|
:link(ld,Manual.html)
|
||||||
|
:link(lc,Commands_all.html)
|
||||||
|
|
||||||
|
:line
|
||||||
|
|
||||||
|
compute momentum command :h3
|
||||||
|
|
||||||
|
[Syntax:]
|
||||||
|
|
||||||
|
compute ID group-ID momentum :pre
|
||||||
|
|
||||||
|
ID, group-ID are documented in "compute"_compute.html command
|
||||||
|
momentum = style name of this compute command :ul
|
||||||
|
|
||||||
|
[Examples:]
|
||||||
|
|
||||||
|
compute 1 all momentum :pre
|
||||||
|
|
||||||
|
[Description:]
|
||||||
|
|
||||||
|
Define a computation that calculates the translational momentum
|
||||||
|
of a group of particles.
|
||||||
|
|
||||||
|
The momentum of each particles is computed as m v, where m and v are
|
||||||
|
the mass and velocity of the particle.
|
||||||
|
|
||||||
|
[Output info:]
|
||||||
|
|
||||||
|
This compute calculates a global vector (the summed momentum) of
|
||||||
|
length 3. This value can be used by any command that uses a global
|
||||||
|
vector value from a compute as input. See the "Howto
|
||||||
|
output"_Howto_output.html doc page for an overview of LAMMPS output
|
||||||
|
options.
|
||||||
|
|
||||||
|
The vector value calculated by this compute is "extensive". The vector
|
||||||
|
value will be in mass*velocity "units"_units.html.
|
||||||
|
|
||||||
|
[Restrictions:]
|
||||||
|
|
||||||
|
This compute is part of the USER-MISC package. It is only enabled if
|
||||||
|
LAMMPS was built with that package. See the "Build
|
||||||
|
package"_Build_package.html doc page for more info.
|
||||||
|
|
||||||
|
[Related commands:]
|
||||||
|
|
||||||
|
[Default:] none
|
||||||
@ -58,6 +58,7 @@ Computes :h1
|
|||||||
compute_meso_e_atom
|
compute_meso_e_atom
|
||||||
compute_meso_rho_atom
|
compute_meso_rho_atom
|
||||||
compute_meso_t_atom
|
compute_meso_t_atom
|
||||||
|
compute_momentum
|
||||||
compute_msd
|
compute_msd
|
||||||
compute_msd_chunk
|
compute_msd_chunk
|
||||||
compute_msd_nongauss
|
compute_msd_nongauss
|
||||||
|
|||||||
@ -469,6 +469,7 @@ compute_ke_rigid.html
|
|||||||
compute_meso_e_atom.html
|
compute_meso_e_atom.html
|
||||||
compute_meso_rho_atom.html
|
compute_meso_rho_atom.html
|
||||||
compute_meso_t_atom.html
|
compute_meso_t_atom.html
|
||||||
|
compute_momentum.html
|
||||||
compute_msd.html
|
compute_msd.html
|
||||||
compute_msd_chunk.html
|
compute_msd_chunk.html
|
||||||
compute_msd_nongauss.html
|
compute_msd_nongauss.html
|
||||||
|
|||||||
65
examples/USER/misc/momentum/in.momentum
Normal file
65
examples/USER/misc/momentum/in.momentum
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
# Test compute momentum with by comparing it's output with compute reduce
|
||||||
|
|
||||||
|
# Script will output the two computations of the total momentum as
|
||||||
|
# thermo vars - they should be identical
|
||||||
|
|
||||||
|
# 3D LJ Poiseuille flow simulation
|
||||||
|
dimension 3
|
||||||
|
boundary p p p
|
||||||
|
|
||||||
|
atom_style atomic
|
||||||
|
neighbor 0.3 bin
|
||||||
|
neigh_modify delay 5
|
||||||
|
|
||||||
|
# create geometry
|
||||||
|
lattice hcp 0.5
|
||||||
|
region box block 0 20 0 10 0 10
|
||||||
|
create_box 3 box
|
||||||
|
create_atoms 1 box
|
||||||
|
|
||||||
|
mass 1 1.0
|
||||||
|
mass 2 1.0
|
||||||
|
mass 3 1.0
|
||||||
|
|
||||||
|
# LJ potentials
|
||||||
|
pair_style lj/cut 1.0
|
||||||
|
pair_coeff * * 1.0 1.0 1.0
|
||||||
|
|
||||||
|
# define groups
|
||||||
|
region 1 block INF INF INF 1.0 INF INF
|
||||||
|
group lower region 1
|
||||||
|
region 2 block INF INF 9.0 INF INF INF
|
||||||
|
group upper region 2
|
||||||
|
group boundary union lower upper
|
||||||
|
group liquid subtract all boundary
|
||||||
|
|
||||||
|
set group lower type 2
|
||||||
|
set group upper type 3
|
||||||
|
|
||||||
|
# temperature settings
|
||||||
|
compute mobile liquid temp
|
||||||
|
velocity liquid create 1.0 100 temp mobile
|
||||||
|
fix 1 all nve
|
||||||
|
fix 2 liquid temp/rescale 200 1.0 2.0 0.02 1.0
|
||||||
|
fix_modify 2 temp mobile
|
||||||
|
|
||||||
|
velocity boundary set 0.0 0.0 0.0
|
||||||
|
fix 4 lower setforce 0.0 0.0 0.0
|
||||||
|
fix 5 upper setforce 0.0 0.0 0.0
|
||||||
|
fix 6 liquid addforce 0.1 0.0 0.0
|
||||||
|
|
||||||
|
# Compute total momentum
|
||||||
|
compute mom liquid momentum
|
||||||
|
|
||||||
|
# Comparison (momentum variables + compute reduce)
|
||||||
|
variable mx atom mass*vx
|
||||||
|
variable my atom mass*vy
|
||||||
|
variable mz atom mass*vz
|
||||||
|
compute mom_red liquid reduce sum v_mx v_my v_mz
|
||||||
|
|
||||||
|
# Run
|
||||||
|
timestep 0.003
|
||||||
|
thermo 1000
|
||||||
|
thermo_style custom step c_mom_red[*] c_mom[*]
|
||||||
|
|
||||||
|
run 100000
|
||||||
@ -32,6 +32,7 @@ compute cnp/atom, Paulo Branicio (USC), branicio at usc.edu, 31 May 2017
|
|||||||
compute entropy/atom, Pablo Piaggi (EPFL), pablo.piaggi at epfl.ch, 15 June 2018
|
compute entropy/atom, Pablo Piaggi (EPFL), pablo.piaggi at epfl.ch, 15 June 2018
|
||||||
compute gyration/shape, Evangelos Voyiatzis, evoyiatzis at gmail.com, 25 July 2019
|
compute gyration/shape, Evangelos Voyiatzis, evoyiatzis at gmail.com, 25 July 2019
|
||||||
compute pressure/cylinder, Cody K. Addington (NCSU), , 2 Oct 2018
|
compute pressure/cylinder, Cody K. Addington (NCSU), , 2 Oct 2018
|
||||||
|
compute momentum, Rupert Nash (University of Edinburgh), r.nash at epcc.ed.ac.uk, 28 June 2019
|
||||||
compute stress/mop, Romain Vermorel (U Pau) & Laurent Joly (U Lyon), romain.vermorel at univ-pau.fr & ljoly.ulyon at gmail.com, 5 Sep 18
|
compute stress/mop, Romain Vermorel (U Pau) & Laurent Joly (U Lyon), romain.vermorel at univ-pau.fr & ljoly.ulyon at gmail.com, 5 Sep 18
|
||||||
compute stress/mop/profile, Romain Vermorel (U Pau) & Laurent Joly (U Lyon), romain.vermorel at univ-pau.fr & ljoly.ulyon at gmail.com, 5 Sep 18
|
compute stress/mop/profile, Romain Vermorel (U Pau) & Laurent Joly (U Lyon), romain.vermorel at univ-pau.fr & ljoly.ulyon at gmail.com, 5 Sep 18
|
||||||
compute temp/rotate, Laurent Joly (U Lyon), ljoly.ulyon at gmail.com, 8 Aug 11
|
compute temp/rotate, Laurent Joly (U Lyon), ljoly.ulyon at gmail.com, 8 Aug 11
|
||||||
|
|||||||
56
src/USER-MISC/compute_momentum.cpp
Normal file
56
src/USER-MISC/compute_momentum.cpp
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
|
||||||
|
#include "compute_momentum.h"
|
||||||
|
#include <mpi.h>
|
||||||
|
#include "atom.h"
|
||||||
|
#include "error.h"
|
||||||
|
#include "update.h"
|
||||||
|
|
||||||
|
using namespace LAMMPS_NS;
|
||||||
|
|
||||||
|
ComputeMomentum::ComputeMomentum(LAMMPS *lmp, int narg, char **arg) :
|
||||||
|
Compute(lmp, narg, arg)
|
||||||
|
{
|
||||||
|
if (narg != 3) error->all(FLERR,"Illegal compute momentum command");
|
||||||
|
|
||||||
|
vector_flag = 1;
|
||||||
|
size_vector = 3;
|
||||||
|
extvector = 1;
|
||||||
|
vector = new double[size_vector];
|
||||||
|
}
|
||||||
|
|
||||||
|
ComputeMomentum::~ComputeMomentum() {
|
||||||
|
delete[] vector;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComputeMomentum::init()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComputeMomentum::compute_vector()
|
||||||
|
{
|
||||||
|
invoked_vector = update->ntimestep;
|
||||||
|
|
||||||
|
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 mom[3] = {0.0, 0.0, 0.0};
|
||||||
|
|
||||||
|
if (rmass) {
|
||||||
|
for (int i = 0; i < nlocal; i++)
|
||||||
|
if (mask[i] & groupbit) {
|
||||||
|
for(int j = 0; j < 3; ++j)
|
||||||
|
mom[j] += rmass[i] * v[i][j];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < nlocal; i++)
|
||||||
|
if (mask[i] & groupbit)
|
||||||
|
for(int j = 0; j < 3; ++j)
|
||||||
|
mom[j] += mass[type[i]] * v[i][j];
|
||||||
|
}
|
||||||
|
|
||||||
|
MPI_Allreduce(&mom, vector, 3, MPI_DOUBLE, MPI_SUM, world);
|
||||||
|
}
|
||||||
36
src/USER-MISC/compute_momentum.h
Normal file
36
src/USER-MISC/compute_momentum.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#ifdef COMPUTE_CLASS
|
||||||
|
|
||||||
|
ComputeStyle(momentum,ComputeMomentum)
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifndef LMP_COMPUTE_MOMENTUM_H
|
||||||
|
#define LMP_COMPUTE_MOMENTUM_H
|
||||||
|
|
||||||
|
#include "compute.h"
|
||||||
|
|
||||||
|
namespace LAMMPS_NS {
|
||||||
|
|
||||||
|
class ComputeMomentum : public Compute {
|
||||||
|
public:
|
||||||
|
ComputeMomentum(class LAMMPS *, int, char **);
|
||||||
|
virtual ~ComputeMomentum();
|
||||||
|
|
||||||
|
virtual void init();
|
||||||
|
virtual void compute_vector();
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ERROR/WARNING messages:
|
||||||
|
|
||||||
|
E: Illegal ... command
|
||||||
|
|
||||||
|
Self-explanatory. Check the input script syntax and compare to the
|
||||||
|
documentation for the command. You can use -echo screen as a
|
||||||
|
command-line option when running LAMMPS to see the offending line.
|
||||||
|
|
||||||
|
*/
|
||||||
Reference in New Issue
Block a user