92 lines
3.6 KiB
C++
92 lines
3.6 KiB
C++
/* -*- c++ -*- ----------------------------------------------------------
|
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
|
https://www.lammps.org/, 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.
|
|
------------------------------------------------------------------------- */
|
|
|
|
#ifndef LMP_MLIAPDATA_H
|
|
#define LMP_MLIAPDATA_H
|
|
|
|
#include "pointers.h"
|
|
|
|
namespace LAMMPS_NS {
|
|
|
|
class MLIAPData : protected Pointers {
|
|
|
|
public:
|
|
MLIAPData(class LAMMPS *, int, int *, class MLIAPModel *, class MLIAPDescriptor *,
|
|
class PairMLIAP * = nullptr);
|
|
~MLIAPData() override;
|
|
|
|
void init();
|
|
void generate_neighdata(class NeighList *, int = 0, int = 0);
|
|
void grow_neigharrays();
|
|
double memory_usage();
|
|
|
|
int size_array_rows, size_array_cols;
|
|
int natoms;
|
|
int size_gradforce;
|
|
int yoffset, zoffset;
|
|
int ndims_force, ndims_virial;
|
|
double **f;
|
|
double **gradforce;
|
|
double **betas; // betas for all atoms in list
|
|
double **descriptors; // descriptors for all atoms in list
|
|
double *eatoms; // energies for all atoms in list
|
|
double energy; // energy
|
|
int ndescriptors; // number of descriptors
|
|
int nparams; // number of model parameters per element
|
|
int nelements; // number of elements
|
|
|
|
// data structures for grad-grad list (gamma)
|
|
|
|
int natomgamma_max; // allocated size of gamma
|
|
int gamma_nnz; // number of non-zero entries in gamma
|
|
double **gamma; // gamma element
|
|
int **gamma_row_index; // row (parameter) index
|
|
int **gamma_col_index; // column (descriptor) index
|
|
double *egradient; // energy gradient w.r.t. parameters
|
|
|
|
// data structures for mliap neighbor list
|
|
// only neighbors strictly inside descriptor cutoff
|
|
|
|
int nlocal, nghost, ntotal; // # of owned and ghost atoms on this proc, and sum of both
|
|
int nlistatoms; // current number of atoms in neighborlist
|
|
int nlistatoms_max; // allocated size of descriptor array
|
|
int natomneigh_max; // allocated size of atom neighbor arrays
|
|
int *numneighs; // neighbors count for each atom
|
|
int *iatoms; // index of each atom
|
|
int *pair_i; // index of each i atom for each ij pair
|
|
int *ielems; // element of each atom
|
|
int nneigh_max; // number of ij neighbors allocated
|
|
int npairs; // number of ij neighbor pairs
|
|
int *jatoms; // index of each neighbor
|
|
int *jelems; // element of each neighbor
|
|
int *elems; // element of each atom in or not in the neighborlist
|
|
double **rij; // distance vector of each neighbor
|
|
double ***graddesc; // descriptor gradient w.r.t. each neighbor
|
|
int eflag; // indicates if energy is needed
|
|
int vflag; // indicates if virial is needed
|
|
class PairMLIAP *pairmliap; // access to pair tally functions
|
|
|
|
private:
|
|
class MLIAPModel *model;
|
|
class MLIAPDescriptor *descriptor;
|
|
|
|
int nmax;
|
|
class NeighList *list; // LAMMPS neighbor list
|
|
int *map; // map LAMMPS types to [0,nelements)
|
|
int gradgradflag; // 1 for graddesc, 0 for gamma
|
|
};
|
|
|
|
} // namespace LAMMPS_NS
|
|
|
|
#endif
|