Merge pull request #1841 from phankl/stable

Mesoscopic potential for carbon nanotubes
This commit is contained in:
Axel Kohlmeyer
2020-01-15 16:31:40 -05:00
committed by GitHub
15 changed files with 2010084 additions and 1 deletions

View File

@ -174,6 +174,7 @@ OPT.
* :doc:`meam/c <pair_meamc>` * :doc:`meam/c <pair_meamc>`
* :doc:`meam/spline (o) <pair_meam_spline>` * :doc:`meam/spline (o) <pair_meam_spline>`
* :doc:`meam/sw/spline <pair_meam_sw_spline>` * :doc:`meam/sw/spline <pair_meam_sw_spline>`
* :doc:`mesocnt <pair_mesocnt>`
* :doc:`mgpt <pair_mgpt>` * :doc:`mgpt <pair_mgpt>`
* :doc:`mie/cut (g) <pair_mie>` * :doc:`mie/cut (g) <pair_mie>`
* :doc:`mm3/switch3/coulgauss/long <pair_mm3_switch3_coulgauss_long>` * :doc:`mm3/switch3/coulgauss/long <pair_mm3_switch3_coulgauss_long>`
@ -257,4 +258,3 @@ OPT.
* :doc:`yukawa/colloid (go) <pair_yukawa_colloid>` * :doc:`yukawa/colloid (go) <pair_yukawa_colloid>`
* :doc:`zbl (gko) <pair_zbl>` * :doc:`zbl (gko) <pair_zbl>`
* *
*

161
doc/src/pair_mesocnt.rst Normal file
View File

@ -0,0 +1,161 @@
.. index:: pair\_style mesocnt
pair\_style mesocnt command
===========================
Syntax
""""""
.. parsed-literal::
pair_style mesocnt
Examples
""""""""
.. parsed-literal::
pair_style mesocnt
pair_coeff \* \* 10_10.cnt
Description
"""""""""""
Style *mesocnt* implements a mesoscopic potential
for the interaction of carbon nanotubes (CNTs). In this potential,
CNTs are modelled as chains of cylindrical segments in which
each infinitesimal surface element interacts with all other
CNT surface elements with the Lennard-Jones (LJ) term adopted from
the :doc:`airebo <pair_airebo>` style. The interaction energy
is then computed by integrating over the surfaces of all interacting
CNTs.
The potential is based on interactions between one cylindrical
segment and infinitely or semi-infinitely long CNTs as described
in :ref:`(Volkov1) <Volkov1>`. Chains of segments are
converted to these (semi-)infinite CNTs bases on an approximate
chain approach outlined in :ref:`(Volkov2) <Volkov2>`.
This allows to simplify the computation of the interactions
significantly and reduces the computational times to the
same order of magnitude as for regular bead spring models
where beads interact with the standard :doc:`pair_lj/cut <pair_lj>`
potential.
In LAMMPS, cylindrical segments are represented by bonds. Each
segment is defined by its two end points ("nodes") which correspond
to atoms in LAMMPS. For the exact functional form of the potential
and implementation details, the reader is referred to the
original papers :ref:`(Volkov1) <Volkov1>` and
:ref:`(Volkov2) <Volkov2>`.
The potential requires tabulated data provided in a single ASCII
text file specified in the :doc:`pair\_coeff <pair_coeff>` command.
The first line of the file provides a time stamp and
general information. The second line lists four integers giving
the number of data points provided in the subsequent four
data tables. The third line lists four floating point numbers:
the CNT radius R, the LJ parameter sigma and two numerical
parameters delta1 and delta2. These four parameters are given
in Angstroms. This is followed by four data tables each separated
by a single empty line. The first two tables have two columns
and list the parameters uInfParallel and Gamma respectively.
The last two tables have three columns giving data on a quadratic
array and list the parameters Phi and uSemiParallel respectively.
uInfParallel and uSemiParallel are given in eV/Angstrom, Phi is
given in eV and Gamma is unitless.
Potential files for CNTs can be readily generated using the freely
available code provided on
.. parsed-literal::
https://github.com/phankl/cntpot
Using the same approach, it should also be possible to
generate potential files for other 1D systems such as
boron nitride nanotubes.
.. note::
LAMMPS comes with one *mesocnt* style potential file
where the default number of data points per table is 1001.
This is sufficient for NVT simulations. For proper energy
conservation, we recommend using a potential file where
the resolution for Phi is at least 2001 data points.
.. note::
The *mesocnt* style requires CNTs to be represented
as a chain of atoms connected by bonds. Atoms need
to be numbered consecutively within one chain.
Atoms belonging to different CNTs need to be assigned
different molecule IDs.
A full summary of the method and LAMMPS implementation details
is expected to soon become available in Computer Physics
Communications.
----------
**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
This pair style does not support mixing.
This pair style does not support the :doc:`pair\_modify <pair_modify>`
shift, table, and tail options.
The *mesocnt* pair style do not write their information to :doc:`binary restart files <restart>`,
since it is stored in tabulated potential files.
Thus, you need to re-specify the pair\_style and pair\_coeff commands in
an input script that reads a restart file.
This pair style can only be used via the *pair* keyword of the
:doc:`run\_style respa <run_style>` command. They do not support the
*inner*\ , *middle*\ , *outer* keywords.
----------
Restrictions
""""""""""""
This style is part of the USER-MISC package. It is only
enabled if LAMMPS was built with that package. See the :doc:`Build package <Build_package>` doc page for more info.
This pair potential requires the :doc:`newton <newton>` setting to be
"on" for pair interactions.
Related commands
""""""""""""""""
:doc:`pair\_coeff <pair_coeff>`
**Default:** none
----------
.. _Volkov1:
**(Volkov1)** Volkov and Zhigilei, J Phys Chem C, 114, 5513 (2010).
.. _Volkov2:
**(Volkov2)** Volkov, Simov and Zhigilei, APS Meeting Abstracts,
Q31.013 (2008).
.. _lws: http://lammps.sandia.gov
.. _ld: Manual.html
.. _lc: Commands_all.html

