Files
lammps/src/USER-MISC/pair_local_density.h
2019-11-03 11:03:39 -05:00

89 lines
2.9 KiB
C++

/* -*- 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.
-------------------------------------------------------------------------
pair_LocalDensity written by:
Tanmoy Sanyal and M. Scott Shell from UC Santa Barbara
David Rosenberger: TU Darmstadt
-------------------------------------------------------------------------*/
#ifdef PAIR_CLASS
PairStyle(local/density,PairLocalDensity)
#else
#ifndef LMP_PAIR_LOCAL_DENSITY_H
#define LMP_PAIR_LOCAL_DENSITY_H
#include "pair.h"
namespace LAMMPS_NS {
class PairLocalDensity : public Pair {
public:
PairLocalDensity(class LAMMPS *);
virtual ~PairLocalDensity();
virtual void compute(int, int);
void settings(int, char **);
virtual void coeff(int, char **);
void init_style();
double init_one(int, int);
double single(int, int, int, int, double, double, double, double &);
virtual int pack_comm(int, int *, double *, int, int *);
virtual void unpack_comm(int, int, double *);
int pack_reverse_comm(int, int, double *);
void unpack_reverse_comm(int, int *, double *);
double memory_usage();
protected:
//------------------------------------------------------------------------
//This information is read from the tabulated input file
int nLD, nrho; // number of LD types
int **a, **b; // central and neigh atom filters
double *uppercut, *lowercut; // upper and lower cutoffs
double *uppercutsq, *lowercutsq; // square of above cutoffs
double *c0, *c2, *c4, *c6; // coeffs for indicator function
double *rho_min, *rho_max, *delta_rho; // min, max & grid-size for LDs
double **rho, **frho; // LD and LD function tables
//------------------------------------------------------------------------
double ***frho_spline; // splined LD potentials
double cutmax; // max cutoff for all elements
double cutforcesq; // square of global upper cutoff
int nmax; // max size of per-atom arrays
double **localrho; // per-atom LD
double **fp; // per-atom LD potential function derivative
void allocate();
// read tabulated input file
void parse_file(char *);
// convert array to spline
void array2spline();
// cubic spline interpolation
void interpolate_cbspl(int, double, double *, double **);
};
}
#endif
#endif