直接使用系数的平方而不开方
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,5 +1,7 @@
|
|||||||
.vscode
|
.vscode
|
||||||
.direnv
|
.direnv
|
||||||
test/*.yaml
|
test/*.yaml
|
||||||
|
test/*.dat
|
||||||
main
|
main
|
||||||
|
plot
|
||||||
out.yaml
|
out.yaml
|
||||||
|
|||||||
4
main.cpp
4
main.cpp
@@ -149,10 +149,10 @@ int main(int argc, const char** argv)
|
|||||||
i_of_basis_in_primary_cell++
|
i_of_basis_in_primary_cell++
|
||||||
)
|
)
|
||||||
coefficient_at_mode[i_of_unfolded_qpoint] +=
|
coefficient_at_mode[i_of_unfolded_qpoint] +=
|
||||||
std::sqrt((
|
(
|
||||||
basis[i_of_unfolded_qpoint][i_of_basis_in_primary_cell].transpose()
|
basis[i_of_unfolded_qpoint][i_of_basis_in_primary_cell].transpose()
|
||||||
* input.QPointData[i_of_folded_qpoint].ModeData[i_of_mode].AtomMovement
|
* input.QPointData[i_of_folded_qpoint].ModeData[i_of_mode].AtomMovement
|
||||||
).array().abs2().sum());
|
).array().abs2().sum();
|
||||||
|
|
||||||
// 归一化
|
// 归一化
|
||||||
auto sum = std::accumulate(coefficient_at_mode.begin(), coefficient_at_mode.end(), 0.);
|
auto sum = std::accumulate(coefficient_at_mode.begin(), coefficient_at_mode.end(), 0.);
|
||||||
|
|||||||
56
plot.cpp
Normal file
56
plot.cpp
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
# include <iostream>
|
||||||
|
# include <array>
|
||||||
|
# include <numbers>
|
||||||
|
# include <numeric>
|
||||||
|
# include <fstream>
|
||||||
|
# include <yaml-cpp/yaml.h>
|
||||||
|
|
||||||
|
using namespace std::literals;
|
||||||
|
|
||||||
|
// 一个临时的程序, 用于将数据导出画图
|
||||||
|
|
||||||
|
struct Output
|
||||||
|
{
|
||||||
|
struct QPointDataType_
|
||||||
|
{
|
||||||
|
std::vector<double> QPoint;
|
||||||
|
struct ModeDataType_
|
||||||
|
{
|
||||||
|
double Frequency;
|
||||||
|
double Weight;
|
||||||
|
};
|
||||||
|
std::vector<ModeDataType_> ModeData;
|
||||||
|
};
|
||||||
|
std::vector<QPointDataType_> QPointData;
|
||||||
|
};
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
YAML::Node root = YAML::LoadFile("out.yaml");
|
||||||
|
Output output;
|
||||||
|
output.QPointData.resize(root["QPointData"].size());
|
||||||
|
for (int i = 0; i < root["QPointData"].size(); i++)
|
||||||
|
{
|
||||||
|
output.QPointData[i].QPoint = root["QPointData"][i]["QPoint"].as<std::vector<double>>();
|
||||||
|
output.QPointData[i].ModeData.resize(root["QPointData"][i]["ModeData"].size());
|
||||||
|
for (int j = 0; j < root["QPointData"][i]["ModeData"].size(); j++)
|
||||||
|
{
|
||||||
|
output.QPointData[i].ModeData[j].Frequency
|
||||||
|
= root["QPointData"][i]["ModeData"][j]["Frequency"].as<double>();
|
||||||
|
output.QPointData[i].ModeData[j].Weight
|
||||||
|
= root["QPointData"][i]["ModeData"][j]["Weight"].as<double>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ofstream os("out.dat");
|
||||||
|
for (int i = 0; i < output.QPointData.size(); i++)
|
||||||
|
for (int j = 0; j < output.QPointData[i].ModeData.size(); j++)
|
||||||
|
{
|
||||||
|
if (output.QPointData[i].QPoint[1] < 1e-3 && output.QPointData[i].QPoint[2] < 1e-3)
|
||||||
|
{
|
||||||
|
os << output.QPointData[i].QPoint[0] << "\t"
|
||||||
|
<< output.QPointData[i].ModeData[j].Frequency << "\t"
|
||||||
|
<< output.QPointData[i].ModeData[j].Weight << "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user