View File

@ -244,6 +244,7 @@ accelerated styles exist.
* :doc:`meam/c <pair_meamc>` - modified embedded atom method (MEAM) in C * :doc:`meam/c <pair_meamc>` - modified embedded atom method (MEAM) in C
* :doc:`meam/spline <pair_meam_spline>` - splined version of MEAM * :doc:`meam/spline <pair_meam_spline>` - splined version of MEAM
* :doc:`meam/sw/spline <pair_meam_sw_spline>` - splined version of MEAM with a Stillinger-Weber term * :doc:`meam/sw/spline <pair_meam_sw_spline>` - splined version of MEAM with a Stillinger-Weber term
* :doc:`mesocnt <pair_mesocnt>` - mesoscale model for (carbon) nanotubes
* :doc:`mgpt <pair_mgpt>` - simplified model generalized pseudopotential theory (MGPT) potential * :doc:`mgpt <pair_mgpt>` - simplified model generalized pseudopotential theory (MGPT) potential
* :doc:`mie/cut <pair_mie>` - Mie potential * :doc:`mie/cut <pair_mie>` - Mie potential
* :doc:`mm3/switch3/coulgauss/long <pair_mm3_switch3_coulgauss_long>` - smoothed MM3 vdW potential with Gaussian electrostatics * :doc:`mm3/switch3/coulgauss/long <pair_mm3_switch3_coulgauss_long>` - smoothed MM3 vdW potential with Gaussian electrostatics

View File

@ -1673,6 +1673,7 @@ Mersenne
Merz Merz
meshless meshless
meso meso
mesocnt
mesoparticle mesoparticle
mesoscale mesoscale
mesoscopic mesoscopic
@ -2587,6 +2588,7 @@ Sikandar
Silbert Silbert
Silling Silling
Sim Sim
Simov
Simul Simul
simulations simulations
Sinnott Sinnott
@ -2921,6 +2923,7 @@ UEF
ufm ufm
Uhlenbeck Uhlenbeck
Ui Ui
uInfParallel
uk uk
ul ul
ulb ulb
@ -2961,6 +2964,7 @@ upto
Urbakh Urbakh
Urbana Urbana
usec usec
uSemiParallel
userguide userguide
username username
usr usr
@ -3028,6 +3032,7 @@ VMDHOME
vn vn
Voigt Voigt
volfactor volfactor
Volkov
Volpe Volpe
volpress volpress
volumetric volumetric
@ -3180,6 +3185,7 @@ zflag
Zhang Zhang
Zhen Zhen
zhi zhi
Zhigilei
Zhou Zhou
Zhu Zhu
zi zi

