@@ -164,23 +164,15 @@ inline void enableTimestamp(bool enable = true) {
164164}
165165} // namespace logg
166166
167- void fillNlistTensor ( const std::vector<std::vector< int >>& data,
168- std::unique_ptr<paddle_infer::Tensor>& flat_tensor ) {
169- size_t total_size = 0 ;
167+ std::vector<int > createNlistTensorPD (
168+ const std::vector<std::vector< int >>& data ) {
169+ std::vector< int > ret ;
170170 for (const auto & row : data) {
171- total_size += row.size ( );
171+ ret. insert (ret. end (), row. begin (), row.end () );
172172 }
173- std::vector<int > flat_data;
174- flat_data.reserve (total_size);
175- for (const auto & row : data) {
176- flat_data.insert (flat_data.end (), row.begin (), row.end ());
177- }
178-
179- int nloc = data.size ();
180- int nnei = nloc > 0 ? total_size / nloc : 0 ;
181- flat_tensor->Reshape ({1 , nloc, nnei});
182- flat_tensor->CopyFromCpu (flat_data.data ());
173+ return ret;
183174}
175+
184176DeepPotPD::DeepPotPD () : inited(false ) {}
185177DeepPotPD::DeepPotPD (const std::string& model,
186178 const int & gpu_rank,
@@ -383,14 +375,16 @@ void DeepPotPD::compute(ENERGYVTYPE& ener,
383375 auto coord_wrapped_Tensor = predictor_fl->GetInputHandle (" coord" );
384376 coord_wrapped_Tensor->Reshape ({1 , nall_real, 3 });
385377 coord_wrapped_Tensor->CopyFromCpu (coord_wrapped.data ());
378+
386379 auto atype_Tensor = predictor_fl->GetInputHandle (" atype" );
387380 atype_Tensor->Reshape ({1 , nall_real});
388381 atype_Tensor->CopyFromCpu (datype.data ());
382+
389383 if (ago == 0 ) {
390- nlist_data.copy_from_nlist (lmp_list, nall - nghost );
384+ nlist_data.copy_from_nlist (lmp_list);
391385 nlist_data.shuffle_exclude_empty (fwd_map);
392386 nlist_data.padding ();
393- if (do_message_passing) {
387+ if (do_message_passing == 1 && nghost > 0 ) {
394388 auto sendproc_tensor = predictor_fl->GetInputHandle (" send_proc" );
395389 auto recvproc_tensor = predictor_fl->GetInputHandle (" recv_proc" );
396390 auto recvnum_tensor = predictor_fl->GetInputHandle (" recv_num" );
@@ -452,17 +446,20 @@ void DeepPotPD::compute(ENERGYVTYPE& ener,
452446 this ->mapping_tensor ->CopyFromCpu (mapping.data ());
453447 }
454448 }
449+ std::vector<int > firstneigh = createNlistTensorPD (nlist_data.jlist );
455450 this ->firstneigh_tensor = predictor_fl->GetInputHandle (" nlist" );
456- fillNlistTensor (nlist_data.jlist , this ->firstneigh_tensor );
451+ this ->firstneigh_tensor ->Reshape (
452+ {1 , nloc, (int )firstneigh.size () / (int )nloc});
453+ this ->firstneigh_tensor ->CopyFromCpu (firstneigh.data ());
457454 bool do_atom_virial_tensor = atomic;
458- std::unique_ptr<paddle_infer::Tensor> fparam_tensor;
459455 if (!fparam.empty ()) {
456+ std::unique_ptr<paddle_infer::Tensor> fparam_tensor;
460457 fparam_tensor = predictor_fl->GetInputHandle (" fparam" );
461458 fparam_tensor->Reshape ({1 , static_cast <int >(fparam.size ())});
462459 fparam_tensor->CopyFromCpu (fparam.data ());
463460 }
464- std::unique_ptr<paddle_infer::Tensor> aparam_tensor;
465461 if (!aparam_.empty ()) {
462+ std::unique_ptr<paddle_infer::Tensor> aparam_tensor;
466463 aparam_tensor = predictor_fl->GetInputHandle (" aparam" );
467464 aparam_tensor->Reshape (
468465 {1 , lmp_list.inum , static_cast <int >(aparam_.size ()) / lmp_list.inum });
@@ -513,7 +510,7 @@ void DeepPotPD::compute(ENERGYVTYPE& ener,
513510 }
514511}
515512template void DeepPotPD::compute<double , std::vector<ENERGYTYPE>>(
516- std::vector<ENERGYTYPE>& ener ,
513+ std::vector<ENERGYTYPE>& dener ,
517514 std::vector<double >& force,
518515 std::vector<double >& virial,
519516 std::vector<double >& atom_energy,
@@ -525,10 +522,11 @@ template void DeepPotPD::compute<double, std::vector<ENERGYTYPE>>(
525522 const InputNlist& lmp_list,
526523 const int & ago,
527524 const std::vector<double >& fparam,
528- const std::vector<double >& aparam ,
525+ const std::vector<double >& aparam_ ,
529526 const bool atomic);
527+
530528template void DeepPotPD::compute<float , std::vector<ENERGYTYPE>>(
531- std::vector<ENERGYTYPE>& ener ,
529+ std::vector<ENERGYTYPE>& dener ,
532530 std::vector<float >& force,
533531 std::vector<float >& virial,
534532 std::vector<float >& atom_energy,
@@ -540,8 +538,9 @@ template void DeepPotPD::compute<float, std::vector<ENERGYTYPE>>(
540538 const InputNlist& lmp_list,
541539 const int & ago,
542540 const std::vector<float >& fparam,
543- const std::vector<float >& aparam ,
541+ const std::vector<float >& aparam_ ,
544542 const bool atomic);
543+
545544// ENERGYVTYPE: std::vector<ENERGYTYPE> or ENERGYTYPE
546545template <typename VALUETYPE, typename ENERGYVTYPE>
547546void DeepPotPD::compute (ENERGYVTYPE& ener,
@@ -563,9 +562,10 @@ void DeepPotPD::compute(ENERGYVTYPE& ener,
563562 coord_wrapped_Tensor->Reshape ({1 , natoms, 3 });
564563 coord_wrapped_Tensor->CopyFromCpu (coord_wrapped.data ());
565564
565+ std::vector<std::int64_t > atype_64 (atype.begin (), atype.end ());
566566 auto atype_Tensor = predictor->GetInputHandle (" atype" );
567567 atype_Tensor->Reshape ({1 , natoms});
568- atype_Tensor->CopyFromCpu (atype .data ());
568+ atype_Tensor->CopyFromCpu (atype_64 .data ());
569569
570570 std::unique_ptr<paddle_infer::Tensor> box_Tensor;
571571 if (!box.empty ()) {
@@ -575,13 +575,13 @@ void DeepPotPD::compute(ENERGYVTYPE& ener,
575575 }
576576 std::unique_ptr<paddle_infer::Tensor> fparam_tensor;
577577 if (!fparam.empty ()) {
578- fparam_tensor = predictor->GetInputHandle (" fparam " );
578+ fparam_tensor = predictor->GetInputHandle (" box " );
579579 fparam_tensor->Reshape ({1 , static_cast <int >(fparam.size ())});
580580 fparam_tensor->CopyFromCpu ((fparam.data ()));
581581 }
582582 std::unique_ptr<paddle_infer::Tensor> aparam_tensor;
583583 if (!aparam.empty ()) {
584- aparam_tensor = predictor->GetInputHandle (" aparam " );
584+ aparam_tensor = predictor->GetInputHandle (" box " );
585585 aparam_tensor->Reshape (
586586 {1 , natoms, static_cast <int >(aparam.size ()) / natoms});
587587 aparam_tensor->CopyFromCpu ((aparam.data ()));
@@ -628,11 +628,11 @@ void DeepPotPD::compute(ENERGYVTYPE& ener,
628628
629629template void DeepPotPD::compute<double , std::vector<ENERGYTYPE>>(
630630 std::vector<ENERGYTYPE>& ener,
631- std::vector<double >& force ,
631+ std::vector<double >& dforce ,
632632 std::vector<double >& virial,
633633 std::vector<double >& atom_energy,
634634 std::vector<double >& atom_virial,
635- const std::vector<double >& coord ,
635+ const std::vector<double >& dcoord ,
636636 const std::vector<int >& atype,
637637 const std::vector<double >& box,
638638 const std::vector<double >& fparam,
@@ -645,7 +645,7 @@ template void DeepPotPD::compute<float, std::vector<ENERGYTYPE>>(
645645 std::vector<float >& virial,
646646 std::vector<float >& atom_energy,
647647 std::vector<float >& atom_virial,
648- const std::vector<float >& coord ,
648+ const std::vector<float >& dcoord ,
649649 const std::vector<int >& atype,
650650 const std::vector<float >& box,
651651 const std::vector<float >& fparam,
0 commit comments