Skip to content

Commit d4271a6

Browse files
committed
Update QDP.md
1 parent 5d99ca2 commit d4271a6

File tree

1 file changed

+55
-1
lines changed

1 file changed

+55
-1
lines changed

QDP.md

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,65 @@ cmake --install .
6262

6363
## C++ 调用 QDPXX
6464

65-
我们现在可以通过 C++ 来调用 QDPXX 中定义的各种类和基础线性代数操作。我们将使用 CMake 配置项目。
65+
我们现在可以通过 C++ 来调用 QDPXX 中定义的各种类和基础线性代数操作。我们将使用 CMake 配置项目。直接通过 C++ 调用 QDPXX 能完成的任务有限,通常用于处理我们编写 Chroma 扩展的时候需要的一些简单操作。
66+
67+
首先,需要通过 `CMakeLists.txt` 文件找到之前编译完成的 QDPXX,通常将 `CMAKE_INSTALL_PREFIX` 设置为之前使用的值即可。
68+
69+
```CMake
70+
cmake_minimum_required(VERSION 3.0)
71+
set(CMAKE_INSTALL_PREFIX "~/.local")
72+
project(test_qdpxx LANGUAGES C CXX)
73+
74+
find_package(QDPXX REQUIRED)
75+
add_executable(main main.cc)
76+
target_link_libraries(main QPDXX::qdp)
77+
```
78+
79+
这样,你就可以在 `main.cc` 文件中通过 `#include <qdp.h>` 来使用 QDPXX 中的各种功能。例如我们可以在其中定义随机的格点规范场 $U_\mu(x)$ 和费米子场 $F(x)$,并计算 $\sum_\mu U_\mu(x)F(x+\hat\mu)$。
6680

6781
```C++
82+
#include <qdp.h>
83+
84+
using namespace QDP;
85+
86+
int main(int argc, char *argv[]) {
87+
// 初始化 QDPXX
88+
QDP_initialize(&argc, &argv);
89+
90+
// 设置格点规模,并创建 Layout
91+
const int latdims[Nd] = {4, 4, 4, 8};
92+
multi1d<int> nrow(Nd);
93+
nrow = latdims;
94+
Layout::setLattSize(nrow);
95+
Layout::create();
96+
97+
// 创建规范场 U 并随机初始化
98+
multi1d<LatticeColorMatrix> U(Nd);
99+
for (int dir = 0; dir < Nd; ++dir) {
100+
random(U[dir]);
101+
}
102+
103+
// 创建费米子场 F 并随机初始化
104+
LatticeFermion F;
105+
random(F);
106+
107+
// 创建费米子场 UF 并置 0
108+
LatticeFermion UF = zero;
109+
110+
// UF = \sum_\mu U_\mu(x) F(x+\hat\mu)
111+
for (int dir = 0; dir < Nd; ++dir) {
112+
UF += U[dir] * shift(F, FORWARD, dir);
113+
}
114+
115+
// 结束 QDPXX
116+
QDP_finalize();
117+
118+
return 0;
119+
}
68120
```
69121
122+
这样,再额外添加一些与 Gamma 矩阵相关的操作就可以简单地实现 Dslash。
123+
70124
## Chroma
71125
72126
[Chroma](https://github.com/JeffersonLab/chroma) 是一个由 USQCD 合作组开发的,基于 QDPXX API 的格点 QCD 算法工具集,目前托管在 Jefferson 国家实验室。这是目前使用较为广泛的格点 QCD 软件,它通过 XML 文件描述计算流程,方便了不熟悉编程的初学者进行格点 QCD 计算。另外我们也可以直接使用 C++ 调用 Chroma 中定义的各种类和函数,定制我们需要的功能。

0 commit comments

Comments
 (0)