View File

@ -0,0 +1 @@
../../../../potentials/C_10_10.mesocnt

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,38 @@
#Initialisation
units nano
dimension 3
boundary p p p
atom_style full
comm_modify cutoff 11.0
neighbor 7.80 bin
newton on
#Read data
read_data cnt.data
replicate 1 2 2
#Force field
bond_style harmonic
bond_coeff 1 268896.77 2.0
angle_style harmonic
angle_coeff 1 46562.17 180.0
pair_style mesocnt
pair_coeff * * C_10_10.mesocnt
#Output
thermo 1000
dump xyz all xyz 1000 cnt.xyz
#Simulation setup
timestep 1.0e-05
#Nose-Hoover thermostat
fix nvt all nvt temp 300 300 0.001
run 10000

View File

@ -0,0 +1,126 @@
LAMMPS (09 Jan 2020)
#Initialisation
units nano
dimension 3
boundary p p p
atom_style full
comm_modify cutoff 11.0
neighbor 7.80 bin
newton on
#Read data
read_data cnt.data
orthogonal box = (0 0 0) to (600 600 60)
1 by 1 by 1 MPI processor grid
reading atoms ...
500 atoms
scanning bonds ...
1 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
498 bonds
reading angles ...
496 angles
2 = max # of 1-2 neighbors
2 = max # of 1-3 neighbors
4 = max # of 1-4 neighbors
6 = max # of special neighbors
special bonds CPU = 0.000180006 secs
read_data CPU = 0.00125766 secs
replicate 1 2 2
orthogonal box = (0 0 0) to (600 1200 120)
1 by 1 by 1 MPI processor grid
2000 atoms
1992 bonds
1984 angles
2 = max # of 1-2 neighbors
2 = max # of 1-3 neighbors
4 = max # of 1-4 neighbors
6 = max # of special neighbors
special bonds CPU = 0.00054121 secs
replicate CPU = 0.000902414 secs
#Force field
bond_style harmonic
bond_coeff 1 268896.77 2.0
angle_style harmonic
angle_coeff 1 46562.17 180.0
pair_style mesocnt
pair_coeff * * 10_10.cnt
Reading potential file 10_10.cnt with DATE: 2020-01-13
#Output
thermo 1000
dump xyz all xyz 1000 cnt.xyz
#Simulation setup
timestep 1.0e-05
#Nose-Hoover thermostat
fix nvt all nvt temp 300 300 0.001
run 10000
WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (src/pair.cpp:226)
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 10.177
ghost atom cutoff = 11
binsize = 5.0885, bins = 118 236 24
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair mesocnt, perpetual
attributes: full, newton on
pair build: full/bin
stencil: full/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 11.21 | 11.21 | 11.21 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0 -4632.0136 5.7939238e-17 -4632.0136 -0.00015032304
1000 298.82235 -19950.274 13208.089 5628.7024 -0.0056205182
2000 300.43933 -28320.212 11980.296 -3902.0877 -0.0045324757
3000 300.4263 -36049.855 11338.405 -12274.161 -0.0018833539
4000 299.13368 -43471.21 11926.882 -19160.553 -0.00043030866
5000 293.77858 -50083.893 12334.927 -25586.884 -0.0015653738
6000 296.4851 -56330.135 12325.63 -31730.376 -0.0012795986
7000 298.20879 -62120.359 12582.297 -37192.574 -0.0013845796
8000 299.45547 -67881.692 13058.926 -42425.669 -0.00021100885
9000 301.82622 -73333.698 13598.257 -47240.197 -0.0006009197
10000 307.16873 -78292.306 13818.929 -51756.96 -0.0005609903
Loop time of 4.0316 on 1 procs for 10000 steps with 2000 atoms
Performance: 2143.072 ns/day, 0.011 hours/ns, 2480.408 timesteps/s
99.9% 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.5955 | 2.5955 | 2.5955 | 0.0 | 64.38
Bond | 1.1516 | 1.1516 | 1.1516 | 0.0 | 28.57
Neigh | 0.001163 | 0.001163 | 0.001163 | 0.0 | 0.03
Comm | 0.0019577 | 0.0019577 | 0.0019577 | 0.0 | 0.05
Output | 0.020854 | 0.020854 | 0.020854 | 0.0 | 0.52
Modify | 0.21637 | 0.21637 | 0.21637 | 0.0 | 5.37
Other | | 0.04409 | | | 1.09
Nlocal: 2000 ave 2000 max 2000 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
FullNghs: 13320 ave 13320 max 13320 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 13320
Ave neighs/atom = 6.66
Ave special neighs/atom = 5.952
Neighbor list builds = 1
Dangerous builds = 0
Total wall time: 0:00:05

