add keyword for userdefined maxdelcs

This commit is contained in:
Wengen Ouyang
2021-12-03 17:32:08 +02:00
parent 262c103aaa
commit 1dd4a67771
6 changed files with 53 additions and 24 deletions

View File

@ -21,9 +21,17 @@ Syntax
.. code-block:: LAMMPS
pair_style style
pair_style style keyword values
* style = *sw* or *sw/mod*
* keyword = *maxdelcs*
.. parsed-literal::
*maxdelcs* value = delta1 delta2
delta1 = The minimum thershold for cosine of three-body angle
delta2 = The maximum threshold for cosine of three-body angle
Examples
""""""""
@ -34,7 +42,7 @@ Examples
pair_coeff * * si.sw Si
pair_coeff * * GaN.sw Ga N Ga
pair_style sw/mod
pair_style sw/mod maxdelcs 0.25 0.35
pair_coeff * * tmd.sw.mod Mo S S
Description

View File

@ -10,7 +10,7 @@ mass * 32.065 # mass of sulphur atom , uint: a.u.=1.66X10^(-27)kg
mass 1 95.94 # mass of molebdenum atom , uint: a.u.=1.66X10^(-27)kg
########################## Define potentials ################################
pair_style sw/mod
pair_style sw/mod maxdelcs 0.25 0.35
pair_coeff * * tmd.sw.mod Mo S S
#########################################################################

View File

@ -1,6 +1,4 @@
LAMMPS (30 Jul 2021)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
LAMMPS (27 Oct 2021)
# monolayer MoS2
units metal
boundary p p f
@ -21,15 +19,15 @@ Finding 1-2 1-3 1-4 neighbors ...
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.005 seconds
read_data CPU = 0.009 seconds
mass * 32.065 # mass of sulphur atom , uint: a.u.=1.66X10^(-27)kg
mass 1 95.94 # mass of molebdenum atom , uint: a.u.=1.66X10^(-27)kg
########################## Define potentials ################################
pair_style sw/mod
pair_style sw/mod maxdelcs 0.25 0.35
pair_coeff * * tmd.sw.mod Mo S S
Reading sw/mod potential file tmd.sw.mod with DATE: 2018-03-26
Reading sw potential file tmd.sw.mod with DATE: 2018-03-26
#########################################################################
### Simulation settings ####
@ -71,21 +69,21 @@ Step TotEng PotEng KinEng Temp
4000 -899.28397 -920.50737 21.223397 214.06955
4500 -899.28386 -919.79154 20.507685 206.85053
5000 -899.28077 -918.78947 19.508698 196.77425
Loop time of 2.88628 on 1 procs for 5000 steps with 768 atoms
Loop time of 3.13658 on 1 procs for 5000 steps with 768 atoms
Performance: 149.674 ns/day, 0.160 hours/ns, 1732.334 timesteps/s
99.7% CPU use with 1 MPI tasks x 1 OpenMP threads
Performance: 137.730 ns/day, 0.174 hours/ns, 1594.094 timesteps/s
100.0% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 2.8297 | 2.8297 | 2.8297 | 0.0 | 98.04
Bond | 0.00028899 | 0.00028899 | 0.00028899 | 0.0 | 0.01
Pair | 3.0504 | 3.0504 | 3.0504 | 0.0 | 97.25
Bond | 0.00073783 | 0.00073783 | 0.00073783 | 0.0 | 0.02
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.0095191 | 0.0095191 | 0.0095191 | 0.0 | 0.33
Output | 0.0002787 | 0.0002787 | 0.0002787 | 0.0 | 0.01
Modify | 0.034603 | 0.034603 | 0.034603 | 0.0 | 1.20
Other | | 0.01188 | | | 0.41
Comm | 0.013033 | 0.013033 | 0.013033 | 0.0 | 0.42
Output | 0.00081458 | 0.00081458 | 0.00081458 | 0.0 | 0.03
Modify | 0.048235 | 0.048235 | 0.048235 | 0.0 | 1.54
Other | | 0.02334 | | | 0.74
Nlocal: 768.000 ave 768 max 768 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -101,4 +99,4 @@ Ave neighs/atom = 26.666667
Ave special neighs/atom = 0.0000000
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:02
Total wall time: 0:00:03

View File

@ -29,7 +29,6 @@ class PairSW : public Pair {
PairSW(class LAMMPS *);
virtual ~PairSW();
virtual void compute(int, int);
void settings(int, char **);
virtual void coeff(int, char **);
virtual double init_one(int, int);
virtual void init_style();
@ -54,6 +53,7 @@ class PairSW : public Pair {
int maxshort; // size of short neighbor list array
int *neighshort; // short neighbor list array
virtual void settings(int, char **);
virtual void allocate();
void read_file(char *);
virtual void setup_params();

View File

@ -18,6 +18,7 @@
#include "pair_sw_mod.h"
#include "error.h"
#include "math_const.h"
#include <cmath>
@ -30,6 +31,26 @@ using namespace MathConst;
PairSWMOD::PairSWMOD(LAMMPS *lmp) : PairSW(lmp) {}
/* ----------------------------------------------------------------------
global settings
------------------------------------------------------------------------- */
void PairSWMOD::settings(int narg, char **arg)
{
// process optional keywords
int iarg = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"maxdelcs") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal pair_style command");
delta1 = utils::numeric(FLERR,arg[iarg+1],false,lmp);
delta2 = utils::numeric(FLERR,arg[iarg+2],false,lmp);
iarg += 3;
} else error->all(FLERR,"Illegal pair_style command");
}
}
/* ---------------------------------------------------------------------- */
void PairSWMOD::threebody(Param *paramij, Param *paramik, Param *paramijk,
@ -40,8 +61,7 @@ void PairSWMOD::threebody(Param *paramij, Param *paramik, Param *paramijk,
double r1,rinvsq1,rainv1,gsrainv1,gsrainvsq1,expgsrainv1;
double r2,rinvsq2,rainv2,gsrainv2,gsrainvsq2,expgsrainv2;
double rinv12,cs,delcs,delcssq,facexp,facrad,frad1,frad2;
double facang,facang12,csfacang,csfac1,csfac2;
double delta1,delta2,factor;
double facang,facang12,csfacang,csfac1,csfac2,factor;
r1 = sqrt(rsq1);
rinvsq1 = 1.0/rsq1;
@ -61,8 +81,8 @@ void PairSWMOD::threebody(Param *paramij, Param *paramik, Param *paramijk,
cs = (delr1[0]*delr2[0] + delr1[1]*delr2[1] + delr1[2]*delr2[2]) * rinv12;
delcs = cs - paramijk->costheta;
// Modification to delcs
delta1 = 0.25;
delta2 = 0.35;
//delta1 = 0.25;
//delta2 = 0.35;
if(fabs(delcs) >= delta2) delcs = 0.0;
else if(fabs(delcs) < delta2 && fabs(delcs) > delta1) {
factor = 0.5 + 0.5*cos(MY_PI*(delcs - delta1)/(delta2 - delta1));

View File

@ -30,6 +30,9 @@ class PairSWMOD : public PairSW {
~PairSWMOD() {}
protected:
double delta1;
double delta2;
void settings(int, char **);
void threebody(Param *, Param *, Param *, double, double, double *, double *, double *, double *,
int, double &);
};