From 85e917ae5200887365235d93b705fb1bb2f1a164 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 31 May 2017 00:38:44 -0400 Subject: [PATCH] integrate compute cnp/atom contributed by Paulo Branicio (USC) --- doc/src/Eqs/cnp_cutoff.jpg | Bin 0 -> 13431 bytes doc/src/Eqs/cnp_cutoff.tex | 14 ++ doc/src/Eqs/cnp_cutoff2.jpg | Bin 0 -> 2518 bytes doc/src/Eqs/cnp_cutoff2.tex | 12 ++ doc/src/Eqs/cnp_eq.jpg | Bin 0 -> 23959 bytes doc/src/Eqs/cnp_eq.tex | 9 + doc/src/Section_commands.txt | 1 + doc/src/compute_cna_atom.txt | 4 +- doc/src/compute_cnp_atom.txt | 111 ++++++++++ doc/src/computes.txt | 1 + doc/src/lammps.book | 1 + src/.gitignore | 4 +- src/USER-MISC/README | 1 + src/USER-MISC/compute_cnp_atom.cpp | 311 +++++++++++++++++++++++++++++ src/USER-MISC/compute_cnp_atom.h | 92 +++++++++ 15 files changed, 557 insertions(+), 4 deletions(-) create mode 100644 doc/src/Eqs/cnp_cutoff.jpg create mode 100644 doc/src/Eqs/cnp_cutoff.tex create mode 100644 doc/src/Eqs/cnp_cutoff2.jpg create mode 100644 doc/src/Eqs/cnp_cutoff2.tex create mode 100644 doc/src/Eqs/cnp_eq.jpg create mode 100644 doc/src/Eqs/cnp_eq.tex create mode 100644 doc/src/compute_cnp_atom.txt create mode 100644 src/USER-MISC/compute_cnp_atom.cpp create mode 100644 src/USER-MISC/compute_cnp_atom.h diff --git a/doc/src/Eqs/cnp_cutoff.jpg b/doc/src/Eqs/cnp_cutoff.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fae5c6b636c0f818f8677fd7fce4f402cb03a95d GIT binary patch literal 13431 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 literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/cnp_cutoff.tex b/doc/src/Eqs/cnp_cutoff.tex new file mode 100644 index 0000000000..f74166e608 --- /dev/null +++ b/doc/src/Eqs/cnp_cutoff.tex @@ -0,0 +1,14 @@ +\documentclass[12pt,article]{article} + +\usepackage{indentfirst} +\usepackage{amsmath} + +\begin{document} + +\begin{eqnarray*} + r_{c}^{fcc} & = & \frac{1}{2} \left(\frac{\sqrt{2}}{2} + 1\right) \mathrm{a} \simeq 0.8536 \:\mathrm{a} \\ + r_{c}^{bcc} & = & \frac{1}{2}(\sqrt{2} + 1) \mathrm{a} \simeq 1.207 \:\mathrm{a} \\ + r_{c}^{hcp} & = & \frac{1}{2}\left(1+\sqrt{\frac{4+2x^{2}}{3}}\right) \mathrm{a} +\end{eqnarray*} + +\end{document} diff --git a/doc/src/Eqs/cnp_cutoff2.jpg b/doc/src/Eqs/cnp_cutoff2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..744b61e9b45fd5401a745ab968d9faa607a88b19 GIT binary patch literal 2518 zcmbW3XE@sn8^-@+=^HDwc7i5Oj#{;fQcg=#qpGyE6^)hJt43;cSv7(~QR7hKXzd!u zsx4xc5VNSLy{Vwe(J$}E_rv?Uuj~2nJok0qU!T*l(^-I17pH>*n3$LV?K1(VlYk}w z0fE6_5aet?AP^{wl?8SN2ONHm6~V#9h2TISxOs$lxz7t+Kp^-;`2>(iVPRoz-iw%v zD2xzF7zbPwMc(6)&bz!u)yeO$^b@mGjlO9F%M%l?y399#EaoO{#ZD7)5W>*cd^e_Go$ zDzVy>A}pek8}n*iOUrPIp*+VYlAtKp=SG=$?ahIIl>S=+qJGW}VG*ows+L>wom)wO>zeFyiS05-&kr@IZ?=j} zrn_x#JQyzd+bhVk2r&jj}rjegsDF=2d0_hgy!Dzko@3%{G~& zdr;i)($rwI#5B_#XzeR%f5o2gIpa;oUSkmL`oF*yG zc+LnSPbSV6UcmNN_&3DOl|~Oz?8HY3J1$@Gy1Cm+Q(AFVzR^jHd&4rZ$WbOfoRYgz zD*g4cMmnjIpVxu1@bOn1QxM(~gM%WKe&g$8^b*Vrt`(dw-ij{<#`Ccq* zw6)X`Vd^QjW2>s=v8JhhHKjC#yuZg0I;WUZqJtWv`^0%T zo1gR4`0MVzuV4)2NkjR(QxilTU>oz^f}E3{jD$1Zn4xh~+v%V)dcs+9nB9X(0M>k<$AT#N(t+obf#V%ZKgg4tjt ztP6zNX=D4F5{{vKnS?9|%R=LcBczD;?j0sFh2%g*itLtkiG08%XrAsP!_~%*^+Vnh zGZ~5{0UHO%CRK~W&_ePl0I$_;uuAf-DnGXUe(9%rL6l8b(8W!+w&p?XW=@XEbT3&u z(Eg<>+0OG|e9KrxaxLTo-}^4|i3#%))*L0(dFb;+C#ScWO&8m(8zC;1+u!V^uWjZp zba$_hE)ZL&ep}EVvB%6z=*g7M(QfLIo{?p&`t15ht(4&HEZnNnrxFx61)Y_=dV@n+ z%`AsPGW@O7l8%(S<)$f?rMkI)@MFs*@G+qo0p1ZH3e!E|aJ77;1Yhp=LRD{8b-cyW zTy@I=Ukoce#*NLT79AoQ8c4o5AxSj_0W*24;l@SZ`1dkKW$!N=32==`J)700t@-gX zIQ+=Yxc(IFAHCb@#5Bhp70G>T@n-okRWABAqdc{zTR6U(`^uSH1L{s&8x&_Z+$s#Hp>L^s#_3GpXoa{c;Bf;mq!0u^4c0MLqsxQ25pO zteOF`^Ya3zUU^NTdu zB7EjD#*=Cex{lrOVGqUbJ#d7qytz}d6Q&>CH$JaMRdx7JDRG-;*6wcLi@M)4F#0Z@ zxFN<;Mq`_!U1+I_>QALW`|P7@d2RTR?wp0?STDEi(I$uWTMoHogJ6s8ulzrylG{Ir z;cPWh_8BOK2JKos2OBbHD_1hg177lq)_CQplT#D^ePbP*0A&;>-Sx5B@(^lLp+Bvd zQl7kWsMydUVLXo@2UmrX71xNBsQsm?SuXQGW}frb7rXKv-7;EG5;_pS*GDf-8RvDk zH+9EZ$vC0-$Ea9x*x}Vd%TI+~Ckp)~d-=qi2Xj9H1CKYOKphXo|}}Vy6Ll46LTCl{AJ=Mu1#+em>eCDBqF(ubaZm5=9f+=f}CQJdh(qbPbJtv*pMY$SnT z&%XCEd}5>XV{JQ9A^F9kjYpkX*THcRYyoOXQ&*n~v+pP^qy2Mk&D2Nz+zbPje6mS> z9CQ#!!Ef%Fgx}O%C(0SM41OTQcL^>1X7Atj&L3qy8+?7I;O~gnEVfZR$(r0~0*2HX zdL`K4Rho>{ny*B)(|DCtMPFR{*n4_ohiK$BFUMkqnczvfNg=|3fYnzJo^Ox4?<4I{{>T2w#fhh literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/cnp_cutoff2.tex b/doc/src/Eqs/cnp_cutoff2.tex new file mode 100644 index 0000000000..fcec31fd24 --- /dev/null +++ b/doc/src/Eqs/cnp_cutoff2.tex @@ -0,0 +1,12 @@ +\documentclass[12pt,article]{article} + +\usepackage{indentfirst} +\usepackage{amsmath} + +\begin{document} + +$$ + Rc + Rs > 2*{\rm cutoff} +$$ + +\end{document} diff --git a/doc/src/Eqs/cnp_eq.jpg b/doc/src/Eqs/cnp_eq.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4213144424331690936b0fd96014ba8ea8eaca0 GIT binary patch literal 23959 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 X*&M@?uTM@)HQ#144*tVd#T)ovcj-gp literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/cnp_eq.tex b/doc/src/Eqs/cnp_eq.tex new file mode 100644 index 0000000000..e5f157e6ba --- /dev/null +++ b/doc/src/Eqs/cnp_eq.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} + +$$ + Q_{i} = \frac{1}{n_i}\sum_{j = 1}^{n_i} | \sum_{k = 1}^{n_{ij}} \vec{R}_{ik} + \vec{R}_{jk} |^2 +$$ + +\end{document} diff --git a/doc/src/Section_commands.txt b/doc/src/Section_commands.txt index dc7ddebe58..4895a0729c 100644 --- a/doc/src/Section_commands.txt +++ b/doc/src/Section_commands.txt @@ -831,6 +831,7 @@ package"_Section_start.html#start_3. "ackland/atom"_compute_ackland_atom.html, "basal/atom"_compute_basal_atom.html, +"cnp/atom"_compute_cnp_atom.html, "dpd"_compute_dpd.html, "dpd/atom"_compute_dpd_atom.html, "fep"_compute_fep.html, diff --git a/doc/src/compute_cna_atom.txt b/doc/src/compute_cna_atom.txt index 74240b515d..23289b0132 100644 --- a/doc/src/compute_cna_atom.txt +++ b/doc/src/compute_cna_atom.txt @@ -26,7 +26,7 @@ Define a computation that calculates the CNA (Common Neighbor Analysis) pattern for each atom in the group. In solid-state systems the CNA pattern is a useful measure of the local crystal structure around an atom. The CNA methodology is described in "(Faken)"_#Faken -and "(Tsuzuki)"_#Tsuzuki. +and "(Tsuzuki)"_#Tsuzuki1. Currently, there are five kinds of CNA patterns LAMMPS recognizes: @@ -93,5 +93,5 @@ above. :link(Faken) [(Faken)] Faken, Jonsson, Comput Mater Sci, 2, 279 (1994). -:link(Tsuzuki) +:link(Tsuzuki1) [(Tsuzuki)] Tsuzuki, Branicio, Rino, Comput Phys Comm, 177, 518 (2007). diff --git a/doc/src/compute_cnp_atom.txt b/doc/src/compute_cnp_atom.txt new file mode 100644 index 0000000000..2e9950b4c1 --- /dev/null +++ b/doc/src/compute_cnp_atom.txt @@ -0,0 +1,111 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Section_commands.html#comm) + +:line + +compute cnp/atom command :h3 + +[Syntax:] + +compute ID group-ID cnp/atom cutoff :pre + +ID, group-ID are documented in "compute"_compute.html command +cnp/atom = style name of this compute command +cutoff = cutoff distance for nearest neighbors (distance units) :ul + +[Examples:] + +compute 1 all cnp/atom 3.08 :pre + +[Description:] + +Define a computation that calculates the Common Neighborhood +Parameter (CNP) for each atom in the group. In solid-state systems +the CNP is a useful measure of the local crystal structure +around an atom and can be used to characterize whether the +atom is part of a perfect lattice, a local defect (e.g. a dislocation +or stacking fault), or at a surface. + +The value of the CNP parameter will be 0.0 for atoms not +in the specified compute group. Note that normally a CNP calculation should only be +performed on mono-component systems. + +This parameter is computed using the following formula from +"(Tsuzuki)"_#Tsuzuki2 + +:c,image(Eqs/cnp_eq.jpg) + +where the index {j} goes over the {n}i nearest neighbors of atom +{i}, and the index {k} goes over the {n}ij common nearest neighbors +between atom {i} and atom {j}. Rik and Rjk are the vectors connecting atom +{k} to atoms {i} and {j}. The quantity in the double sum is computed +for each atom. + +The CNP calculation is sensitive to the specified cutoff value. +You should ensure that the appropriate nearest neighbors of an atom are +found within the cutoff distance for the presumed crystal structure. +E.g. 12 nearest neighbor for perfect FCC and HCP crystals, 14 nearest +neighbors for perfect BCC crystals. These formulas can be used to +obtain a good cutoff distance: + +:c,image(Eqs/cnp_cutoff.jpg) + +where a is the lattice constant for the crystal structure concerned +and in the HCP case, x = (c/a) / 1.633, where 1.633 is the ideal c/a +for HCP crystals. + +Also note that since the CNP calculation in LAMMPS uses the neighbors +of an owned atom to find the nearest neighbors of a ghost atom, the +following relation should also be satisfied: + +:c,image(Eqs/cnp_cutoff2.jpg) + +where Rc is the cutoff distance of the potential, Rs is the skin +distance as specified by the "neighbor"_neighbor.html command, and +cutoff is the argument used with the compute cnp/atom command. LAMMPS +will issue a warning if this is not the case. + +The neighbor list needed to compute this quantity is constructed each +time the calculation is performed (e.g. each time a snapshot of atoms +is dumped). Thus it can be inefficient to compute/dump this quantity +too frequently or to have multiple compute/dump commands, each with a +{cnp/atom} style. + +[Output info:] + +This compute calculates a per-atom vector, which can be accessed by +any command that uses per-atom values from a compute as input. See +"Section 6.15"_Section_howto.html#howto_15 for an overview of +LAMMPS output options. + +The per-atom vector values will be real positive numbers. Some typical CNP +values: + +FCC lattice = 0.0 +BCC lattice = 0.0 +HCP lattice = 4.4 :pre + +FCC (111) surface ~ 13.0 +FCC (100) surface ~ 26.5 +FCC dislocation core ~ 11 :pre + +[Restrictions:] + +This compute is part of the USER-MISC package. It is only enabled if +LAMMPS was built with that package. See the "Making +LAMMPS"_Section_start.html#start_3 section for more info. + +[Related commands:] + +"compute cna/atom"_compute_cna_atom.html +"compute centro/atom"_compute_centro_atom.html + +[Default:] none + +:line + +:link(Tsuzuki2) +[(Tsuzuki)] Tsuzuki, Branicio, Rino, Comput Phys Comm, 177, 518 (2007). diff --git a/doc/src/computes.txt b/doc/src/computes.txt index 1d01798791..5a6ca66c46 100644 --- a/doc/src/computes.txt +++ b/doc/src/computes.txt @@ -17,6 +17,7 @@ Computes :h1 compute_chunk_atom compute_cluster_atom compute_cna_atom + compute_cnp_atom compute_com compute_com_chunk compute_contact_atom diff --git a/doc/src/lammps.book b/doc/src/lammps.book index 1769f29825..79ff5b4a75 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -301,6 +301,7 @@ compute_centro_atom.html compute_chunk_atom.html compute_cluster_atom.html compute_cna_atom.html +compute_cnp_atom.html compute_com.html compute_com_chunk.html compute_contact_atom.html diff --git a/src/.gitignore b/src/.gitignore index 0cddfa6951..d6c535ebe9 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -177,8 +177,8 @@ /compute_basal_atom.h /compute_body_local.cpp /compute_body_local.h -/compute_cna_atom2.cpp -/compute_cna_atom2.h +/compute_cnp_atom.cpp +/compute_cnp_atom.h /compute_damage_atom.cpp /compute_damage_atom.h /compute_dilatation_atom.cpp diff --git a/src/USER-MISC/README b/src/USER-MISC/README index cacee41e0c..f501c81c17 100644 --- a/src/USER-MISC/README +++ b/src/USER-MISC/README @@ -28,6 +28,7 @@ bond_style harmonic/shift, Carsten Svaneborg, science at zqex.dk, 8 Aug 11 bond_style harmonic/shift/cut, Carsten Svaneborg, science at zqex.dk, 8 Aug 11 compute ackland/atom, Gerolf Ziegenhain, gerolf at ziegenhain.com, 4 Oct 2007 compute basal/atom, Christopher Barrett, cdb333 at cavs.msstate.edu, 3 Mar 2013 +compute cnp/atom, Paulo Branicio (USC), branicio at usc.edu, 31 May 2017 compute temp/rotate, Laurent Joly (U Lyon), ljoly.ulyon at gmail.com, 8 Aug 11 compute PRESSURE/GREM, David Stelter, dstelter@bu.edu, 22 Nov 16 dihedral_style cosine/shift/exp, Carsten Svaneborg, science at zqex.dk, 8 Aug 11 diff --git a/src/USER-MISC/compute_cnp_atom.cpp b/src/USER-MISC/compute_cnp_atom.cpp new file mode 100644 index 0000000000..6dce41291e --- /dev/null +++ b/src/USER-MISC/compute_cnp_atom.cpp @@ -0,0 +1,311 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, 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. + + Common Neighbor Parameter as proposed in: + Tsuzuki, Branicio, Rino, Comput Phys Comm, 177, 518 (2007) + Cite: http://dx.doi.org/10.1063/1.2197987 + +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Paulo Branicio (University of Southern California) + branicio@usc.edu +------------------------------------------------------------------------- */ + +#include +#include +#include + +#include "compute_cnp_atom.h" +#include "atom.h" +#include "update.h" +#include "modify.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "force.h" +#include "pair.h" +#include "comm.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +//define maximum values +#define MAXNEAR 24 +#define MAXCOMMON 12 + +enum{NCOMMON}; + +/* ---------------------------------------------------------------------- */ + +ComputeCNPAtom::ComputeCNPAtom(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg), + nearest(NULL), nnearest(NULL), cnpv(NULL) +{ + if (narg != 4) error->all(FLERR,"Illegal compute cnp/atom command"); + + peratom_flag = 1; + size_peratom_cols = 0; + + double cutoff = force->numeric(FLERR,arg[3]); + if (cutoff < 0.0) error->all(FLERR,"Illegal compute cnp/atom command"); + cutsq = cutoff*cutoff; + + nmax = 0; +} + +/* ---------------------------------------------------------------------- */ + +ComputeCNPAtom::~ComputeCNPAtom() +{ + memory->destroy(nearest); + memory->destroy(nnearest); + memory->destroy(cnpv); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeCNPAtom::init() +{ + if (force->pair == NULL) + error->all(FLERR,"Compute cnp/atom requires a pair style be defined"); + + if (sqrt(cutsq) > force->pair->cutforce) + error->all(FLERR,"Compute cnp/atom cutoff is longer than pairwise cutoff"); + + if (2.0*sqrt(cutsq) > force->pair->cutforce + neighbor->skin && + comm->me == 0) + error->warning(FLERR,"Compute cnp/atom cutoff may be too large to find " + "ghost atom neighbors"); + + int count = 0; + for (int i = 0; i < modify->ncompute; i++) + if (strcmp(modify->compute[i]->style,"cnp/atom") == 0) count++; + if (count > 1 && comm->me == 0) + error->warning(FLERR,"More than one compute cnp/atom defined"); + + // need an occasional full neighbor list + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->pair = 0; + neighbor->requests[irequest]->compute = 1; + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + neighbor->requests[irequest]->occasional = 1; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeCNPAtom::init_list(int id, NeighList *ptr) +{ + list = ptr; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeCNPAtom::compute_peratom() +{ + int i,j,k,ii,jj,kk,m,n,inum,jnum,inear,jnear; + int firstflag,ncommon; + int *ilist,*jlist,*numneigh,**firstneigh; + int cnp[MAXNEAR][4],onenearest[MAXNEAR]; + int common[MAXCOMMON]; + double xtmp,ytmp,ztmp,delx,dely,delz,rsq; + double xjtmp,yjtmp,zjtmp,rjkx,rjky,rjkz; + + invoked_peratom = update->ntimestep; + + // grow arrays if necessary + + if (atom->nmax > nmax) { + memory->destroy(nearest); + memory->destroy(nnearest); + memory->destroy(cnpv); + nmax = atom->nmax; + memory->create(nearest,nmax,MAXNEAR,"cnp:nearest"); + memory->create(nnearest,nmax,"cnp:nnearest"); + memory->create(cnpv,nmax,"cnp:cnp_cnpv"); + vector_atom = cnpv; + } + + // invoke full neighbor list (will copy or build if necessary) + + neighbor->build_one(list); + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // find the neigbors of each atom within cutoff using full neighbor list + // nearest[] = atom indices of nearest neighbors, up to MAXNEAR + // do this for all atoms, not just compute group + // since CNP calculation requires neighbors of neighbors + + double **x = atom->x; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + int nerror = 0; + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + n = 0; + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + if (rsq < cutsq) { + if (n < MAXNEAR) nearest[i][n++] = j; + else { + nerror++; + break; + } + } + } + nnearest[i] = n; + } + + // warning message + + int nerrorall; + MPI_Allreduce(&nerror,&nerrorall,1,MPI_INT,MPI_SUM,world); + if (nerrorall && comm->me == 0) { + char str[128]; + sprintf(str,"Too many neighbors in CNP for %d atoms",nerrorall); + error->warning(FLERR,str,0); + } + + // compute CNP value for each atom in group + // only performed if # of nearest neighbors = 12 or 14 (fcc,hcp) + + nerror = 0; + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + // reset cnpv + cnpv[i] = 0.0; + + // loop over nearest neighbors of I to build cnp data structure + // cnp[k][NCOMMON] = # of common neighbors of I with each of its neighbors + for (m = 0; m < nnearest[i]; m++) { + j = nearest[i][m]; + xjtmp = x[j][0]; + yjtmp = x[j][1]; + zjtmp = x[j][2]; + + // common = list of neighbors common to atom I and atom J + // if J is an owned atom, use its near neighbor list to find them + // if J is a ghost atom, use full neighbor list of I to find them + // in latter case, must exclude J from I's neighbor list + + // find common neighbors of i and j using near neighbor list + if (j < nlocal) { + firstflag = 1; + ncommon = 0; + for (inear = 0; inear < nnearest[i]; inear++) + for (jnear = 0; jnear < nnearest[j]; jnear++) + if (nearest[i][inear] == nearest[j][jnear]) { + if (ncommon < MAXCOMMON) common[ncommon++] = nearest[i][inear]; + else if (firstflag) { + nerror++; + firstflag = 0; + } + } + + // find common neighbors of i and j using full neighbor list + } else { + jlist = firstneigh[i]; + jnum = numneigh[i]; + + n = 0; + for (kk = 0; kk < jnum; kk++) { + k = jlist[kk]; + k &= NEIGHMASK; + if (k == j) continue; + + delx = xjtmp - x[k][0]; + dely = yjtmp - x[k][1]; + delz = zjtmp - x[k][2]; + rsq = delx*delx + dely*dely + delz*delz; + if (rsq < cutsq) { + if (n < MAXNEAR) onenearest[n++] = k; + else break; + } + } + + firstflag = 1; + ncommon = 0; + for (inear = 0; inear < nnearest[i]; inear++) + for (jnear = 0; (jnear < n) && (n < MAXNEAR); jnear++) + if (nearest[i][inear] == onenearest[jnear]) { + if (ncommon < MAXCOMMON) common[ncommon++] = nearest[i][inear]; + else if (firstflag) { + nerror++; + firstflag = 0; + } + } + } + + // Calculate and update sum |Rik+Rjk|ˆ2 + rjkx = 0.0; + rjky = 0.0; + rjkz = 0.0; + for (kk = 0; kk < ncommon; kk++) { + k = common[kk]; + rjkx += 2.0*x[k][0] - xjtmp - xtmp; + rjky += 2.0*x[k][1] - yjtmp - ytmp; + rjkz += 2.0*x[k][2] - zjtmp - ztmp; + } + // update cnpv with summed (valuejk) + cnpv[i] += rjkx*rjkx + rjky*rjky + rjkz*rjkz; + + // end of loop over j atoms + } + + // normalize cnp by the number of nearest neighbors + cnpv[i] = cnpv[i] / nnearest[i]; + + // end of loop over i atoms + } + + // warning message + MPI_Allreduce(&nerror,&nerrorall,1,MPI_INT,MPI_SUM,world); + if (nerrorall && comm->me == 0) { + char str[128]; + sprintf(str,"Too many common neighbors in CNP %d times",nerrorall); + error->warning(FLERR,str); + } +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based array +------------------------------------------------------------------------- */ + +double ComputeCNPAtom::memory_usage() +{ + double bytes = nmax * sizeof(int); + bytes += nmax * MAXNEAR * sizeof(int); + bytes += nmax * sizeof(double); + return bytes; +} diff --git a/src/USER-MISC/compute_cnp_atom.h b/src/USER-MISC/compute_cnp_atom.h new file mode 100644 index 0000000000..4fdb3954f2 --- /dev/null +++ b/src/USER-MISC/compute_cnp_atom.h @@ -0,0 +1,92 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, 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 COMPUTE_CLASS + +ComputeStyle(cnp/atom,ComputeCNPAtom) + +#else + +#ifndef LMP_COMPUTE_CNP_ATOM_H +#define LMP_COMPUTE_CNP_ATOM_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeCNPAtom : public Compute { + public: + ComputeCNPAtom(class LAMMPS *, int, char **); + ~ComputeCNPAtom(); + void init(); + void init_list(int, class NeighList *); + void compute_peratom(); + double memory_usage(); + + private: +//revise + int nmax; + double cutsq; + class NeighList *list; + int **nearest; + int *nnearest; + double *cnpv; +// int nmax; +// double cutsq; +// class NeighList *list; +// int **nearest; +// int *nnearest; +// double *pattern; +}; + +} + +#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: Compute cnp/atom requires a pair style be defined + +Self-explanatory. + +E: Compute cnp/atom cutoff is longer than pairwise cutoff + +Self-explanatory. + +W: Compute cnp/atom cutoff may be too large to find ghost atom neighbors + +The neighbor cutoff used may not encompass enough ghost atoms +to perform this operation correctly. + +W: More than one compute cnp/atom defined + +It is not efficient to use compute cnp/atom more than once. + +W: Too many neighbors in CNP for %d atoms + +More than the maximum # of neighbors was found multiple times. This +was unexpected. + +W: Too many common neighbors in CNP %d times + +More than the maximum # of neighbors was found multiple times. This +was unexpected. + +*/