diff --git a/.github/workflows/test_python.yml b/.github/workflows/test_python.yml index 469dcd869b..dadd749b36 100644 --- a/.github/workflows/test_python.yml +++ b/.github/workflows/test_python.yml @@ -5,7 +5,7 @@ name: Test Python jobs: testpython: name: Test Python - runs-on: ubuntu-latest + runs-on: ubuntu-18.04 strategy: matrix: include: diff --git a/source/api_cc/src/NNPInter.cc b/source/api_cc/src/NNPInter.cc index 56f38d9900..4ac454a324 100644 --- a/source/api_cc/src/NNPInter.cc +++ b/source/api_cc/src/NNPInter.cc @@ -190,7 +190,10 @@ void NNPInter:: init (const std::string & model, const int & gpu_rank, const std::string & file_content) { - assert (!inited); + if (inited){ + std::cerr << "WARNING: deepmd-kit should not be initialized twice, do nothing at the second call of initializer" << std::endl; + return ; + } SessionOptions options; options.config.set_inter_op_parallelism_threads(num_inter_nthreads); options.config.set_intra_op_parallelism_threads(num_intra_nthreads); @@ -500,7 +503,10 @@ void NNPInterModelDevi:: init (const std::vector & models, const int & gpu_rank, const std::vector & file_contents) { - assert (!inited); + if (inited){ + std::cerr << "WARNING: deepmd-kit should not be initialized twice, do nothing at the second call of initializer" << std::endl; + return ; + } numb_models = models.size(); sessions.resize(numb_models); graph_defs.resize(numb_models); diff --git a/source/lib/include/coord.h b/source/lib/include/coord.h new file mode 100644 index 0000000000..dc81efc1b2 --- /dev/null +++ b/source/lib/include/coord.h @@ -0,0 +1,35 @@ +#pragma once + +#include "region.h" + +// normalize coords +template +void +normalize_coord_cpu( + FPTYPE * coord, + const int natom, + const Region & region); + +// copy coordinates +// outputs: +// out_c, out_t, mapping, nall +// inputs: +// in_c, in_t, nloc, mem_nall, rc, region +// mem_nall is the size of allocated memory for out_c, out_t, mapping +// returns +// 0: succssful +// 1: the memory is not large enough to hold all copied coords and types. +// i.e. nall > mem_nall +template +int +copy_coord_cpu( + FPTYPE * out_c, + int * out_t, + int * mapping, + int * nall, + const FPTYPE * in_c, + const int * in_t, + const int & nloc, + const int & mem_nall, + const float & rcut, + const Region & region); diff --git a/source/lib/include/env_mat.h b/source/lib/include/env_mat.h index 067c6949d6..1217051f70 100644 --- a/source/lib/include/env_mat.h +++ b/source/lib/include/env_mat.h @@ -24,7 +24,6 @@ void env_mat_a_cpu ( std::vector & descrpt_a_deriv, std::vector & rij_a, const std::vector & posi, - const int & ntypes, const std::vector & type, const int & i_idx, const std::vector & fmt_nlist, @@ -53,7 +52,6 @@ void env_mat_r_cpu ( std::vector & descrpt_a_deriv, std::vector & rij_a, const std::vector & posi, - const int & ntypes, const std::vector & type, const int & i_idx, const std::vector & fmt_nlist_a, diff --git a/source/lib/include/fmt_nlist.h b/source/lib/include/fmt_nlist.h index f60f9de0d8..3b8a30eefe 100644 --- a/source/lib/include/fmt_nlist.h +++ b/source/lib/include/fmt_nlist.h @@ -1,11 +1,23 @@ #pragma once #include +#include "neighbor_list.h" #include "SimulationRegion.h" +template +void format_nlist_cpu( + int * nlist, + const InputNlist & in_nlist, + const FPTYPE * coord, + const int * type, + const int nloc, + const int nall, + const float rcut, + const std::vector sec); + // return: -1 OK // > 0 the type of unsuccessful neighbor list -int format_nlist_fill_a ( +int format_nlist_i_fill_a ( std::vector & fmt_nei_idx_a, std::vector & fmt_nei_idx_r, const std::vector & posi, @@ -22,10 +34,9 @@ int format_nlist_fill_a ( template -int format_nlist_cpu ( +int format_nlist_i_cpu ( std::vector & fmt_nei_idx_a, const std::vector & posi, - const int & ntypes, const std::vector & type, const int & i_idx, const std::vector & nei_idx_a, diff --git a/source/lib/include/neighbor_list.h b/source/lib/include/neighbor_list.h index b47249c81a..44a7fc417b 100644 --- a/source/lib/include/neighbor_list.h +++ b/source/lib/include/neighbor_list.h @@ -3,10 +3,59 @@ #include #include #include +#include +#include "region.h" #include "utilities.h" #include "SimulationRegion.h" +// format of the input neighbor list +struct InputNlist +{ + int inum; + int * ilist; + int * numneigh; + int ** firstneigh; + InputNlist ( + int inum_, + int * ilist_, + int * numneigh_, + int ** firstneigh_ + ) + : inum(inum_), ilist(ilist_), numneigh(numneigh_), firstneigh(firstneigh_) + {} +}; + +void convert_nlist( + InputNlist & to_nlist, + std::vector > & from_nlist + ); + + +// build neighbor list. +// outputs + +// nlist, max_list_size +// max_list_size is the maximal size of jlist. +// inputs +// c_cpy, nloc, nall, mem_size, rcut, region +// mem_size is the size of allocated memory for jlist. +// returns +// 0: succssful +// 1: the memory is not large enough to hold all neighbors. +// i.e. max_list_size > mem_nall +template +int +build_nlist_cpu( + InputNlist & nlist, + int * max_list_size, + const FPTYPE * c_cpy, + const int & nloc, + const int & nall, + const int & mem_size, + const float & rcut); + + // build nlist by an extended grid void build_nlist (std::vector > & nlist0, diff --git a/source/lib/include/prod_env_mat.h b/source/lib/include/prod_env_mat.h index f49078260e..2b09d07d22 100644 --- a/source/lib/include/prod_env_mat.h +++ b/source/lib/include/prod_env_mat.h @@ -18,7 +18,6 @@ void prod_env_mat_a_cpu( const FPTYPE * std, const int nloc, const int nall, - const int ntypes, const float rcut, const float rcut_smth, const std::vector sec); @@ -39,7 +38,6 @@ void prod_env_mat_r_cpu( const FPTYPE * std, const int nloc, const int nall, - const int ntypes, const float rcut, const float rcut_smth, const std::vector sec); diff --git a/source/lib/include/region.h b/source/lib/include/region.h new file mode 100644 index 0000000000..e5e0aab5d7 --- /dev/null +++ b/source/lib/include/region.h @@ -0,0 +1,31 @@ +#pragma once + +template +struct Region +{ + FPTYPE * boxt; + FPTYPE * rec_boxt; + Region(); + ~Region(); +}; + +template +void +init_region_cpu( + Region & region, + const FPTYPE * boxt); + +template +void +convert_to_inter_cpu( + FPTYPE * ri, + const Region & region, + const FPTYPE * rp); + +template +void +convert_to_phys_cpu( + FPTYPE * rp, + const Region & region, + const FPTYPE * ri); + diff --git a/source/lib/src/coord.cc b/source/lib/src/coord.cc new file mode 100644 index 0000000000..5066eac2a5 --- /dev/null +++ b/source/lib/src/coord.cc @@ -0,0 +1,110 @@ +#include "coord.h" +#include "neighbor_list.h" +#include "SimulationRegion.h" +#include + +// normalize coords +template +void +normalize_coord_cpu( + FPTYPE * coord, + const int natom, + const Region & region) +{ + for(int ii = 0; ii < natom; ++ii){ + FPTYPE ri[3]; + convert_to_inter_cpu(ri, region, coord+3*ii); + for(int dd = 0; dd < 3; ++dd){ + while(ri[dd] >= 1.) ri[dd] -= 1.; + while(ri[dd] < 0.) ri[dd] += 1.; + } + convert_to_phys_cpu(coord+3*ii, region, ri); + } +} + + +template +int +copy_coord_cpu( + FPTYPE * out_c, + int * out_t, + int * mapping, + int * nall, + const FPTYPE * in_c, + const int * in_t, + const int & nloc, + const int & mem_nall, + const float & rcut, + const Region & region) +{ + std::vector coord(nloc * 3); + std::vector atype(nloc); + std::copy(in_c, in_c+nloc*3, coord.begin()); + std::copy(in_t, in_t+nloc, atype.begin()); + SimulationRegion tmpr; + double tmp_boxt[9]; + std::copy(region.boxt, region.boxt+9, tmp_boxt); + tmpr.reinitBox(tmp_boxt); + + std::vector out_coord; + std::vector out_atype, out_mapping, ncell, ngcell; + copy_coord(out_coord, out_atype, out_mapping, ncell, ngcell, coord, atype, rcut, tmpr); + + *nall = out_atype.size(); + if(*nall > mem_nall){ + // size of the output arrays is not large enough + return 1; + } + else{ + std::copy(out_coord.begin(), out_coord.end(), out_c); + std::copy(out_atype.begin(), out_atype.end(), out_t); + std::copy(out_mapping.begin(), out_mapping.end(), mapping); + } + return 0; +} + + +template +void +normalize_coord_cpu( + double * coord, + const int natom, + const Region & region); + +template +void +normalize_coord_cpu( + float * coord, + const int natom, + const Region & region); + +template +int +copy_coord_cpu( + double * out_c, + int * out_t, + int * mapping, + int * nall, + const double * in_c, + const int * in_t, + const int & nloc, + const int & mem_nall, + const float & rcut, + const Region & region); + +template +int +copy_coord_cpu( + float * out_c, + int * out_t, + int * mapping, + int * nall, + const float * in_c, + const int * in_t, + const int & nloc, + const int & mem_nall, + const float & rcut, + const Region & region); + + + diff --git a/source/lib/src/env_mat.cc b/source/lib/src/env_mat.cc index 7aec89feaa..c9cadb4b0d 100644 --- a/source/lib/src/env_mat.cc +++ b/source/lib/src/env_mat.cc @@ -97,7 +97,6 @@ void env_mat_a_cpu ( std::vector & descrpt_a_deriv, std::vector & rij_a, const std::vector & posi, - const int & ntypes, const std::vector & type, const int & i_idx, const std::vector & fmt_nlist_a, @@ -244,7 +243,6 @@ void env_mat_r_cpu ( std::vector & descrpt_a_deriv, std::vector & rij_a, const std::vector & posi, - const int & ntypes, const std::vector & type, const int & i_idx, const std::vector & fmt_nlist, @@ -305,7 +303,6 @@ void env_mat_a_cpu ( std::vector & descrpt_a_deriv, std::vector & rij_a, const std::vector & posi, - const int & ntypes, const std::vector & type, const int & i_idx, const std::vector & fmt_nlist, @@ -320,7 +317,6 @@ void env_mat_a_cpu ( std::vector & descrpt_a_deriv, std::vector & rij_a, const std::vector & posi, - const int & ntypes, const std::vector & type, const int & i_idx, const std::vector & fmt_nlist, @@ -335,7 +331,6 @@ void env_mat_r_cpu ( std::vector & descrpt_r_deriv, std::vector & rij_r, const std::vector & posi, - const int & ntypes, const std::vector & type, const int & i_idx, const std::vector & fmt_nlist, @@ -350,7 +345,6 @@ void env_mat_r_cpu ( std::vector & descrpt_r_deriv, std::vector & rij_r, const std::vector & posi, - const int & ntypes, const std::vector & type, const int & i_idx, const std::vector & fmt_nlist, diff --git a/source/lib/src/fmt_nlist.cc b/source/lib/src/fmt_nlist.cc index 740860e540..0d9b921b1b 100644 --- a/source/lib/src/fmt_nlist.cc +++ b/source/lib/src/fmt_nlist.cc @@ -5,7 +5,7 @@ #include "SimulationRegion.h" #include -int format_nlist_fill_a ( +int format_nlist_i_fill_a ( std::vector & fmt_nei_idx_a, std::vector & fmt_nei_idx_r, const std::vector & posi, @@ -78,10 +78,9 @@ int format_nlist_fill_a ( template -int format_nlist_cpu ( +int format_nlist_i_cpu ( std::vector & fmt_nei_idx_a, const std::vector &posi, - const int & ntypes, const std::vector & type, const int & i_idx, const std::vector & nei_idx_a, @@ -123,11 +122,53 @@ int format_nlist_cpu ( return overflowed; } +template +void format_nlist_cpu ( + int * nlist, + const InputNlist & in_nlist, + const FPTYPE * coord, + const int * type, + const int nloc, + const int nall, + const float rcut, + const std::vector sec) +{ + std::vector posi_(nall * 3); + std::vector type_(nall); + std::copy(coord, coord + nall * 3, posi_.begin()); + std::copy(type, type + nall, type_.begin()); + std::vector ilist, fmt_ilist; + int nnei = sec.back(); + + for(int ii = 0; ii < in_nlist.inum; ++ii){ + int i_idx = in_nlist.ilist[ii]; + int i_num = in_nlist.numneigh[ii]; + ilist.resize(i_num); + std::copy(in_nlist.firstneigh[ii], in_nlist.firstneigh[ii] + i_num, ilist.begin()); + format_nlist_i_cpu( + fmt_ilist, + posi_, + type_, + i_idx, + ilist, + rcut, + sec); + int * cur_nlist = nlist + i_idx * nnei; + if(fmt_ilist.size() != nnei){ + std::cerr << "FATAL: formatted nlist of i have length " + << fmt_ilist.size() + << " which does not match " + << nnei << std::endl; + exit(1); + } + std::copy(fmt_ilist.begin(), fmt_ilist.end(), cur_nlist); + } +} + template -int format_nlist_cpu ( +int format_nlist_i_cpu ( std::vector & fmt_nei_idx_a, const std::vector &posi, - const int & ntypes, const std::vector & type, const int & i_idx, const std::vector & nei_idx_a, @@ -136,14 +177,36 @@ int format_nlist_cpu ( template -int format_nlist_cpu ( +int format_nlist_i_cpu ( std::vector & fmt_nei_idx_a, const std::vector & posi, - const int & ntypes, const std::vector & type, const int & i_idx, const std::vector & nei_idx_a, const float & rcut, const std::vector & sec_a); +template +void format_nlist_cpu ( + int * nlist, + const InputNlist & in_nlist, + const double * coord, + const int * type, + const int nloc, + const int nall, + const float rcut, + const std::vector sec); + + +template +void format_nlist_cpu ( + int * nlist, + const InputNlist & in_nlist, + const float * coord, + const int * type, + const int nloc, + const int nall, + const float rcut, + const std::vector sec); + diff --git a/source/lib/src/neighbor_list.cc b/source/lib/src/neighbor_list.cc index 01ba7a2a26..0643037e3f 100644 --- a/source/lib/src/neighbor_list.cc +++ b/source/lib/src/neighbor_list.cc @@ -742,3 +742,84 @@ copy_coord (std::vector & out_c, } } + +void +convert_nlist( + InputNlist & to_nlist, + std::vector > & from_nlist + ) +{ + to_nlist.inum = from_nlist.size(); + for(int ii = 0; ii < to_nlist.inum; ++ii){ + to_nlist.ilist[ii] = ii; + to_nlist.numneigh[ii] = from_nlist[ii].size(); + to_nlist.firstneigh[ii] = &from_nlist[ii][0]; + } +} + +template +int +build_nlist_cpu( + InputNlist & nlist, + int * max_list_size, + const FPTYPE * c_cpy, + const int & nloc, + const int & nall, + const int & mem_size, + const float & rcut) +{ + *max_list_size = 0; + nlist.inum = nloc; + FPTYPE rcut2 = rcut * rcut; + std::vector jlist; + jlist.reserve(mem_size); + for(int ii = 0; ii < nlist.inum; ++ii){ + nlist.ilist[ii] = ii; + jlist.clear(); + for(int jj = 0; jj < nall; ++jj){ + if(jj == ii) continue; + FPTYPE diff[3]; + for(int dd = 0; dd < 3; ++dd){ + diff[dd] = c_cpy[ii*3+dd] - c_cpy[jj*3+dd]; + } + FPTYPE diff2 = dot3(diff, diff); + if(diff2 < rcut2){ + jlist.push_back(jj); + } + } + if(jlist.size() > mem_size){ + *max_list_size = jlist.size(); + return 1; + } + else { + int list_size = jlist.size(); + nlist.numneigh[ii] = list_size; + if(list_size > *max_list_size) *max_list_size = list_size; + std::copy(jlist.begin(), jlist.end(), nlist.firstneigh[ii]); + } + } + return 0; +} + +template +int +build_nlist_cpu( + InputNlist & nlist, + int * max_list_size, + const double * c_cpy, + const int & nloc, + const int & nall, + const int & mem_size, + const float & rcut); + +template +int +build_nlist_cpu( + InputNlist & nlist, + int * max_list_size, + const float * c_cpy, + const int & nloc, + const int & nall, + const int & mem_size, + const float & rcut); + diff --git a/source/lib/src/prod_env_mat.cc b/source/lib/src/prod_env_mat.cc index ac0d35be5b..ce052b3df0 100644 --- a/source/lib/src/prod_env_mat.cc +++ b/source/lib/src/prod_env_mat.cc @@ -21,7 +21,6 @@ void prod_env_mat_a_cpu( const FPTYPE * std, const int nloc, const int nall, - const int ntypes, const float rcut, const float rcut_smth, const std::vector sec) @@ -60,13 +59,13 @@ void prod_env_mat_a_cpu( #pragma omp parallel for for (int ii = 0; ii < nloc; ++ii) { std::vector fmt_nlist_a; - int ret = format_nlist_cpu(fmt_nlist_a, d_coord3, ntypes, d_type, ii, d_nlist_a[ii], rcut, sec); + int ret = format_nlist_i_cpu(fmt_nlist_a, d_coord3, d_type, ii, d_nlist_a[ii], rcut, sec); std::vector d_em_a; std::vector d_em_a_deriv; std::vector d_em_r; std::vector d_em_r_deriv; std::vector d_rij_a; - env_mat_a_cpu (d_em_a, d_em_a_deriv, d_rij_a, d_coord3, ntypes, d_type, ii, fmt_nlist_a, sec, rcut_smth, rcut); + env_mat_a_cpu (d_em_a, d_em_a_deriv, d_rij_a, d_coord3, d_type, ii, fmt_nlist_a, sec, rcut_smth, rcut); // check sizes assert (d_em_a.size() == nem); @@ -105,7 +104,6 @@ void prod_env_mat_r_cpu( const FPTYPE * std, const int nloc, const int nall, - const int ntypes, const float rcut, const float rcut_smth, const std::vector sec) @@ -144,13 +142,13 @@ void prod_env_mat_r_cpu( #pragma omp parallel for for (int ii = 0; ii < nloc; ++ii) { std::vector fmt_nlist_a; - int ret = format_nlist_cpu(fmt_nlist_a, d_coord3, ntypes, d_type, ii, d_nlist_a[ii], rcut, sec); + int ret = format_nlist_i_cpu(fmt_nlist_a, d_coord3, d_type, ii, d_nlist_a[ii], rcut, sec); std::vector d_em_a; std::vector d_em_a_deriv; std::vector d_em_r; std::vector d_em_r_deriv; std::vector d_rij_a; - env_mat_r_cpu (d_em_a, d_em_a_deriv, d_rij_a, d_coord3, ntypes, d_type, ii, fmt_nlist_a, sec, rcut_smth, rcut); + env_mat_r_cpu (d_em_a, d_em_a_deriv, d_rij_a, d_coord3, d_type, ii, fmt_nlist_a, sec, rcut_smth, rcut); // check sizes assert (d_em_a.size() == nem); @@ -190,7 +188,6 @@ void prod_env_mat_a_cpu( const double * std, const int nloc, const int nall, - const int ntypes, const float rcut, const float rcut_smth, const std::vector sec); @@ -211,7 +208,6 @@ void prod_env_mat_a_cpu( const float * std, const int nloc, const int nall, - const int ntypes, const float rcut, const float rcut_smth, const std::vector sec); @@ -232,7 +228,6 @@ void prod_env_mat_r_cpu( const double * std, const int nloc, const int nall, - const int ntypes, const float rcut, const float rcut_smth, const std::vector sec); @@ -253,7 +248,6 @@ void prod_env_mat_r_cpu( const float * std, const int nloc, const int nall, - const int ntypes, const float rcut, const float rcut_smth, const std::vector sec); @@ -323,4 +317,4 @@ void env_mat_nbor_update( } delete [] mesh_host; } -#endif // GOOGLE_CUDA \ No newline at end of file +#endif // GOOGLE_CUDA diff --git a/source/lib/src/region.cc b/source/lib/src/region.cc new file mode 100644 index 0000000000..b4c1aa2e77 --- /dev/null +++ b/source/lib/src/region.cc @@ -0,0 +1,148 @@ +#include +#include +#include "region.h" +#define BOXT_DIM 9 + +template +Region:: +Region() +{ + boxt = new FPTYPE[BOXT_DIM]; + rec_boxt = new FPTYPE[BOXT_DIM]; +} + +template +Region:: +~Region() +{ + delete [] boxt; + delete [] rec_boxt; +} + +template struct Region; +template struct Region; + +template +inline FPTYPE +compute_volume(const FPTYPE * boxt) +{ + FPTYPE volume = + boxt[0*3+0] * (boxt[1*3+1]*boxt[2*3+2] - boxt[2*3+1]*boxt[1*3+2]) - + boxt[0*3+1] * (boxt[1*3+0]*boxt[2*3+2] - boxt[2*3+0]*boxt[1*3+2]) + + boxt[0*3+2] * (boxt[1*3+0]*boxt[2*3+1] - boxt[2*3+0]*boxt[1*3+1]); + if (volume < 0) { + throw std::runtime_error("Negative volume detected. Please make sure the simulation cell obeys the right-hand rule."); + } + return volume; +} + +template +inline void +compute_rec_boxt( + FPTYPE * rec_boxt, + const FPTYPE * boxt) +{ + FPTYPE volumei = static_cast(1.) / compute_volume(boxt); + rec_boxt[0*3+0] =( boxt[1*3+1]*boxt[2*3+2] - boxt[2*3+1]*boxt[1*3+2]) * volumei; + rec_boxt[1*3+1] =( boxt[0*3+0]*boxt[2*3+2] - boxt[2*3+0]*boxt[0*3+2]) * volumei; + rec_boxt[2*3+2] =( boxt[0*3+0]*boxt[1*3+1] - boxt[1*3+0]*boxt[0*3+1]) * volumei; + rec_boxt[0*3+1] =(-boxt[1*3+0]*boxt[2*3+2] + boxt[2*3+0]*boxt[1*3+2]) * volumei; + rec_boxt[0*3+2] =( boxt[1*3+0]*boxt[2*3+1] - boxt[2*3+0]*boxt[1*3+1]) * volumei; + rec_boxt[1*3+0] =(-boxt[0*3+1]*boxt[2*3+2] + boxt[2*3+1]*boxt[0*3+2]) * volumei; + rec_boxt[1*3+2] =(-boxt[0*3+0]*boxt[2*3+1] + boxt[2*3+0]*boxt[0*3+1]) * volumei; + rec_boxt[2*3+0] =( boxt[0*3+1]*boxt[1*3+2] - boxt[1*3+1]*boxt[0*3+2]) * volumei; + rec_boxt[2*3+1] =(-boxt[0*3+0]*boxt[1*3+2] + boxt[1*3+0]*boxt[0*3+2]) * volumei; +} + +template +inline void +tensor_dot_vec ( + FPTYPE * o_v, + const FPTYPE * i_t, + const FPTYPE * i_v) +{ + o_v[0] = i_v[0] * i_t[0*3+0] + i_v[1] * i_t[0*3+1] + i_v[2] * i_t[0*3+2]; + o_v[1] = i_v[0] * i_t[1*3+0] + i_v[1] * i_t[1*3+1] + i_v[2] * i_t[1*3+2]; + o_v[2] = i_v[0] * i_t[2*3+0] + i_v[1] * i_t[2*3+1] + i_v[2] * i_t[2*3+2]; +} + +template +inline void +tensor_t_dot_vec ( + FPTYPE * o_v, + const FPTYPE * i_t, + const FPTYPE * i_v) +{ + o_v[0] = i_v[0] * i_t[0*3+0] + i_v[1] * i_t[1*3+0] + i_v[2] * i_t[2*3+0]; + o_v[1] = i_v[0] * i_t[0*3+1] + i_v[1] * i_t[1*3+1] + i_v[2] * i_t[2*3+1]; + o_v[2] = i_v[0] * i_t[0*3+2] + i_v[1] * i_t[1*3+2] + i_v[2] * i_t[2*3+2]; +} + +template +void +init_region_cpu( + Region & region, + const FPTYPE * boxt) +{ + std::copy(boxt, boxt+BOXT_DIM, region.boxt); + compute_rec_boxt(region.rec_boxt, region.boxt); +} + +template +void +convert_to_inter_cpu( + FPTYPE * ri, + const Region & region, + const FPTYPE * rp) +{ + tensor_dot_vec(ri, region.rec_boxt, rp); +} + +template +void +convert_to_phys_cpu( + FPTYPE * rp, + const Region & region, + const FPTYPE * ri) +{ + tensor_t_dot_vec(rp, region.boxt, ri); +} + +template +void init_region_cpu( + Region & region, + const double * boxt); + +template +void init_region_cpu( + Region & region, + const float * boxt); + +template +void +convert_to_inter_cpu( + double * ri, + const Region & region, + const double * rp); + +template +void +convert_to_inter_cpu( + float * ri, + const Region & region, + const float * rp); + +template +void +convert_to_phys_cpu( + double * ri, + const Region & region, + const double * rp); + +template +void +convert_to_phys_cpu( + float * ri, + const Region & region, + const float * rp); + diff --git a/source/lib/tests/test_coord.cc b/source/lib/tests/test_coord.cc new file mode 100644 index 0000000000..111b66bb06 --- /dev/null +++ b/source/lib/tests/test_coord.cc @@ -0,0 +1,233 @@ +#include +#include +#include +#include "coord.h" + +class TestNormCoord : public ::testing::Test +{ +protected: + std::vector posi = { + 1.83, 1.56, 1.18, + 1.09, 1.87, 1.74, + }; + std::vector boxt = { + 3.27785716, 0.09190842, 0.14751448, 0.02331264, 3.36482777, -0.2999871 , -0.47510999, -0.38123489, 3.33561809 + }; + // 10, 11, 12 + std::vector r0 ={ + 29.16369076, 34.91737099, 39.38270378, + 28.42369076, 35.22737099, 39.94270378 + }; + // -10, 11, -12 + std::vector r1 ={ + -24.990812680000005, 42.22883995, -43.622419980000004, + -25.730812680000003, 42.538839949999996, -43.06241998 + }; + // 10, -11, 12 + std::vector r2 ={ + 28.65081268, -39.10883995, 45.98241998, + 27.91081268, -38.79883995, 46.54241998 + }; + int natoms; + void SetUp() override { + natoms = posi.size()/3; + }; +}; + + +TEST_F(TestNormCoord, cpu_case0) +{ + Region region; + init_region_cpu(region, &boxt[0]); + std::vector out_c(r0); + normalize_coord_cpu(&out_c[0], natoms, region); + for(int ii = 0; ii < posi.size(); ++ii){ + EXPECT_LT(fabs(out_c[ii] - posi[ii]), 1e-12); + } +} + +TEST_F(TestNormCoord, cpu_case1) +{ + Region region; + init_region_cpu(region, &boxt[0]); + std::vector out_c(r1); + normalize_coord_cpu(&out_c[0], natoms, region); + for(int ii = 0; ii < posi.size(); ++ii){ + EXPECT_LT(fabs(out_c[ii] - posi[ii]), 1e-12); + } +} + +TEST_F(TestNormCoord, cpu_case2) +{ + Region region; + init_region_cpu(region, &boxt[0]); + std::vector out_c(r2); + normalize_coord_cpu(&out_c[0], natoms, region); + for(int ii = 0; ii < posi.size(); ++ii){ + EXPECT_LT(fabs(out_c[ii] - posi[ii]), 1e-12); + } +} + + +typedef std::pair,std::vector> atom; + +static void +sort_atoms( + std::vector & coord, + std::vector & atype, + std::vector & mapping, + const std::vector & icoord, + const std::vector & iatype, + const std::vector & imapping, + const int start, + const int end + ) +{ + int natoms = end - start; + std::vector atoms(natoms); + for(int ii = start; ii < end; ++ii){ + atom tmp_atom; + tmp_atom.first.resize(3); + for(int dd = 0; dd < 3; ++dd){ + tmp_atom.first[dd] = icoord[ii*3+dd]; + } + tmp_atom.second.resize(2); + tmp_atom.second[0] = iatype[ii]; + tmp_atom.second[1] = imapping[ii]; + atoms[ii-start] = tmp_atom; + } + std::sort(atoms.begin(), atoms.end()); + coord = icoord; + atype = iatype; + mapping = imapping; + for(int ii = start; ii < end; ++ii){ + for(int dd = 0; dd < 3; ++dd){ + coord[ii*3+dd] = atoms[ii-start].first[dd]; + } + atype[ii] = atoms[ii-start].second[0]; + mapping[ii] = atoms[ii-start].second[1]; + } +} + +class TestCopyCoord : public ::testing::Test +{ +protected: + std::vector posi = { + 12.83, 2.56, 2.18, + 12.09, 2.87, 2.74, + 00.25, 3.32, 1.68, + 3.36, 3.00, 1.81, + 3.51, 2.51, 2.60, + 4.27, 3.22, 1.56 + }; + std::vector atype = {0, 1, 1, 0, 1, 1}; + std::vector _expected_posi_cpy = { + 12.83, 2.56, 2.18, 12.09, 2.87, 2.74, 0.25, 3.32, 1.68, 3.36, 3.00, 1.81, 3.51, 2.51, 2.60, 4.27, 3.22, 1.56, -0.17, 2.56, 2.18, -0.91, 2.87, 2.74, -0.17, 2.56, 15.18, -0.91, 2.87, 15.74, -0.17, 15.56, 2.18, -0.91, 15.87, 2.74, -0.17, 15.56, 15.18, -0.91, 15.87, 15.74, 0.25, 3.32, 14.68, 3.36, 3.00, 14.81, 3.51, 2.51, 15.60, 4.27, 3.22, 14.56, 0.25, 16.32, 1.68, 3.36, 16.00, 1.81, 3.51, 15.51, 2.60, 4.27, 16.22, 1.56, 0.25, 16.32, 14.68, 3.36, 16.00, 14.81, 3.51, 15.51, 15.60, 4.27, 16.22, 14.56, 12.83, 2.56, 15.18, 12.09, 2.87, 15.74, 12.83, 15.56, 2.18, 12.09, 15.87, 2.74, 12.83, 15.56, 15.18, 12.09, 15.87, 15.74, 13.25, 3.32, 1.68, 16.36, 3.00, 1.81, 16.51, 2.51, 2.60, 17.27, 3.22, 1.56, 13.25, 3.32, 14.68, 16.36, 3.00, 14.81, 16.51, 2.51, 15.60, 17.27, 3.22, 14.56, 13.25, 16.32, 1.68, 16.36, 16.00, 1.81, 16.51, 15.51, 2.60, 17.27, 16.22, 1.56, 13.25, 16.32, 14.68, 16.36, 16.00, 14.81, 16.51, 15.51, 15.60, 17.27, 16.22, 14.56, + }; + std::vector expected_posi_cpy; + std::vector _expected_atype_cpy = { + 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, + }; + std::vector expected_atype_cpy; + std::vector _expected_mapping = { + 0, 1, 2, 3, 4, 5, 0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 0, 1, 0, 1, 0, 1, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, + }; + std::vector expected_mapping; + int ntypes = 2; + int nloc, expected_nall; + double rc = 6; + std::vector boxt = {13., 0., 0., 0., 13., 0., 0., 0., 13.}; + std::vector ncell, ngcell; + + void SetUp() override { + nloc = posi.size() / 3; + expected_nall = _expected_posi_cpy.size() / 3; + EXPECT_EQ(expected_nall, _expected_atype_cpy.size()); + EXPECT_EQ(expected_nall, _expected_mapping.size()); + // sort the atoms between nloc and nall, to remove the uncertainty of the ordering + sort_atoms( + expected_posi_cpy, + expected_atype_cpy, + expected_mapping, + _expected_posi_cpy, + _expected_atype_cpy, + _expected_mapping, + nloc, + expected_nall); + } +}; + + + + +TEST_F(TestCopyCoord, cpu) +{ + int mem_size = 1000; + std::vector out_c(mem_size * 3); + std::vector out_t(mem_size); + std::vector mapping(mem_size); + int nall; + Region region; + init_region_cpu(region, &boxt[0]); + + int ret = copy_coord_cpu( + &out_c[0], + &out_t[0], + &mapping[0], + &nall, + &posi[0], + &atype[0], + nloc, + mem_size, + rc, + region); + EXPECT_EQ(ret, 0); + EXPECT_EQ(nall, expected_nall); + // std::cout << "---------------------" + // << nloc << " " + // << nall << std::endl; + + out_c.resize(nall*3); + out_t.resize(nall); + mapping.resize(nall); + + std::vector out_c_1(mem_size * 3); + std::vector out_t_1(mem_size); + std::vector mapping_1(mem_size); + sort_atoms(out_c_1, out_t_1, mapping_1, out_c, out_t, mapping, nloc, nall); + for(int ii = 0; ii < expected_nall; ++ii){ + for(int dd = 0; dd < 3; ++dd){ + EXPECT_LT(fabs(out_c_1[ii*3+dd] - expected_posi_cpy[ii*3+dd]), 1e-12); + } + EXPECT_EQ(out_t_1[ii], expected_atype_cpy[ii]); + EXPECT_EQ(mapping_1[ii], expected_mapping[ii]); + } +} + +TEST_F(TestCopyCoord, cpu_lessmem) +{ + int mem_size = 40; + std::vector out_c(mem_size * 3); + std::vector out_t(mem_size); + std::vector mapping(mem_size); + int nall; + Region region; + init_region_cpu(region, &boxt[0]); + + int ret = copy_coord_cpu( + &out_c[0], + &out_t[0], + &mapping[0], + &nall, + &posi[0], + &atype[0], + nloc, + mem_size, + rc, + region); + EXPECT_EQ(ret, 1); + // EXPECT_EQ(nall, expected_nall); + // std::cout << "---------------------" + // << nloc << " " + // << nall << std::endl; +} diff --git a/source/lib/tests/test_env_mat_a.cc b/source/lib/tests/test_env_mat_a.cc index ffdfb73eba..48f5794f57 100644 --- a/source/lib/tests/test_env_mat_a.cc +++ b/source/lib/tests/test_env_mat_a.cc @@ -124,7 +124,7 @@ TEST_F(TestEnvMatA, orig_cpy) std::vector env, env_deriv, rij_a; bool pbc = false; for(int ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret = format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret, -1); env_mat_a(env, env_deriv, rij_a, posi_cpy, ntypes, atype_cpy, region, pbc, ii, fmt_nlist_a, sec_a, rc_smth, rc); EXPECT_EQ(env.size(), sec_a[2]*4); @@ -148,7 +148,7 @@ TEST_F(TestEnvMatA, orig_pbc) std::vector env, env_deriv, rij_a; bool pbc = true; for(int ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_fill_a(fmt_nlist_a, fmt_nlist_r, posi, ntypes, atype, region, pbc, ii, nlist_a[ii], nlist_r[ii], rc, sec_a, sec_r); + int ret = format_nlist_i_fill_a(fmt_nlist_a, fmt_nlist_r, posi, ntypes, atype, region, pbc, ii, nlist_a[ii], nlist_r[ii], rc, sec_a, sec_r); EXPECT_EQ(ret, -1); env_mat_a(env, env_deriv, rij_a, posi, ntypes, atype, region, pbc, ii, fmt_nlist_a, sec_a, rc_smth, rc); EXPECT_EQ(env.size(), sec_a[2]*4); @@ -170,10 +170,10 @@ TEST_F(TestEnvMatA, orig_cpy_equal_pbc) std::vector env_0, env_deriv_0, rij_a_0; std::vector env_1, env_deriv_1, rij_a_1; for(int ii = 0; ii < nloc; ++ii){ - int ret_0 = format_nlist_cpu(fmt_nlist_a_0, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret_0 = format_nlist_i_cpu(fmt_nlist_a_0, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret_0, -1); env_mat_a(env_0, env_deriv_0, rij_a_0, posi_cpy, ntypes, atype_cpy, region, false, ii, fmt_nlist_a_0, sec_a, rc_smth, rc); - int ret_1 = format_nlist_fill_a(fmt_nlist_a_1, fmt_nlist_r_1, posi, ntypes, atype, region, true, ii, nlist_a[ii], nlist_r[ii], rc, sec_a, sec_r); + int ret_1 = format_nlist_i_fill_a(fmt_nlist_a_1, fmt_nlist_r_1, posi, ntypes, atype, region, true, ii, nlist_a[ii], nlist_r[ii], rc, sec_a, sec_r); EXPECT_EQ(ret_1, -1); env_mat_a(env_1, env_deriv_1, rij_a_1, posi, ntypes, atype, region, true, ii, fmt_nlist_a_1, sec_a, rc_smth, rc); EXPECT_EQ(env_0.size(), env_1.size()); @@ -199,7 +199,7 @@ TEST_F(TestEnvMatA, orig_cpy_num_deriv) bool pbc = false; double hh = 1e-5; for(int ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret = format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret, -1); env_mat_a(env, env_deriv, rij_a, posi_cpy, ntypes, atype_cpy, region, pbc, ii, fmt_nlist_a, sec_a, rc_smth, rc); EXPECT_EQ(env.size(), sec_a[2]*4); @@ -237,9 +237,9 @@ TEST_F(TestEnvMatA, cpu) std::vector env, env_deriv, rij_a; bool pbc = false; for(int ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret = format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret, -1); - env_mat_a_cpu(env, env_deriv, rij_a, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(env, env_deriv, rij_a, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); EXPECT_EQ(env.size(), sec_a[2]*4); EXPECT_EQ(env.size(), env_deriv.size()/3); EXPECT_EQ(rij_a.size(), sec_a[2]*3); @@ -258,14 +258,14 @@ TEST_F(TestEnvMatA, cpu_equal_orig_cpy) std::vector env_0, env_deriv_0, rij_a_0; std::vector env_1, env_deriv_1, rij_a_1; for(int ii = 0; ii < nloc; ++ii){ - int ret_0 = format_nlist_cpu(fmt_nlist_a_0, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret_0 = format_nlist_i_cpu(fmt_nlist_a_0, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret_0, -1); env_mat_a(env_0, env_deriv_0, rij_a_0, posi_cpy, ntypes, atype_cpy, region, false, ii, fmt_nlist_a_0, sec_a, rc_smth, rc); - int ret_1 = format_nlist_cpu(fmt_nlist_a_1, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret_1 = format_nlist_i_cpu(fmt_nlist_a_1, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret_1, -1); - env_mat_a_cpu(env_1, env_deriv_1, rij_a_1, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a_1, sec_a, rc_smth, rc); + env_mat_a_cpu(env_1, env_deriv_1, rij_a_1, posi_cpy, atype_cpy, ii, fmt_nlist_a_1, sec_a, rc_smth, rc); EXPECT_EQ(env_0.size(), env_1.size()); EXPECT_EQ(env_deriv_0.size(), env_deriv_1.size()); @@ -289,9 +289,9 @@ TEST_F(TestEnvMatA, cpu_num_deriv) bool pbc = false; double hh = 1e-5; for(int ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret = format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret, -1); - env_mat_a_cpu(env, env_deriv, rij_a, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(env, env_deriv, rij_a, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); EXPECT_EQ(env.size(), sec_a[2]*4); EXPECT_EQ(env.size(), env_deriv.size()/3); EXPECT_EQ(rij_a.size(), sec_a[2]*3); @@ -327,7 +327,7 @@ TEST_F(TestEnvMatAShortSel, orig_cpy) std::vector env, env_deriv, rij_a; bool pbc = false; for(int ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret = format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret, 1); env_mat_a(env, env_deriv, rij_a, posi_cpy, ntypes, atype_cpy, region, pbc, ii, fmt_nlist_a, sec_a, rc_smth, rc); EXPECT_EQ(env.size(), sec_a[2]*4); @@ -351,7 +351,7 @@ TEST_F(TestEnvMatAShortSel, orig_pbc) std::vector env, env_deriv, rij_a; bool pbc = true; for(int ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_fill_a(fmt_nlist_a, fmt_nlist_r, posi, ntypes, atype, region, pbc, ii, nlist_a[ii], nlist_r[ii], rc, sec_a, sec_r); + int ret = format_nlist_i_fill_a(fmt_nlist_a, fmt_nlist_r, posi, ntypes, atype, region, pbc, ii, nlist_a[ii], nlist_r[ii], rc, sec_a, sec_r); EXPECT_EQ(ret, 1); env_mat_a(env, env_deriv, rij_a, posi, ntypes, atype, region, pbc, ii, fmt_nlist_a, sec_a, rc_smth, rc); EXPECT_EQ(env.size(), sec_a[2]*4); @@ -371,9 +371,9 @@ TEST_F(TestEnvMatAShortSel, cpu) std::vector env, env_deriv, rij_a; bool pbc = false; for(int ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret = format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret, 1); - env_mat_a_cpu(env, env_deriv, rij_a, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(env, env_deriv, rij_a, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); EXPECT_EQ(env.size(), sec_a[2]*4); EXPECT_EQ(env.size(), env_deriv.size()/3); EXPECT_EQ(rij_a.size(), sec_a[2]*3); @@ -425,7 +425,6 @@ TEST_F(TestEnvMatA, prod_cpu) &std[0], nloc, nall, - ntypes, rc, rc_smth, sec_a); @@ -481,7 +480,6 @@ TEST_F(TestEnvMatA, prod_cpu_equal_cpu) &std[0], nloc, nall, - ntypes, rc, rc_smth, sec_a); @@ -489,9 +487,9 @@ TEST_F(TestEnvMatA, prod_cpu_equal_cpu) std::vector fmt_nlist_a_1, fmt_nlist_r_1; std::vector env_1, env_deriv_1, rij_a_1; for(int ii = 0; ii < nloc; ++ii){ - int ret_1 = format_nlist_cpu(fmt_nlist_a_1, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret_1 = format_nlist_i_cpu(fmt_nlist_a_1, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret_1, -1); - env_mat_a_cpu(env_1, env_deriv_1, rij_a_1, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a_1, sec_a, rc_smth, rc); + env_mat_a_cpu(env_1, env_deriv_1, rij_a_1, posi_cpy, atype_cpy, ii, fmt_nlist_a_1, sec_a, rc_smth, rc); EXPECT_EQ(env_1.size(), nnei * 4); EXPECT_EQ(env_deriv_1.size(), nnei * 4 * 3); EXPECT_EQ(rij_a_1.size(), nnei * 3); @@ -723,9 +721,9 @@ TEST_F(TestEnvMatA, prod_gpu_nv_equal_cpu) std::vector fmt_nlist_a_1, fmt_nlist_r_1; std::vector env_1, env_deriv_1, rij_a_1; for(int ii = 0; ii < nloc; ++ii){ - int ret_1 = format_nlist_cpu(fmt_nlist_a_1, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret_1 = format_nlist_i_cpu(fmt_nlist_a_1, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret_1, -1); - env_mat_a_cpu(env_1, env_deriv_1, rij_a_1, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a_1, sec_a, rc_smth, rc); + env_mat_a_cpu(env_1, env_deriv_1, rij_a_1, posi_cpy, atype_cpy, ii, fmt_nlist_a_1, sec_a, rc_smth, rc); EXPECT_EQ(env_1.size(), nnei * 4); EXPECT_EQ(env_deriv_1.size(), nnei * 4 * 3); EXPECT_EQ(rij_a_1.size(), nnei * 3); @@ -758,4 +756,4 @@ TEST_F(TestEnvMatA, prod_gpu_nv_equal_cpu) // } // } } -#endif //GOOGLE_CUDA \ No newline at end of file +#endif //GOOGLE_CUDA diff --git a/source/lib/tests/test_env_mat_r.cc b/source/lib/tests/test_env_mat_r.cc index 9f8e5c62bc..56e61fecdb 100644 --- a/source/lib/tests/test_env_mat_r.cc +++ b/source/lib/tests/test_env_mat_r.cc @@ -63,7 +63,7 @@ TEST_F(TestEnvMatR, orig_cpy) std::vector env, env_deriv, rij_a; bool pbc = false; for(int ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret = format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret, -1); env_mat_r(env, env_deriv, rij_a, posi_cpy, ntypes, atype_cpy, region, pbc, ii, fmt_nlist_a, sec_a, rc_smth, rc); EXPECT_EQ(env.size(), sec_a[2]); @@ -84,7 +84,7 @@ TEST_F(TestEnvMatR, orig_pbc) std::vector env, env_deriv, rij_a; bool pbc = true; for(int ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_fill_a(fmt_nlist_a, fmt_nlist_r, posi, ntypes, atype, region, pbc, ii, nlist_a[ii], nlist_r[ii], rc, sec_a, sec_r); + int ret = format_nlist_i_fill_a(fmt_nlist_a, fmt_nlist_r, posi, ntypes, atype, region, pbc, ii, nlist_a[ii], nlist_r[ii], rc, sec_a, sec_r); EXPECT_EQ(ret, -1); env_mat_r(env, env_deriv, rij_a, posi, ntypes, atype, region, pbc, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < sec_a[2]; ++jj){ @@ -101,10 +101,10 @@ TEST_F(TestEnvMatR, orig_cpy_equal_pbc) std::vector env_0, env_deriv_0, rij_a_0; std::vector env_1, env_deriv_1, rij_a_1; for(int ii = 0; ii < nloc; ++ii){ - int ret_0 = format_nlist_cpu(fmt_nlist_a_0, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret_0 = format_nlist_i_cpu(fmt_nlist_a_0, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret_0, -1); env_mat_r(env_0, env_deriv_0, rij_a_0, posi_cpy, ntypes, atype_cpy, region, false, ii, fmt_nlist_a_0, sec_a, rc_smth, rc); - int ret_1 = format_nlist_fill_a(fmt_nlist_a_1, fmt_nlist_r_1, posi, ntypes, atype, region, true, ii, nlist_a[ii], nlist_r[ii], rc, sec_a, sec_r); + int ret_1 = format_nlist_i_fill_a(fmt_nlist_a_1, fmt_nlist_r_1, posi, ntypes, atype, region, true, ii, nlist_a[ii], nlist_r[ii], rc, sec_a, sec_r); EXPECT_EQ(ret_1, -1); env_mat_r(env_1, env_deriv_1, rij_a_1, posi, ntypes, atype, region, true, ii, fmt_nlist_a_1, sec_a, rc_smth, rc); EXPECT_EQ(env_0.size(), env_1.size()); @@ -130,7 +130,7 @@ TEST_F(TestEnvMatR, orig_cpy_num_deriv) bool pbc = false; double hh = 1e-5; for(int ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret = format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret, -1); env_mat_r(env, env_deriv, rij_a, posi_cpy, ntypes, atype_cpy, region, pbc, ii, fmt_nlist_a, sec_a, rc_smth, rc); @@ -163,9 +163,9 @@ TEST_F(TestEnvMatR, cpu) std::vector env, env_deriv, rij_a; bool pbc = false; for(int ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret = format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret, -1); - env_mat_r_cpu(env, env_deriv, rij_a, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_r_cpu(env, env_deriv, rij_a, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < sec_a[2]; ++jj){ EXPECT_LT(fabs(env[jj] - expected_env[ii*sec_a[2] + jj]) , 1e-5); } @@ -179,13 +179,13 @@ TEST_F(TestEnvMatR, cpu_equal_orig_cpy) std::vector env_0, env_deriv_0, rij_a_0; std::vector env_1, env_deriv_1, rij_a_1; for(int ii = 0; ii < nloc; ++ii){ - int ret_0 = format_nlist_cpu(fmt_nlist_a_0, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret_0 = format_nlist_i_cpu(fmt_nlist_a_0, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret_0, -1); env_mat_r(env_0, env_deriv_0, rij_a_0, posi_cpy, ntypes, atype_cpy, region, false, ii, fmt_nlist_a_0, sec_a, rc_smth, rc); - int ret_1 = format_nlist_cpu(fmt_nlist_a_1, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret_1 = format_nlist_i_cpu(fmt_nlist_a_1, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret_1, -1); - env_mat_r_cpu(env_1, env_deriv_1, rij_a_1, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a_1, sec_a, rc_smth, rc); + env_mat_r_cpu(env_1, env_deriv_1, rij_a_1, posi_cpy, atype_cpy, ii, fmt_nlist_a_1, sec_a, rc_smth, rc); EXPECT_EQ(env_0.size(), env_1.size()); EXPECT_EQ(env_deriv_0.size(), env_deriv_1.size()); @@ -209,9 +209,9 @@ TEST_F(TestEnvMatR, cpu_num_deriv) bool pbc = false; double hh = 1e-5; for(int ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret = format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret, -1); - env_mat_r_cpu(env, env_deriv, rij_a, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_r_cpu(env, env_deriv, rij_a, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < sec_a[2]; ++jj){ int j_idx = fmt_nlist_a[jj]; diff --git a/source/lib/tests/test_fmt_nlist.cc b/source/lib/tests/test_fmt_nlist.cc index 87588b635d..a37562a230 100644 --- a/source/lib/tests/test_fmt_nlist.cc +++ b/source/lib/tests/test_fmt_nlist.cc @@ -128,7 +128,7 @@ TEST_F(TestFormatNlist, orig_cpy) bool pbc = false; int ii = 0; for (ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_fill_a(fmt_nlist_a, fmt_nlist_r, posi_cpy, ntypes, atype_cpy, region, pbc, ii, nlist_a[ii], nlist_r[ii], rc, sec_a, sec_r); + int ret = format_nlist_i_fill_a(fmt_nlist_a, fmt_nlist_r, posi_cpy, ntypes, atype_cpy, region, pbc, ii, nlist_a[ii], nlist_r[ii], rc, sec_a, sec_r); EXPECT_EQ(ret, -1); for (int jj = 0; jj < sec_a[2]; ++jj){ @@ -146,7 +146,7 @@ TEST_F(TestFormatNlist, orig_pbc) std::vector fmt_nlist_a_1, fmt_nlist_r_1; for (int ii = 0; ii < nloc; ++ii){ - int ret_1 = format_nlist_fill_a(fmt_nlist_a_1, fmt_nlist_r_1, posi, ntypes, atype, region, true, ii, nlist_a_1[ii], nlist_r_1[ii], rc, sec_a, sec_r); + int ret_1 = format_nlist_i_fill_a(fmt_nlist_a_1, fmt_nlist_r_1, posi, ntypes, atype, region, true, ii, nlist_a_1[ii], nlist_r_1[ii], rc, sec_a, sec_r); EXPECT_EQ(ret_1, -1); for (int jj = 0; jj < sec_a[2]; ++jj){ @@ -167,8 +167,8 @@ TEST_F(TestFormatNlist, orig_cpy_equal_pbc) std::vector fmt_nlist_a_1, fmt_nlist_r_1; for (int ii = 0; ii < nloc; ++ii){ - int ret_0 = format_nlist_fill_a(fmt_nlist_a_0, fmt_nlist_r_0, posi_cpy, ntypes, atype_cpy, region, false, ii, nlist_a_0[ii], nlist_r_0[ii], rc, sec_a, sec_r); - int ret_1 = format_nlist_fill_a(fmt_nlist_a_1, fmt_nlist_r_1, posi, ntypes, atype, region, true, ii, nlist_a_1[ii], nlist_r_1[ii], rc, sec_a, sec_r); + int ret_0 = format_nlist_i_fill_a(fmt_nlist_a_0, fmt_nlist_r_0, posi_cpy, ntypes, atype_cpy, region, false, ii, nlist_a_0[ii], nlist_r_0[ii], rc, sec_a, sec_r); + int ret_1 = format_nlist_i_fill_a(fmt_nlist_a_1, fmt_nlist_r_1, posi, ntypes, atype, region, true, ii, nlist_a_1[ii], nlist_r_1[ii], rc, sec_a, sec_r); EXPECT_EQ(ret_0, -1); EXPECT_EQ(ret_1, -1); @@ -184,7 +184,7 @@ TEST_F(TestFormatNlist, orig_cpy_equal_pbc) } } -TEST_F(TestFormatNlist, cpu_equal_orig) +TEST_F(TestFormatNlist, cpu_i_equal_orig) { std::vector> nlist_a_0, nlist_r_0; build_nlist(nlist_a_0, nlist_r_0, posi_cpy, nloc, rc, rc, nat_stt, ncell, ext_stt, ext_end, region, ncell); @@ -193,8 +193,8 @@ TEST_F(TestFormatNlist, cpu_equal_orig) std::vector fmt_nlist_a_1; for (int ii = 0; ii < nloc; ++ii){ - int ret_0 = format_nlist_fill_a(fmt_nlist_a_0, fmt_nlist_r_0, posi_cpy, ntypes, atype_cpy, region, false, ii, nlist_a_0[ii], nlist_r_0[ii], rc, sec_a, sec_r); - int ret_1 = format_nlist_cpu(fmt_nlist_a_1, posi_cpy, ntypes, atype_cpy, ii, nlist_a_0[ii], rc, sec_a); + int ret_0 = format_nlist_i_fill_a(fmt_nlist_a_0, fmt_nlist_r_0, posi_cpy, ntypes, atype_cpy, region, false, ii, nlist_a_0[ii], nlist_r_0[ii], rc, sec_a, sec_r); + int ret_1 = format_nlist_i_cpu(fmt_nlist_a_1, posi_cpy, atype_cpy, ii, nlist_a_0[ii], rc, sec_a); EXPECT_EQ(ret_0, -1); EXPECT_EQ(ret_1, -1); for (int jj = 0; jj < sec_a[2]; ++jj){ @@ -203,6 +203,36 @@ TEST_F(TestFormatNlist, cpu_equal_orig) } } +TEST_F(TestFormatNlist, cpu) +{ + std::vector> nlist_a_0, nlist_r_0; + build_nlist(nlist_a_0, nlist_r_0, posi_cpy, nloc, rc, rc, nat_stt, ncell, ext_stt, ext_end, region, ncell); + // make a input nlist + int inum = nlist_a_0.size(); + std::vector ilist(inum); + std::vector numneigh(inum); + std::vector firstneigh(inum); + InputNlist in_nlist(inum, &ilist[0], &numneigh[0], &firstneigh[0]); + convert_nlist(in_nlist, nlist_a_0); + // allocate the mem for the result + std::vector nlist(inum * sec_a.back()); + EXPECT_EQ(nlist.size(), expect_nlist_cpy.size()); + // format nlist + format_nlist_cpu( + &nlist[0], + in_nlist, + &posi_cpy[0], + &atype_cpy[0], + nloc, + nall, + rc, + sec_a); + // validate + for(int ii = 0; ii < nlist.size(); ++ii){ + EXPECT_EQ(nlist[ii], expect_nlist_cpy[ii]); + } +} + // orginal implementation. copy ghost TEST_F(TestFormatNlistShortSel, orig_cpy) @@ -214,7 +244,7 @@ TEST_F(TestFormatNlistShortSel, orig_cpy) bool pbc = false; int ii = 0; for (ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_fill_a(fmt_nlist_a, fmt_nlist_r, posi_cpy, ntypes, atype_cpy, region, pbc, ii, nlist_a[ii], nlist_r[ii], rc, sec_a, sec_r); + int ret = format_nlist_i_fill_a(fmt_nlist_a, fmt_nlist_r, posi_cpy, ntypes, atype_cpy, region, pbc, ii, nlist_a[ii], nlist_r[ii], rc, sec_a, sec_r); EXPECT_EQ(ret, 1); for (int jj = 0; jj < sec_a[2]; ++jj){ EXPECT_EQ(fmt_nlist_a[jj], expect_nlist_cpy[ii*sec_a[2]+jj]); @@ -233,7 +263,7 @@ TEST_F(TestFormatNlistShortSel, cpu_equal_orig) std::vector fmt_nlist_a_1; for (int ii = 0; ii < nloc; ++ii){ - int ret_1 = format_nlist_cpu(fmt_nlist_a_1, posi_cpy, ntypes, atype_cpy, ii, nlist_a_0[ii], rc, sec_a); + int ret_1 = format_nlist_i_cpu(fmt_nlist_a_1, posi_cpy, atype_cpy, ii, nlist_a_0[ii], rc, sec_a); EXPECT_EQ(ret_1, 1); for (int jj = 0; jj < sec_a[2]; ++jj){ EXPECT_EQ(fmt_nlist_a_1[jj], expect_nlist_cpy[ii*sec_a[2]+jj]); @@ -241,3 +271,33 @@ TEST_F(TestFormatNlistShortSel, cpu_equal_orig) } } +TEST_F(TestFormatNlistShortSel, cpu) +{ + std::vector> nlist_a_0, nlist_r_0; + build_nlist(nlist_a_0, nlist_r_0, posi_cpy, nloc, rc, rc, nat_stt, ncell, ext_stt, ext_end, region, ncell); + // make a input nlist + int inum = nlist_a_0.size(); + std::vector ilist(inum); + std::vector numneigh(inum); + std::vector firstneigh(inum); + InputNlist in_nlist(inum, &ilist[0], &numneigh[0], &firstneigh[0]); + convert_nlist(in_nlist, nlist_a_0); + // mem + std::vector nlist(inum * sec_a.back()); + EXPECT_EQ(nlist.size(), expect_nlist_cpy.size()); + // format nlist + format_nlist_cpu( + &nlist[0], + in_nlist, + &posi_cpy[0], + &atype_cpy[0], + nloc, + nall, + rc, + sec_a); + // validate + for(int ii = 0; ii < nlist.size(); ++ii){ + EXPECT_EQ(nlist[ii], expect_nlist_cpy[ii]); + } +} + diff --git a/source/lib/tests/test_map_aparam.cc b/source/lib/tests/test_map_aparam.cc index 3bee6d4f63..286f878ffe 100644 --- a/source/lib/tests/test_map_aparam.cc +++ b/source/lib/tests/test_map_aparam.cc @@ -54,7 +54,7 @@ class TestMapAparam : public ::testing::Test nlist.resize(nloc * nnei); for(int ii = 0; ii < nloc; ++ii){ // format nlist and record - format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); for (int jj = 0; jj < nnei; ++jj){ nlist[ii*nnei + jj] = fmt_nlist_a[jj]; } diff --git a/source/lib/tests/test_neighbor_list.cc b/source/lib/tests/test_neighbor_list.cc new file mode 100644 index 0000000000..a0962cecbf --- /dev/null +++ b/source/lib/tests/test_neighbor_list.cc @@ -0,0 +1,118 @@ +#include +#include "fmt_nlist.h" +#include "neighbor_list.h" + +class TestNeighborList : public ::testing::Test +{ +protected: + std::vector posi = { + 12.83, 2.56, 2.18, + 12.09, 2.87, 2.74, + 00.25, 3.32, 1.68, + 3.36, 3.00, 1.81, + 3.51, 2.51, 2.60, + 4.27, 3.22, 1.56 + }; + std::vector atype = {0, 1, 1, 0, 1, 1}; + std::vector posi_cpy; + std::vector atype_cpy; + int ntypes = 2; + int nloc, nall; + double rc = 6; + std::vector boxt = {13., 0., 0., 0., 13., 0., 0., 0., 13.}; + std::vector mapping, ncell, ngcell; + std::vector> expect_nlist_cpy = { + std::vector({33, 1 , 32, 34, 35,}), + std::vector({0 , 33, 32, 34, 35,}), + std::vector({6 , 3 , 7 , 4 , 5 ,}), + std::vector({6 , 4 , 5 , 2 , 7 ,}), + std::vector({3 , 6 , 5 , 2 , 7 ,}), + std::vector({3 , 6 , 4 , 2 , 7 ,}), + }; + + void SetUp() override { + SimulationRegion region; + region.reinitBox(&boxt[0]); + copy_coord(posi_cpy, atype_cpy, mapping, ncell, ngcell, posi, atype, rc, region); + nloc = posi.size() / 3; + nall = posi_cpy.size() / 3; + EXPECT_EQ(expect_nlist_cpy.size(), nloc); + for(int ii = 0; ii < nloc; ++ii){ + std::sort(expect_nlist_cpy[ii].begin(), expect_nlist_cpy[ii].end()); + } + } +}; + + +TEST_F(TestNeighborList, cpu) +{ + int mem_size = 10; + int * ilist = new int[nloc]; + int * numneigh = new int[nloc]; + int ** firstneigh = new int*[nloc]; + for(int ii = 0; ii < nloc; ++ii){ + firstneigh[ii] = new int[mem_size]; + } + + InputNlist nlist(nloc, ilist, numneigh, firstneigh); + int max_list_size; + int ret = build_nlist_cpu( + nlist, + &max_list_size, + &posi_cpy[0], + nloc, + nall, + mem_size, + rc); + EXPECT_EQ(ret, 0); + EXPECT_EQ(nlist.inum, nloc); + EXPECT_EQ(max_list_size, 5); + for(int ii = 0; ii < nloc; ++ii){ + EXPECT_EQ(nlist.ilist[ii], ii); + EXPECT_EQ(nlist.numneigh[ii], expect_nlist_cpy[ii].size()); + std::sort(nlist.firstneigh[ii], nlist.firstneigh[ii] + nlist.numneigh[ii]); + for(int jj = 0; jj < nlist.numneigh[ii]; ++jj){ + EXPECT_EQ(nlist.firstneigh[ii][jj], expect_nlist_cpy[ii][jj]); + } + } + + delete[] ilist; + delete[] numneigh; + for(int ii = 0; ii < nloc; ++ii){ + delete[] firstneigh[ii]; + } + delete[] firstneigh; +} + +TEST_F(TestNeighborList, cpu_lessmem) +{ + int mem_size = 2; + int * ilist = new int[nloc]; + int * numneigh = new int[nloc]; + int ** firstneigh = new int*[nloc]; + for(int ii = 0; ii < nloc; ++ii){ + firstneigh[ii] = new int[mem_size]; + } + + InputNlist nlist(nloc, ilist, numneigh, firstneigh); + int max_list_size; + int ret = build_nlist_cpu( + nlist, + &max_list_size, + &posi_cpy[0], + nloc, + nall, + mem_size, + rc); + EXPECT_EQ(ret, 1); + EXPECT_EQ(nlist.inum, nloc); + EXPECT_EQ(max_list_size, 5); + + delete[] ilist; + delete[] numneigh; + for(int ii = 0; ii < nloc; ++ii){ + delete[] firstneigh[ii]; + } + delete[] firstneigh; +} + diff --git a/source/lib/tests/test_pair_tab.cc b/source/lib/tests/test_pair_tab.cc index 97a87120e3..867956e7ae 100644 --- a/source/lib/tests/test_pair_tab.cc +++ b/source/lib/tests/test_pair_tab.cc @@ -92,13 +92,13 @@ class TestPairTab : public ::testing::Test rij.resize(nloc * nnei * 3); for(int ii = 0; ii < nloc; ++ii){ // format nlist and record - format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); for (int jj = 0; jj < nnei; ++jj){ nlist[ii*nnei + jj] = fmt_nlist_a[jj]; } std::vector t_env, t_env_deriv, t_rij; // compute env_mat and its deriv, record - env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < ndescrpt; ++jj){ env[ii*ndescrpt+jj] = t_env[jj]; for (int dd = 0; dd < 3; ++dd){ @@ -250,8 +250,8 @@ TEST_F(TestPairTab, cpu_f_num_deriv) std::vector nlist_0(nloc * nnei), nlist_1(nloc * nnei); std::vector avg(ntypes * ndescrpt, 0); std::vector std(ntypes * ndescrpt, 1); - prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_0[0], &nlist_0[0], &posi_cpy_0[0], &atype_cpy_0[0], &ilist_0[0], &jrange_0[0], &jlist_0[0], max_nnei_0, &avg[0], &std[0], nloc, nall, ntypes, rc, rc_smth, sec_a); - prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_1[0], &nlist_1[0], &posi_cpy_1[0], &atype_cpy_1[0], &ilist_1[0], &jrange_1[0], &jlist_1[0], max_nnei_1, &avg[0], &std[0], nloc, nall, ntypes, rc, rc_smth, sec_a); + prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_0[0], &nlist_0[0], &posi_cpy_0[0], &atype_cpy_0[0], &ilist_0[0], &jrange_0[0], &jlist_0[0], max_nnei_0, &avg[0], &std[0], nloc, nall, rc, rc_smth, sec_a); + prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_1[0], &nlist_1[0], &posi_cpy_1[0], &atype_cpy_1[0], &ilist_1[0], &jrange_1[0], &jlist_1[0], max_nnei_1, &avg[0], &std[0], nloc, nall, rc, rc_smth, sec_a); std::vector energy_0(nloc), energy_1(nloc); std::vector t_force(nall * 3), t_virial(nall * 9); pair_tab_cpu( @@ -354,8 +354,8 @@ TEST_F(TestPairTab, cpu_f_num_deriv_scale) std::vector nlist_0(nloc * nnei), nlist_1(nloc * nnei); std::vector avg(ntypes * ndescrpt, 0); std::vector std(ntypes * ndescrpt, 1); - prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_0[0], &nlist_0[0], &posi_cpy_0[0], &atype_cpy_0[0], &ilist_0[0], &jrange_0[0], &jlist_0[0], max_nnei_0, &avg[0], &std[0], nloc, nall, ntypes, rc, rc_smth, sec_a); - prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_1[0], &nlist_1[0], &posi_cpy_1[0], &atype_cpy_1[0], &ilist_1[0], &jrange_1[0], &jlist_1[0], max_nnei_1, &avg[0], &std[0], nloc, nall, ntypes, rc, rc_smth, sec_a); + prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_0[0], &nlist_0[0], &posi_cpy_0[0], &atype_cpy_0[0], &ilist_0[0], &jrange_0[0], &jlist_0[0], max_nnei_0, &avg[0], &std[0], nloc, nall, rc, rc_smth, sec_a); + prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_1[0], &nlist_1[0], &posi_cpy_1[0], &atype_cpy_1[0], &ilist_1[0], &jrange_1[0], &jlist_1[0], max_nnei_1, &avg[0], &std[0], nloc, nall, rc, rc_smth, sec_a); std::vector energy_0(nloc), energy_1(nloc); std::vector t_force(nall * 3), t_virial(nall * 9); pair_tab_cpu( @@ -471,8 +471,8 @@ TEST_F(TestPairTab, cpu_v_num_deriv) std::vector nlist_0(nloc * nnei), nlist_1(nloc * nnei); std::vector avg(ntypes * ndescrpt, 0); std::vector std(ntypes * ndescrpt, 1); - prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_0[0], &nlist_0[0], &posi_cpy_0[0], &atype_cpy_0[0], &ilist_0[0], &jrange_0[0], &jlist_0[0], max_nnei_0, &avg[0], &std[0], nloc, nall, ntypes, rc, rc_smth, sec_a); - prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_1[0], &nlist_1[0], &posi_cpy_1[0], &atype_cpy_1[0], &ilist_1[0], &jrange_1[0], &jlist_1[0], max_nnei_1, &avg[0], &std[0], nloc, nall, ntypes, rc, rc_smth, sec_a); + prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_0[0], &nlist_0[0], &posi_cpy_0[0], &atype_cpy_0[0], &ilist_0[0], &jrange_0[0], &jlist_0[0], max_nnei_0, &avg[0], &std[0], nloc, nall, rc, rc_smth, sec_a); + prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_1[0], &nlist_1[0], &posi_cpy_1[0], &atype_cpy_1[0], &ilist_1[0], &jrange_1[0], &jlist_1[0], max_nnei_1, &avg[0], &std[0], nloc, nall, rc, rc_smth, sec_a); std::vector energy_0(nloc), energy_1(nloc); std::vector t_force(nall * 3), t_virial(nall * 9); pair_tab_cpu( @@ -599,8 +599,8 @@ TEST_F(TestPairTab, cpu_v_num_deriv_scale) std::vector nlist_0(nloc * nnei), nlist_1(nloc * nnei); std::vector avg(ntypes * ndescrpt, 0); std::vector std(ntypes * ndescrpt, 1); - prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_0[0], &nlist_0[0], &posi_cpy_0[0], &atype_cpy_0[0], &ilist_0[0], &jrange_0[0], &jlist_0[0], max_nnei_0, &avg[0], &std[0], nloc, nall, ntypes, rc, rc_smth, sec_a); - prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_1[0], &nlist_1[0], &posi_cpy_1[0], &atype_cpy_1[0], &ilist_1[0], &jrange_1[0], &jlist_1[0], max_nnei_1, &avg[0], &std[0], nloc, nall, ntypes, rc, rc_smth, sec_a); + prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_0[0], &nlist_0[0], &posi_cpy_0[0], &atype_cpy_0[0], &ilist_0[0], &jrange_0[0], &jlist_0[0], max_nnei_0, &avg[0], &std[0], nloc, nall, rc, rc_smth, sec_a); + prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_1[0], &nlist_1[0], &posi_cpy_1[0], &atype_cpy_1[0], &ilist_1[0], &jrange_1[0], &jlist_1[0], max_nnei_1, &avg[0], &std[0], nloc, nall, rc, rc_smth, sec_a); std::vector energy_0(nloc), energy_1(nloc); std::vector t_force(nall * 3), t_virial(nall * 9); pair_tab_cpu( @@ -727,8 +727,8 @@ TEST_F(TestPairTabTriBox, cpu_v_num_deriv) std::vector nlist_0(nloc * nnei), nlist_1(nloc * nnei); std::vector avg(ntypes * ndescrpt, 0); std::vector std(ntypes * ndescrpt, 1); - prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_0[0], &nlist_0[0], &posi_cpy_0[0], &atype_cpy_0[0], &ilist_0[0], &jrange_0[0], &jlist_0[0], max_nnei_0, &avg[0], &std[0], nloc, nall, ntypes, rc, rc_smth, sec_a); - prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_1[0], &nlist_1[0], &posi_cpy_1[0], &atype_cpy_1[0], &ilist_1[0], &jrange_1[0], &jlist_1[0], max_nnei_1, &avg[0], &std[0], nloc, nall, ntypes, rc, rc_smth, sec_a); + prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_0[0], &nlist_0[0], &posi_cpy_0[0], &atype_cpy_0[0], &ilist_0[0], &jrange_0[0], &jlist_0[0], max_nnei_0, &avg[0], &std[0], nloc, nall, rc, rc_smth, sec_a); + prod_env_mat_a_cpu(&t_em[0], &t_em_deriv[0], &rij_1[0], &nlist_1[0], &posi_cpy_1[0], &atype_cpy_1[0], &ilist_1[0], &jrange_1[0], &jlist_1[0], max_nnei_1, &avg[0], &std[0], nloc, nall, rc, rc_smth, sec_a); std::vector energy_0(nloc), energy_1(nloc); std::vector t_force(nall * 3), t_virial(nall * 9); pair_tab_cpu( diff --git a/source/lib/tests/test_prod_force_a.cc b/source/lib/tests/test_prod_force_a.cc index 93766e1b78..c15d5f67c5 100644 --- a/source/lib/tests/test_prod_force_a.cc +++ b/source/lib/tests/test_prod_force_a.cc @@ -58,13 +58,13 @@ class TestProdForceA : public ::testing::Test rij_a.resize(nloc * nnei * 3); for(int ii = 0; ii < nloc; ++ii){ // format nlist and record - format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); for (int jj = 0; jj < nnei; ++jj){ nlist[ii*nnei + jj] = fmt_nlist_a[jj]; } std::vector t_env, t_env_deriv, t_rij_a; // compute env_mat and its deriv, record - env_mat_a_cpu(t_env, t_env_deriv, t_rij_a, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(t_env, t_env_deriv, t_rij_a, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < ndescrpt; ++jj){ env[ii*ndescrpt+jj] = t_env[jj]; for (int dd = 0; dd < 3; ++dd){ diff --git a/source/lib/tests/test_prod_force_grad_a.cc b/source/lib/tests/test_prod_force_grad_a.cc index ec7afc5d86..b52c1c951e 100644 --- a/source/lib/tests/test_prod_force_grad_a.cc +++ b/source/lib/tests/test_prod_force_grad_a.cc @@ -58,13 +58,13 @@ class TestProdForceGradA : public ::testing::Test rij_a.resize(nloc * nnei * 3); for(int ii = 0; ii < nloc; ++ii){ // format nlist and record - format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); for (int jj = 0; jj < nnei; ++jj){ nlist[ii*nnei + jj] = fmt_nlist_a[jj]; } std::vector t_env, t_env_deriv, t_rij_a; // compute env_mat and its deriv, record - env_mat_a_cpu(t_env, t_env_deriv, t_rij_a, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(t_env, t_env_deriv, t_rij_a, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < ndescrpt; ++jj){ env[ii*ndescrpt+jj] = t_env[jj]; for (int dd = 0; dd < 3; ++dd){ diff --git a/source/lib/tests/test_prod_force_grad_r.cc b/source/lib/tests/test_prod_force_grad_r.cc index 80a5978c0c..c32ce150e8 100644 --- a/source/lib/tests/test_prod_force_grad_r.cc +++ b/source/lib/tests/test_prod_force_grad_r.cc @@ -58,13 +58,13 @@ class TestProdForceGradR : public ::testing::Test rij_a.resize(nloc * nnei * 3); for(int ii = 0; ii < nloc; ++ii){ // format nlist and record - format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); for (int jj = 0; jj < nnei; ++jj){ nlist[ii*nnei + jj] = fmt_nlist_a[jj]; } std::vector t_env, t_env_deriv, t_rij_a; // compute env_mat and its deriv, record - env_mat_a_cpu(t_env, t_env_deriv, t_rij_a, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(t_env, t_env_deriv, t_rij_a, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < ndescrpt; ++jj){ env[ii*ndescrpt+jj] = t_env[jj]; for (int dd = 0; dd < 3; ++dd){ diff --git a/source/lib/tests/test_prod_force_r.cc b/source/lib/tests/test_prod_force_r.cc index 93247b2d86..fac10764ea 100644 --- a/source/lib/tests/test_prod_force_r.cc +++ b/source/lib/tests/test_prod_force_r.cc @@ -58,13 +58,13 @@ class TestProdForceR : public ::testing::Test rij_a.resize(nloc * nnei * 3); for(int ii = 0; ii < nloc; ++ii){ // format nlist and record - format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); for (int jj = 0; jj < nnei; ++jj){ nlist[ii*nnei + jj] = fmt_nlist_a[jj]; } std::vector t_env, t_env_deriv, t_rij_a; // compute env_mat and its deriv, record - env_mat_r_cpu(t_env, t_env_deriv, t_rij_a, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_r_cpu(t_env, t_env_deriv, t_rij_a, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < ndescrpt; ++jj){ env[ii*ndescrpt+jj] = t_env[jj]; for (int dd = 0; dd < 3; ++dd){ diff --git a/source/lib/tests/test_prod_virial_a.cc b/source/lib/tests/test_prod_virial_a.cc index a8fb5fb914..7692dc813e 100644 --- a/source/lib/tests/test_prod_virial_a.cc +++ b/source/lib/tests/test_prod_virial_a.cc @@ -61,13 +61,13 @@ class TestProdVirialA : public ::testing::Test rij.resize(nloc * nnei * 3); for(int ii = 0; ii < nloc; ++ii){ // format nlist and record - format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); for (int jj = 0; jj < nnei; ++jj){ nlist[ii*nnei + jj] = fmt_nlist_a[jj]; } std::vector t_env, t_env_deriv, t_rij; // compute env_mat and its deriv, record - env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < ndescrpt; ++jj){ env[ii*ndescrpt+jj] = t_env[jj]; for (int dd = 0; dd < 3; ++dd){ diff --git a/source/lib/tests/test_prod_virial_grad_a.cc b/source/lib/tests/test_prod_virial_grad_a.cc index 75475fc2a6..cba31a10a8 100644 --- a/source/lib/tests/test_prod_virial_grad_a.cc +++ b/source/lib/tests/test_prod_virial_grad_a.cc @@ -58,13 +58,13 @@ class TestProdVirialGradA : public ::testing::Test rij.resize(nloc * nnei * 3); for(int ii = 0; ii < nloc; ++ii){ // format nlist and record - format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); for (int jj = 0; jj < nnei; ++jj){ nlist[ii*nnei + jj] = fmt_nlist_a[jj]; } std::vector t_env, t_env_deriv, t_rij; // compute env_mat and its deriv, record - env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < ndescrpt; ++jj){ env[ii*ndescrpt+jj] = t_env[jj]; for (int dd = 0; dd < 3; ++dd){ diff --git a/source/lib/tests/test_prod_virial_grad_r.cc b/source/lib/tests/test_prod_virial_grad_r.cc index 5951b634d8..45e6944590 100644 --- a/source/lib/tests/test_prod_virial_grad_r.cc +++ b/source/lib/tests/test_prod_virial_grad_r.cc @@ -58,13 +58,13 @@ class TestProdVirialGradR : public ::testing::Test rij.resize(nloc * nnei * 3); for(int ii = 0; ii < nloc; ++ii){ // format nlist and record - format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); for (int jj = 0; jj < nnei; ++jj){ nlist[ii*nnei + jj] = fmt_nlist_a[jj]; } std::vector t_env, t_env_deriv, t_rij; // compute env_mat and its deriv, record - env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < ndescrpt; ++jj){ env[ii*ndescrpt+jj] = t_env[jj]; for (int dd = 0; dd < 3; ++dd){ diff --git a/source/lib/tests/test_prod_virial_r.cc b/source/lib/tests/test_prod_virial_r.cc index 359eda8345..645130f4a9 100644 --- a/source/lib/tests/test_prod_virial_r.cc +++ b/source/lib/tests/test_prod_virial_r.cc @@ -61,13 +61,13 @@ class TestProdVirialR : public ::testing::Test rij.resize(nloc * nnei * 3); for(int ii = 0; ii < nloc; ++ii){ // format nlist and record - format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); for (int jj = 0; jj < nnei; ++jj){ nlist[ii*nnei + jj] = fmt_nlist_a[jj]; } std::vector t_env, t_env_deriv, t_rij; // compute env_mat and its deriv, record - env_mat_r_cpu(t_env, t_env_deriv, t_rij, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_r_cpu(t_env, t_env_deriv, t_rij, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < ndescrpt; ++jj){ env[ii*ndescrpt+jj] = t_env[jj]; for (int dd = 0; dd < 3; ++dd){ diff --git a/source/lib/tests/test_simulation_region.cc b/source/lib/tests/test_simulation_region.cc index 0e55d9a13c..90424dfd89 100644 --- a/source/lib/tests/test_simulation_region.cc +++ b/source/lib/tests/test_simulation_region.cc @@ -1,8 +1,74 @@ - #include #include +#include +#include "region.h" #include "SimulationRegion.h" +class TestRegion : public ::testing::Test +{ +protected: + std::vector ref_boxt = { + 3.27785716, 0.09190842, 0.14751448, 0.02331264, 4.36482777, -0.2999871 , -0.47510999, -0.38123489, 5.33561809 + }; + // rec_boxt = boxt^{-T} + std::vector ref_rec_boxt = { + 3.0385229041853185e-01, 2.3783430948044884e-04, 2.7073513689027690e-02, -7.1670232142159460e-03, 2.3022911797728179e-01, 1.5811897837543720e-02, -8.8035961973365381e-03, 1.2937710358702505e-02, 1.8756020637229892e-01 + }; + std::vector ref_rp = { + 1.5, 2.5, 3.5 + }; + std::vector ref_ri = { + 0.5511303193130958, 0.6201639025532836, 0.6755996039037975, + }; +}; + +TEST_F(TestRegion, orig) +{ + SimulationRegion region; + region.reinitBox(&ref_boxt[0]); + const double * rec_boxt = region.getRecBoxTensor(); + for(int ii = 0; ii < 9; ++ii){ + EXPECT_LT(fabs(rec_boxt[ii] - ref_rec_boxt[ii]), 1e-10); + } + double ri[3]; + region.phys2Inter(ri, &ref_rp[0]); + for(int ii = 0; ii < 3; ++ii){ + EXPECT_LT(fabs(ri[ii] - ref_ri[ii]), 1e-10); + } +} + +TEST_F(TestRegion, cpu) +{ + // check rec_box + Region region; + init_region_cpu(region, &ref_boxt[0]); + for(int ii = 0; ii < 9; ++ii){ + EXPECT_LT(fabs(region.rec_boxt[ii] - ref_rec_boxt[ii]), 1e-10); + } + // check conversion between phys and inter coords. + double ri[3]; + convert_to_inter_cpu(ri, region, &ref_rp[0]); + for(int ii = 0; ii < 3; ++ii){ + EXPECT_LT(fabs(ri[ii] - ref_ri[ii]), 1e-10); + } + double rp2[3]; + convert_to_phys_cpu(rp2, region, ri); + for(int ii = 0; ii < 3; ++ii){ + EXPECT_LT(fabs(rp2[ii] - ref_rp[ii]), 1e-10); + } + double rp[3]; + convert_to_phys_cpu(rp, region, &ref_ri[0]); + for(int ii = 0; ii < 3; ++ii){ + EXPECT_LT(fabs(rp[ii] - ref_rp[ii]), 1e-10); + } + double ri2[3]; + convert_to_inter_cpu(ri2, region, rp); + for(int ii = 0; ii < 3; ++ii){ + EXPECT_LT(fabs(ri2[ii] - ref_ri[ii]), 1e-10); + } +} + + // double square_root (const double xx) // { // return sqrt(xx); diff --git a/source/lib/tests/test_soft_min_switch.cc b/source/lib/tests/test_soft_min_switch.cc index f8aacccf34..0e9319c183 100644 --- a/source/lib/tests/test_soft_min_switch.cc +++ b/source/lib/tests/test_soft_min_switch.cc @@ -59,13 +59,13 @@ class TestSoftMinSwitch : public ::testing::Test rij.resize(nloc * nnei * 3); for(int ii = 0; ii < nloc; ++ii){ // format nlist and record - format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); for (int jj = 0; jj < nnei; ++jj){ nlist[ii*nnei + jj] = fmt_nlist_a[jj]; } std::vector t_env, t_env_deriv, t_rij; // compute env_mat and its deriv, record - env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < nnei * 3; ++jj){ rij[ii*nnei*3 + jj] = t_rij[jj]; } @@ -111,7 +111,7 @@ TEST_F(TestSoftMinSwitch, cpu_num_deriv) EXPECT_EQ(sw_deriv.size(), nloc * nnei * 3); for (int ii = 0; ii < nloc; ++ii){ - int ret = format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + int ret = format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); EXPECT_EQ(ret, -1); int i_idx = ii; @@ -123,8 +123,8 @@ TEST_F(TestSoftMinSwitch, cpu_num_deriv) std::vector posi_1 = posi_cpy; posi_0[j_idx*3+dd] -= hh; posi_1[j_idx*3+dd] += hh; - env_mat_a_cpu(env, env_deriv, t_rij_0, posi_0, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); - env_mat_a_cpu(env, env_deriv, t_rij_1, posi_1, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(env, env_deriv, t_rij_0, posi_0, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(env, env_deriv, t_rij_1, posi_1, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); EXPECT_EQ(t_rij_0.size(), nnei * 3); EXPECT_EQ(t_rij_1.size(), nnei * 3); rij_0 = rij; diff --git a/source/lib/tests/test_soft_min_switch_force.cc b/source/lib/tests/test_soft_min_switch_force.cc index 202e633402..ebe1b62dfe 100644 --- a/source/lib/tests/test_soft_min_switch_force.cc +++ b/source/lib/tests/test_soft_min_switch_force.cc @@ -60,13 +60,13 @@ class TestSoftMinSwitchForce : public ::testing::Test rij.resize(nloc * nnei * 3); for(int ii = 0; ii < nloc; ++ii){ // format nlist and record - format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); for (int jj = 0; jj < nnei; ++jj){ nlist[ii*nnei + jj] = fmt_nlist_a[jj]; } std::vector t_env, t_env_deriv, t_rij; // compute env_mat and its deriv, record - env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < nnei * 3; ++jj){ rij[ii*nnei*3 + jj] = t_rij[jj]; } diff --git a/source/lib/tests/test_soft_min_switch_force_grad.cc b/source/lib/tests/test_soft_min_switch_force_grad.cc index 216767d267..66faf0801a 100644 --- a/source/lib/tests/test_soft_min_switch_force_grad.cc +++ b/source/lib/tests/test_soft_min_switch_force_grad.cc @@ -60,13 +60,13 @@ class TestSoftMinSwitchForceGrad : public ::testing::Test rij.resize(nloc * nnei * 3); for(int ii = 0; ii < nloc; ++ii){ // format nlist and record - format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); for (int jj = 0; jj < nnei; ++jj){ nlist[ii*nnei + jj] = fmt_nlist_a[jj]; } std::vector t_env, t_env_deriv, t_rij; // compute env_mat and its deriv, record - env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < nnei * 3; ++jj){ rij[ii*nnei*3 + jj] = t_rij[jj]; } diff --git a/source/lib/tests/test_soft_min_switch_virial.cc b/source/lib/tests/test_soft_min_switch_virial.cc index 7ef06c739b..6132590adf 100644 --- a/source/lib/tests/test_soft_min_switch_virial.cc +++ b/source/lib/tests/test_soft_min_switch_virial.cc @@ -63,13 +63,13 @@ class TestSoftMinSwitchVirial : public ::testing::Test rij.resize(nloc * nnei * 3); for(int ii = 0; ii < nloc; ++ii){ // format nlist and record - format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); for (int jj = 0; jj < nnei; ++jj){ nlist[ii*nnei + jj] = fmt_nlist_a[jj]; } std::vector t_env, t_env_deriv, t_rij; // compute env_mat and its deriv, record - env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < nnei * 3; ++jj){ rij[ii*nnei*3 + jj] = t_rij[jj]; } diff --git a/source/lib/tests/test_soft_min_switch_virial_grad.cc b/source/lib/tests/test_soft_min_switch_virial_grad.cc index 15545ccde5..540e846f73 100644 --- a/source/lib/tests/test_soft_min_switch_virial_grad.cc +++ b/source/lib/tests/test_soft_min_switch_virial_grad.cc @@ -60,13 +60,13 @@ class TestSoftMinSwitchVirialGrad : public ::testing::Test rij.resize(nloc * nnei * 3); for(int ii = 0; ii < nloc; ++ii){ // format nlist and record - format_nlist_cpu(fmt_nlist_a, posi_cpy, ntypes, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); + format_nlist_i_cpu(fmt_nlist_a, posi_cpy, atype_cpy, ii, nlist_a_cpy[ii], rc, sec_a); for (int jj = 0; jj < nnei; ++jj){ nlist[ii*nnei + jj] = fmt_nlist_a[jj]; } std::vector t_env, t_env_deriv, t_rij; // compute env_mat and its deriv, record - env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, ntypes, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); + env_mat_a_cpu(t_env, t_env_deriv, t_rij, posi_cpy, atype_cpy, ii, fmt_nlist_a, sec_a, rc_smth, rc); for (int jj = 0; jj < nnei * 3; ++jj){ rij[ii*nnei*3 + jj] = t_rij[jj]; } diff --git a/source/op/descrpt.cc b/source/op/descrpt.cc index a6d007e674..1cbfb96574 100644 --- a/source/op/descrpt.cc +++ b/source/op/descrpt.cc @@ -264,7 +264,7 @@ class DescrptOp : public OpKernel { std::vector fmt_nlist_r; int ret = -1; if (fill_nei_a){ - if ((ret = format_nlist_fill_a (fmt_nlist_a, fmt_nlist_r, d_coord3, ntypes, d_type, region, b_pbc, ii, d_nlist_a[ii], d_nlist_r[ii], rcut_r, sec_a, sec_r)) != -1){ + if ((ret = format_nlist_i_fill_a (fmt_nlist_a, fmt_nlist_r, d_coord3, ntypes, d_type, region, b_pbc, ii, d_nlist_a[ii], d_nlist_r[ii], rcut_r, sec_a, sec_r)) != -1){ if (count_nei_idx_overflow == 0) { std::cout << "WARNING: Radial neighbor list length of type " << ret << " is not enough" << std::endl; flush(std::cout); diff --git a/source/op/descrpt_se_a.cc b/source/op/descrpt_se_a.cc index 4444ac0218..51b8e26e0f 100644 --- a/source/op/descrpt_se_a.cc +++ b/source/op/descrpt_se_a.cc @@ -263,7 +263,7 @@ class DescrptSeAOp : public OpKernel { std::vector fmt_nlist_r; int ret = -1; if (fill_nei_a){ - if ((ret = format_nlist_fill_a (fmt_nlist_a, fmt_nlist_r, d_coord3, ntypes, d_type, region, b_pbc, ii, d_nlist_a[ii], d_nlist_r[ii], rcut_r, sec_a, sec_r)) != -1){ + if ((ret = format_nlist_i_fill_a (fmt_nlist_a, fmt_nlist_r, d_coord3, ntypes, d_type, region, b_pbc, ii, d_nlist_a[ii], d_nlist_r[ii], rcut_r, sec_a, sec_r)) != -1){ if (count_nei_idx_overflow == 0) { std::cout << "WARNING: Radial neighbor list length of type " << ret << " is not enough" << std::endl; flush(std::cout); diff --git a/source/op/descrpt_se_a_ef.cc b/source/op/descrpt_se_a_ef.cc index 607c9bf1c5..7f07cc84b9 100644 --- a/source/op/descrpt_se_a_ef.cc +++ b/source/op/descrpt_se_a_ef.cc @@ -277,7 +277,7 @@ class DescrptSeAEfOp : public OpKernel { std::vector fmt_nlist_r; int ret = -1; if (fill_nei_a){ - if ((ret = format_nlist_fill_a (fmt_nlist_a, fmt_nlist_r, d_coord3, ntypes, d_type, region, b_pbc, ii, d_nlist_a[ii], d_nlist_r[ii], rcut_r, sec_a, sec_r)) != -1){ + if ((ret = format_nlist_i_fill_a (fmt_nlist_a, fmt_nlist_r, d_coord3, ntypes, d_type, region, b_pbc, ii, d_nlist_a[ii], d_nlist_r[ii], rcut_r, sec_a, sec_r)) != -1){ if (count_nei_idx_overflow == 0) { std::cout << "WARNING: Radial neighbor list length of type " << ret << " is not enough" << std::endl; flush(std::cout); diff --git a/source/op/descrpt_se_a_ef_para.cc b/source/op/descrpt_se_a_ef_para.cc index 2a83026874..6e38e24a86 100644 --- a/source/op/descrpt_se_a_ef_para.cc +++ b/source/op/descrpt_se_a_ef_para.cc @@ -276,7 +276,7 @@ class DescrptSeAEfParaOp : public OpKernel { std::vector fmt_nlist_r; int ret = -1; if (fill_nei_a){ - if ((ret = format_nlist_fill_a (fmt_nlist_a, fmt_nlist_r, d_coord3, ntypes, d_type, region, b_pbc, ii, d_nlist_a[ii], d_nlist_r[ii], rcut_r, sec_a, sec_r)) != -1){ + if ((ret = format_nlist_i_fill_a (fmt_nlist_a, fmt_nlist_r, d_coord3, ntypes, d_type, region, b_pbc, ii, d_nlist_a[ii], d_nlist_r[ii], rcut_r, sec_a, sec_r)) != -1){ if (count_nei_idx_overflow == 0) { std::cout << "WARNING: Radial neighbor list length of type " << ret << " is not enough" << std::endl; flush(std::cout); diff --git a/source/op/descrpt_se_a_ef_vert.cc b/source/op/descrpt_se_a_ef_vert.cc index c98f2fc615..9b08f87ce6 100644 --- a/source/op/descrpt_se_a_ef_vert.cc +++ b/source/op/descrpt_se_a_ef_vert.cc @@ -276,7 +276,7 @@ class DescrptSeAEfVertOp : public OpKernel { std::vector fmt_nlist_r; int ret = -1; if (fill_nei_a){ - if ((ret = format_nlist_fill_a (fmt_nlist_a, fmt_nlist_r, d_coord3, ntypes, d_type, region, b_pbc, ii, d_nlist_a[ii], d_nlist_r[ii], rcut_r, sec_a, sec_r)) != -1){ + if ((ret = format_nlist_i_fill_a (fmt_nlist_a, fmt_nlist_r, d_coord3, ntypes, d_type, region, b_pbc, ii, d_nlist_a[ii], d_nlist_r[ii], rcut_r, sec_a, sec_r)) != -1){ if (count_nei_idx_overflow == 0) { std::cout << "WARNING: Radial neighbor list length of type " << ret << " is not enough" << std::endl; flush(std::cout); diff --git a/source/op/descrpt_se_r.cc b/source/op/descrpt_se_r.cc index c76f247a51..7031ed20e8 100644 --- a/source/op/descrpt_se_r.cc +++ b/source/op/descrpt_se_r.cc @@ -248,7 +248,7 @@ class DescrptSeROp : public OpKernel { std::vector fmt_nlist; int ret = -1; if (fill_nei_a){ - if ((ret = format_nlist_fill_a (fmt_nlist, fmt_nlist_null, d_coord3, ntypes, d_type, region, b_pbc, ii, d_nlist_null[ii], d_nlist[ii], rcut, sec, sec_null)) != -1){ + if ((ret = format_nlist_i_fill_a (fmt_nlist, fmt_nlist_null, d_coord3, ntypes, d_type, region, b_pbc, ii, d_nlist_null[ii], d_nlist[ii], rcut, sec, sec_null)) != -1){ if (count_nei_idx_overflow == 0) { std::cout << "WARNING: Radial neighbor list length of type " << ret << " is not enough" << std::endl; flush(std::cout); diff --git a/source/op/prod_env_mat_multi_device.cc b/source/op/prod_env_mat_multi_device.cc index 54ce6bde1f..a50461a274 100644 --- a/source/op/prod_env_mat_multi_device.cc +++ b/source/op/prod_env_mat_multi_device.cc @@ -180,7 +180,7 @@ class DescrptSeAOp : public OpKernel { // launch the cpu compute function prod_env_mat_a_cpu( em, em_deriv, rij, nlist, - coord, type, ilist, jrange, jlist, max_nbor_size, avg, std, nloc, nall, ntypes, rcut_r, rcut_r_smth, sec_a); + coord, type, ilist, jrange, jlist, max_nbor_size, avg, std, nloc, nall, rcut_r, rcut_r_smth, sec_a); } } @@ -333,7 +333,7 @@ class DescrptSeROp : public OpKernel { // launch the cpu compute function prod_env_mat_r_cpu( em, em_deriv, rij, nlist, - coord, type, ilist, jrange, jlist, max_nbor_size, avg, std, nloc, nall, ntypes, rcut, rcut_smth, sec); + coord, type, ilist, jrange, jlist, max_nbor_size, avg, std, nloc, nall, rcut, rcut_smth, sec); } }