// -*- C++ -*-
//
// KimNeighborNEIGHPUREH.h: Kim pure half neighbor list.
//
// Copyright (C) 2012-2013 Jakob Schiotz and the Department of Physics,
// Technical University of Denmark. Email: schiotz@fysik.dtu.dk
//
// This file is part of Asap version 3.
// Asap is released under the GNU Lesser Public License (LGPL) version 3.
// However, the parts of Asap distributed within the OpenKIM project
// (including this file) are also released under the Common Development
// and Distribution License (CDDL) version 1.0.
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License
// version 3 as published by the Free Software Foundation. Permission
// to use other versions of the GNU Lesser General Public License may
// granted by Jakob Schiotz or the head of department of the
// Department of Physics, Technical University of Denmark, as
// described in section 14 of the GNU General Public License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// and the GNU Lesser Public License along with this program. If not,
// see .
#ifndef KIMNEIGHBORNEIGHPUREH_H
#define KIMNEIGHBORNEIGHPUREH_H
#include "KimNeighborLocator.h"
namespace ASAPSPACE {
PyAsap_NeighborLocatorObject *PyAsap_NewKimNeighborNEIGHPUREH(intptr_t* pkim,
KimAtoms *atoms,
double rCut);
class KimNeighborNEIGHPUREH : public KimNeighborLocator
{
protected:
KimNeighborNEIGHPUREH(intptr_t* pkim, KimAtoms *atoms, double rCut);
friend PyAsap_NeighborLocatorObject *PyAsap_NewKimNeighborNEIGHPUREH(intptr_t *pkim,
KimAtoms *atoms,
double rCut);
friend void PyAsap_Dealloc(PyObject *self);
public:
// Destructor should be protected, but friend template functions do
// not work with GNU C++.
virtual ~KimNeighborNEIGHPUREH();
/// Update neighbor list
///
/// KIM version: Extract any necessary info from the API object.
virtual void UpdateNeighborList() {}; // Nothing needed for this one.
/// Get info about the neighbors of atom n. The most important method :-)
///
/// Input values: n is the number of the atom. r (optional) is a
/// cutoff, must be less than rCut in the constructor (not
/// checked!).
///
/// In-out values: size contains the maximum space in the arrays.
/// It is decremented by the number of neighbors placed in the
/// arrays. It is an error to call GetNeighbors with too small a
/// value of size.
///
/// Out values: neighbors[] contains the numbers of the atoms,
/// diffs[] contains the \em relative positions of the atoms,
/// diffs2[] contains the norms of the diffs vectors.
///
/// Return value: The number of neighbors.
virtual int GetNeighbors(int n, int *neighbors, Vec *diffs, double *diffs2,
int& size, double r = -1.0) const;
protected:
//Data
KimAtoms *atoms;
double rcut;
double rcut2; // Square of cutoff
};
} // end namespace
#endif // !KIMNEIGHBORNEIGHPUREH_H