From 1c4a3eea5376397609f9f7fe60f52582bf4b7154 Mon Sep 17 00:00:00 2001 From: chn Date: Tue, 3 Sep 2024 15:10:46 +0800 Subject: [PATCH] packages.ufo: add a test --- packages/ufo/.gitignore | 1 - packages/ufo/CMakeLists.txt | 6 ++++ packages/ufo/doc/README.md | 45 +++++++++++++++++++++++++++++ packages/ufo/include/ufo/unfold.hpp | 2 +- packages/ufo/test/fold/config.yaml | 11 +++++++ packages/ufo/test/fold/output.yaml | 7 +++++ 6 files changed, 70 insertions(+), 2 deletions(-) delete mode 100644 packages/ufo/.gitignore create mode 100644 packages/ufo/doc/README.md create mode 100644 packages/ufo/test/fold/config.yaml create mode 100644 packages/ufo/test/fold/output.yaml diff --git a/packages/ufo/.gitignore b/packages/ufo/.gitignore deleted file mode 100644 index 9daeafb9..00000000 --- a/packages/ufo/.gitignore +++ /dev/null @@ -1 +0,0 @@ -test diff --git a/packages/ufo/CMakeLists.txt b/packages/ufo/CMakeLists.txt index 8f4c948a..619c529a 100644 --- a/packages/ufo/CMakeLists.txt +++ b/packages/ufo/CMakeLists.txt @@ -25,3 +25,9 @@ install(TARGETS ufo RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) get_property(ImportedTargets DIRECTORY "${CMAKE_SOURCE_DIR}" PROPERTY IMPORTED_TARGETS) message("Imported targets: ${ImportedTargets}") message("List of compile features: ${CMAKE_CXX_COMPILE_FEATURES}") + +include(CTest) +add_test(NAME fold COMMAND ufo fold ${PROJECT_SOURCE_DIR}/test/fold/config.yaml) +add_test(NAME fold-compare COMMAND ${CMAKE_COMMAND} -E compare_files fold-output.yaml + ${PROJECT_SOURCE_DIR}/test/fold/output.yaml) +set_tests_properties(fold-compare PROPERTIES DEPENDS fold) diff --git a/packages/ufo/doc/README.md b/packages/ufo/doc/README.md new file mode 100644 index 00000000..aa5d6bdb --- /dev/null +++ b/packages/ufo/doc/README.md @@ -0,0 +1,45 @@ +分为几个功能: + +* fold:根据要计算的单胞的 q 点路径,计算超胞中对应的 q 点路径,生成的路径再交给 phonopy 计算。 +* unfold:根据 phonopy 计算的结果,将超胞的结果展开到单胞中。 +* plot:对计算结果画图。 + +主要的输入输出格式均为 yaml。对于数据特别大的情况,也可以从 hdf5 中读取一部分数据或者将一部分数据写入到 hdf5 文件中。 + +# fold + +## 输入 + +```yaml +# 三个整数组成的向量,表示从单胞到超胞,三个晶格矢量的倍数 +# 必写 +SuperCellMultiplier: [2, 2, 2] +# 一个变换矩阵,表明超胞经历了怎样的扭曲。 +# 可选,默认值为单位矩阵 +SuperCellDeformation: [[1, 0, 0], [0, 1, 0], [0, 0, 1]] +# 一个由三个浮点数组成的向量,表示考虑的 q 点 +# 必写 +Qpoints: + - [0, 0, 0] + - [0.1, 0, 0] + - [0.2, 0, 0] + - [0.3, 0, 0] + - [0.4, 0, 0] + - [0.5, 0, 0] +# 一个 DataFile 类型的对象,表明输出结果到哪个文件 +# 必写 +OutputFile: +``` + +## 输出 + +```yaml +# 得到的 q 点坐标 +Qpoints: + - [0, 0, 0] + - [0.1, 0, 0] + - [0.2, 0, 0] + - [0.3, 0, 0] + - [0.4, 0, 0] + - [0.5, 0, 0] +``` diff --git a/packages/ufo/include/ufo/unfold.hpp b/packages/ufo/include/ufo/unfold.hpp index c53dc00c..5ef6e8c4 100644 --- a/packages/ufo/include/ufo/unfold.hpp +++ b/packages/ufo/include/ufo/unfold.hpp @@ -18,7 +18,7 @@ namespace ufo Eigen::Matrix3d PrimativeCell; // 单胞到超胞的格矢转换时用到的矩阵 // SuperCellMultiplier 是一个三维列向量且各个元素都是整数,表示单胞在各个方向扩大到多少倍之后,可以得到和超胞一样的体积 - // SuperCsolver.hpp>mation 是一个行列式为 1 的矩阵,它表示经过 SuperCellMultiplier 扩大后,还需要怎样的变换才能得到超胞 + // SuperCellDeformation 是一个行列式为 1 的矩阵,它表示经过 SuperCellMultiplier 扩大后,还需要怎样的变换才能得到超胞 // SuperCell = (SuperCellDeformation * SuperCellMultiplier.asDiagonal()) * PrimativeCell // ReciprocalPrimativeCell = (SuperCellDeformation * SuperCellMultiplier.asDiagonal()).transpose() // * ReciprocalSuperCell diff --git a/packages/ufo/test/fold/config.yaml b/packages/ufo/test/fold/config.yaml new file mode 100644 index 00000000..d4065318 --- /dev/null +++ b/packages/ufo/test/fold/config.yaml @@ -0,0 +1,11 @@ +SuperCellMultiplier: [ 2, 2, 2 ] +Qpoints: + - [0, 0, 0] + - [0.1, 0, 0] + - [0.2, 0, 0] + - [0.3, 0, 0] + - [0.4, 0, 0] + - [0.5, 0, 0] +OutputFile: + Filename: fold-output.yaml + Format: yaml diff --git a/packages/ufo/test/fold/output.yaml b/packages/ufo/test/fold/output.yaml new file mode 100644 index 00000000..0e18a140 --- /dev/null +++ b/packages/ufo/test/fold/output.yaml @@ -0,0 +1,7 @@ +Qpoints: + - [ 0.00000000, 0.00000000, 0.00000000 ] + - [ 0.20000000, 0.00000000, 0.00000000 ] + - [ 0.40000000, 0.00000000, 0.00000000 ] + - [ 0.60000000, 0.00000000, 0.00000000 ] + - [ 0.80000000, 0.00000000, 0.00000000 ] + - [ 0.00000000, 0.00000000, 0.00000000 ]