Program Listing for File DeepPot.h
↰ Return to documentation for file (source/api_cc/include/DeepPot.h
)
#pragma once
#include "common.h"
#include "neighbor_list.h"
namespace deepmd {
class DeepPot {
public:
DeepPot();
~DeepPot();
DeepPot(const std::string& model,
const int& gpu_rank = 0,
const std::string& file_content = "");
void init(const std::string& model,
const int& gpu_rank = 0,
const std::string& file_content = "");
void print_summary(const std::string& pre) const;
template <typename VALUETYPE, typename ENERGYVTYPE>
void compute(ENERGYVTYPE& ener,
std::vector<VALUETYPE>& force,
std::vector<VALUETYPE>& virial,
const std::vector<VALUETYPE>& coord,
const std::vector<int>& atype,
const std::vector<VALUETYPE>& box,
const std::vector<VALUETYPE>& fparam = std::vector<VALUETYPE>(),
const std::vector<VALUETYPE>& aparam = std::vector<VALUETYPE>());
template <typename VALUETYPE, typename ENERGYVTYPE>
void compute(ENERGYVTYPE& ener,
std::vector<VALUETYPE>& force,
std::vector<VALUETYPE>& virial,
const std::vector<VALUETYPE>& coord,
const std::vector<int>& atype,
const std::vector<VALUETYPE>& box,
const int nghost,
const InputNlist& inlist,
const int& ago,
const std::vector<VALUETYPE>& fparam = std::vector<VALUETYPE>(),
const std::vector<VALUETYPE>& aparam = std::vector<VALUETYPE>());
template <typename VALUETYPE, typename ENERGYVTYPE>
void compute(ENERGYVTYPE& ener,
std::vector<VALUETYPE>& force,
std::vector<VALUETYPE>& virial,
std::vector<VALUETYPE>& atom_energy,
std::vector<VALUETYPE>& atom_virial,
const std::vector<VALUETYPE>& coord,
const std::vector<int>& atype,
const std::vector<VALUETYPE>& box,
const std::vector<VALUETYPE>& fparam = std::vector<VALUETYPE>(),
const std::vector<VALUETYPE>& aparam = std::vector<VALUETYPE>());
template <typename VALUETYPE, typename ENERGYVTYPE>
void compute(ENERGYVTYPE& ener,
std::vector<VALUETYPE>& force,
std::vector<VALUETYPE>& virial,
std::vector<VALUETYPE>& atom_energy,
std::vector<VALUETYPE>& atom_virial,
const std::vector<VALUETYPE>& coord,
const std::vector<int>& atype,
const std::vector<VALUETYPE>& box,
const int nghost,
const InputNlist& lmp_list,
const int& ago,
const std::vector<VALUETYPE>& fparam = std::vector<VALUETYPE>(),
const std::vector<VALUETYPE>& aparam = std::vector<VALUETYPE>());
template <typename VALUETYPE, typename ENERGYVTYPE>
void compute_mixed_type(
ENERGYVTYPE& ener,
std::vector<VALUETYPE>& force,
std::vector<VALUETYPE>& virial,
const int& nframes,
const std::vector<VALUETYPE>& coord,
const std::vector<int>& atype,
const std::vector<VALUETYPE>& box,
const std::vector<VALUETYPE>& fparam = std::vector<VALUETYPE>(),
const std::vector<VALUETYPE>& aparam = std::vector<VALUETYPE>());
template <typename VALUETYPE, typename ENERGYVTYPE>
void compute_mixed_type(
ENERGYVTYPE& ener,
std::vector<VALUETYPE>& force,
std::vector<VALUETYPE>& virial,
std::vector<VALUETYPE>& atom_energy,
std::vector<VALUETYPE>& atom_virial,
const int& nframes,
const std::vector<VALUETYPE>& coord,
const std::vector<int>& atype,
const std::vector<VALUETYPE>& box,
const std::vector<VALUETYPE>& fparam = std::vector<VALUETYPE>(),
const std::vector<VALUETYPE>& aparam = std::vector<VALUETYPE>());
double cutoff() const {
assert(inited);
return rcut;
};
int numb_types() const {
assert(inited);
return ntypes;
};
int dim_fparam() const {
assert(inited);
return dfparam;
};
int dim_aparam() const {
assert(inited);
return daparam;
};
void get_type_map(std::string& type_map);
private:
tensorflow::Session* session;
int num_intra_nthreads, num_inter_nthreads;
tensorflow::GraphDef* graph_def;
bool inited;
template <class VT>
VT get_scalar(const std::string& name) const;
// VALUETYPE get_rcut () const;
// int get_ntypes () const;
double rcut;
int dtype;
double cell_size;
std::string model_type;
std::string model_version;
int ntypes;
int dfparam;
int daparam;
template <typename VALUETYPE>
void validate_fparam_aparam(const int& nframes,
const int& nloc,
const std::vector<VALUETYPE>& fparam,
const std::vector<VALUETYPE>& aparam) const;
template <typename VALUETYPE>
void tile_fparam_aparam(std::vector<VALUETYPE>& out_param,
const int& nframes,
const int& dparam,
const std::vector<VALUETYPE>& param) const;
template <typename VALUETYPE, typename ENERGYVTYPE>
void compute_inner(
ENERGYVTYPE& ener,
std::vector<VALUETYPE>& force,
std::vector<VALUETYPE>& virial,
const std::vector<VALUETYPE>& coord,
const std::vector<int>& atype,
const std::vector<VALUETYPE>& box,
const int nghost,
const int& ago,
const std::vector<VALUETYPE>& fparam = std::vector<VALUETYPE>(),
const std::vector<VALUETYPE>& aparam = std::vector<VALUETYPE>());
// copy neighbor list info from host
bool init_nbor;
std::vector<int> sec_a;
NeighborListData nlist_data;
InputNlist nlist;
AtomMap atommap;
// function used for neighbor list copy
std::vector<int> get_sel_a() const;
};
class DeepPotModelDevi {
public:
DeepPotModelDevi();
~DeepPotModelDevi();
DeepPotModelDevi(const std::vector<std::string>& models,
const int& gpu_rank = 0,
const std::vector<std::string>& file_contents =
std::vector<std::string>());
void init(const std::vector<std::string>& models,
const int& gpu_rank = 0,
const std::vector<std::string>& file_contents =
std::vector<std::string>());
template <typename VALUETYPE>
void compute(std::vector<ENERGYTYPE>& all_ener,
std::vector<std::vector<VALUETYPE> >& all_force,
std::vector<std::vector<VALUETYPE> >& all_virial,
const std::vector<VALUETYPE>& coord,
const std::vector<int>& atype,
const std::vector<VALUETYPE>& box,
const int nghost,
const InputNlist& lmp_list,
const int& ago,
const std::vector<VALUETYPE>& fparam = std::vector<VALUETYPE>(),
const std::vector<VALUETYPE>& aparam = std::vector<VALUETYPE>());
template <typename VALUETYPE>
void compute(std::vector<ENERGYTYPE>& all_ener,
std::vector<std::vector<VALUETYPE> >& all_force,
std::vector<std::vector<VALUETYPE> >& all_virial,
std::vector<std::vector<VALUETYPE> >& all_atom_energy,
std::vector<std::vector<VALUETYPE> >& all_atom_virial,
const std::vector<VALUETYPE>& coord,
const std::vector<int>& atype,
const std::vector<VALUETYPE>& box,
const int nghost,
const InputNlist& lmp_list,
const int& ago,
const std::vector<VALUETYPE>& fparam = std::vector<VALUETYPE>(),
const std::vector<VALUETYPE>& aparam = std::vector<VALUETYPE>());
double cutoff() const {
assert(inited);
return rcut;
};
int numb_types() const {
assert(inited);
return ntypes;
};
int dim_fparam() const {
assert(inited);
return dfparam;
};
int dim_aparam() const {
assert(inited);
return daparam;
};
template <typename VALUETYPE>
void compute_avg(VALUETYPE& dener, const std::vector<VALUETYPE>& all_energy);
template <typename VALUETYPE>
void compute_avg(std::vector<VALUETYPE>& avg,
const std::vector<std::vector<VALUETYPE> >& xx);
template <typename VALUETYPE>
void compute_std(std::vector<VALUETYPE>& std,
const std::vector<VALUETYPE>& avg,
const std::vector<std::vector<VALUETYPE> >& xx,
const int& stride);
template <typename VALUETYPE>
void compute_relative_std(std::vector<VALUETYPE>& std,
const std::vector<VALUETYPE>& avg,
const VALUETYPE eps,
const int& stride);
template <typename VALUETYPE>
void compute_std_e(std::vector<VALUETYPE>& std,
const std::vector<VALUETYPE>& avg,
const std::vector<std::vector<VALUETYPE> >& xx);
template <typename VALUETYPE>
void compute_std_f(std::vector<VALUETYPE>& std,
const std::vector<VALUETYPE>& avg,
const std::vector<std::vector<VALUETYPE> >& xx);
template <typename VALUETYPE>
void compute_relative_std_f(std::vector<VALUETYPE>& std,
const std::vector<VALUETYPE>& avg,
const VALUETYPE eps);
private:
unsigned numb_models;
std::vector<tensorflow::Session*> sessions;
int num_intra_nthreads, num_inter_nthreads;
std::vector<tensorflow::GraphDef*> graph_defs;
bool inited;
template <class VT>
VT get_scalar(const std::string name) const;
// VALUETYPE get_rcut () const;
// int get_ntypes () const;
double rcut;
double cell_size;
int dtype;
std::string model_type;
std::string model_version;
int ntypes;
int dfparam;
int daparam;
template <typename VALUETYPE>
void validate_fparam_aparam(const int& nloc,
const std::vector<VALUETYPE>& fparam,
const std::vector<VALUETYPE>& aparam) const;
// copy neighbor list info from host
bool init_nbor;
std::vector<std::vector<int> > sec;
deepmd::AtomMap atommap;
NeighborListData nlist_data;
InputNlist nlist;
// function used for nborlist copy
std::vector<std::vector<int> > get_sel() const;
};
} // namespace deepmd