forked from lijiext/lammps
Merge pull request #749 from akohlmey/collected-bugfixes-and-updates
Collected bugfixes and updates for the next patch release
This commit is contained in:
commit
1bd9e175e9
|
@ -732,7 +732,7 @@ make lib-latte args="-b -m gfortran" # download and build in lib/latte and
|
|||
:pre
|
||||
|
||||
Note that 3 symbolic (soft) links, "includelink" and "liblink" and
|
||||
"filelink", are created in lib/latte to point into the LATTE home dir.
|
||||
"filelink.o", are created in lib/latte to point into the LATTE home dir.
|
||||
When LAMMPS builds in src it will use these links. You should
|
||||
also check that the Makefile.lammps file you create is appropriate
|
||||
for the compiler you use on your system to build LATTE.
|
||||
|
|
|
@ -138,17 +138,17 @@ By default, no additional forces act on the first and last replicas
|
|||
during the NEB relaxation, so these replicas simply relax toward their
|
||||
respective local minima. By using the key word {end}, additional
|
||||
forces can be applied to the first and/or last replicas, to enable
|
||||
them to relax toward a MEP while constraining their energy.
|
||||
them to relax toward a MEP while constraining their energy E to the
|
||||
target energy ETarget.
|
||||
|
||||
The interatomic force Fi for the specified replica becomes:
|
||||
If ETarget>E, the interatomic force Fi for the specified replica becomes:
|
||||
|
||||
Fi = -Grad(V) + (Grad(V) dot T' + (E-ETarget)*Kspring3) T', {when} Grad(V) dot T' < 0
|
||||
Fi = -Grad(V) + (Grad(V) dot T' + (ETarget- E)*Kspring3) T', {when} Grad(V) dot T' > 0
|
||||
:pre
|
||||
|
||||
where E is the current energy of the replica and ETarget is the target
|
||||
energy. The "spring" constant on the difference in energies is the
|
||||
specified {Kspring3} value.
|
||||
The "spring" constant on the difference in energies is the specified
|
||||
{Kspring3} value.
|
||||
|
||||
When {estyle} is specified as {first}, the force is applied to the
|
||||
first replica. When {estyle} is specified as {last}, the force is
|
||||
|
@ -183,10 +183,9 @@ After converging a NEB calculation using an {estyle} of
|
|||
have a larger energy than the first replica. If this is not the case,
|
||||
the path is probably not a MEP.
|
||||
|
||||
Finally, note that if the last replica converges toward a local
|
||||
minimum which has a larger energy than the energy of the first
|
||||
replica, a NEB calculation using an {estyle} of {last/efirst} or
|
||||
{last/efirst/middle} cannot reach final convergence.
|
||||
Finally, note that the last replica may never reach the target energy
|
||||
if it is stuck in a local minima which has a larger energy than the
|
||||
target energy.
|
||||
|
||||
[Restart, fix_modify, output, run start/stop, minimize info:]
|
||||
|
||||
|
|
|
@ -111,6 +111,10 @@ need to communicate their new values to/from ghost atoms, an operation
|
|||
that can be invoked from within a "pair style"_pair_style.html or
|
||||
"fix"_fix.html or "compute"_compute.html that you write.
|
||||
|
||||
NOTE: If this fix is defined [after] the simulation box is created,
|
||||
a 'run 0' command should be issued to properly initialize the storage
|
||||
created by this fix.
|
||||
|
||||
:line
|
||||
|
||||
This fix is one of a small number that can be defined in an input
|
||||
|
@ -155,7 +159,7 @@ these commands could be used:
|
|||
|
||||
fix prop all property/atom mol
|
||||
variable cluster atom ((id-1)/10)+1
|
||||
set id * mol v_cluster :pre
|
||||
set atom * mol v_cluster :pre
|
||||
|
||||
The "atom-style variable"_variable.html will create values for atoms
|
||||
with IDs 31,32,33,...40 that are 4.0,4.1,4.2,...,4.9. When the
|
||||
|
|
|
@ -8,17 +8,21 @@ def loop(N,cut0,thresh,lmpptr):
|
|||
from lammps import lammps
|
||||
lmp = lammps(ptr=lmpptr)
|
||||
natoms = lmp.get_natoms()
|
||||
|
||||
for i in range(N):
|
||||
cut = cut0 + i*0.1
|
||||
|
||||
lmp.set_variable("cut",cut) # set a variable in LAMMPS
|
||||
try:
|
||||
for i in range(N):
|
||||
cut = cut0 + i*0.1
|
||||
|
||||
lmp.command("pair_style lj/cut ${cut}") # LAMMPS command
|
||||
#lmp.command("pair_style lj/cut %d" % cut) # LAMMPS command option
|
||||
lmp.set_variable("cut",cut) # set a variable in LAMMPS
|
||||
|
||||
lmp.command("pair_style lj/cut ${cut}") # LAMMPS command
|
||||
#lmp.command("pair_style lj/cut %d" % cut) # LAMMPS command option
|
||||
|
||||
lmp.command("pair_coeff * * 1.0 1.0") # ditto
|
||||
lmp.command("run 10") # ditto
|
||||
pe = lmp.extract_compute("thermo_pe",0,0) # extract total PE from LAMMPS
|
||||
print("PE",pe/natoms,thresh)
|
||||
if pe/natoms < thresh: return
|
||||
except Exception as e:
|
||||
print("LOOP error:", e)
|
||||
|
||||
lmp.command("pair_coeff * * 1.0 1.0") # ditto
|
||||
lmp.command("run 10") # ditto
|
||||
pe = lmp.extract_compute("thermo_pe",0,0) # extract total PE from LAMMPS
|
||||
print("PE",pe/natoms,thresh)
|
||||
if pe/natoms < thresh: return
|
||||
|
|
|
@ -28,6 +28,7 @@ python simple here """
|
|||
from __future__ import print_function
|
||||
|
||||
def simple():
|
||||
foo = 0
|
||||
print("Inside simple function")
|
||||
try:
|
||||
foo += 1
|
||||
|
|
|
@ -28,14 +28,15 @@ Instructions:
|
|||
and finally, build the code via the make command
|
||||
% make
|
||||
|
||||
3. Create three soft links in this dir (lib/latte)
|
||||
3. Create three symbolic links in this dir (lib/latte)
|
||||
E.g if you built LATTE in this dir:
|
||||
% ln -s ./LATTE-master/src includelink
|
||||
% ln -s ./LATTE-master liblink
|
||||
% ln -s ./LATTE-master/src/latte_c_bind.o filelink
|
||||
% ln -s ./LATTE-master/src/latte_c_bind.o filelink.o
|
||||
|
||||
4. Choose a Makefile.lammps.* file appropriate for your compiler
|
||||
(GNU gfortran or Intel ifort) and copy it to Makefile.lammps.
|
||||
(GNU gfortran with external BLAS, GNU gfortran with local liblinalg,
|
||||
or Intel ifort with MKL) and copy it to Makefile.lammps.
|
||||
Note that you may need to edit Makefile.lammps for paths
|
||||
and compiler options appropriate to your system.
|
||||
|
||||
|
@ -49,7 +50,7 @@ with the LATTE package installed:
|
|||
% make g++ (or whatever target you wish)
|
||||
|
||||
Note that if you download and unpack a new LAMMPS tarball, the
|
||||
"includelink" and "liblink" and "filelink" files will be lost and you
|
||||
will need to re-create them (step 3). If you built LATTE in this
|
||||
directory (as opposed to somewhere else on your system), you will also
|
||||
need to repeat steps 1,2,4.
|
||||
"includelink" and "liblink" and "filelink.o" symbolic links will be
|
||||
lost and you will need to re-create them (step 3). If you built LATTE
|
||||
in this directory (as opposed to somewhere else on your system), you
|
||||
will also need to repeat steps 1,2,4.
|
||||
|
|
|
@ -969,6 +969,8 @@ void PPPMKokkos<DeviceType>::set_grid_global()
|
|||
if (!gewaldflag) {
|
||||
if (accuracy <= 0.0)
|
||||
error->all(FLERR,"KSpace accuracy must be > 0");
|
||||
if (q2 == 0.0)
|
||||
error->all(FLERR,"Must use 'kspace_modify gewald' for uncharged system");
|
||||
g_ewald = accuracy*sqrt(natoms*cutoff*xprd*yprd*zprd) / (2.0*q2);
|
||||
if (g_ewald >= 1.0) g_ewald = (1.35 - 0.15*log(accuracy))/cutoff;
|
||||
else g_ewald = sqrt(-log(g_ewald)) / cutoff;
|
||||
|
@ -1179,6 +1181,7 @@ double PPPMKokkos<DeviceType>::final_accuracy()
|
|||
double yprd = domain->yprd;
|
||||
double zprd = domain->zprd;
|
||||
bigint natoms = atomKK->natoms;
|
||||
if (natoms == 0) natoms = 1; // avoid division by zero
|
||||
|
||||
double df_kspace = compute_df_kspace();
|
||||
double q2_over_sqrt = q2 / sqrt(natoms*cutoff*xprd*yprd*zprd);
|
||||
|
|
|
@ -154,6 +154,8 @@ void Ewald::init()
|
|||
if (!gewaldflag) {
|
||||
if (accuracy <= 0.0)
|
||||
error->all(FLERR,"KSpace accuracy must be > 0");
|
||||
if (q2 == 0.0)
|
||||
error->all(FLERR,"Must use 'kspace_modify gewald' for uncharged system");
|
||||
g_ewald = accuracy*sqrt(natoms*cutoff*xprd*yprd*zprd) / (2.0*q2);
|
||||
if (g_ewald >= 1.0) g_ewald = (1.35 - 0.15*log(accuracy))/cutoff;
|
||||
else g_ewald = sqrt(-log(g_ewald)) / cutoff;
|
||||
|
@ -340,6 +342,7 @@ void Ewald::setup()
|
|||
|
||||
double Ewald::rms(int km, double prd, bigint natoms, double q2)
|
||||
{
|
||||
if (natoms == 0) natoms = 1; // avoid division by zero
|
||||
double value = 2.0*q2*g_ewald/prd *
|
||||
sqrt(1.0/(MY_PI*km*natoms)) *
|
||||
exp(-MY_PI*MY_PI*km*km/(g_ewald*g_ewald*prd*prd));
|
||||
|
|
|
@ -193,6 +193,10 @@ void EwaldDisp::init()
|
|||
|
||||
if (!gewaldflag) {
|
||||
if (function[0]) {
|
||||
if (accuracy <= 0.0)
|
||||
error->all(FLERR,"KSpace accuracy must be > 0");
|
||||
if (q2 == 0.0)
|
||||
error->all(FLERR,"Must use 'kspace_modify gewald' for uncharged system");
|
||||
g_ewald = accuracy*sqrt(natoms*(*cutoff)*shape_det(domain->h)) / (2.0*q2);
|
||||
if (g_ewald >= 1.0) g_ewald = (1.35 - 0.15*log(accuracy))/(*cutoff);
|
||||
else g_ewald = sqrt(-log(g_ewald)) / (*cutoff);
|
||||
|
@ -298,6 +302,7 @@ double EwaldDisp::rms(int km, double prd, bigint natoms,
|
|||
double q2, double b2, double M2)
|
||||
{
|
||||
double value = 0.0;
|
||||
if (natoms == 0) natoms = 1; // avoid division by zero
|
||||
|
||||
// Coulombic
|
||||
|
||||
|
|
|
@ -1004,6 +1004,8 @@ void PPPM::set_grid_global()
|
|||
if (!gewaldflag) {
|
||||
if (accuracy <= 0.0)
|
||||
error->all(FLERR,"KSpace accuracy must be > 0");
|
||||
if (q2 == 0.0)
|
||||
error->all(FLERR,"Must use kspace_modify gewald for uncharged system");
|
||||
g_ewald = accuracy*sqrt(natoms*cutoff*xprd*yprd*zprd) / (2.0*q2);
|
||||
if (g_ewald >= 1.0) g_ewald = (1.35 - 0.15*log(accuracy))/cutoff;
|
||||
else g_ewald = sqrt(-log(g_ewald)) / cutoff;
|
||||
|
@ -1268,6 +1270,7 @@ double PPPM::compute_qopt()
|
|||
double PPPM::estimate_ik_error(double h, double prd, bigint natoms)
|
||||
{
|
||||
double sum = 0.0;
|
||||
if (natoms == 0) return 0.0;
|
||||
for (int m = 0; m < order; m++)
|
||||
sum += acons[order][m] * pow(h*g_ewald,2.0*m);
|
||||
double value = q2 * pow(h*g_ewald,(double)order) *
|
||||
|
@ -1345,6 +1348,7 @@ double PPPM::final_accuracy()
|
|||
double yprd = domain->yprd;
|
||||
double zprd = domain->zprd;
|
||||
bigint natoms = atom->natoms;
|
||||
if (natoms == 0) natoms = 1; // avoid division by zero
|
||||
|
||||
double df_kspace = compute_df_kspace();
|
||||
double q2_over_sqrt = q2 / sqrt(natoms*cutoff*xprd*yprd*zprd);
|
||||
|
|
|
@ -17,7 +17,7 @@ Once you have successfully built LAMMPS with this package and the
|
|||
LATTE library you can test it using an input file from the examples
|
||||
latte dir, e.g.
|
||||
|
||||
lmp_serial < lammps/examples/latte/in.latte.water
|
||||
lmp_serial -in lammps/examples/latte/in.latte.water
|
||||
|
||||
This pair style was written in collaboration with the LATTE
|
||||
developers.
|
||||
|
|
|
@ -94,26 +94,26 @@ FixNEB::FixNEB(LAMMPS *lmp, int narg, char **arg) :
|
|||
if (iarg+3 > narg) error->all(FLERR,"Illegal fix neb command");
|
||||
if (strcmp(arg[iarg+1],"first") == 0) {
|
||||
FreeEndIni = true;
|
||||
kspringIni = force->numeric(FLERR,arg[iarg+2]);
|
||||
kspringIni = force->numeric(FLERR,arg[iarg+2]);
|
||||
} else if (strcmp(arg[iarg+1],"last") == 0) {
|
||||
FreeEndFinal = true;
|
||||
FinalAndInterWithRespToEIni = false;
|
||||
FreeEndFinalWithRespToEIni = false;
|
||||
kspringFinal = force->numeric(FLERR,arg[iarg+2]);
|
||||
kspringFinal = force->numeric(FLERR,arg[iarg+2]);
|
||||
} else if (strcmp(arg[iarg+1],"last/efirst") == 0) {
|
||||
FreeEndFinal = false;
|
||||
FinalAndInterWithRespToEIni = false;
|
||||
FreeEndFinalWithRespToEIni = true;
|
||||
kspringFinal = force->numeric(FLERR,arg[iarg+2]);
|
||||
kspringFinal = force->numeric(FLERR,arg[iarg+2]);
|
||||
} else if (strcmp(arg[iarg+1],"last/efirst/middle") == 0) {
|
||||
FreeEndFinal = false;
|
||||
FinalAndInterWithRespToEIni = true;
|
||||
FreeEndFinalWithRespToEIni = true;
|
||||
kspringFinal = force->numeric(FLERR,arg[iarg+2]);
|
||||
kspringFinal = force->numeric(FLERR,arg[iarg+2]);
|
||||
} else error->all(FLERR,"Illegal fix neb command");
|
||||
|
||||
iarg += 3;
|
||||
|
||||
|
||||
} else error->all(FLERR,"Illegal fix neb command");
|
||||
}
|
||||
|
||||
|
@ -298,12 +298,14 @@ void FixNEB::min_post_force(int vflag)
|
|||
if (ireplica == 0) vIni=veng;
|
||||
|
||||
if (FreeEndFinalWithRespToEIni) {
|
||||
if (me == 0) {
|
||||
if (cmode == SINGLE_PROC_DIRECT || cmode == SINGLE_PROC_MAP) {
|
||||
int procFirst;
|
||||
procFirst=universe->root_proc[0];
|
||||
MPI_Bcast(&vIni,1,MPI_DOUBLE,procFirst,uworld);
|
||||
}
|
||||
if (cmode == MULTI_PROC) {
|
||||
}else {
|
||||
if (me == 0)
|
||||
MPI_Bcast(&vIni,1,MPI_DOUBLE,0,rootworld);
|
||||
|
||||
MPI_Bcast(&vIni,1,MPI_DOUBLE,0,world);
|
||||
}
|
||||
}
|
||||
|
@ -313,8 +315,8 @@ void FixNEB::min_post_force(int vflag)
|
|||
// if (me == 0 )
|
||||
if (update->ntimestep == 0) {
|
||||
EIniIni = veng;
|
||||
// if (cmode == MULTI_PROC)
|
||||
// MPI_Bcast(&EIniIni,1,MPI_DOUBLE,0,world);
|
||||
// if (cmode == MULTI_PROC)
|
||||
// MPI_Bcast(&EIniIni,1,MPI_DOUBLE,0,world);
|
||||
}
|
||||
}*/
|
||||
|
||||
|
@ -360,7 +362,7 @@ void FixNEB::min_post_force(int vflag)
|
|||
tangent[i][2]=delzp;
|
||||
tlen += tangent[i][0]*tangent[i][0] +
|
||||
tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2];
|
||||
dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] +
|
||||
dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] +
|
||||
f[i][2]*tangent[i][2];
|
||||
}
|
||||
}
|
||||
|
@ -383,9 +385,9 @@ void FixNEB::min_post_force(int vflag)
|
|||
tangent[i][0]=delxn;
|
||||
tangent[i][1]=delyn;
|
||||
tangent[i][2]=delzn;
|
||||
tlen += tangent[i][0]*tangent[i][0] +
|
||||
tlen += tangent[i][0]*tangent[i][0] +
|
||||
tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2];
|
||||
dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] +
|
||||
dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] +
|
||||
f[i][2]*tangent[i][2];
|
||||
}
|
||||
}
|
||||
|
@ -431,15 +433,15 @@ void FixNEB::min_post_force(int vflag)
|
|||
}
|
||||
|
||||
nlen += delxn*delxn + delyn*delyn + delzn*delzn;
|
||||
tlen += tangent[i][0]*tangent[i][0] +
|
||||
tlen += tangent[i][0]*tangent[i][0] +
|
||||
tangent[i][1]*tangent[i][1] + tangent[i][2]*tangent[i][2];
|
||||
gradlen += f[i][0]*f[i][0] + f[i][1]*f[i][1] + f[i][2]*f[i][2];
|
||||
dotpath += delxp*delxn + delyp*delyn + delzp*delzn;
|
||||
dottangrad += tangent[i][0]*f[i][0] +
|
||||
dottangrad += tangent[i][0]*f[i][0] +
|
||||
tangent[i][1]*f[i][1] + tangent[i][2]*f[i][2];
|
||||
gradnextlen += fnext[i][0]*fnext[i][0] +
|
||||
gradnextlen += fnext[i][0]*fnext[i][0] +
|
||||
fnext[i][1]*fnext[i][1] +fnext[i][2] * fnext[i][2];
|
||||
dotgrad += f[i][0]*fnext[i][0] + f[i][1]*fnext[i][1] +
|
||||
dotgrad += f[i][0]*fnext[i][0] + f[i][1]*fnext[i][1] +
|
||||
f[i][2]*fnext[i][2];
|
||||
|
||||
springF[i][0] = kspringPerp*(delxn-delxp);
|
||||
|
@ -514,9 +516,10 @@ void FixNEB::min_post_force(int vflag)
|
|||
MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world);
|
||||
dot=dotall/tlen;
|
||||
|
||||
if (dot<0) prefactor = -dot - kspringFinal*(veng-EFinalIni);
|
||||
else prefactor = -dot + kspringFinal*(veng-EFinalIni);
|
||||
|
||||
if (veng<EFinalIni) {
|
||||
if (dot<0) prefactor = -dot - kspringFinal*(veng-EFinalIni);
|
||||
else prefactor = -dot + kspringFinal*(veng-EFinalIni);
|
||||
}
|
||||
for (int i = 0; i < nlocal; i++)
|
||||
if (mask[i] & groupbit) {
|
||||
f[i][0] += prefactor *tangent[i][0];
|
||||
|
@ -531,10 +534,10 @@ void FixNEB::min_post_force(int vflag)
|
|||
double dotall;
|
||||
MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world);
|
||||
dot=dotall/tlen;
|
||||
|
||||
if (dot<0) prefactor = -dot - kspringFinal*(veng-vIni);
|
||||
else prefactor = -dot + kspringFinal*(veng-vIni);
|
||||
|
||||
if (veng<vIni) {
|
||||
if (dot<0) prefactor = -dot - kspringFinal*(veng-vIni);
|
||||
else prefactor = -dot + kspringFinal*(veng-vIni);
|
||||
}
|
||||
for (int i = 0; i < nlocal; i++)
|
||||
if (mask[i] & groupbit) {
|
||||
f[i][0] += prefactor *tangent[i][0];
|
||||
|
@ -589,7 +592,7 @@ void FixNEB::min_post_force(int vflag)
|
|||
|
||||
for (int i = 0; i < nlocal; i++) {
|
||||
if (mask[i] & groupbit) {
|
||||
dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] +
|
||||
dot += f[i][0]*tangent[i][0] + f[i][1]*tangent[i][1] +
|
||||
f[i][2]*tangent[i][2];
|
||||
dotSpringTangent += springF[i][0]*tangent[i][0] +
|
||||
springF[i][1]*tangent[i][1] + springF[i][2]*tangent[i][2];}
|
||||
|
@ -625,11 +628,11 @@ void FixNEB::min_post_force(int vflag)
|
|||
|
||||
for (int i = 0; i < nlocal; i++)
|
||||
if (mask[i] & groupbit) {
|
||||
f[i][0] += prefactor*tangent[i][0] +
|
||||
f[i][0] += prefactor*tangent[i][0] +
|
||||
AngularContr*(springF[i][0] - dotSpringTangent*tangent[i][0]);
|
||||
f[i][1] += prefactor*tangent[i][1] +
|
||||
f[i][1] += prefactor*tangent[i][1] +
|
||||
AngularContr*(springF[i][1] - dotSpringTangent*tangent[i][1]);
|
||||
f[i][2] += prefactor*tangent[i][2] +
|
||||
f[i][2] += prefactor*tangent[i][2] +
|
||||
AngularContr*(springF[i][2] - dotSpringTangent*tangent[i][2]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,6 +34,10 @@
|
|||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
#ifdef LAMMPS_BIGBIG
|
||||
#error "The USER-INTEL package is not compatible with -DLAMMPS_BIGBIG"
|
||||
#endif
|
||||
|
||||
#ifdef _LMP_INTEL_OFFLOAD
|
||||
#ifndef INTEL_OFFLOAD_NOAFFINITY
|
||||
#include <unistd.h>
|
||||
|
|
|
@ -127,7 +127,7 @@ struct KernelArgsAIREBOT {
|
|||
struct NeighListAIREBO neigh_rebo;
|
||||
PairAIREBOIntelParam<flt_t,acc_t> params;
|
||||
struct AtomAIREBOT<flt_t> * x; /* num_all */
|
||||
int * tag; /* num_all */
|
||||
tagint * tag; /* num_all */
|
||||
flt_t * nC, * nH; /* num_all */
|
||||
int * map; /* num_types+1 */
|
||||
struct ResultForceT<acc_t> * result_f; /* num_all */
|
||||
|
@ -399,7 +399,7 @@ void PairAIREBOIntel::eval(
|
|||
const int * _noalias const numneigh = list->numneigh;
|
||||
const int * _noalias const cnumneigh = buffers->cnumneigh(list);
|
||||
const int * _noalias const firstneigh = buffers->firstneigh(list);
|
||||
int * const tag = atom->tag;
|
||||
tagint * const tag = atom->tag;
|
||||
|
||||
const int ntypes = atom->ntypes + 1;
|
||||
const int eatom = this->eflag_atom;
|
||||
|
@ -1912,10 +1912,10 @@ template<typename flt_t, typename acc_t>
|
|||
void ref_torsion(KernelArgsAIREBOT<flt_t,acc_t> * ka) {
|
||||
AtomAIREBOT<flt_t> * x = ka->x;
|
||||
int * map = ka->map;
|
||||
int * tag = ka->tag;
|
||||
tagint * tag = ka->tag;
|
||||
for (int ii = ka->frebo_from_atom; ii < ka->frebo_to_atom; ii++) {
|
||||
int i = ii;
|
||||
int itag = tag[i];
|
||||
tagint itag = tag[i];
|
||||
int itype = map[x[i].w];
|
||||
if (itype != 0) continue;
|
||||
flt_t xtmp = x[i].x;
|
||||
|
@ -1925,7 +1925,7 @@ void ref_torsion(KernelArgsAIREBOT<flt_t,acc_t> * ka) {
|
|||
int jnum = ka->neigh_rebo.num[i];
|
||||
for (int jj = 0; jj < jnum; jj++) {
|
||||
int j = REBO_neighs_i[jj];
|
||||
int jtag = tag[j];
|
||||
tagint jtag = tag[j];
|
||||
|
||||
if (itag > jtag) {
|
||||
if (((itag+jtag) & 1) == 0) continue;
|
||||
|
@ -2039,9 +2039,9 @@ void ref_frebo_single_interaction(KernelArgsAIREBOT<flt_t,acc_t> * ka, int i,
|
|||
template<typename flt_t, typename acc_t>
|
||||
inline void ref_frebo_single_atom(KernelArgsAIREBOT<flt_t,acc_t> * ka, int i) {
|
||||
AtomAIREBOT<flt_t> * x = ka->x;
|
||||
int * tag = ka->tag;
|
||||
tagint * tag = ka->tag;
|
||||
int jj;
|
||||
int itag = tag[i];
|
||||
tagint itag = tag[i];
|
||||
flt_t x_i = x[i].x;
|
||||
flt_t y_i = x[i].y;
|
||||
flt_t z_i = x[i].z;
|
||||
|
@ -2049,7 +2049,7 @@ inline void ref_frebo_single_atom(KernelArgsAIREBOT<flt_t,acc_t> * ka, int i) {
|
|||
int jnum = ka->neigh_rebo.num[i];
|
||||
for (jj = 0; jj < jnum; jj++) {
|
||||
int j = neighs[jj];
|
||||
int jtag = tag[j];
|
||||
tagint jtag = tag[j];
|
||||
if (itag > jtag) {
|
||||
if (((itag + jtag) & 1) == 0)
|
||||
continue;
|
||||
|
@ -2165,9 +2165,7 @@ template<typename flt_t, typename acc_t>
|
|||
void ref_lennard_jones_single_atom(KernelArgsAIREBOT<flt_t,acc_t> * ka, int i,
|
||||
int morseflag) {
|
||||
AtomAIREBOT<flt_t> * x = ka->x;
|
||||
int * tag = ka->tag;
|
||||
int jj;
|
||||
int itag = tag[i];
|
||||
int * neighs = ka->neigh_lmp.entries + ka->neigh_lmp.offset[i];
|
||||
int jnum = ka->neigh_lmp.num_half[i];
|
||||
for (jj = 0; jj < jnum; jj++) {
|
||||
|
@ -3640,7 +3638,6 @@ static void aut_frebo_batch_of_kind(KernelArgsAIREBOT<flt_t,acc_t> * ka,
|
|||
int * i_buf, int * j_buf) {
|
||||
{ // jump-scope for exceed_limits
|
||||
AtomAIREBOT<flt_t> * x = ka->x;
|
||||
int * tag = ka->tag;
|
||||
int * map = ka->map;
|
||||
ResultForceT<acc_t> * result_f = ka->result_f;
|
||||
flt_t rcminij = ka->params.rcmin[itype][jtype];
|
||||
|
@ -3847,13 +3844,13 @@ exceed_limits:
|
|||
*/
|
||||
static void aut_frebo(KernelArgsAIREBOT<flt_t,acc_t> * ka, int torflag) {
|
||||
AtomAIREBOT<flt_t> * _noalias x = ka->x;
|
||||
int * _noalias tag = ka->tag;
|
||||
tagint * _noalias tag = ka->tag;
|
||||
int * _noalias map = ka->map;
|
||||
int i_buf[2][2][fvec::VL];
|
||||
int j_buf[2][2][fvec::VL];
|
||||
int n_buf[2][2] = {0};
|
||||
for (int i = ka->frebo_from_atom; i < ka->frebo_to_atom; i++) {
|
||||
int itag = tag[i];
|
||||
tagint itag = tag[i];
|
||||
int itype = map[x[i].w];
|
||||
flt_t x_i = x[i].x;
|
||||
flt_t y_i = x[i].y;
|
||||
|
@ -3862,7 +3859,7 @@ static void aut_frebo(KernelArgsAIREBOT<flt_t,acc_t> * ka, int torflag) {
|
|||
int jnum = ka->neigh_rebo.num[i];
|
||||
for (int jj = 0; jj < jnum; jj++) {
|
||||
int j = neighs[jj];
|
||||
int jtag = tag[j];
|
||||
tagint jtag = tag[j];
|
||||
if (itag > jtag) {
|
||||
if (((itag + jtag) & 1) == 0)
|
||||
continue;
|
||||
|
@ -4490,7 +4487,6 @@ exceed_limits:
|
|||
template<int MORSEFLAG>
|
||||
static void aut_lennard_jones(KernelArgsAIREBOT<flt_t,acc_t> * ka) {
|
||||
AtomAIREBOT<flt_t> * x = ka->x;
|
||||
int * tag = ka->tag;
|
||||
int * map = ka->map;
|
||||
ResultForceT<acc_t> * result_f = ka->result_f;
|
||||
ivec c_i1 = ivec::set1(1);
|
||||
|
@ -4521,7 +4517,6 @@ static void aut_lennard_jones(KernelArgsAIREBOT<flt_t,acc_t> * ka) {
|
|||
int num_bo[2][2] = {0};
|
||||
|
||||
for (int i = ka->frebo_from_atom; i < ka->frebo_to_atom; i++) {
|
||||
ivec itag_bc = ivec::set1(tag[i]);
|
||||
int itype = map[x[i].w];
|
||||
fvec x_i = fvec::set1(x[i].x);
|
||||
fvec y_i = fvec::set1(x[i].y);
|
||||
|
|
|
@ -98,7 +98,7 @@ void FixNeighHistoryOMP::pre_exchange_onesided()
|
|||
// nlocal can be larger if other fixes added atoms at this pre_exchange()
|
||||
|
||||
// clear per-thread paged data structures
|
||||
|
||||
|
||||
MyPage <tagint> &ipg = ipage_atom[tid];
|
||||
MyPage <double> &dpg = dpage_atom[tid];
|
||||
ipg.reset();
|
||||
|
@ -540,8 +540,8 @@ void FixNeighHistoryOMP::post_neighbor()
|
|||
int *allflags;
|
||||
double *allvalues;
|
||||
|
||||
MyPage <tagint> &ipg = ipage_atom[tid];
|
||||
MyPage <double> &dpg = dpage_atom[tid];
|
||||
MyPage <int> &ipg = ipage_neigh[tid];
|
||||
MyPage <double> &dpg = dpage_neigh[tid];
|
||||
ipg.reset();
|
||||
dpg.reset();
|
||||
|
||||
|
|
|
@ -1099,7 +1099,7 @@ void AtomVecSMD::data_atom(double *coord, imageint imagetmp, char **values) {
|
|||
------------------------------------------------------------------------- */
|
||||
|
||||
int AtomVecSMD::data_atom_hybrid(int nlocal, char **values) {
|
||||
error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style tlsph");
|
||||
error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -1121,7 +1121,7 @@ void AtomVecSMD::data_vel(int m, char **values) {
|
|||
------------------------------------------------------------------------- */
|
||||
|
||||
int AtomVecSMD::data_vel_hybrid(int m, char **values) {
|
||||
error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style tlsph");
|
||||
error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1143,10 +1143,14 @@ void AtomVecSMD::pack_data(double **buf) {
|
|||
buf[i][7] = x[i][0];
|
||||
buf[i][8] = x[i][1];
|
||||
buf[i][9] = x[i][2];
|
||||
|
||||
buf[i][10] = x0[i][0];
|
||||
buf[i][11] = x0[i][1];
|
||||
buf[i][12] = x0[i][2];
|
||||
|
||||
buf[i][10] = ubuf((image[i] & IMGMASK) - IMGMAX).d;
|
||||
buf[i][11] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d;
|
||||
buf[i][12] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d;
|
||||
buf[i][13] = ubuf((image[i] & IMGMASK) - IMGMAX).d;
|
||||
buf[i][14] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d;
|
||||
buf[i][15] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1155,7 +1159,7 @@ void AtomVecSMD::pack_data(double **buf) {
|
|||
------------------------------------------------------------------------- */
|
||||
|
||||
int AtomVecSMD::pack_data_hybrid(int i, double *buf) {
|
||||
error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style tlsph");
|
||||
error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -1167,9 +1171,9 @@ void AtomVecSMD::write_data(FILE *fp, int n, double **buf) {
|
|||
for (int i = 0; i < n; i++)
|
||||
fprintf(fp,
|
||||
TAGINT_FORMAT
|
||||
" %d %d %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", (tagint) ubuf(buf[i][0]).i,
|
||||
" %d %d %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e\n", (tagint) ubuf(buf[i][0]).i,
|
||||
(int) ubuf(buf[i][1]).i, (int) ubuf(buf[i][2]).i, buf[i][3], buf[i][4], buf[i][5], buf[i][6], buf[i][7], buf[i][8],
|
||||
buf[i][9], (int) ubuf(buf[i][7]).i, (int) ubuf(buf[i][8]).i, (int) ubuf(buf[i][9]).i);
|
||||
buf[i][9], buf[i][10], buf[i][11], buf[i][12]);
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
|
@ -1177,7 +1181,7 @@ void AtomVecSMD::write_data(FILE *fp, int n, double **buf) {
|
|||
------------------------------------------------------------------------- */
|
||||
|
||||
int AtomVecSMD::write_data_hybrid(FILE *fp, double *buf) {
|
||||
error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style tlsph");
|
||||
error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -1200,7 +1204,7 @@ void AtomVecSMD::pack_vel(double **buf) {
|
|||
------------------------------------------------------------------------- */
|
||||
|
||||
int AtomVecSMD::pack_vel_hybrid(int i, double *buf) {
|
||||
error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style tlsph");
|
||||
error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1211,8 +1215,7 @@ int AtomVecSMD::pack_vel_hybrid(int i, double *buf) {
|
|||
void AtomVecSMD::write_vel(FILE *fp, int n, double **buf) {
|
||||
for (int i = 0; i < n; i++)
|
||||
fprintf(fp, TAGINT_FORMAT
|
||||
" %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e\n", (tagint) ubuf(buf[i][0]).i, buf[i][1], buf[i][2], buf[i][3],
|
||||
buf[i][4], buf[i][5], buf[i][6]);
|
||||
" %-1.16e %-1.16e %-1.16e\n", (tagint) ubuf(buf[i][0]).i, buf[i][1], buf[i][2], buf[i][3]);
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
|
@ -1220,7 +1223,7 @@ void AtomVecSMD::write_vel(FILE *fp, int n, double **buf) {
|
|||
------------------------------------------------------------------------- */
|
||||
|
||||
int AtomVecSMD::write_vel_hybrid(FILE *fp, double *buf) {
|
||||
error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style tlsph");
|
||||
error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd");
|
||||
return 3;
|
||||
}
|
||||
|
||||
|
|
|
@ -306,6 +306,10 @@ void CreateBonds::many()
|
|||
nadd_bonds,atom->nbonds);
|
||||
}
|
||||
}
|
||||
// trigger clearing the list of available neighbor list requests
|
||||
// and a full rebuild of them during the next run setup.
|
||||
// otherwise the request from this command may linger around.
|
||||
neighbor->init();
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
@ -338,6 +342,7 @@ void CreateBonds::single_bond()
|
|||
bond_atom[m][num_bond[m]] = batom2;
|
||||
num_bond[m]++;
|
||||
}
|
||||
++atom->nbonds;
|
||||
|
||||
if (force->newton_bond) return;
|
||||
|
||||
|
@ -385,6 +390,7 @@ void CreateBonds::single_angle()
|
|||
angle_atom3[m][num_angle[m]] = aatom3;
|
||||
num_angle[m]++;
|
||||
}
|
||||
++atom->nangles;
|
||||
|
||||
if (force->newton_bond) return;
|
||||
|
||||
|
@ -448,6 +454,7 @@ void CreateBonds::single_dihedral()
|
|||
dihedral_atom4[m][num_dihedral[m]] = datom4;
|
||||
num_dihedral[m]++;
|
||||
}
|
||||
++atom->ndihedrals;
|
||||
|
||||
if (force->newton_bond) return;
|
||||
|
||||
|
|
|
@ -407,6 +407,10 @@ void DeleteAtoms::delete_overlap(int narg, char **arg)
|
|||
break;
|
||||
}
|
||||
}
|
||||
// trigger clearing the list of available neighbor list requests
|
||||
// and a full rebuild of them during the next run setup.
|
||||
// otherwise the request from this command may linger around.
|
||||
neighbor->init();
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in New Issue