Skip to content

Commit 0b88142

Browse files
authored
Fix JSON coordinate units (deepmodeling#7760)
* Fix JSON coordinate units * Fix JSON cell units
1 parent 48a3954 commit 0b88142

4 files changed

Lines changed: 48 additions & 42 deletions

File tree

docs/advanced/json/json_para.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ An array of dicts, including information about each self-consistent field (SCF)
6464
- `force` - [array(array(double))] The forces calculated on each atom. Unit in eV/Angstrom.
6565
- `stress` - [array(array(double))] The stress tensor. Unit in Kbar.
6666
- `cell` - [array(array(double))] The cell parameters. Unit in Angstrom.
67-
- `coordinate` - [array(array(double))] The coordinates of the atoms in the box after the simulation.
67+
- `coordinate` - [array(array(double))] The coordinates of the atoms in the box after the simulation. Unit in Angstrom.
6868
- `total_mag` , `absolute_mag` , `mag` - [double] The total magnetic moment; total absolute magnetic moment; and a list of magnetic moments for each atom, respectively.
6969
- `scf_converge` - [bool] A boolean indicating whether the scf optimization has converged.
7070
- `scf` - [array(object(str:double)] A list of each scf step, each item contains:

source/source_io/module_json/init_info.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ void gen_stru(UnitCell* ucell)
9898
}
9999

100100
// atom coordinate, mag and label
101-
double lat0 = ucell->lat0;
101+
const double lat0_angstrom = ucell->lat0_angstrom;
102102
std::string* label = ucell->atom_label.data();
103103
for (int i = 0; i < ntype; i++)
104104
{
@@ -107,9 +107,9 @@ void gen_stru(UnitCell* ucell)
107107
for (int j = 0; j < na; j++)
108108
{
109109
Json::jsonValue coordinateArray(JarrayType);
110-
coordinateArray.JPushBack(tau[j][0] * lat0);
111-
coordinateArray.JPushBack(tau[j][1] * lat0);
112-
coordinateArray.JPushBack(tau[j][2] * lat0);
110+
coordinateArray.JPushBack(tau[j][0] * lat0_angstrom);
111+
coordinateArray.JPushBack(tau[j][1] * lat0_angstrom);
112+
coordinateArray.JPushBack(tau[j][2] * lat0_angstrom);
113113
Json::AbacusJson::add_json({"init", "coordinate"}, coordinateArray, true);
114114
// Json::AbacusJson::add_Json(coordinateArray,true,"init","coordinate");
115115

@@ -128,15 +128,15 @@ void gen_stru(UnitCell* ucell)
128128
Json::jsonValue cellArray1(JarrayType);
129129
Json::jsonValue cellArray2(JarrayType);
130130
Json::jsonValue cellArray3(JarrayType);
131-
cellArray1.JPushBack(ucell->latvec.e11);
132-
cellArray1.JPushBack(ucell->latvec.e12);
133-
cellArray1.JPushBack(ucell->latvec.e13);
134-
cellArray2.JPushBack(ucell->latvec.e21);
135-
cellArray2.JPushBack(ucell->latvec.e22);
136-
cellArray2.JPushBack(ucell->latvec.e23);
137-
cellArray3.JPushBack(ucell->latvec.e31);
138-
cellArray3.JPushBack(ucell->latvec.e32);
139-
cellArray3.JPushBack(ucell->latvec.e33);
131+
cellArray1.JPushBack(ucell->latvec.e11 * lat0_angstrom);
132+
cellArray1.JPushBack(ucell->latvec.e12 * lat0_angstrom);
133+
cellArray1.JPushBack(ucell->latvec.e13 * lat0_angstrom);
134+
cellArray2.JPushBack(ucell->latvec.e21 * lat0_angstrom);
135+
cellArray2.JPushBack(ucell->latvec.e22 * lat0_angstrom);
136+
cellArray2.JPushBack(ucell->latvec.e23 * lat0_angstrom);
137+
cellArray3.JPushBack(ucell->latvec.e31 * lat0_angstrom);
138+
cellArray3.JPushBack(ucell->latvec.e32 * lat0_angstrom);
139+
cellArray3.JPushBack(ucell->latvec.e33 * lat0_angstrom);
140140
Json::AbacusJson::add_json({"init", "cell"}, cellArray1, true);
141141
Json::AbacusJson::add_json({"init", "cell"}, cellArray2, true);
142142
Json::AbacusJson::add_json({"init", "cell"}, cellArray3, true);

source/source_io/module_json/output_info.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,15 @@ namespace Json
9292
}
9393
//add coordinate
9494
int ntype = ucell->ntype;
95-
double lat0 = ucell->lat0;
95+
const double lat0_angstrom = ucell->lat0_angstrom;
9696
for(int i=0;i<ntype;i++){
9797
ModuleBase::Vector3<double>* tau = ucell->atoms[i].tau.data();
9898
int na = ucell->atoms[i].na;
9999
for(int j=0;j<na;j++){
100100
Json::jsonValue coordinateArray(JarrayType);
101-
coordinateArray.JPushBack(tau[j][0]*lat0);
102-
coordinateArray.JPushBack(tau[j][1]*lat0);
103-
coordinateArray.JPushBack(tau[j][2]*lat0);
101+
coordinateArray.JPushBack(tau[j][0] * lat0_angstrom);
102+
coordinateArray.JPushBack(tau[j][1] * lat0_angstrom);
103+
coordinateArray.JPushBack(tau[j][2] * lat0_angstrom);
104104
Json::AbacusJson::add_json({"output",-1,"coordinate"}, coordinateArray,true);
105105
Json::AbacusJson::add_json( {"output",-1,"mag"},ucell->atoms[i].mag[j],true);
106106
}
@@ -111,15 +111,15 @@ namespace Json
111111
Json::jsonValue cellArray1(JarrayType);
112112
Json::jsonValue cellArray2(JarrayType);
113113
Json::jsonValue cellArray3(JarrayType);
114-
cellArray1.JPushBack(ucell->latvec.e11);
115-
cellArray1.JPushBack(ucell->latvec.e12);
116-
cellArray1.JPushBack(ucell->latvec.e13);
117-
cellArray2.JPushBack(ucell->latvec.e21);
118-
cellArray2.JPushBack(ucell->latvec.e22);
119-
cellArray2.JPushBack(ucell->latvec.e23);
120-
cellArray3.JPushBack(ucell->latvec.e31);
121-
cellArray3.JPushBack(ucell->latvec.e32);
122-
cellArray3.JPushBack(ucell->latvec.e33);
114+
cellArray1.JPushBack(ucell->latvec.e11 * lat0_angstrom);
115+
cellArray1.JPushBack(ucell->latvec.e12 * lat0_angstrom);
116+
cellArray1.JPushBack(ucell->latvec.e13 * lat0_angstrom);
117+
cellArray2.JPushBack(ucell->latvec.e21 * lat0_angstrom);
118+
cellArray2.JPushBack(ucell->latvec.e22 * lat0_angstrom);
119+
cellArray2.JPushBack(ucell->latvec.e23 * lat0_angstrom);
120+
cellArray3.JPushBack(ucell->latvec.e31 * lat0_angstrom);
121+
cellArray3.JPushBack(ucell->latvec.e32 * lat0_angstrom);
122+
cellArray3.JPushBack(ucell->latvec.e33 * lat0_angstrom);
123123
Json::AbacusJson::add_json({"output",-1,"cell"}, cellArray1,true);
124124
Json::AbacusJson::add_json({"output",-1,"cell"}, cellArray2,true);
125125
Json::AbacusJson::add_json({"output",-1,"cell"}, cellArray3,true);

source/source_io/module_json/test/para_json_test.cpp

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "source_io/module_json/readin_info.h"
88
#include "source_io/module_parameter/parameter.h"
99
#include "source_io/module_json/para_json.h"
10+
#include "source_base/constants.h"
1011
#include "source_base/version.h"
1112
#undef private
1213
/************************************************
@@ -326,6 +327,7 @@ TEST(AbacusJsonTest, Init_stru_test)
326327
ucell.atoms = atomlist;
327328
ucell.atom_label.resize(1);
328329
ucell.lat0 = lat0;
330+
ucell.lat0_angstrom = lat0 * ModuleBase::BOHR_TO_A;
329331

330332
ModuleBase::Vector3<double> tau[2];
331333

@@ -364,19 +366,23 @@ TEST(AbacusJsonTest, Init_stru_test)
364366
ASSERT_EQ(Json::AbacusJson::doc["init"]["coordinate"][0][1].GetDouble(), 0);
365367
ASSERT_EQ(Json::AbacusJson::doc["init"]["coordinate"][0][2].GetDouble(), 0);
366368

367-
ASSERT_EQ(Json::AbacusJson::doc["init"]["coordinate"][1][0].GetDouble(), 1.0);
368-
ASSERT_EQ(Json::AbacusJson::doc["init"]["coordinate"][1][1].GetDouble(), 1.0);
369-
ASSERT_EQ(Json::AbacusJson::doc["init"]["coordinate"][1][2].GetDouble(), 1.0);
370-
371-
ASSERT_EQ(Json::AbacusJson::doc["init"]["cell"][0][0].GetDouble(), 0.1);
372-
ASSERT_EQ(Json::AbacusJson::doc["init"]["cell"][0][1].GetDouble(), 0.1);
373-
ASSERT_EQ(Json::AbacusJson::doc["init"]["cell"][0][2].GetDouble(), 0.1);
374-
375-
ASSERT_EQ(Json::AbacusJson::doc["init"]["cell"][1][0].GetDouble(), 0.2);
376-
ASSERT_EQ(Json::AbacusJson::doc["init"]["cell"][1][1].GetDouble(), 0.2);
377-
ASSERT_EQ(Json::AbacusJson::doc["init"]["cell"][1][2].GetDouble(), 0.2);
378-
379-
ASSERT_EQ(Json::AbacusJson::doc["init"]["cell"][2][0].GetDouble(), 0.3);
380-
ASSERT_EQ(Json::AbacusJson::doc["init"]["cell"][2][1].GetDouble(), 0.3);
381-
ASSERT_EQ(Json::AbacusJson::doc["init"]["cell"][2][2].GetDouble(), 0.3);
369+
EXPECT_NEAR(Json::AbacusJson::doc["init"]["coordinate"][1][0].GetDouble(),
370+
ModuleBase::BOHR_TO_A,
371+
1.0e-12);
372+
EXPECT_NEAR(Json::AbacusJson::doc["init"]["coordinate"][1][1].GetDouble(),
373+
ModuleBase::BOHR_TO_A,
374+
1.0e-12);
375+
EXPECT_NEAR(Json::AbacusJson::doc["init"]["coordinate"][1][2].GetDouble(),
376+
ModuleBase::BOHR_TO_A,
377+
1.0e-12);
378+
379+
for (int i = 0; i < 3; ++i)
380+
{
381+
for (int j = 0; j < 3; ++j)
382+
{
383+
EXPECT_NEAR(Json::AbacusJson::doc["init"]["cell"][i][j].GetDouble(),
384+
(i + 1) * ModuleBase::BOHR_TO_A,
385+
1.0e-12);
386+
}
387+
}
382388
}

0 commit comments

Comments
 (0)