View File

@ -0,0 +1,126 @@
LAMMPS (09 Jan 2020)
#Initialisation
units nano
dimension 3
boundary p p p
atom_style full
comm_modify cutoff 11.0
neighbor 7.80 bin
newton on
#Read data
read_data cnt.data
orthogonal box = (0 0 0) to (600 600 60)
2 by 2 by 1 MPI processor grid
reading atoms ...
500 atoms
scanning bonds ...
1 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
498 bonds
reading angles ...
496 angles
2 = max # of 1-2 neighbors
2 = max # of 1-3 neighbors
4 = max # of 1-4 neighbors
6 = max # of special neighbors
special bonds CPU = 0.000354767 secs
read_data CPU = 0.00286365 secs
replicate 1 2 2
orthogonal box = (0 0 0) to (600 1200 120)
1 by 4 by 1 MPI processor grid
2000 atoms
1992 bonds
1984 angles
2 = max # of 1-2 neighbors
2 = max # of 1-3 neighbors
4 = max # of 1-4 neighbors
6 = max # of special neighbors
special bonds CPU = 0.00019598 secs
replicate CPU = 0.00055337 secs
#Force field
bond_style harmonic
bond_coeff 1 268896.77 2.0
angle_style harmonic
angle_coeff 1 46562.17 180.0
pair_style mesocnt
pair_coeff * * 10_10.cnt
Reading potential file 10_10.cnt with DATE: 2020-01-13
#Output
thermo 1000
dump xyz all xyz 1000 cnt.xyz
#Simulation setup
timestep 1.0e-05
#Nose-Hoover thermostat
fix nvt all nvt temp 300 300 0.001
run 10000
WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (src/pair.cpp:226)
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 10.177
ghost atom cutoff = 11
binsize = 5.0885, bins = 118 236 24
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair mesocnt, perpetual
attributes: full, newton on
pair build: full/bin
stencil: full/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 2.725 | 2.725 | 2.725 Mbytes
Step Temp E_pair E_mol TotEng Press
0 0 -4632.0136 5.7939238e-17 -4632.0136 -0.00015032304
1000 298.82235 -19950.274 13208.089 5628.7024 -0.0056205182
2000 300.43861 -28320.205 11980.287 -3902.1202 -0.0045324738
3000 300.41076 -36049.308 11339.149 -12273.513 -0.0018848513
4000 299.13326 -43471.424 11927.668 -19159.998 -0.00042845101
5000 293.78857 -50083.216 12333.969 -25586.752 -0.0015664633
6000 296.45482 -56329.621 12326.419 -31730.328 -0.0012773686
7000 298.19097 -62119.086 12581.4 -37192.937 -0.0013862831
8000 299.46424 -67880.989 13057.62 -42425.908 -0.00020874264
9000 301.80677 -73332.208 13597.237 -47240.532 -0.00060074773
10000 307.17104 -78292.912 13818.889 -51757.51 -0.00056148282
Loop time of 1.23665 on 4 procs for 10000 steps with 2000 atoms
Performance: 6986.607 ns/day, 0.003 hours/ns, 8086.351 timesteps/s
96.1% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.66321 | 0.68439 | 0.71413 | 2.5 | 55.34
Bond | 0.28561 | 0.29434 | 0.30976 | 1.7 | 23.80
Neigh | 0.00043321 | 0.00043637 | 0.00043917 | 0.0 | 0.04
Comm | 0.026656 | 0.05346 | 0.097228 | 12.7 | 4.32
Output | 0.0070224 | 0.0073031 | 0.0081415 | 0.6 | 0.59
Modify | 0.12769 | 0.15394 | 0.18743 | 6.5 | 12.45
Other | | 0.04279 | | | 3.46
Nlocal: 500 ave 504 max 496 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Nghost: 22 ave 24 max 20 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Neighs: 0 ave 0 max 0 min
Histogram: 4 0 0 0 0 0 0 0 0 0
FullNghs: 3330 ave 3368 max 3292 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Total # of neighbors = 13320
Ave neighs/atom = 6.66
Ave special neighs/atom = 5.952
Neighbor list builds = 1
Dangerous builds = 0
Total wall time: 0:00:02

