@ -298,7 +298,8 @@ Note that it should return the "change" in box length, not the
|
|||||||
absolute box length. This means it should evaluate to 0.0 when
|
absolute box length. This means it should evaluate to 0.0 when
|
||||||
invoked on the initial timestep of the run following the definition of
|
invoked on the initial timestep of the run following the definition of
|
||||||
fix deform. It should evaluate to a value > 0.0 to dilate the box at
|
fix deform. It should evaluate to a value > 0.0 to dilate the box at
|
||||||
future times, or a value < 0.0 to compress the box.
|
future times, or a value < 0.0 to compress the box. The exception
|
||||||
|
would be if the run command uses the *pre no* option.
|
||||||
|
|
||||||
The variable *name2* must also be an :doc:`equal-style variable
|
The variable *name2* must also be an :doc:`equal-style variable
|
||||||
<variable>` and should calculate the rate of box length change, in
|
<variable>` and should calculate the rate of box length change, in
|
||||||
|
|||||||
@ -147,7 +147,8 @@ void BondRHEOShell::store_data()
|
|||||||
|
|
||||||
// map to find index n
|
// map to find index n
|
||||||
j = atom->map(atom->bond_atom[i][m]);
|
j = atom->map(atom->bond_atom[i][m]);
|
||||||
if (j == -1) error->one(FLERR, "Atom missing in BPM bond");
|
if (j == -1) error->one(FLERR, Error::NOLASTLINE,
|
||||||
|
"Atom {} missing in BPM bond", atom->bond_atom[i][m]);
|
||||||
|
|
||||||
fix_bond_history->update_atom_value(i, m, 0, 0.0);
|
fix_bond_history->update_atom_value(i, m, 0, 0.0);
|
||||||
fix_bond_history->update_atom_value(i, m, 1, 0.0);
|
fix_bond_history->update_atom_value(i, m, 1, 0.0);
|
||||||
@ -217,12 +218,6 @@ void BondRHEOShell::compute(int eflag, int vflag)
|
|||||||
i2 = itmp;
|
i2 = itmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
delx = x[i1][0] - x[i2][0];
|
|
||||||
dely = x[i1][1] - x[i2][1];
|
|
||||||
delz = x[i1][2] - x[i2][2];
|
|
||||||
rsq = delx * delx + dely * dely + delz * delz;
|
|
||||||
r = sqrt(rsq);
|
|
||||||
|
|
||||||
// If bond hasn't been set - zero data
|
// If bond hasn't been set - zero data
|
||||||
if (t < EPSILON || std::isnan(t)) t = store_bond(n, i1, i2);
|
if (t < EPSILON || std::isnan(t)) t = store_bond(n, i1, i2);
|
||||||
|
|
||||||
@ -358,19 +353,20 @@ void BondRHEOShell::init_style()
|
|||||||
BondBPM::init_style();
|
BondBPM::init_style();
|
||||||
|
|
||||||
if (comm->ghost_velocity == 0)
|
if (comm->ghost_velocity == 0)
|
||||||
error->all(FLERR, "Bond rheo/shell requires ghost atoms store velocity");
|
error->all(FLERR, Error::NOLASTLINE, "Bond rheo/shell requires ghost atoms store velocity");
|
||||||
|
|
||||||
auto fixes = modify->get_fix_by_style("^rheo$");
|
auto fixes = modify->get_fix_by_style("^rheo$");
|
||||||
if (fixes.size() == 0) error->all(FLERR, "Need to define fix rheo to use bond rheo/shell");
|
if (fixes.size() == 0)
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Need to define fix rheo to use bond rheo/shell");
|
||||||
class FixRHEO *fix_rheo = dynamic_cast<FixRHEO *>(fixes[0]);
|
class FixRHEO *fix_rheo = dynamic_cast<FixRHEO *>(fixes[0]);
|
||||||
|
|
||||||
if (!fix_rheo->surface_flag)
|
if (!fix_rheo->surface_flag)
|
||||||
error->all(FLERR, "Bond rheo/shell requires surface calculation in fix rheo");
|
error->all(FLERR, Error::NOLASTLINE, "Bond rheo/shell requires surface calculation in fix rheo");
|
||||||
compute_surface = fix_rheo->compute_surface;
|
compute_surface = fix_rheo->compute_surface;
|
||||||
|
|
||||||
fixes = modify->get_fix_by_style("^rheo/oxidation$");
|
fixes = modify->get_fix_by_style("^rheo/oxidation$");
|
||||||
if (fixes.size() == 0)
|
if (fixes.size() == 0)
|
||||||
error->all(FLERR, "Need to define fix rheo/oxidation to use bond rheo/shell");
|
error->all(FLERR, Error::NOLASTLINE, "Need to define fix rheo/oxidation to use bond rheo/shell");
|
||||||
class FixRHEOOxidation *fix_rheo_oxidation = dynamic_cast<FixRHEOOxidation *>(fixes[0]);
|
class FixRHEOOxidation *fix_rheo_oxidation = dynamic_cast<FixRHEOOxidation *>(fixes[0]);
|
||||||
|
|
||||||
rsurf = fix_rheo_oxidation->rsurf;
|
rsurf = fix_rheo_oxidation->rsurf;
|
||||||
@ -389,14 +385,13 @@ void BondRHEOShell::settings(int narg, char **arg)
|
|||||||
if (strcmp(arg[iarg], "t/form") == 0) {
|
if (strcmp(arg[iarg], "t/form") == 0) {
|
||||||
if (iarg + 1 > narg) utils::missing_cmd_args(FLERR, "bond rheo/shell t/form", error);
|
if (iarg + 1 > narg) utils::missing_cmd_args(FLERR, "bond rheo/shell t/form", error);
|
||||||
tform = utils::numeric(FLERR, arg[iarg + 1], false, lmp);
|
tform = utils::numeric(FLERR, arg[iarg + 1], false, lmp);
|
||||||
|
if (tform < 0.0)
|
||||||
|
error->all(FLERR, iarg + 1, "Illegal bond rheo/shell command, must specify positive formation time");
|
||||||
i += 1;
|
i += 1;
|
||||||
} else {
|
} else {
|
||||||
error->all(FLERR, "Illegal bond rheo/shell command, invalid argument {}", arg[iarg]);
|
error->all(FLERR, iarg, "Illegal bond rheo/shell command, invalid argument {}", arg[iarg]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tform < 0.0)
|
|
||||||
error->all(FLERR, "Illegal bond rheo/shell command, must specify positive formation time");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -472,7 +467,7 @@ int BondRHEOShell::pack_reverse_comm(int n, int first, double *buf)
|
|||||||
m = 0;
|
m = 0;
|
||||||
last = first + n;
|
last = first + n;
|
||||||
|
|
||||||
for (i = first; i < last; i++) { buf[m++] = dbond[i]; }
|
for (i = first; i < last; i++) { buf[m++] = ubuf(dbond[i]).d; }
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -485,7 +480,7 @@ void BondRHEOShell::unpack_reverse_comm(int n, int *list, double *buf)
|
|||||||
m = 0;
|
m = 0;
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
j = list[i];
|
j = list[i];
|
||||||
dbond[j] += buf[m++];
|
dbond[j] += (int) ubuf(buf[m++]).i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -495,14 +490,20 @@ double BondRHEOShell::single(int type, double rsq, int i, int j, double &fforce)
|
|||||||
{
|
{
|
||||||
if (type <= 0) return 0.0;
|
if (type <= 0) return 0.0;
|
||||||
|
|
||||||
double r0, t;
|
double r0 = -1;
|
||||||
|
double t = -1;
|
||||||
|
const auto *tag = atom->tag;
|
||||||
for (int n = 0; n < atom->num_bond[i]; n++) {
|
for (int n = 0; n < atom->num_bond[i]; n++) {
|
||||||
if (atom->bond_atom[i][n] == atom->tag[j]) {
|
if (atom->bond_atom[i][n] == tag[j]) {
|
||||||
r0 = fix_bond_history->get_atom_value(i, n, 0);
|
r0 = fix_bond_history->get_atom_value(i, n, 0);
|
||||||
t = fix_bond_history->get_atom_value(i, n, 1);
|
t = fix_bond_history->get_atom_value(i, n, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (r0 == -1)
|
||||||
|
error->one(FLERR, Error::NOLASTLINE,
|
||||||
|
"Could not find bond between atoms {} and {}", tag[i], tag[j]);
|
||||||
|
|
||||||
svector[1] = t;
|
svector[1] = t;
|
||||||
if (t < tform) return 0.0;
|
if (t < tform) return 0.0;
|
||||||
|
|
||||||
|
|||||||
@ -251,13 +251,14 @@ double ComputeRHEOKernel::calc_w_quintic(double r)
|
|||||||
double w, tmp1, tmp2, tmp3, tmp1sq, tmp2sq, tmp3sq, s;
|
double w, tmp1, tmp2, tmp3, tmp1sq, tmp2sq, tmp3sq, s;
|
||||||
s = r * 3.0 * cutinv;
|
s = r * 3.0 * cutinv;
|
||||||
|
|
||||||
if (s > 3.0) { w = 0.0; }
|
|
||||||
|
|
||||||
if (s <= 3.0) {
|
if (s <= 3.0) {
|
||||||
tmp3 = 3.0 - s;
|
tmp3 = 3.0 - s;
|
||||||
tmp3sq = tmp3 * tmp3;
|
tmp3sq = tmp3 * tmp3;
|
||||||
w = tmp3sq * tmp3sq * tmp3;
|
w = tmp3sq * tmp3sq * tmp3;
|
||||||
|
} else {
|
||||||
|
w = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s <= 2.0) {
|
if (s <= 2.0) {
|
||||||
tmp2 = 2.0 - s;
|
tmp2 = 2.0 - s;
|
||||||
tmp2sq = tmp2 * tmp2;
|
tmp2sq = tmp2 * tmp2;
|
||||||
@ -285,12 +286,14 @@ double ComputeRHEOKernel::calc_dw_scalar_quintic(double r)
|
|||||||
|
|
||||||
s = r * 3.0 * cutinv;
|
s = r * 3.0 * cutinv;
|
||||||
|
|
||||||
if (s > 3.0) { wp = 0.0; }
|
|
||||||
if (s <= 3.0) {
|
if (s <= 3.0) {
|
||||||
tmp3 = 3.0 - s;
|
tmp3 = 3.0 - s;
|
||||||
tmp3sq = tmp3 * tmp3;
|
tmp3sq = tmp3 * tmp3;
|
||||||
wp = -5.0 * tmp3sq * tmp3sq;
|
wp = -5.0 * tmp3sq * tmp3sq;
|
||||||
|
} else {
|
||||||
|
wp = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s <= 2.0) {
|
if (s <= 2.0) {
|
||||||
tmp2 = 2.0 - s;
|
tmp2 = 2.0 - s;
|
||||||
tmp2sq = tmp2 * tmp2;
|
tmp2sq = tmp2 * tmp2;
|
||||||
@ -855,7 +858,7 @@ int ComputeRHEOKernel::pack_forward_comm(int n, int *list, double *buf, int /*pb
|
|||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
int j = list[i];
|
int j = list[i];
|
||||||
if (comm_stage == 0) {
|
if (comm_stage == 0) {
|
||||||
buf[m++] = coordination[j];
|
buf[m++] = ubuf(coordination[j]).d;
|
||||||
} else {
|
} else {
|
||||||
if (kernel_style == RK0) {
|
if (kernel_style == RK0) {
|
||||||
buf[m++] = C0[j];
|
buf[m++] = C0[j];
|
||||||
@ -878,7 +881,7 @@ void ComputeRHEOKernel::unpack_forward_comm(int n, int first, double *buf)
|
|||||||
|
|
||||||
for (int i = first; i < last; i++) {
|
for (int i = first; i < last; i++) {
|
||||||
if (comm_stage == 0) {
|
if (comm_stage == 0) {
|
||||||
coordination[i] = buf[m++];
|
coordination[i] = (int) ubuf(buf[m++]).i;
|
||||||
} else {
|
} else {
|
||||||
if (kernel_style == RK0) {
|
if (kernel_style == RK0) {
|
||||||
C0[i] = buf[m++];
|
C0[i] = buf[m++];
|
||||||
|
|||||||
@ -271,6 +271,8 @@ void ComputeRHEOVShift::correct_surfaces()
|
|||||||
int dim = domain->dimension;
|
int dim = domain->dimension;
|
||||||
|
|
||||||
double nx, ny, nz, vx, vy, vz, dot;
|
double nx, ny, nz, vx, vy, vz, dot;
|
||||||
|
nz = 0.0;
|
||||||
|
vz = 0.0;
|
||||||
for (int i = 0; i < nlocal; i++) {
|
for (int i = 0; i < nlocal; i++) {
|
||||||
if (mask[i] & groupbit) {
|
if (mask[i] & groupbit) {
|
||||||
|
|
||||||
|
|||||||
@ -110,7 +110,7 @@ FixRHEO::FixRHEO(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
kernel_style = RK2;
|
kernel_style = RK2;
|
||||||
} else
|
} else
|
||||||
error->all(FLERR, "Unknown kernel style {} in fix rheo", arg[4]);
|
error->all(FLERR, "Unknown kernel style {} in fix rheo", arg[4]);
|
||||||
zmin_kernel = utils::numeric(FLERR, arg[5], false, lmp);
|
zmin_kernel = utils::inumeric(FLERR, arg[5], false, lmp);
|
||||||
|
|
||||||
int iarg = 6;
|
int iarg = 6;
|
||||||
while (iarg < narg) {
|
while (iarg < narg) {
|
||||||
@ -342,8 +342,6 @@ void FixRHEO::initial_integrate(int /*vflag*/)
|
|||||||
double *rmass = atom->rmass;
|
double *rmass = atom->rmass;
|
||||||
double **gradr = compute_grad->gradr;
|
double **gradr = compute_grad->gradr;
|
||||||
double **gradv = compute_grad->gradv;
|
double **gradv = compute_grad->gradv;
|
||||||
double **vshift;
|
|
||||||
if (shift_flag) vshift = compute_vshift->vshift;
|
|
||||||
|
|
||||||
int nlocal = atom->nlocal;
|
int nlocal = atom->nlocal;
|
||||||
int rmass_flag = atom->rmass_flag;
|
int rmass_flag = atom->rmass_flag;
|
||||||
@ -400,6 +398,7 @@ void FixRHEO::initial_integrate(int /*vflag*/)
|
|||||||
|
|
||||||
// Shifting atoms
|
// Shifting atoms
|
||||||
if (shift_flag) {
|
if (shift_flag) {
|
||||||
|
double **vshift = compute_vshift->vshift;
|
||||||
for (i = 0; i < nlocal; i++) {
|
for (i = 0; i < nlocal; i++) {
|
||||||
if (status[i] & STATUS_NO_SHIFT) continue;
|
if (status[i] & STATUS_NO_SHIFT) continue;
|
||||||
if (status[i] & PHASECHECK) continue;
|
if (status[i] & PHASECHECK) continue;
|
||||||
|
|||||||
@ -189,7 +189,7 @@ FixRHEOThermal::FixRHEOThermal(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
} else if (strcmp(arg[iarg], "react") == 0) {
|
} else if (strcmp(arg[iarg], "react") == 0) {
|
||||||
if (iarg + 2 >= narg) utils::missing_cmd_args(FLERR, "fix rheo/thermal react", error);
|
if (iarg + 2 >= narg) utils::missing_cmd_args(FLERR, "fix rheo/thermal react", error);
|
||||||
cut_bond = utils::numeric(FLERR, arg[iarg + 1], false, lmp);
|
cut_bond = utils::numeric(FLERR, arg[iarg + 1], false, lmp);
|
||||||
btype = utils::numeric(FLERR, arg[iarg + 2], false, lmp);
|
btype = utils::inumeric(FLERR, arg[iarg + 2], false, lmp);
|
||||||
comm_forward = 4;
|
comm_forward = 4;
|
||||||
if (cut_bond <= 0.0) error->all(FLERR, "Illegal max bond length must be greater than zero");
|
if (cut_bond <= 0.0) error->all(FLERR, "Illegal max bond length must be greater than zero");
|
||||||
if ((btype < 1) || (btype > atom->nbondtypes))
|
if ((btype < 1) || (btype > atom->nbondtypes))
|
||||||
|
|||||||
@ -80,7 +80,7 @@ void PairRHEO::compute(int eflag, int vflag)
|
|||||||
int i, j, a, b, ii, jj, inum, jnum, itype, jtype;
|
int i, j, a, b, ii, jj, inum, jnum, itype, jtype;
|
||||||
int pair_force_flag, pair_rho_flag, pair_avisc_flag;
|
int pair_force_flag, pair_rho_flag, pair_avisc_flag;
|
||||||
int fluidi, fluidj;
|
int fluidi, fluidj;
|
||||||
double xtmp, ytmp, ztmp, wp, Ti, Tj, dT, csq_ave, cs_ave;
|
double xtmp, ytmp, ztmp, wp, Ti, Tj, dT, cs_ave;
|
||||||
double rhoi, rhoj, rho0i, rho0j, voli, volj, Pi, Pj, etai, etaj, kappai, kappaj, csqi, csqj;
|
double rhoi, rhoj, rho0i, rho0j, voli, volj, Pi, Pj, etai, etaj, kappai, kappaj, csqi, csqj;
|
||||||
double eta_ave, kappa_ave, dT_prefactor;
|
double eta_ave, kappa_ave, dT_prefactor;
|
||||||
double mu, q, fp_prefactor, drho_damp, fmag, psi_ij, Fij;
|
double mu, q, fp_prefactor, drho_damp, fmag, psi_ij, Fij;
|
||||||
@ -189,11 +189,10 @@ void PairRHEO::compute(int eflag, int vflag)
|
|||||||
if (!variable_csq) {
|
if (!variable_csq) {
|
||||||
cs_ave = 0.5 * (cs[itype] + cs[jtype]);
|
cs_ave = 0.5 * (cs[itype] + cs[jtype]);
|
||||||
} else {
|
} else {
|
||||||
csqi = fix_pressure->calc_csq(rhoi, i);
|
csqi = fix_pressure->calc_csq(rho[i], i);
|
||||||
csqj = fix_pressure->calc_csq(rhoj, j);
|
csqj = fix_pressure->calc_csq(rho[j], j);
|
||||||
cs_ave = 0.5 * (sqrt(csqi) + sqrt(csqj));
|
cs_ave = 0.5 * (sqrt(csqi) + sqrt(csqj));
|
||||||
}
|
}
|
||||||
csq_ave = cs_ave * cs_ave;
|
|
||||||
|
|
||||||
pair_rho_flag = 0;
|
pair_rho_flag = 0;
|
||||||
pair_force_flag = 0;
|
pair_force_flag = 0;
|
||||||
@ -231,7 +230,7 @@ void PairRHEO::compute(int eflag, int vflag)
|
|||||||
Pj = fix_pressure->calc_pressure(rhoj, j);
|
Pj = fix_pressure->calc_pressure(rhoj, j);
|
||||||
|
|
||||||
if ((chi[j] > 0.9) && (r < (cutk * 0.5)))
|
if ((chi[j] > 0.9) && (r < (cutk * 0.5)))
|
||||||
fmag = (chi[j] - 0.9) * (cutk * 0.5 - r) * rho0j * csq_ave * cutk * rinv;
|
fmag = (chi[j] - 0.9) * (cutk * 0.5 - r) * rho0j * cs_ave * cs_ave * cutk * rinv;
|
||||||
|
|
||||||
} else if ((!fluidi) && fluidj) {
|
} else if ((!fluidi) && fluidj) {
|
||||||
compute_interface->correct_v(vi, vj, i, j);
|
compute_interface->correct_v(vi, vj, i, j);
|
||||||
@ -239,7 +238,7 @@ void PairRHEO::compute(int eflag, int vflag)
|
|||||||
Pi = fix_pressure->calc_pressure(rhoi, i);
|
Pi = fix_pressure->calc_pressure(rhoi, i);
|
||||||
|
|
||||||
if (chi[i] > 0.9 && r < (cutk * 0.5))
|
if (chi[i] > 0.9 && r < (cutk * 0.5))
|
||||||
fmag = (chi[i] - 0.9) * (cutk * 0.5 - r) * rho0i * csq_ave * cutk * rinv;
|
fmag = (chi[i] - 0.9) * (cutk * 0.5 - r) * rho0i * cs_ave * cs_ave * cutk * rinv;
|
||||||
|
|
||||||
} else if ((!fluidi) && (!fluidj)) {
|
} else if ((!fluidi) && (!fluidj)) {
|
||||||
rhoi = rho0i;
|
rhoi = rho0i;
|
||||||
@ -251,7 +250,6 @@ void PairRHEO::compute(int eflag, int vflag)
|
|||||||
csqi = fix_pressure->calc_csq(rhoi, i);
|
csqi = fix_pressure->calc_csq(rhoi, i);
|
||||||
csqj = fix_pressure->calc_csq(rhoj, j);
|
csqj = fix_pressure->calc_csq(rhoj, j);
|
||||||
cs_ave = 0.5 * (sqrt(csqi) + sqrt(csqj));
|
cs_ave = 0.5 * (sqrt(csqi) + sqrt(csqj));
|
||||||
csq_ave = cs_ave * cs_ave;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
48
src/set.cpp
48
src/set.cpp
@ -48,7 +48,7 @@ enum{ATOM_SELECT,MOL_SELECT,TYPE_SELECT,GROUP_SELECT,REGION_SELECT};
|
|||||||
|
|
||||||
enum{ANGLE,ANGMOM,APIP_LAMBDA,BOND,CC,CHARGE,DENSITY,DIAMETER,DIHEDRAL,DIPOLE,
|
enum{ANGLE,ANGMOM,APIP_LAMBDA,BOND,CC,CHARGE,DENSITY,DIAMETER,DIHEDRAL,DIPOLE,
|
||||||
DIPOLE_RANDOM,DPD_THETA,EDPD_CV,EDPD_TEMP,EPSILON,IMAGE,IMPROPER,LENGTH,
|
DIPOLE_RANDOM,DPD_THETA,EDPD_CV,EDPD_TEMP,EPSILON,IMAGE,IMPROPER,LENGTH,
|
||||||
MASS,MOLECULE,OMEGA,QUAT,QUAT_RANDOM,RADIUS_ELECTRON,SHAPE,
|
MASS,MOLECULE,OMEGA,QUAT,QUAT_RANDOM,RADIUS_ELECTRON,RHEO_STATUS,SHAPE,
|
||||||
SMD_CONTACT_RADIUS,SMD_MASS_DENSITY,SPH_CV,SPH_E,SPH_RHO,
|
SMD_CONTACT_RADIUS,SMD_MASS_DENSITY,SPH_CV,SPH_E,SPH_RHO,
|
||||||
SPIN_ATOM,SPIN_ATOM_RANDOM,SPIN_ELECTRON,TEMPERATURE,THETA,THETA_RANDOM,
|
SPIN_ATOM,SPIN_ATOM_RANDOM,SPIN_ELECTRON,TEMPERATURE,THETA,THETA_RANDOM,
|
||||||
TRI,TYPE,TYPE_FRACTION,TYPE_RATIO,TYPE_SUBSET,VOLUME,VX,VY,VZ,X,Y,Z,
|
TRI,TYPE,TYPE_FRACTION,TYPE_RATIO,TYPE_SUBSET,VOLUME,VX,VY,VZ,X,Y,Z,
|
||||||
@ -296,6 +296,14 @@ void Set::process_args(int caller_flag, int narg, char **arg)
|
|||||||
action->keyword = RADIUS_ELECTRON;
|
action->keyword = RADIUS_ELECTRON;
|
||||||
process_radius_election(iarg,narg,arg,action);
|
process_radius_election(iarg,narg,arg,action);
|
||||||
invoke_choice[naction++] = &Set::invoke_radius_election;
|
invoke_choice[naction++] = &Set::invoke_radius_election;
|
||||||
|
} else if (strcmp(arg[iarg],"rheo/rho") == 0) {
|
||||||
|
action->keyword = SPH_RHO;
|
||||||
|
process_sph_rho(iarg,narg,arg,action);
|
||||||
|
invoke_choice[naction++] = &Set::invoke_sph_rho;
|
||||||
|
} else if (strcmp(arg[iarg],"rheo/status") == 0) {
|
||||||
|
action->keyword = RHEO_STATUS;
|
||||||
|
process_rheo_status(iarg,narg,arg,action);
|
||||||
|
invoke_choice[naction++] = &Set::invoke_rheo_status;
|
||||||
} else if (strcmp(arg[iarg],"shape") == 0) {
|
} else if (strcmp(arg[iarg],"shape") == 0) {
|
||||||
action->keyword = SHAPE;
|
action->keyword = SHAPE;
|
||||||
process_shape(iarg,narg,arg,action);
|
process_shape(iarg,narg,arg,action);
|
||||||
@ -2029,6 +2037,44 @@ void Set::invoke_radius_election(Action *action)
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void Set::process_rheo_status(int &iarg, int narg, char **arg, Action *action)
|
||||||
|
{
|
||||||
|
if (!atom->rheo_status_flag)
|
||||||
|
error->all(FLERR,"Cannot set attribute {} for atom style {}", arg[iarg], atom->get_style());
|
||||||
|
if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "set rheo/status", error);
|
||||||
|
|
||||||
|
if (utils::strmatch(arg[iarg+1],"^v_")) varparse(arg[iarg+1],1,action);
|
||||||
|
else {
|
||||||
|
action->ivalue1 = utils::inumeric(FLERR,arg[iarg+1],false,lmp);
|
||||||
|
if (action->ivalue1 != 0 && action->ivalue1 != 1)
|
||||||
|
error->one(FLERR,"Invalid rheo/status {} in set command", action->ivalue1);
|
||||||
|
}
|
||||||
|
|
||||||
|
iarg += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Set::invoke_rheo_status(Action *action)
|
||||||
|
{
|
||||||
|
int nlocal = atom->nlocal;
|
||||||
|
int *status = atom->rheo_status;
|
||||||
|
|
||||||
|
int varflag = action->varflag;
|
||||||
|
int rheo_status;
|
||||||
|
if (!action->varflag1) rheo_status = action->ivalue1;
|
||||||
|
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (!select[i]) continue;
|
||||||
|
if (varflag) {
|
||||||
|
rheo_status = static_cast<int> (vec1[i]);
|
||||||
|
if (rheo_status != 0 && rheo_status != 1)
|
||||||
|
error->one(FLERR,"Invalid rheo/status in set command");
|
||||||
|
}
|
||||||
|
status[i] = rheo_status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void Set::process_shape(int &iarg, int narg, char **arg, Action *action)
|
void Set::process_shape(int &iarg, int narg, char **arg, Action *action)
|
||||||
{
|
{
|
||||||
if (!atom->ellipsoid_flag)
|
if (!atom->ellipsoid_flag)
|
||||||
|
|||||||
@ -111,6 +111,7 @@ class Set : public Command {
|
|||||||
void process_quat(int &, int, char **, Action *);
|
void process_quat(int &, int, char **, Action *);
|
||||||
void process_quat_random(int &, int, char **, Action *);
|
void process_quat_random(int &, int, char **, Action *);
|
||||||
void process_radius_election(int &, int, char **, Action *);
|
void process_radius_election(int &, int, char **, Action *);
|
||||||
|
void process_rheo_status(int &, int, char **, Action *);
|
||||||
void process_shape(int &, int, char **, Action *);
|
void process_shape(int &, int, char **, Action *);
|
||||||
void process_smd_contact_radius(int &, int, char **, Action *);
|
void process_smd_contact_radius(int &, int, char **, Action *);
|
||||||
void process_smd_mass_density(int &, int, char **, Action *);
|
void process_smd_mass_density(int &, int, char **, Action *);
|
||||||
@ -164,6 +165,7 @@ class Set : public Command {
|
|||||||
void invoke_quat(Action *);
|
void invoke_quat(Action *);
|
||||||
void invoke_quat_random(Action *);
|
void invoke_quat_random(Action *);
|
||||||
void invoke_radius_election(Action *);
|
void invoke_radius_election(Action *);
|
||||||
|
void invoke_rheo_status(Action *);
|
||||||
void invoke_shape(Action *);
|
void invoke_shape(Action *);
|
||||||
void invoke_smd_contact_radius(Action *);
|
void invoke_smd_contact_radius(Action *);
|
||||||
void invoke_smd_mass_density(Action *);
|
void invoke_smd_mass_density(Action *);
|
||||||
|
|||||||
Reference in New Issue
Block a user