Few updates to surface tension, add stress fix
This commit is contained in:
2
src/.gitignore
vendored
2
src/.gitignore
vendored
@ -217,6 +217,8 @@
|
|||||||
/fix_rheo.h
|
/fix_rheo.h
|
||||||
/fix_rheo_pressure.cpp
|
/fix_rheo_pressure.cpp
|
||||||
/fix_rheo_pressure.h
|
/fix_rheo_pressure.h
|
||||||
|
/fix_rheo_stress.cpp
|
||||||
|
/fix_rheo_stress.h
|
||||||
/fix_rheo_thermal.cpp
|
/fix_rheo_thermal.cpp
|
||||||
/fix_rheo_thermal.h
|
/fix_rheo_thermal.h
|
||||||
/fix_rheo_viscosity.cpp
|
/fix_rheo_viscosity.cpp
|
||||||
|
|||||||
137
src/RHEO/fix_rheo_stress.cpp
Normal file
137
src/RHEO/fix_rheo_stress.cpp
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
https://www.lammps.org/, Sandia National Laboratories
|
||||||
|
LAMMPS development team: developers@lammps.org
|
||||||
|
|
||||||
|
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.
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
Contributing authors: Joel Clemmer (SNL)
|
||||||
|
----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#include "fix_rheo_stress.h"
|
||||||
|
|
||||||
|
#include "atom.h"
|
||||||
|
#include "comm.h"
|
||||||
|
#include "compute.h"
|
||||||
|
#include "domain.h"
|
||||||
|
#include "fix_store_atom.h"
|
||||||
|
#include "group.h"
|
||||||
|
#include "error.h"
|
||||||
|
#include "modify.h"
|
||||||
|
#include "update.h"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
using namespace LAMMPS_NS;
|
||||||
|
using namespace FixConst;
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
FixRHEOStress::FixRHEOStress(LAMMPS *lmp, int narg, char **arg) :
|
||||||
|
id_compute(nullptr), id_fix(nullptr), stress_compute(nullptr), store_fix(nullptr), Fix(lmp, narg, arg)
|
||||||
|
{
|
||||||
|
if (narg != 3) error->all(FLERR,"Illegal fix rheo/stress command");
|
||||||
|
comm_forward = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
FixRHEOStress::~FixRHEOStress()
|
||||||
|
{
|
||||||
|
modify->delete_compute(id_compute);
|
||||||
|
modify->delete_fix(id_fix);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixRHEOStress::post_constructor()
|
||||||
|
{
|
||||||
|
id_fix = utils::strdup(std::string(id) + "_store");
|
||||||
|
store_fix = dynamic_cast<FixStoreAtom *>(modify->add_fix(fmt::format("{} {} STORE/ATOM d_pxx d_pyy d_pzz d_pxy d_pxz d_pyz", id_fix, group->names[igroup])));
|
||||||
|
array_atom = store_fix->astore;
|
||||||
|
|
||||||
|
id_compute = utils::strdup(std::string(id) + "_compute");
|
||||||
|
stress_compute = modify->add_compute(fmt::format("{} {} stress/atom NULL ke pair bond", id_compute, group->names[igroup]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int FixRHEOStress::setmask()
|
||||||
|
{
|
||||||
|
int mask = 0;
|
||||||
|
mask |= PRE_FORCE;
|
||||||
|
mask |= END_OF_STEP;
|
||||||
|
return mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixRHEOStress::init()
|
||||||
|
{
|
||||||
|
stress_compute->addstep(update->ntimestep+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixRHEOStress::pre_force(int vflag)
|
||||||
|
{
|
||||||
|
// add pre-force and forward to ghosts (not done in store/atom)
|
||||||
|
comm->forward_comm(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixRHEOStress::end_of_step()
|
||||||
|
{
|
||||||
|
stress_compute->compute_peratom();
|
||||||
|
|
||||||
|
// copy compute to fix property atom
|
||||||
|
double **saved_stress = store_fix->astore;
|
||||||
|
double **stress = stress_compute->array_atom;
|
||||||
|
|
||||||
|
int ntotal = atom->nlocal+atom->nghost;
|
||||||
|
for (int i = 0; i < ntotal; i++)
|
||||||
|
for (int a = 0; a < 6; a++)
|
||||||
|
saved_stress[i][a] = stress[i][a];
|
||||||
|
|
||||||
|
stress_compute->addstep(update->ntimestep + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int FixRHEOStress::pack_forward_comm(int n, int *list, double *buf,
|
||||||
|
int /*pbc_flag*/, int * /*pbc*/)
|
||||||
|
{
|
||||||
|
int i, j, a, m;
|
||||||
|
double **saved_stress = store_fix->astore;
|
||||||
|
|
||||||
|
m = 0;
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
j = list[i];
|
||||||
|
for (a = 0; a < 6; a++)
|
||||||
|
buf[m++] = saved_stress[j][a];
|
||||||
|
}
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixRHEOStress::unpack_forward_comm(int n, int first, double *buf)
|
||||||
|
{
|
||||||
|
int i, a, m, last;
|
||||||
|
double **saved_stress = store_fix->astore;
|
||||||
|
|
||||||
|
m = 0;
|
||||||
|
last = first + n;
|
||||||
|
for (i = first; i < last; i++)
|
||||||
|
for (a = 0; a < 6; a++)
|
||||||
|
saved_stress[i][a] = buf[m++];
|
||||||
|
}
|
||||||
48
src/RHEO/fix_rheo_stress.h
Normal file
48
src/RHEO/fix_rheo_stress.h
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/* -*- c++ -*- ----------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
https://www.lammps.org/, Sandia National Laboratories
|
||||||
|
LAMMPS development team: developers@lammps.org
|
||||||
|
|
||||||
|
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(rheo/stress,FixRHEOStress);
|
||||||
|
// clang-format on
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifndef LMP_FIX_RHEO_STRESS_H
|
||||||
|
#define LMP_FIX_RHEO_STRESS_H
|
||||||
|
|
||||||
|
#include "fix.h"
|
||||||
|
|
||||||
|
namespace LAMMPS_NS {
|
||||||
|
|
||||||
|
class FixRHEOStress : public Fix {
|
||||||
|
public:
|
||||||
|
FixRHEOStress(class LAMMPS *, int, char **);
|
||||||
|
~FixRHEOStress() override;
|
||||||
|
void post_constructor() override;
|
||||||
|
int setmask() override;
|
||||||
|
void init() override;
|
||||||
|
void pre_force(int) override;
|
||||||
|
void end_of_step() override;
|
||||||
|
int pack_forward_comm(int, int *, double *, int, int *) override;
|
||||||
|
void unpack_forward_comm(int, int, double *) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
char *id_compute, *id_fix;
|
||||||
|
class Compute *stress_compute;
|
||||||
|
class FixStoreAtom *store_fix;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace LAMMPS_NS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
@ -109,8 +109,8 @@ void PairRHEOTension::compute(int eflag, int vflag)
|
|||||||
|
|
||||||
int nmax = atom->nmax;
|
int nmax = atom->nmax;
|
||||||
if (nmax_store <= nmax) {
|
if (nmax_store <= nmax) {
|
||||||
memory->grow(c_tension, nmax, "atom:rheo_c_tension");
|
memory->grow(ct, nmax, "atom:rheo_c_tension");
|
||||||
memory->grow(n_tension, nmax, 3, "atom:rheo_n_tension");
|
memory->grow(nnt_tension, nmax, 3, "atom:rheo_n_tension");
|
||||||
nmax_store = atom->nmax;
|
nmax_store = atom->nmax;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,8 +153,6 @@ void PairRHEOTension::compute(int eflag, int vflag)
|
|||||||
dWij = compute_kernel->dWij;
|
dWij = compute_kernel->dWij;
|
||||||
dWji = compute_kernel->dWji;
|
dWji = compute_kernel->dWji;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
f[i][0] += ft[0];
|
f[i][0] += ft[0];
|
||||||
f[i][1] += ft[1];
|
f[i][1] += ft[1];
|
||||||
f[i][2] += ft[2];
|
f[i][2] += ft[2];
|
||||||
@ -173,10 +171,8 @@ void PairRHEOTension::compute(int eflag, int vflag)
|
|||||||
|
|
||||||
if (vflag_fdotr) virial_fdotr_compute();
|
if (vflag_fdotr) virial_fdotr_compute();
|
||||||
|
|
||||||
if (compute_interface) {
|
|
||||||
comm->reverse_comm(this);
|
comm->reverse_comm(this);
|
||||||
comm->forward_comm(this);
|
comm->forward_comm(this);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
|||||||
@ -33,9 +33,9 @@ class PairRHEOTension : public Pair {
|
|||||||
void setup() override;
|
void setup() override;
|
||||||
void init_style() override;
|
void init_style() override;
|
||||||
double init_one(int, int) override;
|
double init_one(int, int) override;
|
||||||
|
int pack_forward_comm(int, int *, double *, int, int *) override;
|
||||||
void unpack_forward_comm(int, int, double *) override;
|
void unpack_forward_comm(int, int, double *) override;
|
||||||
int pack_reverse_comm(int, int, double *) override;
|
int pack_reverse_comm(int, int, double *) override;
|
||||||
int pack_reverse_comm(int, int, double *) override;
|
|
||||||
void unpack_reverse_comm(int, int *, double *) override;
|
void unpack_reverse_comm(int, int *, double *) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
Reference in New Issue
Block a user