2006011
potentials/C_10_10.mesocnt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -89,6 +89,7 @@ lcbop LCBOP long-range bond-order potential
meam modified EAM (MEAM) library and individual elements/alloys meam modified EAM (MEAM) library and individual elements/alloys
meam.spline modified EAM (MEAM) spline potential meam.spline modified EAM (MEAM) spline potential
meam.sw.spline modified EAM (MEAM) Stillinger-Weber spline potential meam.sw.spline modified EAM (MEAM) Stillinger-Weber spline potential
mesocnt mesoscopic carbon nanotube (CNT) potential
mgpt model generalized pseudopotential theory (MGPT) potential mgpt model generalized pseudopotential theory (MGPT) potential
nb3b.harmonic nonbonded 3-body harmonic potential nb3b.harmonic nonbonded 3-body harmonic potential
poly polymorphic 3-body potential poly polymorphic 3-body potential

View File

@ -91,6 +91,7 @@ pair_style kolmogorov/crespi/full, Wengen Ouyang (Tel Aviv University), w.g.ouya
pair_style kolmogorov/crespi/z, Jaap Kroes (Radboud U), jaapkroes at gmail dot com, 28 Feb 17 pair_style kolmogorov/crespi/z, Jaap Kroes (Radboud U), jaapkroes at gmail dot com, 28 Feb 17
pair_style meam/spline, Alexander Stukowski (LLNL), alex at stukowski.com, 1 Feb 12 pair_style meam/spline, Alexander Stukowski (LLNL), alex at stukowski.com, 1 Feb 12
pair_style meam/sw/spline, Robert Rudd (LLNL), robert.rudd at llnl.gov, 1 Oct 12 pair_style meam/sw/spline, Robert Rudd (LLNL), robert.rudd at llnl.gov, 1 Oct 12
pair_style mesocnt, Philipp Kloza (U Cambridge), pak37 at cam.ac.uk, 15 Jan 20
pair_style morse/smooth/linear, Stefan Paquay (TU Eindhoven), stefanpaquay at gmail.com, 29 Feb 16 pair_style morse/smooth/linear, Stefan Paquay (TU Eindhoven), stefanpaquay at gmail.com, 29 Feb 16
pair_style srp, Tim Sirk, tim.sirk at us.army.mil, 21 Nov 14 pair_style srp, Tim Sirk, tim.sirk at us.army.mil, 21 Nov 14
pair_style tersoff/table, Luca Ferraro, luca.ferraro@caspur.it, 1 Dec 11 pair_style tersoff/table, Luca Ferraro, luca.ferraro@caspur.it, 1 Dec 11

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,170 @@
#ifdef PAIR_CLASS
PairStyle(mesocnt, PairMesoCNT)
#else
#ifndef LMP_PAIR_MESOCNT_H
#define LMP_PAIR_MESOCNT_H
#include "pair.h"
namespace LAMMPS_NS {
class PairMesoCNT : public Pair {
public:
PairMesoCNT(class LAMMPS *);
~PairMesoCNT();
void compute(int, int);
void settings(int, char **);
void coeff(int, char **);
void init_style();
double init_one(int, int);
protected:
int uinf_points,gamma_points,phi_points,usemi_points;
int nlocal_size,reduced_neigh_size;
int *reduced_nlist,*numchainlist;
int **reduced_neighlist,**nchainlist,**endlist;
int ***chainlist;
double ang,ang_inv,eunit,funit;
double delta1,delta2;
double r,rsq,d,rc,rcsq,rc0,cutoff,cutoffsq;
double r_ang,rsq_ang,d_ang,rc_ang,rcsq_ang,cutoff_ang,cutoffsq_ang;
double sig,sig_ang,comega,ctheta;
double hstart_uinf,hstart_gamma,
hstart_phi,psistart_phi,hstart_usemi,xistart_usemi;
double delh_uinf,delh_gamma,delh_phi,delpsi_phi,delh_usemi,delxi_usemi;
double p1[3],p2[3],p[3],m[3];
double *param,*w,*wnode;
double **dq_w;
double ***q1_dq_w,***q2_dq_w;
double *uinf_data,*gamma_data,**phi_data,**usemi_data;
double **uinf_coeff,**gamma_coeff,****phi_coeff,****usemi_coeff;
double **flocal,**fglobal,**basis;
char *file;
void allocate();
void bond_neigh();
void neigh_common(int, int, int &, int *);
void chain_split(int *, int, int &, int **, int *, int *);
void sort(int *, int);
void read_file();
void read_data(FILE *, double *, double &, double &, int);
void read_data(FILE *, double **, double &, double &,
double &, double &, int);
void spline_coeff(double *, double **, double, int);
void spline_coeff(double **, double ****, double, double, int);
double spline(double, double, double, double **, int);
double dspline(double, double, double, double **, int);
double spline(double, double, double, double, double, double,
double ****, int);
double dxspline(double, double, double, double, double, double,
double ****, int);
double dyspline(double, double, double, double, double, double,
double ****, int);
void geometry(const double *, const double *, const double *,
const double *, const double *,
double *, double *, double *, double **);
void weight(const double *, const double *, const double *,
const double *, double &, double *, double *,
double *, double *);
void finf(const double *, double &, double **);
void fsemi(const double *, double &, double &, double **);
// inlined functions for efficiency
inline double heaviside(double x) {
if (x > 0) return 1.0;
else return 0.0;
}
inline double s(double x) {
return heaviside(-x) + heaviside(x)*heaviside(1-x)*(1 - x*x*(3 - 2*x));
}
inline double ds(double x) {
return 6 * heaviside(x) * heaviside(1-x) * x * (x-1);
}
inline double s5(double x) {
double x2 = x * x;
return heaviside(-x)
+ heaviside(x)*heaviside(1-x)*(1 - x2*x*(6*x2 - 15*x + 10));
}
inline double ds5(double x) {
double x2 = x * x;
return -30 * heaviside(x) * heaviside(1-x) * x2 * (x2 - 2*x + 1);
}
};
}
#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.
E: Incorrect args for pair coefficients
Self-explanatory. Check the input script or data file.
E: Pair style mesocnt does not support lj units
Self-explanatory. Specify different unit system using the units
command.
E: Pair style mesocnt requires atom IDs
Self-explanatory. Turn on atom IDs using the atom_modify command.
E: Pair style mesocnt requires newton pair on
Self-explanatory. Turn on Newton's third law with the newton command.
E: Cannot open mesocnt file %s
The specified mesocnt potential file cannot be opened. Check that the
path and name are correct.
E: Premature end of file in pair table %s
The specified mesocnt potential file is shorter than specified. Check
if the correct file is being used and the right number of data points
was specified in the pair_style
W: %d of %d lines were incomplete or could not be parsed completely
in pair table %s
A number of lines in the specified mesocnt potential file is incomplete
or in the wrong format. Check the file for errors and missing data.
W: %d spacings in the first column were different from the first spacing
in the pair table %s
The spacings between x coordinates in the first column of the specified
mesocnt potential file vary throughout the file. Use a potential file
with higher precision.
W: %d spacings in second column were different from first
spacing in pair table %s
The spacings between y coordinates in the second column of the specified
mesocnt potential file vary throughout the file. Use a potential file
with higher precision.
*/

