Skip to content

Commit

Permalink
c: change the required shape of electric field to nloc * 3 (#3237)
Browse files Browse the repository at this point in the history
[A
segfault](https://github.com/deepmodeling/deepmd-kit/actions/runs/7782245372/job/21218255452)
sometimes appears in the tests after #3223. The reason is that the
required shape of the electric field is set to nall * 3 in the C
interface, but a vector of nloc * 3 is given in the tests and lammps and
used in the C++ interface. It was not caught before, as the program
didn't write to these addresses (only reading it usually won't cause a
segfault, unless the address is invalid).
Perhaps fix #2895.

---------

Signed-off-by: Jinzhe Zeng <[email protected]>
(cherry picked from commit e281a8c)
  • Loading branch information
njzjz committed Apr 6, 2024
1 parent 8be4864 commit 5d9e627
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 14 deletions.
8 changes: 4 additions & 4 deletions source/api_c/include/c_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -1134,20 +1134,20 @@ extern void DP_DeleteDipoleChargeModifier(DP_DipoleChargeModifier* dcm);
*modifier with the neighbor list. (double version)
* @param[in] dcm The dipole charge modifier to use.
* @param[in] natoms The number of atoms.
* @param[in] coord The coordinates of atoms. The array should be of size natoms
* @param[in] coord The coordinates of atoms. The array should be of size nall
*x 3.
* @param[in] atype The atom types. The array should contain natoms ints.
* @param[in] atype The atom types. The array should contain nall ints.
* @param[in] cell The cell of the region. The array should be of size 9. Pass
*NULL if pbc is not used.
* @param[in] pairs The pairs of atoms. The list should contain npairs pairs of
*ints.
* @param[in] npairs The number of pairs.
* @param[in] delef_ The electric field on each atom. The array should be of
*size nframes x natoms x 3.
*size nframes x nloc x 3.
* @param[in] nghost The number of ghost atoms.
* @param[in] nlist The neighbor list.
* @param[out] dfcorr_ Output force correction. The array should be of size
*natoms x 3.
*nall x 3.
* @param[out] dvcorr_ Output virial correction. The array should be of size 9.
* @warning The output arrays should be allocated before calling this function.
*Pass NULL if not required.
Expand Down
6 changes: 3 additions & 3 deletions source/api_c/include/deepmd.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1965,13 +1965,13 @@ class DipoleChargeModifier {
* @param[out] dfcorr_ The force correction on each atom.
* @param[out] dvcorr_ The virial correction.
* @param[in] dcoord_ The coordinates of atoms. The array should be of size
*natoms x 3.
* @param[in] datype_ The atom types. The list should contain natoms ints.
*nall x 3.
* @param[in] datype_ The atom types. The list should contain nall ints.
* @param[in] dbox The cell of the region. The array should be of size 9.
* @param[in] pairs The pairs of atoms. The list should contain npairs pairs
*of ints.
* @param[in] delef_ The electric field on each atom. The array should be of
*size natoms x 3.
*size nghost x 3.
* @param[in] nghost The number of ghost atoms.
* @param[in] lmp_list The neighbor list.
**/
Expand Down
2 changes: 1 addition & 1 deletion source/api_c/src/c_api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -785,7 +785,7 @@ inline void DP_DipoleChargeModifierComputeNList_variant(
for (int i = 0; i < npairs; i++) {
pairs_.push_back(std::make_pair(pairs[i * 2], pairs[i * 2 + 1]));
}
std::vector<VALUETYPE> delef_(delef, delef + natoms * 3);
std::vector<VALUETYPE> delef_(delef, delef + (natoms - nghost) * 3);
std::vector<VALUETYPE> df, dv;

DP_REQUIRES_OK(dcm, dcm->dcm.compute(df, dv, coord_, atype_, cell_, pairs_,
Expand Down
6 changes: 3 additions & 3 deletions source/api_cc/include/DataModifier.h
Original file line number Diff line number Diff line change
Expand Up @@ -127,13 +127,13 @@ class DipoleChargeModifier {
* @param[out] dfcorr_ The force correction on each atom.
* @param[out] dvcorr_ The virial correction.
* @param[in] dcoord_ The coordinates of atoms. The array should be of size
*natoms x 3.
* @param[in] datype_ The atom types. The list should contain natoms ints.
*nall x 3.
* @param[in] datype_ The atom types. The list should contain nall ints.
* @param[in] dbox The cell of the region. The array should be of size 9.
* @param[in] pairs The pairs of atoms. The list should contain npairs pairs
*of ints.
* @param[in] delef_ The electric field on each atom. The array should be of
*size natoms x 3.
*size nloc x 3.
* @param[in] nghost The number of ghost atoms.
* @param[in] lmp_list The neighbor list.
**/
Expand Down
6 changes: 3 additions & 3 deletions source/api_cc/include/DataModifierTF.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,13 @@ class DipoleChargeModifierTF : public DipoleChargeModifierBase {
* @param[out] dfcorr_ The force correction on each atom.
* @param[out] dvcorr_ The virial correction.
* @param[in] dcoord_ The coordinates of atoms. The array should be of size
*natoms x 3.
* @param[in] datype_ The atom types. The list should contain natoms ints.
*nall x 3.
* @param[in] datype_ The atom types. The list should contain nall ints.
* @param[in] dbox The cell of the region. The array should be of size 9.
* @param[in] pairs The pairs of atoms. The list should contain npairs pairs
*of ints.
* @param[in] delef_ The electric field on each atom. The array should be of
*size natoms x 3.
*size nloc x 3.
* @param[in] nghost The number of ghost atoms.
* @param[in] lmp_list The neighbor list.
**/
Expand Down

0 comments on commit 5d9e627

Please sign in to comment.