Commit 7acba458 authored by pmla's avatar pmla
Browse files

added group2ID

parent 3168c111
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -9,12 +9,13 @@ Syntax

.. parsed-literal::

   compute ID group-ID ptm/atom structures threshold
   compute ID group-ID ptm/atom structures threshold group2-ID

* ID, group-ID are documented in :doc:`compute <compute>` command
* ptm/atom = style name of this compute command
* structures = structure types to search for
* threshold = lattice distortion threshold (RMSD)
* group2-ID determines which group are used for neighbor selection (optional, default "all")

Examples
""""""""
@@ -22,8 +23,8 @@ Examples

.. parsed-literal::

   compute 1 all ptm/atom default 0.1
   compute 1 all ptm/atom fcc-hcp-dcub-dhex 0.15
   compute 1 all ptm/atom default 0.1 all
   compute 1 all ptm/atom fcc-hcp-dcub-dhex 0.15 all
   compute 1 all ptm/atom all 0

Description
+14 −5
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ under
#include "neigh_request.h"
#include "neighbor.h"
#include "update.h"
#include "group.h"

#include "ptm_functions.h"

@@ -61,7 +62,7 @@ static const char cite_user_ptm_package[] =

ComputePTMAtom::ComputePTMAtom(LAMMPS *lmp, int narg, char **arg)
    : Compute(lmp, narg, arg), list(NULL), output(NULL) {
  if (narg != 5)
  if (narg < 5)
    error->all(FLERR, "Illegal compute ptm/atom command");

  char *structures = arg[3];
@@ -122,6 +123,14 @@ ComputePTMAtom::ComputePTMAtom(LAMMPS *lmp, int narg, char **arg)
  if (rmsd_threshold == 0)
    rmsd_threshold = INFINITY;

  char* group_name = (char *)"all";
  if (narg > 5) {
    group_name = arg[5];
  }
  int igroup = group->find(group_name);
  if (igroup == -1) error->all(FLERR,"Could not find fix group ID");
  group2bit = group->bitmask[igroup];

  peratom_flag = 1;
  size_peratom_cols = NUM_COLUMNS;
  create_attribute = 1;
@@ -169,7 +178,7 @@ typedef struct
  int *ilist;
  int nlocal;
  int *mask;
  int groupbit;
  int group2bit;

} ptmnbrdata_t;

@@ -187,7 +196,7 @@ static int get_neighbours(void* vdata, size_t central_index, size_t atom_index,
{
  ptmnbrdata_t* data = (ptmnbrdata_t*)vdata;
  int *mask = data->mask;
  int groupbit = data->groupbit;
  int group2bit = data->group2bit;

  double **x = data->x;
  double *pos = x[atom_index];
@@ -207,7 +216,7 @@ static int get_neighbours(void* vdata, size_t central_index, size_t atom_index,

  for (int jj = 0; jj < jnum; jj++) {
    int j = jlist[jj];
    if (!(mask[j] & groupbit))
    if (!(mask[j] & group2bit))
      continue;

    j &= NEIGHMASK;
@@ -272,7 +281,7 @@ void ComputePTMAtom::compute_peratom() {

  double **x = atom->x;
  int *mask = atom->mask;
  ptmnbrdata_t nbrlist = {x, numneigh, firstneigh, ilist, atom->nlocal, mask, groupbit};
  ptmnbrdata_t nbrlist = {x, numneigh, firstneigh, ilist, atom->nlocal, mask, group2bit};

  for (int ii = 0; ii < inum; ii++) {

+1 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ class ComputePTMAtom : public Compute {
  double rmsd_threshold;
  class NeighList *list;
  double **output;
  int group2bit;
};

}