From 2a82802404a14582d1a62ab29ade5e2bd7d16f3c Mon Sep 17 00:00:00 2001 From: Duo <50307526+iProzd@users.noreply.github.com> Date: Thu, 12 Mar 2026 20:34:33 +0800 Subject: [PATCH 1/4] fix(lmp): default fparam support --- source/api_c/include/c_api.h | 54 + source/api_c/include/c_api_internal.h | 2 + source/api_c/include/deepmd.hpp | 29 +- source/api_c/src/c_api.cc | 28 + .../tests/test_deeppot_default_fparam.cc | 154 ++ source/api_cc/include/DeepBaseModel.h | 18 + source/api_cc/include/DeepPotJAX.h | 10 + source/api_cc/include/DeepPotPD.h | 5 + source/api_cc/include/DeepPotPT.h | 9 + source/api_cc/include/DeepPotTF.h | 5 + source/api_cc/include/DeepSpinPT.h | 9 + source/api_cc/include/DeepSpinTF.h | 5 + source/api_cc/src/DeepBaseModel.cc | 4 + source/api_cc/src/DeepPotJAX.cc | 6 + source/api_cc/src/DeepPotPT.cc | 5 + source/api_cc/src/DeepSpinPT.cc | 5 + .../tests/test_deeppot_default_fparam_pt.cc | 231 ++ source/tests/infer/fparam_aparam_default.pth | Bin 0 -> 133290 bytes source/tests/infer/fparam_aparam_default.yaml | 2042 +++++++++++++++++ 19 files changed, 2618 insertions(+), 3 deletions(-) create mode 100644 source/api_c/tests/test_deeppot_default_fparam.cc create mode 100644 source/api_cc/tests/test_deeppot_default_fparam_pt.cc create mode 100644 source/tests/infer/fparam_aparam_default.pth create mode 100644 source/tests/infer/fparam_aparam_default.yaml diff --git a/source/api_c/include/c_api.h b/source/api_c/include/c_api.h index a8798ba24d..63ca4af1e7 100644 --- a/source/api_c/include/c_api.h +++ b/source/api_c/include/c_api.h @@ -1447,6 +1447,16 @@ int DP_DeepBaseModelGetDimAParam(DP_DeepBaseModel* dpbase); */ bool DP_DeepBaseModelIsAParamNAll(DP_DeepBaseModel* dpbase); +/** + * @brief Check if the model has default frame parameters. + * + * @param[in] dpbase The DP to use. + * @return true the model has default frame parameters + * @return false the model does not have default frame parameters + * @since API version 25 + */ +bool DP_DeepBaseModelHasDefaultFParam(DP_DeepBaseModel* dpbase); + /** * @brief Get the type map of a DP. * @param[in] dpbase The DP to use. @@ -1490,6 +1500,16 @@ int DP_DeepBaseModelDeviGetDimAParam(DP_DeepBaseModelDevi* dpbase); */ bool DP_DeepBaseModelDeviIsAParamNAll(DP_DeepBaseModelDevi* dpbase); +/** + * @brief Check if the model deviation has default frame parameters. + * + * @param[in] dpbase The DP Model Deviation to use. + * @return true the model has default frame parameters + * @return false the model does not have default frame parameters + * @since API version 25 + */ +bool DP_DeepBaseModelDeviHasDefaultFParam(DP_DeepBaseModelDevi* dpbase); + /** * @brief Get the type map of a DP model deviation. * @param[in] dpbase The DP model deviation to use. @@ -1569,6 +1589,14 @@ int DP_DeepPotGetDimAParam(DP_DeepPot* dp); */ bool DP_DeepPotIsAParamNAll(DP_DeepPot* dp); +/** + * @brief Check if the DP has default frame parameters. + * @param[in] dp The DP to use. + * @return true the model has default frame parameters + * @return false the model does not have default frame parameters + */ +bool DP_DeepPotHasDefaultFParam(DP_DeepPot* dp); + /** * @brief Get the type map of a DP. * @param[in] dp The DP to use. @@ -1607,6 +1635,14 @@ int DP_DeepPotModelDeviGetDimAParam(DP_DeepPotModelDevi* dp); */ bool DP_DeepPotModelDeviIsAParamNAll(DP_DeepPotModelDevi* dp); +/** + * @brief Check if the DP model deviation has default frame parameters. + * @param[in] dp The DP model deviation to use. + * @return true the model has default frame parameters + * @return false the model does not have default frame parameters + */ +bool DP_DeepPotModelDeviHasDefaultFParam(DP_DeepPotModelDevi* dp); + /** * @brief Get the type map of a DP model deviation. * @param[in] dp The DP model deviation to use. @@ -1688,6 +1724,15 @@ int DP_DeepSpinGetDimAParam(DP_DeepSpin* dp); */ bool DP_DeepSpinIsAParamNAll(DP_DeepSpin* dp); +/** + * @brief Check if the DP Spin Model has default frame parameters. + * @param[in] dp The DP Spin Model to use. + * @return true the model has default frame parameters + * @return false the model does not have default frame parameters + * @since API version 25 + */ +bool DP_DeepSpinHasDefaultFParam(DP_DeepSpin* dp); + /** * @brief Get the type map of a DP Spin Model. * @param[in] dp The DP Spin Model to use. @@ -1731,6 +1776,15 @@ int DP_DeepSpinModelDeviGetDimAParam(DP_DeepSpinModelDevi* dp); */ bool DP_DeepSpinModelDeviIsAParamNAll(DP_DeepSpinModelDevi* dp); +/** + * @brief Check if the DP Spin Model Deviation has default frame parameters. + * @param[in] dp The DP Spin Model Deviation to use. + * @return true the model has default frame parameters + * @return false the model does not have default frame parameters + * @since API version 25 + */ +bool DP_DeepSpinModelDeviHasDefaultFParam(DP_DeepSpinModelDevi* dp); + /** * @brief Get the type map of a DP model deviation. * @param[in] dp The DP model deviation to use. diff --git a/source/api_c/include/c_api_internal.h b/source/api_c/include/c_api_internal.h index 9824be76ab..63de2ebd35 100644 --- a/source/api_c/include/c_api_internal.h +++ b/source/api_c/include/c_api_internal.h @@ -45,6 +45,7 @@ struct DP_DeepBaseModel { int dfparam; int daparam; bool aparam_nall; + bool has_default_fparam; }; struct DP_DeepBaseModelDevi { @@ -57,6 +58,7 @@ struct DP_DeepBaseModelDevi { int dfparam; int daparam; bool aparam_nall; + bool has_default_fparam; }; struct DP_DeepPot : DP_DeepBaseModel { diff --git a/source/api_c/include/deepmd.hpp b/source/api_c/include/deepmd.hpp index 4f88238fa1..2f120ee86c 100644 --- a/source/api_c/include/deepmd.hpp +++ b/source/api_c/include/deepmd.hpp @@ -965,19 +965,29 @@ class DeepBaseModel { assert(dpbase); return daparam; } + /** + * @brief Check if the model has default frame parameters. + * @return true if the model has default frame parameters. + **/ + bool has_default_fparam() const { + assert(dpbase); + return has_default_fparam_; + } protected: DP_DeepBaseModel* dpbase; int dfparam; int daparam; bool aparam_nall; + bool has_default_fparam_; template void validate_fparam_aparam(const int& nframes, const int& nloc, const std::vector& fparam, const std::vector& aparam) const { if (fparam.size() != dfparam && - fparam.size() != static_cast(nframes) * dfparam) { + fparam.size() != static_cast(nframes) * dfparam && + !(fparam.empty() && has_default_fparam_)) { throw deepmd::hpp::deepmd_exception( "the dim of frame parameter provided is not consistent with what the " "model uses"); @@ -1058,6 +1068,7 @@ class DeepPot : public DeepBaseModel { dfparam = DP_DeepPotGetDimFParam(dp); daparam = DP_DeepPotGetDimAParam(dp); aparam_nall = DP_DeepPotIsAParamNAll(dp); + has_default_fparam_ = DP_DeepPotHasDefaultFParam(dp); dpbase = (DP_DeepBaseModel*)dp; }; @@ -1502,6 +1513,7 @@ class DeepSpin : public DeepBaseModel { dfparam = DP_DeepSpinGetDimFParam(dp); daparam = DP_DeepSpinGetDimAParam(dp); aparam_nall = DP_DeepSpinIsAParamNAll(dp); + has_default_fparam_ = DP_DeepSpinHasDefaultFParam(dp); dpbase = (DP_DeepBaseModel*)dp; }; @@ -1860,7 +1872,14 @@ class DeepBaseModelDevi { return daparam; } /** - * @brief Compute the average of vectors. + * @brief Check if the model has default frame parameters. + * @return true if the model has default frame parameters. + **/ + bool has_default_fparam() const { + assert(dpbase); + return has_default_fparam_; + } + /** * @param[out] avg The average of vectors. * @param[in] xx The vectors of all models. **/ @@ -1981,13 +2000,15 @@ class DeepBaseModelDevi { int dfparam; int daparam; bool aparam_nall; + bool has_default_fparam_; template void validate_fparam_aparam(const int& nframes, const int& nloc, const std::vector& fparam, const std::vector& aparam) const { if (fparam.size() != dfparam && - fparam.size() != static_cast(nframes) * dfparam) { + fparam.size() != static_cast(nframes) * dfparam && + !(fparam.empty() && has_default_fparam_)) { throw deepmd::hpp::deepmd_exception( "the dim of frame parameter provided is not consistent with what the " "model uses"); @@ -2081,6 +2102,7 @@ class DeepPotModelDevi : public DeepBaseModelDevi { dfparam = DP_DeepPotModelDeviGetDimFParam(dp); daparam = DP_DeepPotModelDeviGetDimAParam(dp); aparam_nall = DP_DeepPotModelDeviIsAParamNAll(dp); + has_default_fparam_ = DP_DeepPotModelDeviHasDefaultFParam(dp); dpbase = (DP_DeepBaseModelDevi*)dp; }; @@ -2513,6 +2535,7 @@ class DeepSpinModelDevi : public DeepBaseModelDevi { dfparam = DP_DeepSpinModelDeviGetDimFParam(dp); daparam = DP_DeepSpinModelDeviGetDimAParam(dp); aparam_nall = DP_DeepSpinModelDeviIsAParamNAll(dp); + has_default_fparam_ = DP_DeepSpinModelDeviHasDefaultFParam(dp); dpbase = (DP_DeepBaseModelDevi*)dp; }; diff --git a/source/api_c/src/c_api.cc b/source/api_c/src/c_api.cc index 3acb28a002..20a23600eb 100644 --- a/source/api_c/src/c_api.cc +++ b/source/api_c/src/c_api.cc @@ -55,6 +55,7 @@ DP_DeepBaseModel::DP_DeepBaseModel(deepmd::DeepBaseModel& dpbase) dfparam = dpbase.dim_fparam(); daparam = dpbase.dim_aparam(); aparam_nall = dpbase.is_aparam_nall(); + has_default_fparam = dpbase.has_default_fparam(); } void DP_DeleteDeepBaseModel(DP_DeepBaseModel* dpbase) { delete dpbase; } @@ -65,6 +66,7 @@ DP_DeepBaseModelDevi::DP_DeepBaseModelDevi(deepmd::DeepBaseModelDevi& dpbase) dfparam = dpbase.dim_fparam(); daparam = dpbase.dim_aparam(); aparam_nall = dpbase.is_aparam_nall(); + has_default_fparam = dpbase.has_default_fparam(); } void DP_DeleteDeepBaseModelDevi(DP_DeepBaseModelDevi* dp) { delete dp; } @@ -2019,6 +2021,10 @@ bool DP_DeepBaseModelIsAParamNAll(DP_DeepBaseModel* dpbase) { return dpbase->aparam_nall; } +bool DP_DeepBaseModelHasDefaultFParam(DP_DeepBaseModel* dpbase) { + return dpbase->has_default_fparam; +} + const char* DP_DeepBaseModelCheckOK(DP_DeepBaseModel* dpbase) { return string_to_char(dpbase->exception); } @@ -2047,6 +2053,10 @@ bool DP_DeepBaseModelDeviIsAParamNAll(DP_DeepBaseModelDevi* dpbase) { return dpbase->aparam_nall; } +bool DP_DeepBaseModelDeviHasDefaultFParam(DP_DeepBaseModelDevi* dpbase) { + return dpbase->has_default_fparam; +} + const char* DP_DeepBaseModelDeviCheckOK(DP_DeepBaseModelDevi* dpbase) { return string_to_char(dpbase->exception); } @@ -2080,6 +2090,10 @@ bool DP_DeepPotIsAParamNAll(DP_DeepPot* dp) { return DP_DeepBaseModelIsAParamNAll(static_cast(dp)); } +bool DP_DeepPotHasDefaultFParam(DP_DeepPot* dp) { + return DP_DeepBaseModelHasDefaultFParam(static_cast(dp)); +} + const char* DP_DeepPotCheckOK(DP_DeepPot* dp) { return DP_DeepBaseModelCheckOK(static_cast(dp)); } @@ -2113,6 +2127,11 @@ bool DP_DeepPotModelDeviIsAParamNAll(DP_DeepPotModelDevi* dp) { static_cast(dp)); } +bool DP_DeepPotModelDeviHasDefaultFParam(DP_DeepPotModelDevi* dp) { + return DP_DeepBaseModelDeviHasDefaultFParam( + static_cast(dp)); +} + const char* DP_DeepPotModelDeviCheckOK(DP_DeepPotModelDevi* dp) { return DP_DeepBaseModelDeviCheckOK(static_cast(dp)); } @@ -2146,6 +2165,10 @@ bool DP_DeepSpinIsAParamNAll(DP_DeepSpin* dp) { return DP_DeepBaseModelIsAParamNAll(static_cast(dp)); } +bool DP_DeepSpinHasDefaultFParam(DP_DeepSpin* dp) { + return DP_DeepBaseModelHasDefaultFParam(static_cast(dp)); +} + const char* DP_DeepSpinCheckOK(DP_DeepSpin* dp) { return DP_DeepBaseModelCheckOK(static_cast(dp)); } @@ -2179,6 +2202,11 @@ bool DP_DeepSpinModelDeviIsAParamNAll(DP_DeepSpinModelDevi* dp) { static_cast(dp)); } +bool DP_DeepSpinModelDeviHasDefaultFParam(DP_DeepSpinModelDevi* dp) { + return DP_DeepBaseModelDeviHasDefaultFParam( + static_cast(dp)); +} + const char* DP_DeepSpinModelDeviCheckOK(DP_DeepSpinModelDevi* dp) { return DP_DeepBaseModelDeviCheckOK(static_cast(dp)); } diff --git a/source/api_c/tests/test_deeppot_default_fparam.cc b/source/api_c/tests/test_deeppot_default_fparam.cc new file mode 100644 index 0000000000..f6a28e9fea --- /dev/null +++ b/source/api_c/tests/test_deeppot_default_fparam.cc @@ -0,0 +1,154 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "deepmd.hpp" +#include "test_utils.h" + +// 1e-10 cannot pass; unclear bug or not +#undef EPSILON +#define EPSILON (std::is_same::value ? 1e-7 : 1e-4) + +template +class TestInferDeepPotDefaultFParam : public ::testing::Test { + protected: + std::vector coord = {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, 0, 0, 0, 0, 0}; + std::vector box = {13., 0., 0., 0., 13., 0., 0., 0., 13.}; + std::vector aparam = {0.25852028, 0.25852028, 0.25852028, + 0.25852028, 0.25852028, 0.25852028}; + std::vector fparam = {0.25852028}; + std::vector expected_e = { + -1.038271223729637e-01, -7.285433579124989e-02, -9.467600492266426e-02, + -1.467050207422953e-01, -7.660561676973243e-02, -7.277296000253175e-02}; + std::vector expected_f = { + 6.622266941151356e-02, 5.278739714221517e-02, 2.265728009692279e-02, + -2.606048291367521e-02, -4.538812303131843e-02, 1.058247419681242e-02, + 1.679392617013225e-01, -2.257826240741907e-03, -4.490146347357200e-02, + -1.148364179422036e-01, -1.169790528013792e-02, 6.140403441496690e-02, + -8.078778123309406e-02, -5.838879041789346e-02, 6.773641084621368e-02, + -1.247724902386317e-02, 6.494524782787654e-02, -1.174787360813438e-01}; + std::vector expected_v = { + -1.589185601903571e-01, 2.586167090689234e-03, -1.575150812459097e-04, + -1.855360549216658e-02, 1.949822308966458e-02, -1.006552178977554e-02, + 3.177030388421500e-02, 1.714350280402170e-03, -1.290389705296196e-03, + -8.553511587973063e-02, -5.654638208496338e-03, -1.286955066237458e-02, + 2.464156699303163e-02, -2.398203243424216e-02, -1.957110698882903e-02, + 2.233493653505151e-02, 6.107843889444162e-03, 1.707076397717704e-03, + -1.653994136896924e-01, 3.894358809712642e-02, -2.169596032233905e-02, + 6.819702786555932e-03, -5.018240707559808e-03, 2.640663592968395e-03, + -1.985295554050314e-03, -3.638422207618973e-02, 2.342932709960212e-02, + -8.501331666888623e-02, -2.181253119706635e-03, 4.311299629419011e-03, + -1.910329576491371e-03, -1.808810428459616e-03, -1.540075460017380e-03, + -1.173703527688186e-02, -2.596307050960764e-03, 6.705026635782070e-03, + -9.038454847872568e-02, 3.011717694088482e-02, -5.083053967307887e-02, + -2.951212926932095e-03, 2.342446057919113e-02, -4.091208178777853e-02, + -1.648470670751170e-02, -2.872262362355538e-02, 4.763925761561248e-02, + -8.300037376165001e-02, 1.020429200603740e-03, -1.026734257188870e-03, + 5.678534821710347e-02, 1.273635858276582e-02, -1.530143401888294e-02, + -1.061672032476309e-01, -2.486859787145545e-02, 2.875323543588796e-02}; + int natoms; + double expected_tot_e; + std::vector expected_tot_v; + + deepmd::hpp::DeepPot dp; + + void SetUp() override { +#ifndef BUILD_PYTORCH + GTEST_SKIP() << "Skip because PyTorch support is not enabled."; +#endif + dp.init("../../tests/infer/fparam_aparam_default.pth"); + + natoms = expected_e.size(); + EXPECT_EQ(natoms * 3, expected_f.size()); + EXPECT_EQ(natoms * 9, expected_v.size()); + expected_tot_e = 0.; + expected_tot_v.resize(9); + std::fill(expected_tot_v.begin(), expected_tot_v.end(), 0.); + for (int ii = 0; ii < natoms; ++ii) { + expected_tot_e += expected_e[ii]; + } + for (int ii = 0; ii < natoms; ++ii) { + for (int dd = 0; dd < 9; ++dd) { + expected_tot_v[dd] += expected_v[ii * 9 + dd]; + } + } + }; + + void TearDown() override {}; +}; + +TYPED_TEST_SUITE(TestInferDeepPotDefaultFParam, ValueTypes); + +TYPED_TEST(TestInferDeepPotDefaultFParam, attrs) { + using VALUETYPE = TypeParam; + deepmd::hpp::DeepPot& dp = this->dp; + EXPECT_EQ(dp.dim_fparam(), 1); + EXPECT_EQ(dp.dim_aparam(), 1); + EXPECT_TRUE(dp.has_default_fparam()); +} + +TYPED_TEST(TestInferDeepPotDefaultFParam, cpu_build_nlist_empty_fparam) { + using VALUETYPE = TypeParam; + std::vector& coord = this->coord; + std::vector& atype = this->atype; + std::vector& box = this->box; + std::vector& aparam = this->aparam; + std::vector& expected_f = this->expected_f; + int& natoms = this->natoms; + double& expected_tot_e = this->expected_tot_e; + std::vector& expected_tot_v = this->expected_tot_v; + deepmd::hpp::DeepPot& dp = this->dp; + double ener; + std::vector force, virial; + std::vector empty_fparam; + dp.compute(ener, force, virial, coord, atype, box, empty_fparam, aparam); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } +} + +TYPED_TEST(TestInferDeepPotDefaultFParam, cpu_build_nlist_explicit_fparam) { + using VALUETYPE = TypeParam; + std::vector& coord = this->coord; + std::vector& atype = this->atype; + std::vector& box = this->box; + std::vector& fparam = this->fparam; + std::vector& aparam = this->aparam; + std::vector& expected_f = this->expected_f; + int& natoms = this->natoms; + double& expected_tot_e = this->expected_tot_e; + std::vector& expected_tot_v = this->expected_tot_v; + deepmd::hpp::DeepPot& dp = this->dp; + double ener; + std::vector force, virial; + dp.compute(ener, force, virial, coord, atype, box, fparam, aparam); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } +} diff --git a/source/api_cc/include/DeepBaseModel.h b/source/api_cc/include/DeepBaseModel.h index 68e2c8069b..374fa946be 100644 --- a/source/api_cc/include/DeepBaseModel.h +++ b/source/api_cc/include/DeepBaseModel.h @@ -75,6 +75,11 @@ class DeepBaseModelBackend { *instead of fparam. **/ virtual bool is_aparam_nall() const = 0; + /** + * @brief Check if the model has default frame parameters. + * @return true if the model has default frame parameters. + **/ + virtual bool has_default_fparam() const = 0; }; /** @@ -141,6 +146,11 @@ class DeepBaseModel { *instead of fparam. **/ bool is_aparam_nall() const; + /** + * @brief Check if the model has default frame parameters. + * @return true if the model has default frame parameters. + **/ + bool has_default_fparam() const; protected: bool inited; @@ -273,6 +283,14 @@ class DeepBaseModelDevi { assert(inited); return dpbases[0]->is_aparam_nall(); }; + /** + * @brief Check if the model has default frame parameters. + * @return true if the model has default frame parameters. + **/ + bool has_default_fparam() const { + assert(inited); + return dpbases[0]->has_default_fparam(); + }; protected: unsigned numb_models; diff --git a/source/api_cc/include/DeepPotJAX.h b/source/api_cc/include/DeepPotJAX.h index f2f610d1d5..7633d22d6c 100644 --- a/source/api_cc/include/DeepPotJAX.h +++ b/source/api_cc/include/DeepPotJAX.h @@ -94,6 +94,14 @@ class DeepPotJAX : public DeepPotBackend { assert(inited); return false; }; + /** + * @brief Check if the model has default frame parameters. + * @return true if the model has default frame parameters. + **/ + bool has_default_fparam() const { + assert(inited); + return has_default_fparam_; + }; // forward to template class void computew(std::vector& ener, @@ -191,6 +199,8 @@ class DeepPotJAX : public DeepPotBackend { int nnei; // do message passing bool do_message_passing; + // has default fparam + bool has_default_fparam_; // padding to nall int padding_to_nall = 0; // padding for nloc diff --git a/source/api_cc/include/DeepPotPD.h b/source/api_cc/include/DeepPotPD.h index c721ed23bc..70e5ae877b 100644 --- a/source/api_cc/include/DeepPotPD.h +++ b/source/api_cc/include/DeepPotPD.h @@ -260,6 +260,11 @@ class DeepPotPD : public DeepPotBackend { assert(inited); return aparam_nall; }; + /** + * @brief Check if the model has default frame parameters. + * @return Always false for Paddle backend. + **/ + bool has_default_fparam() const { return false; }; /** * @brief Print the shape of given tensor. diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index f679e8399d..14b545dce4 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -244,6 +244,14 @@ class DeepPotPT : public DeepPotBackend { assert(inited); return aparam_nall; }; + /** + * @brief Check if the model has default frame parameters. + * @return true if the model has default frame parameters. + **/ + bool has_default_fparam() const { + assert(inited); + return has_default_fparam_; + }; // forward to template class void computew(std::vector& ener, @@ -329,6 +337,7 @@ class DeepPotPT : public DeepPotBackend { int dfparam; int daparam; bool aparam_nall; + bool has_default_fparam_; // copy neighbor list info from host torch::jit::script::Module module; double rcut; diff --git a/source/api_cc/include/DeepPotTF.h b/source/api_cc/include/DeepPotTF.h index 10d33e8216..26420807d9 100644 --- a/source/api_cc/include/DeepPotTF.h +++ b/source/api_cc/include/DeepPotTF.h @@ -210,6 +210,11 @@ class DeepPotTF : public DeepPotBackend { assert(inited); return aparam_nall; }; + /** + * @brief Check if the model has default frame parameters. + * @return Always false for TF backend. + **/ + bool has_default_fparam() const { return false; }; // forward to template class void computew(std::vector& ener, diff --git a/source/api_cc/include/DeepSpinPT.h b/source/api_cc/include/DeepSpinPT.h index f65a5afef3..1cc35997e9 100644 --- a/source/api_cc/include/DeepSpinPT.h +++ b/source/api_cc/include/DeepSpinPT.h @@ -183,6 +183,14 @@ class DeepSpinPT : public DeepSpinBackend { assert(inited); return aparam_nall; }; + /** + * @brief Check if the model has default frame parameters. + * @return true if the model has default frame parameters. + **/ + bool has_default_fparam() const { + assert(inited); + return has_default_fparam_; + }; void computew(std::vector& ener, std::vector& force, @@ -251,6 +259,7 @@ class DeepSpinPT : public DeepSpinBackend { int dfparam; int daparam; bool aparam_nall; + bool has_default_fparam_; // copy neighbor list info from host torch::jit::script::Module module; double rcut; diff --git a/source/api_cc/include/DeepSpinTF.h b/source/api_cc/include/DeepSpinTF.h index 05f5ec7382..547f8140cf 100644 --- a/source/api_cc/include/DeepSpinTF.h +++ b/source/api_cc/include/DeepSpinTF.h @@ -176,6 +176,11 @@ class DeepSpinTF : public DeepSpinBackend { assert(inited); return aparam_nall; }; + /** + * @brief Check if the model has default frame parameters. + * @return Always false for TF backend. + **/ + bool has_default_fparam() const { return false; }; // forward to template class void computew(std::vector& ener, diff --git a/source/api_cc/src/DeepBaseModel.cc b/source/api_cc/src/DeepBaseModel.cc index a0514e4907..5ddb82c23c 100644 --- a/source/api_cc/src/DeepBaseModel.cc +++ b/source/api_cc/src/DeepBaseModel.cc @@ -34,6 +34,10 @@ void DeepBaseModel::get_type_map(std::string& type_map) { bool DeepBaseModel::is_aparam_nall() const { return dpbase->is_aparam_nall(); } +bool DeepBaseModel::has_default_fparam() const { + return dpbase->has_default_fparam(); +} + DeepBaseModelDevi::DeepBaseModelDevi() : inited(false), numb_models(0) {} // DeepBaseModelDevi::DeepBaseModelDevi( diff --git a/source/api_cc/src/DeepPotJAX.cc b/source/api_cc/src/DeepPotJAX.cc index 07f8b9119b..dab76f17ae 100644 --- a/source/api_cc/src/DeepPotJAX.cc +++ b/source/api_cc/src/DeepPotJAX.cc @@ -327,6 +327,12 @@ void deepmd::DeepPotJAX::init(const std::string& model, // compatibile with models generated by v3.0.0rc0 do_message_passing = false; } + try { + has_default_fparam_ = get_scalar(ctx, "has_default_fparam", + func_vector, device, status); + } catch (tf_function_not_found& e) { + has_default_fparam_ = false; + } inited = true; } diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index e239d6d506..fd57e7fc4b 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -146,6 +146,11 @@ void DeepPotPT::init(const std::string& model, dfparam = module.run_method("get_dim_fparam").toInt(); daparam = module.run_method("get_dim_aparam").toInt(); aparam_nall = module.run_method("is_aparam_nall").toBool(); + try { + has_default_fparam_ = module.run_method("has_default_fparam").toBool(); + } catch (...) { + has_default_fparam_ = false; + } inited = true; } diff --git a/source/api_cc/src/DeepSpinPT.cc b/source/api_cc/src/DeepSpinPT.cc index 0c02d2f8aa..d142ad5778 100644 --- a/source/api_cc/src/DeepSpinPT.cc +++ b/source/api_cc/src/DeepSpinPT.cc @@ -118,6 +118,11 @@ void DeepSpinPT::init(const std::string& model, dfparam = module.run_method("get_dim_fparam").toInt(); daparam = module.run_method("get_dim_aparam").toInt(); aparam_nall = module.run_method("is_aparam_nall").toBool(); + try { + has_default_fparam_ = module.run_method("has_default_fparam").toBool(); + } catch (...) { + has_default_fparam_ = false; + } inited = true; } DeepSpinPT::~DeepSpinPT() {} diff --git a/source/api_cc/tests/test_deeppot_default_fparam_pt.cc b/source/api_cc/tests/test_deeppot_default_fparam_pt.cc new file mode 100644 index 0000000000..66f9e16359 --- /dev/null +++ b/source/api_cc/tests/test_deeppot_default_fparam_pt.cc @@ -0,0 +1,231 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "DeepPot.h" +#include "neighbor_list.h" +#include "test_utils.h" + +// 1e-10 cannot pass; unclear bug or not +#undef EPSILON +#define EPSILON (std::is_same::value ? 1e-7 : 1e-4) + +template +class TestInferDeepPotDefaultFParamPt : public ::testing::Test { + protected: + std::vector coord = {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, 0, 0, 0, 0, 0}; + std::vector box = {13., 0., 0., 0., 13., 0., 0., 0., 13.}; + // aparam is still provided explicitly + std::vector aparam = {0.25852028, 0.25852028, 0.25852028, + 0.25852028, 0.25852028, 0.25852028}; + // explicit fparam for backward compat test + std::vector fparam = {0.25852028}; + // expected values computed with default fparam + std::vector expected_e = { + -1.038271223729637e-01, -7.285433579124989e-02, -9.467600492266426e-02, + -1.467050207422953e-01, -7.660561676973243e-02, -7.277296000253175e-02}; + std::vector expected_f = { + 6.622266941151356e-02, 5.278739714221517e-02, 2.265728009692279e-02, + -2.606048291367521e-02, -4.538812303131843e-02, 1.058247419681242e-02, + 1.679392617013225e-01, -2.257826240741907e-03, -4.490146347357200e-02, + -1.148364179422036e-01, -1.169790528013792e-02, 6.140403441496690e-02, + -8.078778123309406e-02, -5.838879041789346e-02, 6.773641084621368e-02, + -1.247724902386317e-02, 6.494524782787654e-02, -1.174787360813438e-01}; + std::vector expected_v = { + -1.589185601903571e-01, 2.586167090689234e-03, -1.575150812459097e-04, + -1.855360549216658e-02, 1.949822308966458e-02, -1.006552178977554e-02, + 3.177030388421500e-02, 1.714350280402170e-03, -1.290389705296196e-03, + -8.553511587973063e-02, -5.654638208496338e-03, -1.286955066237458e-02, + 2.464156699303163e-02, -2.398203243424216e-02, -1.957110698882903e-02, + 2.233493653505151e-02, 6.107843889444162e-03, 1.707076397717704e-03, + -1.653994136896924e-01, 3.894358809712642e-02, -2.169596032233905e-02, + 6.819702786555932e-03, -5.018240707559808e-03, 2.640663592968395e-03, + -1.985295554050314e-03, -3.638422207618973e-02, 2.342932709960212e-02, + -8.501331666888623e-02, -2.181253119706635e-03, 4.311299629419011e-03, + -1.910329576491371e-03, -1.808810428459616e-03, -1.540075460017380e-03, + -1.173703527688186e-02, -2.596307050960764e-03, 6.705026635782070e-03, + -9.038454847872568e-02, 3.011717694088482e-02, -5.083053967307887e-02, + -2.951212926932095e-03, 2.342446057919113e-02, -4.091208178777853e-02, + -1.648470670751170e-02, -2.872262362355538e-02, 4.763925761561248e-02, + -8.300037376165001e-02, 1.020429200603740e-03, -1.026734257188870e-03, + 5.678534821710347e-02, 1.273635858276582e-02, -1.530143401888294e-02, + -1.061672032476309e-01, -2.486859787145545e-02, 2.875323543588796e-02}; + int natoms; + double expected_tot_e; + std::vector expected_tot_v; + + deepmd::DeepPot dp; + + void SetUp() override { +#ifndef BUILD_PYTORCH + GTEST_SKIP() << "Skip because PyTorch support is not enabled."; +#endif + dp.init("../../tests/infer/fparam_aparam_default.pth"); + + natoms = expected_e.size(); + EXPECT_EQ(natoms * 3, expected_f.size()); + EXPECT_EQ(natoms * 9, expected_v.size()); + expected_tot_e = 0.; + expected_tot_v.resize(9); + std::fill(expected_tot_v.begin(), expected_tot_v.end(), 0.); + for (int ii = 0; ii < natoms; ++ii) { + expected_tot_e += expected_e[ii]; + } + for (int ii = 0; ii < natoms; ++ii) { + for (int dd = 0; dd < 9; ++dd) { + expected_tot_v[dd] += expected_v[ii * 9 + dd]; + } + } + }; + + void TearDown() override {}; +}; + +TYPED_TEST_SUITE(TestInferDeepPotDefaultFParamPt, ValueTypes); + +TYPED_TEST(TestInferDeepPotDefaultFParamPt, attrs) { + using VALUETYPE = TypeParam; + deepmd::DeepPot& dp = this->dp; + EXPECT_EQ(dp.dim_fparam(), 1); + EXPECT_EQ(dp.dim_aparam(), 1); + EXPECT_TRUE(dp.has_default_fparam()); +} + +TYPED_TEST(TestInferDeepPotDefaultFParamPt, cpu_build_nlist_empty_fparam) { + using VALUETYPE = TypeParam; + std::vector& coord = this->coord; + std::vector& atype = this->atype; + std::vector& box = this->box; + std::vector& aparam = this->aparam; + std::vector& expected_e = this->expected_e; + std::vector& expected_f = this->expected_f; + int& natoms = this->natoms; + double& expected_tot_e = this->expected_tot_e; + std::vector& expected_tot_v = this->expected_tot_v; + deepmd::DeepPot& dp = this->dp; + double ener; + std::vector force, virial; + // Empty fparam — model should use default + std::vector empty_fparam; + dp.compute(ener, force, virial, coord, atype, box, empty_fparam, aparam); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } +} + +TYPED_TEST(TestInferDeepPotDefaultFParamPt, cpu_build_nlist_explicit_fparam) { + using VALUETYPE = TypeParam; + std::vector& coord = this->coord; + std::vector& atype = this->atype; + std::vector& box = this->box; + std::vector& fparam = this->fparam; + std::vector& aparam = this->aparam; + std::vector& expected_e = this->expected_e; + std::vector& expected_f = this->expected_f; + int& natoms = this->natoms; + double& expected_tot_e = this->expected_tot_e; + std::vector& expected_tot_v = this->expected_tot_v; + deepmd::DeepPot& dp = this->dp; + double ener; + std::vector force, virial; + // Explicit fparam — backward compat + dp.compute(ener, force, virial, coord, atype, box, fparam, aparam); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } +} + +TYPED_TEST(TestInferDeepPotDefaultFParamPt, cpu_lmp_nlist_empty_fparam) { + using VALUETYPE = TypeParam; + std::vector& coord = this->coord; + std::vector& atype = this->atype; + std::vector& box = this->box; + std::vector& aparam = this->aparam; + std::vector& expected_f = this->expected_f; + int& natoms = this->natoms; + double& expected_tot_e = this->expected_tot_e; + std::vector& expected_tot_v = this->expected_tot_v; + deepmd::DeepPot& dp = this->dp; + float rc = dp.cutoff(); + int nloc = coord.size() / 3; + std::vector coord_cpy; + std::vector atype_cpy, mapping; + std::vector > nlist_data; + _build_nlist(nlist_data, coord_cpy, atype_cpy, mapping, coord, + atype, box, rc); + int nall = coord_cpy.size() / 3; + std::vector ilist(nloc), numneigh(nloc); + std::vector firstneigh(nloc); + deepmd::InputNlist inlist(nloc, &ilist[0], &numneigh[0], &firstneigh[0]); + convert_nlist(inlist, nlist_data); + + double ener; + std::vector force_, virial; + std::vector empty_fparam; + dp.compute(ener, force_, virial, coord_cpy, atype_cpy, box, nall - nloc, + inlist, 0, empty_fparam, aparam); + std::vector force; + _fold_back(force, force_, mapping, nloc, nall, 3); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } +} + +// Test that a model without default_fparam reports false +template +class TestInferDeepPotNoDefaultFParamPt : public ::testing::Test { + protected: + deepmd::DeepPot dp; + + void SetUp() override { +#ifndef BUILD_PYTORCH + GTEST_SKIP() << "Skip because PyTorch support is not enabled."; +#endif + dp.init("../../tests/infer/fparam_aparam.pth"); + }; + + void TearDown() override {}; +}; + +TYPED_TEST_SUITE(TestInferDeepPotNoDefaultFParamPt, ValueTypes); + +TYPED_TEST(TestInferDeepPotNoDefaultFParamPt, no_default_fparam) { + using VALUETYPE = TypeParam; + deepmd::DeepPot& dp = this->dp; + EXPECT_EQ(dp.dim_fparam(), 1); + EXPECT_FALSE(dp.has_default_fparam()); +} diff --git a/source/tests/infer/fparam_aparam_default.pth b/source/tests/infer/fparam_aparam_default.pth new file mode 100644 index 0000000000000000000000000000000000000000..b28adf574cdd561604424477bdd9edfb971d238c GIT binary patch literal 133290 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 D*#>I9 literal 0 HcmV?d00001 diff --git a/source/tests/infer/fparam_aparam_default.yaml b/source/tests/infer/fparam_aparam_default.yaml new file mode 100644 index 0000000000..6d64bfc328 --- /dev/null +++ b/source/tests/infer/fparam_aparam_default.yaml @@ -0,0 +1,2042 @@ +"@variables": + min_nbor_dist: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: 2.353743796396622 +backend: PyTorch +model: + "@class": Model + "@variables": + out_bias: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - - - 0.0 + out_std: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - - - 1.0 + "@version": 2 + atom_exclude_types: [] + descriptor: + "@class": Descriptor + "@variables": + davg: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + - - 0.06225070363287908 + - 0.0 + - 0.0 + - 0.0 + dstd: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + - - 0.1045454866005929 + - 0.07024933895618589 + - 0.07024933895618589 + - 0.07024933895618589 + "@version": 2 + activation_function: tanh + axis_neuron: 8 + embeddings: + "@class": NetworkCollection + "@version": 1 + ndim: 2 + network_type: embedding_network + networks: + - "@class": EmbeddingNetwork + "@version": 2 + activation_function: tanh + bias: true + in_dim: 1 + layers: + - "@class": Layer + "@variables": + b: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - -0.5393433532012333 + - -2.1450802206126722 + - -0.6454751987088789 + - -0.43530560428805 + - -1.1264141395910752 + idt: null + w: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - - -0.11928431211390167 + - 0.2972334263634328 + - -0.7895724892234077 + - -0.031767124148992236 + - 0.3367750863702063 + "@version": 1 + activation_function: tanh + bias: true + precision: float64 + resnet: true + use_timestep: false + - "@class": Layer + "@variables": + b: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - -1.4825567193011566 + - -0.9328060898428915 + - 0.17844735546789897 + - -0.32276558313671316 + - -1.2403350958455899 + - 0.4984588392035866 + - 0.4096734303015938 + - 0.9216217516087604 + - 1.9382946827757532 + - -0.8900825790436644 + idt: null + w: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - - 0.11435909737502459 + - 0.1858728895190871 + - -0.2046786682461315 + - 0.2467186683996842 + - 0.08335016882362171 + - -0.5814534963162596 + - 0.15801370455189517 + - 0.0160151118247912 + - 0.054187549158138344 + - 0.4740701501166596 + - - 0.5766099594232977 + - 0.21065072239837349 + - 0.537532747392393 + - 0.6009469561755785 + - -0.11567151274046139 + - -0.03665499354986033 + - -0.23446891253226423 + - -0.09647788089595859 + - 0.3856221387557168 + - -0.3968673775873514 + - - 0.1875434492016538 + - -0.07624864471116187 + - -0.06230743206741011 + - 0.2049242424042828 + - 0.2215121779629657 + - 0.26435976550520995 + - -0.5543559867388343 + - 0.07241682722416391 + - 0.3138725568502555 + - 0.46296788670009364 + - - 0.010618533857717957 + - 0.5135341783276981 + - -0.0954664006160769 + - -0.2899316389193315 + - 0.030890827042339808 + - -0.11569419933900991 + - -0.17462260798908213 + - -0.4740075095822978 + - -0.09866689634273408 + - -0.23624222856005475 + - - -0.041821675313334084 + - -0.32241145585904374 + - 0.1788430731707003 + - -0.1357827518115096 + - 0.4133170897434098 + - -0.09154631770769013 + - -0.14482509060503318 + - -0.33238288638280794 + - -0.2468227401238795 + - -0.1766640540729262 + "@version": 1 + activation_function: tanh + bias: true + precision: float64 + resnet: true + use_timestep: false + - "@class": Layer + "@variables": + b: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - 0.1201069747876845 + - 0.7367725819668443 + - 1.3647773619786914 + - 0.3276073171969035 + - -1.7919393677158297 + - 1.2695684144074844 + - 1.6264610253229945 + - -0.6596208182376818 + - -0.25599475764779905 + - -0.20955836916953693 + - -0.19058013433355409 + - -0.7781958687273405 + - 1.819540068491198 + - -0.10531953749276078 + - -0.3840201271512646 + - 0.2261346254061039 + - 0.5160027785338503 + - -1.2932170257258633 + - 1.1016809843395212 + - 1.2104655698629647 + idt: null + w: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - - 0.36479285623651586 + - 0.006230778209119185 + - 0.19285426823598684 + - 0.42341883381934226 + - 0.08488016007118615 + - 0.07417419646053469 + - 0.29744724429150554 + - -0.07474333789906382 + - -0.1818199151515834 + - -0.26603301049949607 + - 0.3078698773870124 + - 0.20151709691770464 + - 0.03557628234114872 + - -0.32698226839190836 + - 0.20487181768902804 + - -0.020566873529933534 + - 0.41602167574761584 + - 0.004571384086449874 + - 0.13699622738678013 + - 0.10035883288136736 + - - 0.2335663046377626 + - 0.5084782746496342 + - 0.2691345234737484 + - 0.28954698906185733 + - -0.10160999738871264 + - -0.06151616931627496 + - 0.11846148714060181 + - 0.1753863714525111 + - 0.02365884913524979 + - -0.20819320090686072 + - -0.1680690262500994 + - -0.08683275622790282 + - 0.2838212058686858 + - 0.2426095413644612 + - -0.08679734198420512 + - -0.18323035422055184 + - -0.09433977101376215 + - 0.027262795136855658 + - -0.023264712403720276 + - 0.1440084370778499 + - - -0.19800674240769445 + - -0.4337419598491409 + - 0.05608553079271123 + - -0.05758274011659217 + - -0.027373990505514343 + - -0.1338263620354308 + - 0.025235961882500983 + - -0.32747798191981126 + - 0.08755203035655969 + - -0.28082595784372116 + - 0.029375776231390427 + - 0.04683696719205464 + - 0.36576930717548567 + - 0.17132547751955568 + - -0.05467794509243931 + - -0.07915366823056322 + - -0.01972919118426503 + - 0.1828356344886703 + - -0.19174912898967905 + - 0.2314996687643926 + - - 0.1547112222174452 + - 0.10317233053523585 + - 0.22456533518332988 + - 0.16623746811473408 + - -0.21431151292363557 + - -0.10495879918074288 + - -0.2573625997343867 + - -0.21033878609863316 + - 0.1199356702981901 + - -0.1433043097611193 + - -0.1141746559395708 + - 0.1805260344221258 + - -0.16348218651403765 + - 0.4778734738305701 + - -0.01411535164296469 + - 0.12549345169281634 + - -0.25895158182873745 + - 0.31651478356560897 + - -0.4272329758673173 + - 0.1614936826281342 + - - 0.020553878193726387 + - 0.08467130979452786 + - 0.1257624346824833 + - -0.06255637560195629 + - 0.4947895197382922 + - -0.4301800550410035 + - -0.2680032282672294 + - -0.37321844642267193 + - -0.4147751188890007 + - -0.03850716845999225 + - 0.2962385417962931 + - 0.08566380151205333 + - 0.18262487559708918 + - 0.4978161183425859 + - 0.11606675328556663 + - -0.08309042310336472 + - -0.32608854872962817 + - 0.12203294371265407 + - -0.05502616235182448 + - 0.06339059425565763 + - - 0.08041981168429196 + - -0.18655983758104588 + - 0.3440468912351547 + - 0.18007991652713864 + - -0.26769124465454697 + - -0.22515099533875038 + - 0.010046290623469076 + - -0.3060598214140068 + - 0.17153966947778707 + - 0.1450276582197883 + - -0.137381880127616 + - -0.009838243796702775 + - -0.026026382110747454 + - -0.127133649599663 + - 0.12790343008211855 + - -0.22780606149921667 + - -0.13340378372252717 + - 0.047229295475135206 + - -0.19757772328573717 + - 0.15873773805051522 + - - 0.11754099189005918 + - 0.05328869164460871 + - 0.10575905288614194 + - -0.0648839843054928 + - -0.01964613771739507 + - 0.018513921569411364 + - 0.05006509187887497 + - -0.15875884760382486 + - -0.0760710256839464 + - -0.09595382909193642 + - 0.14580307776436208 + - 0.02454644204050615 + - 0.16958594915603495 + - -0.14926312088871038 + - -0.22871464655284424 + - 0.02879664508161061 + - 0.030087978759655958 + - 0.01960603757242702 + - -0.05486393910273347 + - -0.35089160240764955 + - - -0.10279585336093233 + - 0.032693882475248515 + - 0.0280732634792298 + - -0.0894714462527181 + - 0.04306096992210535 + - 0.1153944352250339 + - -0.35215098179344556 + - 0.5805648083400043 + - 0.2742969592399747 + - -0.1542415768215887 + - 0.09682940523416274 + - -0.1154100806671915 + - 0.35056959041085906 + - 0.06879342198021826 + - 0.1220998002145607 + - -0.12396446345007209 + - -0.1404987629693105 + - -0.1412599366278345 + - -0.12767367628626503 + - -0.17006632219979811 + - - -0.2708381903697149 + - 0.08809673356644092 + - -0.1775261194393731 + - -0.08717772592963265 + - -0.29149988990573733 + - -0.1748479125994894 + - 0.05055718998107484 + - -0.22146264983128117 + - -0.11194605751733501 + - 0.17778575717455314 + - -0.1822061751589591 + - -0.03167073142234772 + - -0.248162745929766 + - 0.03355957978648537 + - 0.02732699996949167 + - -0.20876545360591556 + - -0.25526396641058235 + - -0.037573152397033564 + - 0.40618926480471745 + - -0.16295943084025397 + - - 0.22152432511567405 + - -0.051110187619921824 + - 0.23884753240434317 + - 0.06419622269668213 + - -0.058475266992462034 + - -0.3263666640351109 + - -0.058320991517536176 + - 0.12299073454228615 + - -0.1444481559828422 + - -0.044033075043473605 + - 0.02108805126054965 + - -0.25969578525546766 + - 0.06417081964138613 + - 0.11383120767633738 + - 0.09744044663714806 + - 0.03209702548662613 + - -0.2605622053921571 + - 0.21508910646218854 + - 0.14017309092618999 + - 0.2632923995081555 + "@version": 1 + activation_function: tanh + bias: true + precision: float64 + resnet: true + use_timestep: false + neuron: + - 5 + - 10 + - 20 + precision: float64 + resnet_dt: false + ntypes: 1 + env_mat: + rcut: 6.0 + rcut_smth: 1.8 + env_protection: 0.0 + exclude_types: [] + neuron: &id002 + - 5 + - 10 + - 20 + precision: float64 + rcut: 6.0 + rcut_smth: 1.8 + resnet_dt: false + sel: &id003 + - 60 + set_davg_zero: false + spin: null + trainable: true + type: se_e2_a + type_map: &id001 + - O + type_one_side: false + fitting: + "@class": Fitting + "@variables": + aparam_avg: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - 0.47395382821559906 + aparam_inv_std: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - 4.641802480248834 + bias_atom_e: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - - -3.2536784984447333 + default_fparam_tensor: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - 0.25852028 + fparam_avg: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - 0.47395382821559906 + fparam_inv_std: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - 4.641802480248834 + "@version": 2 + activation_function: tanh + atom_ener: &id004 [] + default_fparam: + - 0.25852028 + dim_descrpt: 160 + dim_out: 1 + exclude_types: [] + layer_name: null + mixed_types: false + nets: + "@class": NetworkCollection + "@version": 1 + ndim: 1 + network_type: fitting_network + networks: + - "@class": FittingNetwork + "@version": 1 + activation_function: tanh + bias_out: true + in_dim: 162 + layers: + - "@class": Layer + "@variables": + b: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - -1.2144802571743936 + - -0.03360820324898561 + - -0.32748176034999665 + - 0.40478717073318965 + - 0.3506512036523146 + idt: null + w: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - - 0.08283890875661308 + - -0.0978967701076519 + - 0.003507960708749194 + - 0.043902693144219435 + - 0.21935675065605265 + - - 0.03528979360368904 + - -0.04396331001149691 + - -0.06406610074590875 + - 0.1144724330777556 + - 0.015195073767509615 + - - 0.09038859567753689 + - -0.15874654313829165 + - 0.08609020738727619 + - 0.1899099366136468 + - 0.13841117539665584 + - - 0.03175431448532425 + - -0.1535357218879254 + - 0.25869145779327773 + - 0.03757584558395431 + - 0.11274197995195152 + - - 0.11090971241467222 + - -0.018577141043065116 + - 0.07857594393082973 + - 0.030303966103298597 + - 0.0340220832150965 + - - -0.04744913948726431 + - 0.07313935755463763 + - -0.2298281796080754 + - -0.14731767047592295 + - -0.11165442046413367 + - - -0.12781258197262835 + - 0.030744384941131967 + - -0.08098840732625202 + - -0.14466281831607997 + - -0.1337640503044872 + - - 0.05523379122259124 + - 0.00119807138266962 + - 0.10061989470128524 + - 0.06238419047606993 + - 0.016564460772237204 + - - 0.01329557105905656 + - 0.07399559165612384 + - -0.0278703139161788 + - 0.0377745548608891 + - 0.12816280792147713 + - - 0.020890946128730575 + - -0.1774359725055422 + - 0.06538527739446592 + - 0.07410844388766565 + - 0.16057870693999352 + - - 0.04887041851180407 + - -0.11594036341873497 + - 0.22143497264935985 + - 0.06716963877777854 + - -0.09681406060180853 + - - 0.10711478920660919 + - -0.06273410773175234 + - 0.041528510879292456 + - 0.06662649646340289 + - 0.07832493455378677 + - - 0.1475926698637375 + - -0.0635579695407271 + - -0.03344649847198213 + - 0.08073718154398446 + - 0.023729702268273596 + - - -0.06299562540458771 + - 0.02790958642583323 + - 0.042925426853917086 + - -0.043080734640431294 + - 0.0886100650975182 + - - -0.07298869297583842 + - 0.08362453804085901 + - -0.10254296209306389 + - -0.11346591444568707 + - 0.0011697272935412032 + - - -0.06284676877905232 + - -0.14682088259713438 + - -0.1540766626493956 + - 0.15451961107917778 + - 0.14124516378916394 + - - 0.14965278709933721 + - -0.07557960506294555 + - 0.03814400661732616 + - 0.014740237572905653 + - 0.004520744995729561 + - - 0.25442228751520185 + - -0.03978000431857911 + - 0.09971602753499588 + - 0.23564540435126838 + - 0.20605385943445187 + - - -0.13237780832059517 + - 0.018484972381499567 + - -0.10275056910655743 + - -0.07207240104711896 + - -0.10787119389915188 + - - 0.007467834905230374 + - -0.08771349514122567 + - 0.16061592136898323 + - 0.17448059634113944 + - 0.001254834130330242 + - - 0.006207064950141034 + - -0.1564454400305388 + - 0.10375891706231936 + - 0.08904894303862643 + - 0.07462306715946615 + - - -0.1251398764721171 + - 0.15120238835065014 + - -0.1831913651482331 + - -0.1244459354646236 + - 0.03912712030297354 + - - 0.018623627215325136 + - 0.06424171502347877 + - -0.03831522154927344 + - 0.03046077526384358 + - -0.12461580567300859 + - - -0.19847024719342826 + - 0.059009181788912936 + - -0.08350177498884459 + - -0.12545114695970203 + - -0.1468460513523637 + - - 0.11393930952419748 + - -0.11107290650331157 + - 0.12227069148850617 + - 0.04815494958784596 + - 0.1612899234359781 + - - 0.10601521023885997 + - -0.09196068620290285 + - 0.13193361482364854 + - 0.04385293520329707 + - 0.050967645371539486 + - - 0.06042791267994735 + - -0.11048862787208417 + - 0.12322686424858807 + - 0.050218727918925135 + - 0.034723636344222486 + - - 0.09006114562774628 + - -0.21569611118707552 + - 0.02851760340965838 + - -0.04409903315009718 + - 0.05762618418120403 + - - 0.13596395782174261 + - 0.027147661725684454 + - -0.05034028137334426 + - 0.16943496840232128 + - 0.07271377861600281 + - - -0.07721600699149955 + - 0.13422254870195505 + - -0.09492703373929659 + - -0.07219267236006545 + - -0.12634390294392914 + - - -0.06039048298213025 + - 0.054958992262485414 + - 0.034089198483516436 + - 0.005133140077934299 + - -0.18739362302748785 + - - 0.07646701318073375 + - -0.09481384655532439 + - 0.07416912766826537 + - 0.20335244583215797 + - 0.08331892191067221 + - - 0.18034452460125583 + - 0.00456948388776407 + - 0.08823946566167708 + - -0.04228510270222473 + - 0.18231595201133147 + - - 0.0795629150388751 + - -0.20469823985875157 + - 0.019615892361513284 + - 0.12418021562764514 + - 0.22170705487180384 + - - 0.06272944209000424 + - -0.041315715198039504 + - 0.19478741045799394 + - 0.10909209019713605 + - 0.10630542145264084 + - - -0.08933716747297155 + - -0.062200016265509334 + - 0.08900863514351615 + - 0.04893902535667196 + - -3.765312270595895e-05 + - - 0.003730060841861892 + - 0.002239630051505072 + - 0.17740098388082823 + - 0.08781296067230691 + - 0.06877106035934107 + - - -0.06316935427528506 + - -0.052553339749666535 + - 0.02348906186352118 + - -0.1596026438047639 + - 0.016263068205026217 + - - -0.09198578116614688 + - 0.012054378107260741 + - 0.04676321793306408 + - -0.08257200308143862 + - -0.2041747404745336 + - - -0.08233149371408043 + - 0.06421171121416379 + - -0.1702579613292675 + - -0.08384088842840069 + - 0.017948063424081326 + - - -0.08731144852054175 + - 0.09668694323479392 + - -0.15999856172844967 + - -0.023761608989788675 + - -0.17117326225806032 + - - -0.1335663634738568 + - 0.08237499531345333 + - -0.09032706726341058 + - 0.03995257507901939 + - -0.16842830478635343 + - - -0.14414965058275372 + - 0.03763197194901953 + - -0.16521995604738912 + - -0.03599306090315186 + - -0.08643666806796473 + - - -0.10841622797155179 + - 0.1277468905523885 + - 0.002606909247989555 + - -0.03958687416728544 + - -0.14894144813660132 + - - 0.047902133592362055 + - 0.16264003161297788 + - -0.14537880005036363 + - 0.002064587026780515 + - -0.012237863406478361 + - - 0.17941505091673662 + - -0.10494508435997077 + - 0.16685378766479267 + - 0.055721537194068374 + - 0.06342610425363347 + - - 0.010011662881359002 + - 0.00844874924685302 + - 0.11213400788939097 + - 0.09549592948100319 + - -0.013687746646703797 + - - 0.11291973595835432 + - -0.07798782665519784 + - 0.07319647428363084 + - -0.0859350446696214 + - -0.11747308152826166 + - - -0.020739022868969875 + - 0.021520445116984123 + - -0.11163206030705296 + - -0.2551524770429758 + - -0.02104652688629577 + - - 0.02243092152374645 + - 0.1321278427577563 + - -0.0060529278635168245 + - -0.12658682968275983 + - -0.17292448407426056 + - - 0.019263075678292153 + - -0.03753010270766834 + - 0.056799448503123934 + - -0.11085253430147479 + - -0.07521764536173788 + - - -0.008862519308048367 + - 0.05922087608131348 + - -0.04340115806467522 + - -0.07816409726789776 + - -0.05716194602178932 + - - -0.063408376615269 + - 0.11641598040625065 + - -0.027534044184659986 + - -0.13397746200231797 + - -0.1763597151426023 + - - 0.08430956202813064 + - -0.10531313294199231 + - 0.12484544913819298 + - 0.0553876331512594 + - 0.10915732873455615 + - - 0.05770150638409161 + - -0.03051191255747992 + - 0.15907573911823947 + - 0.01078818961555572 + - 0.03849336034055925 + - - -0.1788784477942574 + - 0.05780974788528859 + - -0.016075709839977165 + - -0.06500404476537834 + - -0.002716251603830631 + - - 0.09006796825563741 + - -0.0904929420204248 + - 0.06768095787955528 + - 0.07245649379609936 + - 0.11888153399483643 + - - -0.11027018556057702 + - -0.11390911088681968 + - -0.049404398734417015 + - -0.03638649881135988 + - 0.026265291615660137 + - - -0.0934446170713147 + - 0.09689295458081919 + - 0.05269915046430991 + - 0.02420509250665058 + - -0.16849474552331076 + - - -0.026293451536492245 + - -0.06006005243014565 + - 0.24022729294150433 + - 0.09912989094235534 + - 0.1304448165686265 + - - -0.10942223143228466 + - 0.0632620722963796 + - -0.048662924099958704 + - -0.11712127186161843 + - -0.019264825490795102 + - - 0.06611063053448148 + - 0.047234622931010745 + - 0.062218082455135146 + - 0.00795524688203513 + - -0.17465564651696336 + - - 0.10492267741072867 + - 0.20619015313045283 + - -0.14998164363846797 + - -0.019410069883456397 + - -0.03337796726881261 + - - 0.06599126385451008 + - -0.029630066960402497 + - 0.03304774805215573 + - -0.03239240857835202 + - -0.049862293458798425 + - - -0.16400606524090355 + - 0.02461082804335203 + - 0.12436240584631339 + - -0.029190945922292606 + - 0.04568805996656692 + - - -0.0930682527405759 + - 0.056063362526642464 + - -0.09195551016718798 + - -0.06341600944886001 + - -0.18656755503130626 + - - 0.04773216160515043 + - 0.08844034969990572 + - -0.20802406432595733 + - -0.0820953379249641 + - -0.13153318001360256 + - - 0.12739418932327148 + - 0.05627065925143894 + - 0.07740504983173509 + - -0.15487764898076525 + - 0.006275826359321201 + - - -0.10817059649892483 + - 0.02531720531738993 + - -0.03327261488719224 + - -0.0953751520275134 + - -0.12701285403044454 + - - 0.08099228265910684 + - -0.07569773721797075 + - 0.12871080424177334 + - -0.1365367349439567 + - 0.19470633383694094 + - - -0.10753145878828377 + - -0.03189435254122997 + - -0.13161119754779194 + - -0.0021057573350648853 + - -0.0841044238142517 + - - -0.018208313935999913 + - -0.14254395674968134 + - 0.08312463250023637 + - 0.22628993256491536 + - 0.12130397847770219 + - - -0.14272177404854317 + - 0.11913978131624393 + - -0.07666814703512326 + - -0.1356077228611925 + - -0.008967413232436465 + - - -0.0063789577592416056 + - -0.003367116161589522 + - -0.05775046804713717 + - -0.06316355448601974 + - 0.019177335999794584 + - - -0.019650699471910144 + - -0.033009193380232574 + - -0.1706003834268161 + - -0.0834494296314558 + - -0.10131279487340544 + - - -0.09122567423467215 + - 0.15903750616097936 + - -0.13596722878896966 + - -0.1063514961969653 + - -0.19380358390954508 + - - 0.02590989910635198 + - -0.04196716793415404 + - 0.03392331203961417 + - -0.0670664439810597 + - 0.25134604250970854 + - - -0.14062517779736625 + - 0.14115203189164935 + - -0.08352219767162415 + - -0.027023094676120768 + - -0.07595909325706539 + - - 0.04231220468003574 + - -0.1156682882235978 + - -0.0035416713245802886 + - -0.014432233515029223 + - 0.18097549960605308 + - - -0.08274975492033733 + - -0.06872419639384296 + - -0.08859013097765253 + - -0.07175918527355407 + - -0.10472658765503902 + - - 0.15891561051421385 + - -0.15329373955890807 + - 0.13692919789912686 + - 0.13891255633512659 + - 0.11174367666884788 + - - 0.09575049098683118 + - -0.14251334625674872 + - 0.033762258902280996 + - -0.06649388317938487 + - 0.01563962973416851 + - - 0.060730209603678365 + - -0.12521257069130953 + - 0.05021392103662656 + - 0.08335953175446216 + - 0.05877348062360874 + - - 0.0428007860616611 + - -0.12686533854978582 + - 0.10146828511420027 + - 0.12429447618673943 + - 0.11935460391039295 + - - -0.009619453055945302 + - -0.006364173455932218 + - 0.13541293679652747 + - -0.11746939402807237 + - 0.0324847257975544 + - - 0.03232685092985265 + - 0.15151631307374916 + - 0.013584651577473362 + - -0.19128814709592204 + - -0.14435199321235812 + - - -0.0319002576415077 + - -0.0053020681416126375 + - -0.19760050288466713 + - -0.09530032196383612 + - -0.09489733782737665 + - - 0.1438664624164711 + - 0.06787050479803666 + - 0.01956670274991156 + - 0.04083447321606411 + - 0.21386156355084202 + - - -0.014917264317126233 + - -0.1366377801507765 + - 0.02668872807814398 + - 0.06952162903743021 + - 0.017506086162130913 + - - 0.0440367139368768 + - -0.0885431856895491 + - 0.16730597242451858 + - 0.010477407316439721 + - 0.0649388679752331 + - - 0.09811148126456636 + - -0.2507246973864138 + - 0.017673862879086788 + - 0.0823978644347986 + - 0.05198581404434903 + - - -0.052707039855195384 + - 0.00031348774400268974 + - 0.19022833423183738 + - -0.01848706940035508 + - -0.012313388636278028 + - - 0.04016540728751844 + - -0.04553648918647708 + - 0.1469008909981281 + - -0.00627132191136614 + - 0.04391488889086397 + - - -0.014600356632012083 + - -0.028104930330517905 + - -0.2740906333399828 + - -0.03674304930407705 + - -0.1633308701108342 + - - -0.009019064424266254 + - 0.009209544574238322 + - -0.09699874640100532 + - -0.06481000279736919 + - -0.12039872934213254 + - - 0.1855664494924395 + - 0.08802721768366675 + - 0.1290095140690073 + - 0.06684912669463279 + - 0.21117641748521998 + - - -0.06683819633384791 + - -0.06920510483372247 + - -0.039440826959528455 + - -0.07763487363437074 + - -0.02464049506571708 + - - 0.026678560706908896 + - -0.30845942498468276 + - -0.09754401670430242 + - 0.10718216089365575 + - 0.1465816405381986 + - - -0.00534098419191003 + - 0.07210958543422868 + - -0.028294187508293288 + - -0.22577967735004986 + - 0.03115377530465598 + - - 0.04240424385474482 + - 0.01761433322979715 + - -0.034425310057020805 + - -0.01965144838997553 + - -0.1318308296612131 + - - -0.004080637550202368 + - 0.00434314114623121 + - -0.1312773699828042 + - 0.030336792521441305 + - 0.0788054687638736 + - - -0.10669929586402817 + - 0.16671142083273546 + - -0.08768235696937275 + - -0.08011861963110233 + - -0.027334247787574106 + - - -0.023607914080106564 + - -0.08226925249540906 + - 0.033961522769037446 + - 0.017448829809594793 + - 0.12781278882938715 + - - -0.03151320141674685 + - 0.12722030232635492 + - -0.06120523041890792 + - -0.11721219903471479 + - 0.09894015709624894 + - - 0.09550093583336303 + - -0.011097235035047191 + - 0.1457135362097559 + - 0.121939791312964 + - 0.20072869763055845 + - - 0.01711189774396772 + - -0.09297031914619659 + - 0.054521867319173085 + - 0.009748890431836205 + - -0.03855184001258194 + - - 0.025234076926016383 + - -0.10510897160655577 + - 0.09586892120898095 + - 0.017259769130832145 + - -0.008842993964178513 + - - -0.008697912882316724 + - -0.2475009608232212 + - 0.07912746483607155 + - 0.16112132862240414 + - 0.01786098946154343 + - - 0.16086016770120365 + - -0.12423956485875684 + - 0.047342229897491 + - 0.20725228812186985 + - 0.12986650985714326 + - - 0.04794413683161891 + - 0.1558964571685027 + - -0.11009434956542813 + - -0.050425539614490554 + - -0.12476414234148817 + - - -0.13899016760765584 + - 0.07445142928026079 + - -0.14877548163580992 + - -0.11056104363649503 + - -0.06287520721690669 + - - -0.12163368156993211 + - 0.0012905289766367344 + - 0.07467096666474476 + - -0.042849862293410236 + - -0.012194750943890107 + - - -0.05200862841167023 + - -0.027343136984731103 + - 0.17701610099874313 + - -0.0753785412234156 + - 0.05248499544069008 + - - 0.07380059104977432 + - 0.0056310516664142855 + - -0.015334117856382976 + - -0.13633072522716663 + - -0.1273748709185686 + - - 0.060006242878051105 + - 0.05299291144573065 + - -0.0776724181143225 + - 0.03461305503571957 + - -0.018177903411168112 + - - 0.07484262276560463 + - -0.13483837672465515 + - 0.04787462871104627 + - 0.1959003849804364 + - 0.13378675590082484 + - - 0.11633445580198283 + - -0.07601237292207827 + - 0.18624497725694927 + - 0.05473812370697779 + - 0.09493370548620514 + - - -0.061661541185171746 + - 0.12254498053097647 + - -0.07031084153649944 + - -0.022286231371821716 + - -0.17241809734355634 + - - -0.12288526511572416 + - 0.02467825036628095 + - -0.16950023412254492 + - 0.012309849101453092 + - 0.0759137580514199 + - - -0.173563601323735 + - 0.12234834648532165 + - -0.022808546051849322 + - -0.09393856539130278 + - -0.06722363864168321 + - - -0.08936974047423063 + - 0.0918878145241707 + - 0.01586113482228164 + - 0.020514458962113704 + - -0.009706825772574963 + - - -0.10580562388600193 + - 0.11514370078068678 + - -0.04165429353621947 + - -0.02187628213897798 + - -0.018090000472466648 + - - 0.06296131654228153 + - -0.016545338791117265 + - -0.06775332185266952 + - 0.06322851923974751 + - 0.015625763925951094 + - - -0.0948642331036534 + - 0.12794904334513205 + - 0.06832836380364479 + - -0.029756081099133292 + - -0.09723043304550194 + - - -0.09397628932443784 + - 0.18233113748645402 + - 0.0563836906602804 + - 0.005657967512147693 + - -0.0638840744311192 + - - 0.18743418039890672 + - 0.052291703216797596 + - 0.005696478611152623 + - 0.008558946601956937 + - -0.01988140008429022 + - - -0.06975364040437583 + - 0.07021616323326019 + - -0.015568757564643146 + - 0.17534176296722698 + - -0.008661185105307974 + - - 0.014688943940397924 + - -0.2534642177230792 + - -0.0461734410192206 + - 0.06469598593965059 + - 0.20145458281241999 + - - 0.03409381212875548 + - -0.00658950489832221 + - 0.05083460077783896 + - -0.044806581261960965 + - -0.06829950275313887 + - - -0.06836778363832119 + - 0.036652808557390594 + - 0.05154459073325666 + - -0.03393746858146077 + - -0.07981031796178076 + - - -0.0020857702751361415 + - -0.06463620116180253 + - -0.043904880045130726 + - 0.017707470360044678 + - 0.24495741443727415 + - - -0.06398431134488457 + - 0.10588737469587119 + - 0.009664858328323018 + - 0.0009208248707322619 + - 0.0642137240540866 + - - -0.013866083573081696 + - 0.0805802220722968 + - -0.17216982733113226 + - 0.05298552572997218 + - -0.12767048637402634 + - - -0.006435623656658306 + - -0.08014705242209205 + - 0.047568434321081945 + - 0.06062975733708756 + - 0.1094661612154249 + - - 0.09343871871996914 + - -0.0309464701648373 + - -0.007024372444287255 + - 0.07397166218068804 + - 0.11034345337165591 + - - 0.10744199949284926 + - -0.0009836920368867857 + - -0.02763319989292998 + - 0.07779717111774624 + - 0.058937484894285755 + - - 0.09398607192126467 + - 0.058290807180027604 + - 0.18359030653625402 + - 0.09497664165281902 + - 0.11329176560265439 + - - -0.023462223397806903 + - 0.17396611369105727 + - 0.005712286495724057 + - 0.13078711933908713 + - 0.11511384766323744 + - - 0.0013780436681818252 + - -0.03834398468566224 + - -0.0006388795139380007 + - -0.0716627946234572 + - 0.01348373124584959 + - - -0.01436050649345182 + - -0.08277294510178755 + - 0.046852303753012 + - 0.0193111738398851 + - 0.11542535201442433 + - - 0.03508671629256297 + - -0.059713499753888455 + - 0.04941037124505839 + - -0.07947938257631662 + - 0.1819189541433824 + - - -0.031759775144887877 + - 0.043614376396095965 + - -0.16808953492358455 + - -0.08856224112884986 + - -0.013469431209871555 + - - -0.040358156466436416 + - 0.2168534874563718 + - -0.1499436970060153 + - -0.030370155864311042 + - -0.0924971868424551 + - - 0.07277441093727699 + - -0.012001380906576814 + - -0.037307546142875236 + - -0.09706714758323393 + - -0.10668390950194252 + - - -0.16483666701851443 + - 0.052244574742924245 + - -0.07686999126810759 + - -0.07383797345483081 + - -0.12733678379356012 + - - -0.005633716650528983 + - 0.07649814078301913 + - -0.14413621346514027 + - -0.05138998299287326 + - -0.11204568030686782 + - - 0.07420791411113495 + - 0.18273535107117944 + - -0.1824978879975496 + - -0.25039054106960956 + - -0.1464169408318536 + - - -0.11520816602204983 + - 0.12207963115583792 + - -0.11075990250294324 + - 0.08281098605338619 + - -0.07416715141336498 + - - -0.06922772981633313 + - 0.06945267852654755 + - -0.08522553796279313 + - -0.03832391591069263 + - 0.08522457948381255 + - - 0.0747851279355739 + - 0.03505096878374401 + - -0.03038099684359619 + - 0.035646787663883406 + - -0.09488507373637782 + - - -0.01908948393084388 + - -0.09092284931820235 + - 0.16700890907149846 + - 0.11267359519422974 + - -0.1341294014993034 + - - 0.11596772758398378 + - 0.03127419783619571 + - -0.1792646787183661 + - -0.037779059706928415 + - 0.07638990256598455 + - - -0.04033192439693881 + - 0.03543011103813353 + - -0.02535543169143005 + - -0.08302508654213196 + - 0.02185644392343393 + - - 0.01709853332111763 + - -0.021703366212802215 + - -0.014167374926209945 + - -0.0008147534049811085 + - 0.11508463491653442 + - - -0.02387846723515887 + - 0.05095169297915335 + - -0.2003764130469785 + - -0.08453792678351085 + - -0.08842723650958483 + - - -0.01022379743042409 + - 0.06067830096349489 + - 0.039418895147780054 + - 0.11407337758778067 + - -0.01452204833750862 + - - -0.00861392340118684 + - -0.13133327879922396 + - 0.13243783892259908 + - 0.1217633793771405 + - 0.0778551058668577 + - - -0.1418440665650706 + - 0.04902378507010331 + - -0.07566775026544358 + - -0.13846481809984384 + - -0.1218415195492671 + - - 0.1295360818691439 + - -0.017912489936880535 + - 0.14506706906399028 + - -0.11205537174507366 + - 0.17846997007582133 + - - -0.11229772955165573 + - 0.04782537610984338 + - -0.09393775946200425 + - 0.0521574964474245 + - -0.019777675916293043 + - - 0.024288630801507755 + - 0.048125249562928685 + - -0.005683800549228955 + - 0.013174821907661994 + - -0.06343759373213151 + - - 0.020846779280649128 + - -0.008650835636969233 + - -0.024671299410919664 + - -0.04641395204195701 + - 0.013138472356613858 + "@version": 1 + activation_function: tanh + bias: true + precision: float64 + resnet: true + use_timestep: false + - "@class": Layer + "@variables": + b: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - -0.36663563759715034 + - -1.9674781659950629 + - -0.7706772445689102 + - -0.2704578771477117 + - -0.974412817042122 + idt: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - 0.19202896546945716 + - 0.21219214365596734 + - 0.011425731631279476 + - 0.1909897098276416 + - -0.0063387203161913855 + w: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - - -0.12082557127088184 + - 0.19201208898457822 + - -0.47654503564428036 + - -0.06961590722963343 + - 0.3161625361595068 + - - -0.24153267385395227 + - 0.4956818395782298 + - 0.07926172082929345 + - -0.5420573418577604 + - -0.055069219822197084 + - - 0.38671310161848943 + - -0.21698802223134325 + - 0.025710327531129906 + - 0.18784631102849803 + - 0.04000085019525522 + - - 0.5852368074233382 + - -0.12663457692866442 + - 0.4235866140500294 + - 0.32004290343618924 + - -0.24397935646287897 + - - 0.3198053703360751 + - -0.25848562067335357 + - -0.555361756589043 + - 0.4455381547462723 + - 0.06850644751743053 + "@version": 1 + activation_function: tanh + bias: true + precision: float64 + resnet: true + use_timestep: true + - "@class": Layer + "@variables": + b: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - -1.3028254467408813 + - -0.8147229531019917 + - 0.23327656293240528 + - -0.14396675976213297 + - -1.2399889770309833 + idt: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - 0.1784239089956849 + - 0.1856773431599767 + - 0.1872600391628524 + - 0.1898682837343385 + - 0.0018061590420037404 + w: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - - -0.05915789241446439 + - 0.08097927097796409 + - -0.2542003098763919 + - 0.11053875887676368 + - 0.09691398510842836 + - - -0.7162650646630039 + - 0.39378339944887797 + - -0.1811395140957742 + - 0.07716803869927957 + - 0.4406092479261236 + - - 0.6804046248045935 + - 0.1168204253049476 + - 0.6529811246608016 + - 0.726169695853545 + - -0.16678674470969798 + - - 0.14903963554478278 + - -0.27999969079824943 + - -0.13752571375297468 + - 0.6624260246840007 + - -0.4809503819692311 + - - 0.24342961825577242 + - -0.22508292637304764 + - -0.07797877501014737 + - 0.2513712924558181 + - 0.2826793939516533 + "@version": 1 + activation_function: tanh + bias: true + precision: float64 + resnet: true + use_timestep: true + - "@class": Layer + "@variables": + b: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - 0.27935157276531497 + idt: null + w: + "@class": np.ndarray + "@is_variable": true + "@version": 1 + dtype: float64 + value: + - - 0.7197415086181096 + - - -0.20543635513622743 + - - 0.324034267585776 + - - 0.8831348697832359 + - - 0.1948665043063704 + "@version": 1 + activation_function: none + bias: true + precision: float64 + resnet: false + use_timestep: false + neuron: + - 5 + - 5 + - 5 + out_dim: 1 + precision: float64 + resnet_dt: true + ntypes: 1 + neuron: &id005 + - 5 + - 5 + - 5 + ntypes: 1 + numb_aparam: 1 + numb_fparam: 1 + precision: float64 + rcond: 0.001 + resnet_dt: true + spin: null + tot_ener_zero: false + trainable: + - true + - true + - true + - true + type: ener + type_map: *id001 + use_aparam_as_mask: false + var_name: energy + pair_exclude_types: [] + preset_out_bias: null + rcond: null + type: standard + type_map: *id001 +model_def_script: + data_bias_nsample: 10 + data_stat_nbatch: 1 + data_stat_protect: 0.01 + descriptor: + activation_function: tanh + axis_neuron: 8 + exclude_types: [] + neuron: *id002 + precision: default + rcut: 6.0 + rcut_smth: 1.8 + resnet_dt: false + seed: 1 + sel: *id003 + set_davg_zero: false + trainable: true + type: se_e2_a + type_one_side: false + fitting_net: + activation_function: tanh + atom_ener: *id004 + neuron: *id005 + numb_aparam: 1 + numb_fparam: 1 + precision: default + rcond: 0.001 + resnet_dt: true + seed: 1 + trainable: true + type: ener + use_aparam_as_mask: false + type_map: *id001 +software: deepmd-kit +tf_version: 2.15.0 +time: "2024-07-27 04:31:02.669792" +version: 3.0.0b3.dev27+gfda408f1c.d20240726 From aed8bedec9abe14b6f58d76f93386a336d31fb3b Mon Sep 17 00:00:00 2001 From: Duo <50307526+iProzd@users.noreply.github.com> Date: Fri, 13 Mar 2026 22:59:48 +0800 Subject: [PATCH 2/4] Update c_api.h --- source/api_c/include/c_api.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/source/api_c/include/c_api.h b/source/api_c/include/c_api.h index 63ca4af1e7..534ae94403 100644 --- a/source/api_c/include/c_api.h +++ b/source/api_c/include/c_api.h @@ -12,7 +12,7 @@ extern "C" { /** C API version. Bumped whenever the API is changed. * @since API version 22 */ -#define DP_C_API_VERSION 25 +#define DP_C_API_VERSION 26 /** * @brief Neighbor list. @@ -1453,7 +1453,7 @@ bool DP_DeepBaseModelIsAParamNAll(DP_DeepBaseModel* dpbase); * @param[in] dpbase The DP to use. * @return true the model has default frame parameters * @return false the model does not have default frame parameters - * @since API version 25 + * @since API version 26 */ bool DP_DeepBaseModelHasDefaultFParam(DP_DeepBaseModel* dpbase); @@ -1506,7 +1506,7 @@ bool DP_DeepBaseModelDeviIsAParamNAll(DP_DeepBaseModelDevi* dpbase); * @param[in] dpbase The DP Model Deviation to use. * @return true the model has default frame parameters * @return false the model does not have default frame parameters - * @since API version 25 + * @since API version 26 */ bool DP_DeepBaseModelDeviHasDefaultFParam(DP_DeepBaseModelDevi* dpbase); @@ -1594,6 +1594,7 @@ bool DP_DeepPotIsAParamNAll(DP_DeepPot* dp); * @param[in] dp The DP to use. * @return true the model has default frame parameters * @return false the model does not have default frame parameters + * @since API version 26 */ bool DP_DeepPotHasDefaultFParam(DP_DeepPot* dp); @@ -1640,6 +1641,7 @@ bool DP_DeepPotModelDeviIsAParamNAll(DP_DeepPotModelDevi* dp); * @param[in] dp The DP model deviation to use. * @return true the model has default frame parameters * @return false the model does not have default frame parameters + * @since API version 26 */ bool DP_DeepPotModelDeviHasDefaultFParam(DP_DeepPotModelDevi* dp); @@ -1729,7 +1731,7 @@ bool DP_DeepSpinIsAParamNAll(DP_DeepSpin* dp); * @param[in] dp The DP Spin Model to use. * @return true the model has default frame parameters * @return false the model does not have default frame parameters - * @since API version 25 + * @since API version 26 */ bool DP_DeepSpinHasDefaultFParam(DP_DeepSpin* dp); @@ -1781,7 +1783,7 @@ bool DP_DeepSpinModelDeviIsAParamNAll(DP_DeepSpinModelDevi* dp); * @param[in] dp The DP Spin Model Deviation to use. * @return true the model has default frame parameters * @return false the model does not have default frame parameters - * @since API version 25 + * @since API version 26 */ bool DP_DeepSpinModelDeviHasDefaultFParam(DP_DeepSpinModelDevi* dp); From 2e2f56425a23af3fb0befc95b03cee1b21cdac29 Mon Sep 17 00:00:00 2001 From: Duo <50307526+iProzd@users.noreply.github.com> Date: Sat, 14 Mar 2026 14:11:54 +0800 Subject: [PATCH 3/4] Create test_lammps_faparam_pt.py --- source/lmp/tests/test_lammps_faparam_pt.py | 134 +++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 source/lmp/tests/test_lammps_faparam_pt.py diff --git a/source/lmp/tests/test_lammps_faparam_pt.py b/source/lmp/tests/test_lammps_faparam_pt.py new file mode 100644 index 0000000000..6a22282f43 --- /dev/null +++ b/source/lmp/tests/test_lammps_faparam_pt.py @@ -0,0 +1,134 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Test LAMMPS with default_fparam (PyTorch backend).""" + +import os +from pathlib import ( + Path, +) + +import numpy as np +import pytest +from lammps import ( + PyLammps, +) +from write_lmp_data import ( + write_lmp_data, +) + +pth_file = ( + Path(__file__).parent.parent.parent + / "tests" + / "infer" + / "fparam_aparam_default.pth" +) +data_file = Path(__file__).parent / "data.lmp" + +# expected values from fparam_aparam_default.pth with default_fparam=[0.25852028] +expected_ae = np.array( + [ + -1.038271223729637e-01, + -7.285433579124989e-02, + -9.467600492266426e-02, + -1.467050207422953e-01, + -7.660561676973243e-02, + -7.277296000253175e-02, + ] +) +expected_e = np.sum(expected_ae) +expected_f = np.array( + [ + 6.622266941151356e-02, + 5.278739714221517e-02, + 2.265728009692279e-02, + -2.606048291367521e-02, + -4.538812303131843e-02, + 1.058247419681242e-02, + 1.679392617013225e-01, + -2.257826240741907e-03, + -4.490146347357200e-02, + -1.148364179422036e-01, + -1.169790528013792e-02, + 6.140403441496690e-02, + -8.078778123309406e-02, + -5.838879041789346e-02, + 6.773641084621368e-02, + -1.247724902386317e-02, + 6.494524782787654e-02, + -1.174787360813438e-01, + ] +).reshape(6, 3) + +box = np.array([0, 13, 0, 13, 0, 13, 0, 0, 0]) +coord = np.array( + [ + [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], + ] +) +type_OH = np.array([1, 1, 1, 1, 1, 1]) + + +def setup_module() -> None: + if os.environ.get("ENABLE_PYTORCH", "1") != "1": + pytest.skip( + "Skip test because PyTorch support is not enabled.", + ) + write_lmp_data(box, coord, type_OH, data_file) + + +def teardown_module() -> None: + if data_file.exists(): + os.remove(data_file) + + +def _lammps(data_file, units="metal") -> PyLammps: + lammps = PyLammps() + lammps.units(units) + lammps.boundary("p p p") + lammps.atom_style("atomic") + lammps.neighbor("2.0 bin") + lammps.neigh_modify("every 10 delay 0 check no") + lammps.read_data(data_file.resolve()) + lammps.mass("1 16") + lammps.timestep(0.0005) + lammps.fix("1 all nve") + return lammps + + +@pytest.fixture +def lammps(): + lmp = _lammps(data_file=data_file) + yield lmp + lmp.close() + + +def test_pair_deepmd_default_fparam(lammps) -> None: + """Test that model with default_fparam works without providing fparam.""" + lammps.pair_style(f"deepmd {pth_file.resolve()} aparam 0.25852028") + lammps.pair_coeff("* *") + lammps.run(0) + assert lammps.eval("pe") == pytest.approx(expected_e) + for ii in range(6): + assert lammps.atoms[ii].force == pytest.approx( + expected_f[lammps.atoms[ii].id - 1] + ) + lammps.run(1) + + +def test_pair_deepmd_default_fparam_explicit(lammps) -> None: + """Test that explicit fparam still works with default_fparam model.""" + lammps.pair_style( + f"deepmd {pth_file.resolve()} fparam 0.25852028 aparam 0.25852028" + ) + lammps.pair_coeff("* *") + lammps.run(0) + assert lammps.eval("pe") == pytest.approx(expected_e) + for ii in range(6): + assert lammps.atoms[ii].force == pytest.approx( + expected_f[lammps.atoms[ii].id - 1] + ) + lammps.run(1) From c5bfd545f207765b11f8634abc58cc32aa9d98e2 Mon Sep 17 00:00:00 2001 From: Duo <50307526+iProzd@users.noreply.github.com> Date: Sun, 15 Mar 2026 00:35:05 +0800 Subject: [PATCH 4/4] resolve comments --- source/api_c/src/c_api.cc | 6 ++++-- source/api_cc/src/DeepPotPT.cc | 4 ++-- source/api_cc/src/DeepSpinPT.cc | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/source/api_c/src/c_api.cc b/source/api_c/src/c_api.cc index 20a23600eb..3646eb33c5 100644 --- a/source/api_c/src/c_api.cc +++ b/source/api_c/src/c_api.cc @@ -49,7 +49,8 @@ void DP_NlistSetMapping(DP_Nlist* nl, int* mapping) { void DP_DeleteNlist(DP_Nlist* nl) { delete nl; } // DP Base Model -DP_DeepBaseModel::DP_DeepBaseModel() {} +DP_DeepBaseModel::DP_DeepBaseModel() + : dfparam(0), daparam(0), aparam_nall(false), has_default_fparam(false) {} DP_DeepBaseModel::DP_DeepBaseModel(deepmd::DeepBaseModel& dpbase) : dpbase(dpbase) { dfparam = dpbase.dim_fparam(); @@ -60,7 +61,8 @@ DP_DeepBaseModel::DP_DeepBaseModel(deepmd::DeepBaseModel& dpbase) void DP_DeleteDeepBaseModel(DP_DeepBaseModel* dpbase) { delete dpbase; } // DP Base Model Devi -DP_DeepBaseModelDevi::DP_DeepBaseModelDevi() {} +DP_DeepBaseModelDevi::DP_DeepBaseModelDevi() + : dfparam(0), daparam(0), aparam_nall(false), has_default_fparam(false) {} DP_DeepBaseModelDevi::DP_DeepBaseModelDevi(deepmd::DeepBaseModelDevi& dpbase) : dpbase(dpbase) { dfparam = dpbase.dim_fparam(); diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index fd57e7fc4b..04e54efb89 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -146,9 +146,9 @@ void DeepPotPT::init(const std::string& model, dfparam = module.run_method("get_dim_fparam").toInt(); daparam = module.run_method("get_dim_aparam").toInt(); aparam_nall = module.run_method("is_aparam_nall").toBool(); - try { + if (module.find_method("has_default_fparam")) { has_default_fparam_ = module.run_method("has_default_fparam").toBool(); - } catch (...) { + } else { has_default_fparam_ = false; } inited = true; diff --git a/source/api_cc/src/DeepSpinPT.cc b/source/api_cc/src/DeepSpinPT.cc index d142ad5778..4f6f6ad7ab 100644 --- a/source/api_cc/src/DeepSpinPT.cc +++ b/source/api_cc/src/DeepSpinPT.cc @@ -118,9 +118,9 @@ void DeepSpinPT::init(const std::string& model, dfparam = module.run_method("get_dim_fparam").toInt(); daparam = module.run_method("get_dim_aparam").toInt(); aparam_nall = module.run_method("is_aparam_nall").toBool(); - try { + if (module.find_method("has_default_fparam")) { has_default_fparam_ = module.run_method("has_default_fparam").toBool(); - } catch (...) { + } else { has_default_fparam_ = false; } inited = true;