adding documentation and integration fix
This commit is contained in:
6
src/.gitignore
vendored
6
src/.gitignore
vendored
@ -421,14 +421,14 @@
|
|||||||
/atom_vec_full.h
|
/atom_vec_full.h
|
||||||
/atom_vec_full_hars.cpp
|
/atom_vec_full_hars.cpp
|
||||||
/atom_vec_full_hars.h
|
/atom_vec_full_hars.h
|
||||||
/atom_vec_granular.cpp
|
|
||||||
/atom_vec_granular.h
|
|
||||||
/atom_vec_molecular.cpp
|
/atom_vec_molecular.cpp
|
||||||
/atom_vec_molecular.h
|
/atom_vec_molecular.h
|
||||||
/atom_vec_oxdna.cpp
|
/atom_vec_oxdna.cpp
|
||||||
/atom_vec_oxdna.h
|
/atom_vec_oxdna.h
|
||||||
/atom_vec_peri.cpp
|
/atom_vec_peri.cpp
|
||||||
/atom_vec_peri.h
|
/atom_vec_peri.h
|
||||||
|
/atom_vec_sphere_temperature.cpp
|
||||||
|
/atom_vec_sphere_temperature.h
|
||||||
/atom_vec_template.cpp
|
/atom_vec_template.cpp
|
||||||
/atom_vec_template.h
|
/atom_vec_template.h
|
||||||
/body_nparticle.cpp
|
/body_nparticle.cpp
|
||||||
@ -1510,6 +1510,8 @@
|
|||||||
/fix_smd_wall_surface.h
|
/fix_smd_wall_surface.h
|
||||||
/fix_srp.cpp
|
/fix_srp.cpp
|
||||||
/fix_srp.h
|
/fix_srp.h
|
||||||
|
/fix_temp_integrate.cpp
|
||||||
|
/fix_temp_integrate.h
|
||||||
/fix_tfmc.cpp
|
/fix_tfmc.cpp
|
||||||
/fix_tfmc.h
|
/fix_tfmc.h
|
||||||
/fix_ttm.cpp
|
/fix_ttm.cpp
|
||||||
|
|||||||
160
src/GRANULAR/atom_vec_sphere_temperature.cpp
Normal file
160
src/GRANULAR/atom_vec_sphere_temperature.cpp
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
https://www.lammps.org/, 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 "atom_vec_sphere_temperature.h"
|
||||||
|
|
||||||
|
#include "atom.h"
|
||||||
|
#include "error.h"
|
||||||
|
#include "fix.h"
|
||||||
|
#include "fix_adapt.h"
|
||||||
|
#include "math_const.h"
|
||||||
|
#include "modify.h"
|
||||||
|
|
||||||
|
using namespace LAMMPS_NS;
|
||||||
|
using namespace MathConst;
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
AtomVecSphereTemperature::AtomVecSphereTemperature(LAMMPS *lmp) : AtomVec(lmp)
|
||||||
|
{
|
||||||
|
mass_type = PER_ATOM;
|
||||||
|
molecular = Atom::ATOMIC;
|
||||||
|
|
||||||
|
atom->sphere_flag = 1;
|
||||||
|
atom->radius_flag = atom->rmass_flag = atom->omega_flag = atom->torque_flag = 1;
|
||||||
|
atom->temperature_flag = atom->heatflux_flag = 1;
|
||||||
|
|
||||||
|
// strings with peratom variables to include in each AtomVec method
|
||||||
|
// strings cannot contain fields in corresponding AtomVec default strings
|
||||||
|
// order of fields in a string does not matter
|
||||||
|
// except: fields_data_atom & fields_data_vel must match data file
|
||||||
|
|
||||||
|
fields_grow = {"radius", "rmass", "omega", "torque", "temperature", "heatflux"};
|
||||||
|
fields_copy = {"radius", "rmass", "omega", "temperature"};
|
||||||
|
fields_comm_vel = {"omega", "temperature"};
|
||||||
|
fields_reverse = {"torque", "heatflux"};
|
||||||
|
fields_border = {"radius", "rmass", "temperature"};
|
||||||
|
fields_border_vel = {"radius", "rmass", "omega", "temperature"};
|
||||||
|
fields_exchange = {"radius", "rmass", "omega", "temperature"};
|
||||||
|
fields_restart = {"radius", "rmass", "omega", "temperature"};
|
||||||
|
fields_create = {"radius", "rmass", "omega", "temperature"};
|
||||||
|
fields_data_atom = {"id", "type", "radius", "rmass", "x", "temperature"};
|
||||||
|
fields_data_vel = {"id", "v", "omega"};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
process sub-style args
|
||||||
|
optional arg = 0/1 for static/dynamic particle radii
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecSphereTemperature::process_args(int narg, char **arg)
|
||||||
|
{
|
||||||
|
if (narg != 0 && narg != 1) error->all(FLERR, "Illegal atom_style sphere command");
|
||||||
|
|
||||||
|
radvary = 0;
|
||||||
|
if (narg == 1) {
|
||||||
|
radvary = utils::numeric(FLERR, arg[0], true, lmp);
|
||||||
|
if (radvary < 0 || radvary > 1) error->all(FLERR, "Illegal atom_style sphere command");
|
||||||
|
}
|
||||||
|
|
||||||
|
// dynamic particle radius and mass must be communicated every step
|
||||||
|
|
||||||
|
if (radvary) {
|
||||||
|
fields_comm = {"radius", "rmass"};
|
||||||
|
fields_comm_vel = {"radius", "rmass", "omega"};
|
||||||
|
}
|
||||||
|
|
||||||
|
// delay setting up of fields until now
|
||||||
|
|
||||||
|
setup_fields();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecSphereTemperature::init()
|
||||||
|
{
|
||||||
|
AtomVec::init();
|
||||||
|
|
||||||
|
// check if optional radvary setting should have been set to 1
|
||||||
|
|
||||||
|
for (int i = 0; i < modify->nfix; i++)
|
||||||
|
if (strcmp(modify->fix[i]->style, "adapt") == 0) {
|
||||||
|
auto fix = dynamic_cast<FixAdapt *>(modify->fix[i]);
|
||||||
|
if (fix->diamflag && radvary == 0)
|
||||||
|
error->all(FLERR, "Fix adapt changes particle radii but atom_style sphere is not dynamic");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
set local copies of all grow ptrs used by this class, except defaults
|
||||||
|
needed in replicate when 2 atom classes exist and it calls pack_restart()
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecSphereTemperature::grow_pointers()
|
||||||
|
{
|
||||||
|
radius = atom->radius;
|
||||||
|
rmass = atom->rmass;
|
||||||
|
omega = atom->omega;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
initialize non-zero atom quantities
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecSphereTemperature::create_atom_post(int ilocal)
|
||||||
|
{
|
||||||
|
radius[ilocal] = 0.5;
|
||||||
|
rmass[ilocal] = 4.0 * MY_PI / 3.0 * 0.5 * 0.5 * 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
modify what AtomVec::data_atom() just unpacked
|
||||||
|
or initialize other atom quantities
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecSphereTemperature::data_atom_post(int ilocal)
|
||||||
|
{
|
||||||
|
radius_one = 0.5 * atom->radius[ilocal];
|
||||||
|
radius[ilocal] = radius_one;
|
||||||
|
if (radius_one > 0.0) rmass[ilocal] *= 4.0 * MY_PI / 3.0 * radius_one * radius_one * radius_one;
|
||||||
|
|
||||||
|
if (rmass[ilocal] <= 0.0) error->one(FLERR, "Invalid density in Atoms section of data file");
|
||||||
|
|
||||||
|
omega[ilocal][0] = 0.0;
|
||||||
|
omega[ilocal][1] = 0.0;
|
||||||
|
omega[ilocal][2] = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
modify values for AtomVec::pack_data() to pack
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecSphereTemperature::pack_data_pre(int ilocal)
|
||||||
|
{
|
||||||
|
radius_one = radius[ilocal];
|
||||||
|
rmass_one = rmass[ilocal];
|
||||||
|
|
||||||
|
radius[ilocal] *= 2.0;
|
||||||
|
if (radius_one != 0.0)
|
||||||
|
rmass[ilocal] = rmass_one / (4.0 * MY_PI / 3.0 * radius_one * radius_one * radius_one);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
unmodify values packed by AtomVec::pack_data()
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void AtomVecSphereTemperature::pack_data_post(int ilocal)
|
||||||
|
{
|
||||||
|
radius[ilocal] = radius_one;
|
||||||
|
rmass[ilocal] = rmass_one;
|
||||||
|
}
|
||||||
51
src/GRANULAR/atom_vec_sphere_temperature.h
Normal file
51
src/GRANULAR/atom_vec_sphere_temperature.h
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/* -*- c++ -*- ----------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
https://www.lammps.org/, 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.
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#ifdef ATOM_CLASS
|
||||||
|
// clang-format off
|
||||||
|
AtomStyle(sphere,AtomVecSphereTemperature);
|
||||||
|
// clang-format on
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifndef LMP_ATOM_VEC_SPHERE_TEMPERATURE_H
|
||||||
|
#define LMP_ATOM_VEC_SPHERE_TEMPERATURE_H
|
||||||
|
|
||||||
|
#include "atom_vec.h"
|
||||||
|
|
||||||
|
namespace LAMMPS_NS {
|
||||||
|
|
||||||
|
class AtomVecSphereTemperature : public AtomVec {
|
||||||
|
public:
|
||||||
|
AtomVecSphereTemperature(class LAMMPS *);
|
||||||
|
void process_args(int, char **) override;
|
||||||
|
void init() override;
|
||||||
|
|
||||||
|
void grow_pointers() override;
|
||||||
|
void create_atom_post(int) override;
|
||||||
|
void data_atom_post(int) override;
|
||||||
|
void pack_data_pre(int) override;
|
||||||
|
void pack_data_post(int) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
double *radius, *rmass;
|
||||||
|
double **omega;
|
||||||
|
double *temperature, *heatflux;
|
||||||
|
|
||||||
|
int radvary;
|
||||||
|
double radius_one, rmass_one;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace LAMMPS_NS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
142
src/GRANULAR/fix_temp_integrate.cpp
Normal file
142
src/GRANULAR/fix_temp_integrate.cpp
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
// clang-format off
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
https://www.lammps.org/, 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 "fix_temp_integrate.h"
|
||||||
|
|
||||||
|
#include "atom.h"
|
||||||
|
#include "error.h"
|
||||||
|
#include "force.h"
|
||||||
|
#include "memory.h"
|
||||||
|
#include "respa.h"
|
||||||
|
#include "update.h"
|
||||||
|
|
||||||
|
using namespace LAMMPS_NS;
|
||||||
|
using namespace FixConst;
|
||||||
|
|
||||||
|
enum {NONE, CONSTANT, TYPE};
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
FixTempIntegrate::FixTempIntegrate(LAMMPS *lmp, int narg, char **arg) :
|
||||||
|
Fix(lmp, narg, arg)
|
||||||
|
{
|
||||||
|
if (narg < 4) error->all(FLERR,"Illegal fix command");
|
||||||
|
|
||||||
|
cp_style = NONE;
|
||||||
|
|
||||||
|
int ntypes = atom->ntypes;
|
||||||
|
int iarg = 3;
|
||||||
|
while (iarg < narg) {
|
||||||
|
if (strcmp(arg[iarg+1],"constant") == 0) {
|
||||||
|
if (iarg+2 >= narg) error->all(FLERR,"Illegal fix command");
|
||||||
|
cp_style = CONSTANT;
|
||||||
|
cp = utils::numeric(FLERR,arg[iarg+2],false,lmp);
|
||||||
|
if (cp < 0.0) error->all(FLERR,"Illegal fix command");
|
||||||
|
iarg += 2;
|
||||||
|
} else if (strcmp(arg[iarg+1],"type") == 0) {
|
||||||
|
if (iarg+1+ntypes >= narg) error->all(FLERR,"Illegal fix command");
|
||||||
|
cp_style = TYPE;
|
||||||
|
memory->create(cp_type,ntypes+1,"fix/temp/integrate:cp_type");
|
||||||
|
for (int i = 1; i <= ntypes; i++) {
|
||||||
|
cp_type[i] = utils::numeric(FLERR,arg[iarg+1+i],false,lmp);
|
||||||
|
if (cp_type[i] < 0.0) error->all(FLERR,"Illegal fix command");
|
||||||
|
}
|
||||||
|
iarg += 1+ntypes;
|
||||||
|
} else {
|
||||||
|
error->all(FLERR,"Illegal fix command");
|
||||||
|
}
|
||||||
|
iarg += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cp_style == NONE)
|
||||||
|
error->all(FLERR, "Must specify specific heat in fix temp/integrate");
|
||||||
|
dynamic_group_allow = 1;
|
||||||
|
time_integrate = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int FixTempIntegrate::setmask()
|
||||||
|
{
|
||||||
|
int mask = 0;
|
||||||
|
mask |= FINAL_INTEGRATE;
|
||||||
|
mask |= FINAL_INTEGRATE_RESPA;
|
||||||
|
return mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixTempIntegrate::init()
|
||||||
|
{
|
||||||
|
dt = update->dt;
|
||||||
|
|
||||||
|
if (!atom->temperature_flag)
|
||||||
|
error->all(FLERR,"Fix temp/integrate requires atom style with temperature property");
|
||||||
|
if (!atom->heatflux_flag)
|
||||||
|
error->all(FLERR,"Fix temp/integrate requires atom style with heatflux property");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixTempIntegrate::final_integrate()
|
||||||
|
{
|
||||||
|
// update temperature of atoms in group
|
||||||
|
|
||||||
|
double *temperature = atom->temperature;
|
||||||
|
double *heatflux = atom->heatflux;
|
||||||
|
double *rmass = atom->rmass;
|
||||||
|
double *mass = atom->mass;
|
||||||
|
int *type = atom->type;
|
||||||
|
int *mask = atom->mask;
|
||||||
|
int nlocal = atom->nlocal;
|
||||||
|
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
|
||||||
|
|
||||||
|
if (rmass) {
|
||||||
|
for (int i = 0; i < nlocal; i++)
|
||||||
|
if (mask[i] & groupbit) {
|
||||||
|
temperature[i] += dt * heatflux[i] / (calc_cp(i) * rmass[i]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < nlocal; i++)
|
||||||
|
if (mask[i] & groupbit) {
|
||||||
|
temperature[i] += dt * heatflux[i] / (calc_cp(i) * mass[type[i]]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixTempIntegrate::final_integrate_respa(int ilevel, int /*iloop*/)
|
||||||
|
{
|
||||||
|
dt = update->dt;
|
||||||
|
final_integrate();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixTempIntegrate::reset_dt()
|
||||||
|
{
|
||||||
|
dt = update->dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
double FixTempIntegrate::calc_cp(int i)
|
||||||
|
{
|
||||||
|
if (cp_style == TYPE) {
|
||||||
|
return cp_type[atom->type[i]];
|
||||||
|
} else {
|
||||||
|
return cp;
|
||||||
|
}
|
||||||
|
}
|
||||||
50
src/GRANULAR/fix_temp_integrate.h
Normal file
50
src/GRANULAR/fix_temp_integrate.h
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/* -*- c++ -*- ----------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
https://www.lammps.org/, 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.
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#ifdef FIX_CLASS
|
||||||
|
// clang-format off
|
||||||
|
FixStyle(temp/integrate,FixTempIntegrate);
|
||||||
|
// clang-format on
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifndef LMP_FIX_TEMP_INTEGRATE_H
|
||||||
|
#define LMP_FIX_TEMP_INTEGRATE_H
|
||||||
|
|
||||||
|
#include "fix.h"
|
||||||
|
|
||||||
|
namespace LAMMPS_NS {
|
||||||
|
|
||||||
|
class FixTempIntegrate : public Fix {
|
||||||
|
public:
|
||||||
|
FixTempIntegrate(class LAMMPS *, int, char **);
|
||||||
|
|
||||||
|
int setmask() override;
|
||||||
|
void init() override;
|
||||||
|
void final_integrate() override;
|
||||||
|
void final_integrate_respa(int, int) override;
|
||||||
|
void reset_dt() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
double dt;
|
||||||
|
double cp, *cp_type;
|
||||||
|
int cp_style;
|
||||||
|
|
||||||
|
int mass_require;
|
||||||
|
|
||||||
|
double calc_cp(int);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace LAMMPS_NS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
18
src/atom.cpp
18
src/atom.cpp
@ -123,6 +123,8 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp)
|
|||||||
radius = rmass = nullptr;
|
radius = rmass = nullptr;
|
||||||
ellipsoid = line = tri = body = nullptr;
|
ellipsoid = line = tri = body = nullptr;
|
||||||
quat = nullptr;
|
quat = nullptr;
|
||||||
|
temperature = nullptr;
|
||||||
|
heatflux = nullptr;
|
||||||
|
|
||||||
// molecular systems
|
// molecular systems
|
||||||
|
|
||||||
@ -410,6 +412,9 @@ void Atom::peratom_create()
|
|||||||
add_peratom("tri",&tri,INT,0);
|
add_peratom("tri",&tri,INT,0);
|
||||||
add_peratom("body",&body,INT,0);
|
add_peratom("body",&body,INT,0);
|
||||||
|
|
||||||
|
add_peratom("temperature",&temperature,DOUBLE,0);
|
||||||
|
add_peratom("heatflux",&heatflux,DOUBLE,0);
|
||||||
|
|
||||||
// BPM package
|
// BPM package
|
||||||
|
|
||||||
add_peratom("quat",&quat,DOUBLE,4);
|
add_peratom("quat",&quat,DOUBLE,4);
|
||||||
@ -612,6 +617,7 @@ void Atom::set_atomflag_defaults()
|
|||||||
molecule_flag = molindex_flag = molatom_flag = 0;
|
molecule_flag = molindex_flag = molatom_flag = 0;
|
||||||
q_flag = mu_flag = 0;
|
q_flag = mu_flag = 0;
|
||||||
rmass_flag = radius_flag = omega_flag = torque_flag = angmom_flag = 0;
|
rmass_flag = radius_flag = omega_flag = torque_flag = angmom_flag = 0;
|
||||||
|
temperature_flag = heatflux_flag = 0;
|
||||||
vfrac_flag = spin_flag = eradius_flag = ervel_flag = erforce_flag = 0;
|
vfrac_flag = spin_flag = eradius_flag = ervel_flag = erforce_flag = 0;
|
||||||
cs_flag = csforce_flag = vforce_flag = ervelforce_flag = etag_flag = 0;
|
cs_flag = csforce_flag = vforce_flag = ervelforce_flag = etag_flag = 0;
|
||||||
rho_flag = esph_flag = cv_flag = vest_flag = 0;
|
rho_flag = esph_flag = cv_flag = vest_flag = 0;
|
||||||
@ -2602,6 +2608,14 @@ length of the data area, and a short description.
|
|||||||
- double
|
- double
|
||||||
- 4
|
- 4
|
||||||
- four quaternion components of the particles
|
- four quaternion components of the particles
|
||||||
|
* - temperature
|
||||||
|
- double
|
||||||
|
- 1
|
||||||
|
- temperature of the particles
|
||||||
|
* - heatflux
|
||||||
|
- double
|
||||||
|
- 1
|
||||||
|
- heatflux of the particles
|
||||||
* - i_name
|
* - i_name
|
||||||
- int
|
- int
|
||||||
- 1
|
- 1
|
||||||
@ -2658,6 +2672,8 @@ void *Atom::extract(const char *name)
|
|||||||
if (strcmp(name,"tri") == 0) return (void *) tri;
|
if (strcmp(name,"tri") == 0) return (void *) tri;
|
||||||
if (strcmp(name,"body") == 0) return (void *) body;
|
if (strcmp(name,"body") == 0) return (void *) body;
|
||||||
if (strcmp(name,"quat") == 0) return (void *) quat;
|
if (strcmp(name,"quat") == 0) return (void *) quat;
|
||||||
|
if (strcmp(name,"temperature") == 0) return (void *) temperature;
|
||||||
|
if (strcmp(name,"heatflux") == 0) return (void *) heatflux;
|
||||||
|
|
||||||
if (strcmp(name,"vfrac") == 0) return (void *) vfrac;
|
if (strcmp(name,"vfrac") == 0) return (void *) vfrac;
|
||||||
if (strcmp(name,"s0") == 0) return (void *) s0;
|
if (strcmp(name,"s0") == 0) return (void *) s0;
|
||||||
@ -2781,6 +2797,8 @@ int Atom::extract_datatype(const char *name)
|
|||||||
if (strcmp(name,"tri") == 0) return LAMMPS_INT;
|
if (strcmp(name,"tri") == 0) return LAMMPS_INT;
|
||||||
if (strcmp(name,"body") == 0) return LAMMPS_INT;
|
if (strcmp(name,"body") == 0) return LAMMPS_INT;
|
||||||
if (strcmp(name,"quat") == 0) return LAMMPS_DOUBLE_2D;
|
if (strcmp(name,"quat") == 0) return LAMMPS_DOUBLE_2D;
|
||||||
|
if (strcmp(name,"temperature") == 0) return LAMMPS_DOUBLE;
|
||||||
|
if (strcmp(name,"heatflux") == 0) return LAMMPS_DOUBLE;
|
||||||
|
|
||||||
if (strcmp(name,"vfrac") == 0) return LAMMPS_DOUBLE;
|
if (strcmp(name,"vfrac") == 0) return LAMMPS_DOUBLE;
|
||||||
if (strcmp(name,"s0") == 0) return LAMMPS_DOUBLE;
|
if (strcmp(name,"s0") == 0) return LAMMPS_DOUBLE;
|
||||||
|
|||||||
@ -80,6 +80,7 @@ class Atom : protected Pointers {
|
|||||||
double **omega, **angmom, **torque;
|
double **omega, **angmom, **torque;
|
||||||
int *ellipsoid, *line, *tri, *body;
|
int *ellipsoid, *line, *tri, *body;
|
||||||
double **quat;
|
double **quat;
|
||||||
|
double *temperature, *heatflux;
|
||||||
|
|
||||||
// molecular systems
|
// molecular systems
|
||||||
|
|
||||||
@ -182,6 +183,7 @@ class Atom : protected Pointers {
|
|||||||
int molecule_flag, molindex_flag, molatom_flag;
|
int molecule_flag, molindex_flag, molatom_flag;
|
||||||
int q_flag, mu_flag;
|
int q_flag, mu_flag;
|
||||||
int rmass_flag, radius_flag, omega_flag, torque_flag, angmom_flag, quat_flag;
|
int rmass_flag, radius_flag, omega_flag, torque_flag, angmom_flag, quat_flag;
|
||||||
|
int temperature_flag, heatflux_flag;
|
||||||
int vfrac_flag, spin_flag, eradius_flag, ervel_flag, erforce_flag;
|
int vfrac_flag, spin_flag, eradius_flag, ervel_flag, erforce_flag;
|
||||||
int cs_flag, csforce_flag, vforce_flag, ervelforce_flag, etag_flag;
|
int cs_flag, csforce_flag, vforce_flag, ervelforce_flag, etag_flag;
|
||||||
int rho_flag, esph_flag, cv_flag, vest_flag;
|
int rho_flag, esph_flag, cv_flag, vest_flag;
|
||||||
|
|||||||
19
src/set.cpp
19
src/set.cpp
@ -47,7 +47,7 @@ enum{ATOM_SELECT,MOL_SELECT,TYPE_SELECT,GROUP_SELECT,REGION_SELECT};
|
|||||||
enum{TYPE,TYPE_FRACTION,TYPE_RATIO,TYPE_SUBSET,
|
enum{TYPE,TYPE_FRACTION,TYPE_RATIO,TYPE_SUBSET,
|
||||||
MOLECULE,X,Y,Z,VX,VY,VZ,CHARGE,MASS,SHAPE,LENGTH,TRI,
|
MOLECULE,X,Y,Z,VX,VY,VZ,CHARGE,MASS,SHAPE,LENGTH,TRI,
|
||||||
DIPOLE,DIPOLE_RANDOM,SPIN,SPIN_RANDOM,QUAT,QUAT_RANDOM,
|
DIPOLE,DIPOLE_RANDOM,SPIN,SPIN_RANDOM,QUAT,QUAT_RANDOM,
|
||||||
THETA,THETA_RANDOM,ANGMOM,OMEGA,
|
THETA,THETA_RANDOM,ANGMOM,OMEGA,TEMPERATURE,
|
||||||
DIAMETER,DENSITY,VOLUME,IMAGE,BOND,ANGLE,DIHEDRAL,IMPROPER,
|
DIAMETER,DENSITY,VOLUME,IMAGE,BOND,ANGLE,DIHEDRAL,IMPROPER,
|
||||||
SPH_E,SPH_CV,SPH_RHO,EDPD_TEMP,EDPD_CV,CC,SMD_MASS_DENSITY,
|
SPH_E,SPH_CV,SPH_RHO,EDPD_TEMP,EDPD_CV,CC,SMD_MASS_DENSITY,
|
||||||
SMD_CONTACT_RADIUS,DPDTHETA,EPSILON,IVEC,DVEC,IARRAY,DARRAY};
|
SMD_CONTACT_RADIUS,DPDTHETA,EPSILON,IVEC,DVEC,IARRAY,DARRAY};
|
||||||
@ -389,6 +389,15 @@ void Set::command(int narg, char **arg)
|
|||||||
set(DENSITY);
|
set(DENSITY);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
|
|
||||||
|
} else if (strcmp(arg[iarg],"temperature") == 0) {
|
||||||
|
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
|
||||||
|
if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1);
|
||||||
|
else dvalue = utils::numeric(FLERR,arg[iarg+1],false,lmp);
|
||||||
|
if (!atom->temperature_flag)
|
||||||
|
error->all(FLERR,"Cannot set this attribute for this atom style");
|
||||||
|
set(TEMPERATURE);
|
||||||
|
iarg += 2;
|
||||||
|
|
||||||
} else if (strcmp(arg[iarg],"volume") == 0) {
|
} else if (strcmp(arg[iarg],"volume") == 0) {
|
||||||
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
|
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
|
||||||
if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1);
|
if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1);
|
||||||
@ -768,6 +777,7 @@ void Set::set(int keyword)
|
|||||||
case SHAPE:
|
case SHAPE:
|
||||||
case DIAMETER:
|
case DIAMETER:
|
||||||
case DENSITY:
|
case DENSITY:
|
||||||
|
case TEMPERATURE:
|
||||||
case QUAT:
|
case QUAT:
|
||||||
case IMAGE:
|
case IMAGE:
|
||||||
if (modify->check_rigid_list_overlap(select))
|
if (modify->check_rigid_list_overlap(select))
|
||||||
@ -1008,6 +1018,13 @@ void Set::set(int keyword)
|
|||||||
atom->omega[i][2] = zvalue;
|
atom->omega[i][2] = zvalue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set temperature of particle
|
||||||
|
|
||||||
|
else if (keyword == ANGMOM) {
|
||||||
|
if (dvalue < 0.0) error->one(FLERR,"Invalid temperature in set command");
|
||||||
|
atom->temperature[i] = dvalue;
|
||||||
|
}
|
||||||
|
|
||||||
// reset any or all of 3 image flags
|
// reset any or all of 3 image flags
|
||||||
|
|
||||||
else if (keyword == IMAGE) {
|
else if (keyword == IMAGE) {
|
||||||
|
|||||||
Reference in New Issue
Block a user