Program Listing for File ewald.h
↰ Return to documentation for file (source/lib/include/ewald.h
)
// SPDX-License-Identifier: LGPL-3.0-or-later
#pragma once
#include <algorithm>
#include <cassert>
#if defined(_OPENMP)
#include <omp.h>
#else
int omp_get_num_threads() { return 1; }
int omp_get_thread_num() { return 0; }
#endif
#include "region.h"
#include "utilities.h"
namespace deepmd {
// 8.988e9 / pc.electron_volt / pc.angstrom * (1.602e-19)**2
const double ElectrostaticConvertion = 14.39964535475696995031;
template <typename VALUETYPE>
struct EwaldParameters {
VALUETYPE rcut = 6.0;
VALUETYPE beta = 2;
VALUETYPE spacing = 4;
};
// compute the reciprocal part of the Ewald sum.
// outputs: energy force virial
// inputs: coordinates charges region
template <typename VALUETYPE>
void ewald_recp(VALUETYPE& ener,
std::vector<VALUETYPE>& force,
std::vector<VALUETYPE>& virial,
const std::vector<VALUETYPE>& coord,
const std::vector<VALUETYPE>& charge,
const deepmd::Region<VALUETYPE>& region,
const EwaldParameters<VALUETYPE>& param);
} // namespace deepmd