Files
lammps/src/nbin.h
2022-10-24 11:08:26 -04:00

102 lines
2.8 KiB
C++

/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
LAMMPS development team: developers@lammps.org
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.
------------------------------------------------------------------------- */
#ifndef LMP_NBIN_H
#define LMP_NBIN_H
#include "pointers.h" // IWYU pragma: keep
namespace LAMMPS_NS {
class NBin : protected Pointers {
public:
int istyle; // 1-N index into binnames
bigint last_bin; // last timestep atoms were binned
double cutoff_custom; // cutoff set by requestor
// Variables for NBinStandard
int nbinx, nbiny, nbinz; // # of global bins
int mbins; // # of local bins and offset on this proc
int mbinx, mbiny, mbinz;
int mbinxlo, mbinylo, mbinzlo;
double binsizex, binsizey, binsizez; // bin sizes and inverse sizes
double bininvx, bininvy, bininvz;
int *binhead; // index of first atom in each bin
int *bins; // index of next atom in same bin
int *atom2bin; // bin assignment for each atom (local+ghost)
// Analogues for NBinMultimulti
int *nbinx_multi, *nbiny_multi, *nbinz_multi;
int *mbins_multi;
int *mbinx_multi, *mbiny_multi, *mbinz_multi;
int *mbinxlo_multi, *mbinylo_multi, *mbinzlo_multi;
double *binsizex_multi, *binsizey_multi, *binsizez_multi;
double *bininvx_multi, *bininvy_multi, *bininvz_multi;
int **binhead_multi;
NBin(class LAMMPS *);
~NBin() override;
void post_constructor(class NeighRequest *);
virtual void copy_neighbor_info();
virtual void bin_atoms_setup(int) = 0;
virtual void setup_bins(int) = 0;
virtual void bin_atoms() = 0;
virtual double memory_usage() { return 0.0; }
// Kokkos package
int kokkos; // 1 if class stores Kokkos data
protected:
// data from Neighbor class
int includegroup;
double cutneighmin;
double cutneighmax;
int binsizeflag;
double binsize_user;
double *bboxlo, *bboxhi;
int ncollections;
double **cutcollectionsq;
// data common to all NBin variants
int dimension;
int triclinic;
// data for standard NBin
int maxatom; // size of bins array
int maxbin; // size of binhead array
// data for multi NBin
int maxcollections; // size of multi arrays
int *maxbins_multi; // size of 2nd dimension of binhead_multi array
// methods
int coord2bin(double *);
int coord2bin_multi(double *, int);
};
} // namespace LAMMPS_NS
#endif