View File

@ -43,6 +43,9 @@ namespace MathExtra {
// 3x3 matrix operations // 3x3 matrix operations
inline void zeromat3(double m[3][3]);
inline void zeromat3(double **m);
inline void col2mat(const double *ex, const double *ey, const double *ez, inline void col2mat(const double *ex, const double *ey, const double *ez,
double m[3][3]); double m[3][3]);
inline double det3(const double mat[3][3]); inline double det3(const double mat[3][3]);
@ -52,6 +55,12 @@ namespace MathExtra {
double ans[3][3]); double ans[3][3]);
inline void plus3(const double m[3][3], const double m2[3][3], inline void plus3(const double m[3][3], const double m2[3][3],
double ans[3][3]); double ans[3][3]);
inline void plus3(const double m[3][3], double **m2, double **ans);
inline void minus3(const double m[3][3], const double m2[3][3],
double ans[3][3]);
inline void minus3(double **m, const double m2[3][3],
double ans[3][3]);
inline void times3(const double m[3][3], const double m2[3][3], inline void times3(const double m[3][3], const double m2[3][3],
double ans[3][3]); double ans[3][3]);
inline void transpose_times3(const double m[3][3], const double m2[3][3], inline void transpose_times3(const double m[3][3], const double m2[3][3],
@ -71,6 +80,8 @@ namespace MathExtra {
double ans[3][3]); double ans[3][3]);
inline void vecmat(const double *v, const double m[3][3], double *ans); inline void vecmat(const double *v, const double m[3][3], double *ans);
inline void scalar_times3(const double f, double m[3][3]); inline void scalar_times3(const double f, double m[3][3]);
inline void outer3(const double *v1, const double *v2,
double ans[3][3]);
void write3(const double mat[3][3]); void write3(const double mat[3][3]);
int mldivide3(const double mat[3][3], const double *vec, double *ans); int mldivide3(const double mat[3][3], const double *vec, double *ans);
@ -707,4 +718,76 @@ inline void MathExtra::rotation_generator_z(const double m[3][3],
ans[2][2] = 0; ans[2][2] = 0;
} }
// set matrix to zero
inline void MathExtra::zeromat3(double m[3][3])
{
m[0][0] = m[0][1] = m[0][2] = 0.0;
m[1][0] = m[1][1] = m[1][2] = 0.0;
m[2][0] = m[2][1] = m[2][2] = 0.0;
}
inline void MathExtra::zeromat3(double **m)
{
m[0][0] = m[0][1] = m[0][2] = 0.0;
m[1][0] = m[1][1] = m[1][2] = 0.0;
m[2][0] = m[2][1] = m[2][2] = 0.0;
}
// add two matrices
inline void MathExtra::plus3(const double m[3][3], double **m2,
double **ans)
{
ans[0][0] = m[0][0]+m2[0][0];
ans[0][1] = m[0][1]+m2[0][1];
ans[0][2] = m[0][2]+m2[0][2];
ans[1][0] = m[1][0]+m2[1][0];
ans[1][1] = m[1][1]+m2[1][1];
ans[1][2] = m[1][2]+m2[1][2];
ans[2][0] = m[2][0]+m2[2][0];
ans[2][1] = m[2][1]+m2[2][1];
ans[2][2] = m[2][2]+m2[2][2];
}
// subtract two matrices
inline void MathExtra::minus3(const double m[3][3], const double m2[3][3],
double ans[3][3])
{
ans[0][0] = m[0][0]-m2[0][0];
ans[0][1] = m[0][1]-m2[0][1];
ans[0][2] = m[0][2]-m2[0][2];
ans[1][0] = m[1][0]-m2[1][0];
ans[1][1] = m[1][1]-m2[1][1];
ans[1][2] = m[1][2]-m2[1][2];
ans[2][0] = m[2][0]-m2[2][0];
ans[2][1] = m[2][1]-m2[2][1];
ans[2][2] = m[2][2]-m2[2][2];
}
inline void MathExtra::minus3(double **m, const double m2[3][3],
double ans[3][3])
{
ans[0][0] = m[0][0]-m2[0][0];
ans[0][1] = m[0][1]-m2[0][1];
ans[0][2] = m[0][2]-m2[0][2];
ans[1][0] = m[1][0]-m2[1][0];
ans[1][1] = m[1][1]-m2[1][1];
ans[1][2] = m[1][2]-m2[1][2];
ans[2][0] = m[2][0]-m2[2][0];
ans[2][1] = m[2][1]-m2[2][1];
ans[2][2] = m[2][2]-m2[2][2];
}
// compute outer product of two vectors
inline void MathExtra::outer3(const double *v1, const double *v2,
double ans[3][3])
{
ans[0][0] = v1[0]*v2[0]; ans[0][1] = v1[0]*v2[1]; ans[0][2] = v1[0]*v2[2];
ans[1][0] = v1[1]*v2[0]; ans[1][1] = v1[1]*v2[1]; ans[1][2] = v1[1]*v2[2];
ans[2][0] = v1[2]*v2[0]; ans[2][1] = v1[2]*v2[1]; ans[2][2] = v1[2]*v2[2];
}
#endif #endif