Skip to content
MuPRO Knowledge

通用工作流程

创建问题

对代码的任何更改都应解决一个问题,它可以是一个错误或功能请求。如果你想做的修改没有问题,你应该自己创建一个。

创建分支

使用问题详细信息页面右侧的创建分支链接,为问题创建一个新分支。您的所有工作都应在这个新分支上完成,以避免直接影响主分支。

尽量缩短开发分支的生命周期。建议分支寿命为 1 到 2 天。如果您发现有些问题无法在 1 到 2 天内解决,那么可以考虑将目标拆分成更小的目标,并为这些更小的目标创建分支。

修改源程序

如果当前的主程序不能满足你的需求,那么你有三个选择来定制主程序。它们是根据我的建议排序的,所以你应该尽可能考虑选择 1、选择 2,最后才是选择 3。

这里我们只介绍定制主程序的一般规则,有关如何更改特定类型主程序的详细信息,请参阅该主程序的文档。

选择 1:修改现有主程序

如果您的用例对普通用户非常有用,而且您只想添加几个参数来扩展现有主程序的功能,那么您应该考虑将其添加到现有主程序中。经验法则是不要影响现有参数,否则你的改动可能会破坏他人的程序。切记提交并发布您的更改

选择 2:在现有资源库中添加新的主程序

如果您的用例对普通用户有用,但与现有主程序有很大不同,例如,您仍在进行相场铁电模拟,但现在您的系统有了非均质设置,那么您可以在现有资源库中设置一个新的主程序。对于相场铁电仓库来说,它与我们的basic主程序一起位于apps文件夹内。在构建新主程序时,请记住经常提交和发布更改。

选择 3:在新仓库中创建自己的主程序

如果您想为一个完全不同的相场模型编写主程序,那么您应该考虑创建一个新的 git 仓库,并将其作为新的子模块添加到 PhaseFieldSDK 仓库中。

构建代码

步骤 1:打开源代码文件夹

正如我们在未来访问源代码时所做的一样。

步骤2 :激活 Intel 环境

HPC 服务器

使用上一步提到的模块加载命令。如果你已经正确设置了 ~/.bashrc 文件,也可以忽略此步骤。

你自己的 Linux 机器

单击 F1 打开命令调板,然后键入 intel initialize 并单击 Intel oneAPI: 初始化默认环境变量。

步骤 3:CMake 配置

使用以下命令执行 cmake 的配置步骤。我们依赖 cmake 预置(这就是为什么我们要求版本高于 3.20),以使 cmake 的使用更简单、更标准化。

cmake --preset="linux-intel-Debug" -S "."

在大多数情况下,您只需对项目进行一次配置即可。

步骤 4:CMake 生成

项目配置完成后,就可以构建项目了。这里我们选择 linux-intel-Debug 预置,你也可以根据需要选择其他预置。

警告

linux-intel-Debug预设被配置为跳过许可证检查,因此切勿将使用该预设构建的程序分发给任何无法访问我们源代码的用户,否则他们将无限制地访问我们的程序库子程序。

cmake --build --preset="linux-intel-Debug"

您可以指定要编译的 cmake 目标,例如默认目标是 “all”。

cmake --build --preset="linux-intel-Debug" --target all

我们为 setvars.sh 中的命令创建了一些别名,你可以更新你的 bashrc 以使用这些别名。

echo 'source ~/work/PhaseFieldSDK/setvars.sh' >> ~/.bashrc

步骤 5:为可执行文件添加别名

构建的输出文件位于 “out/build/linux-intel-Debug” 中。库归档文件位于 “out/build/linux-intel-Debug/dev/libmuprolib.a” 。可执行文件位于相应的文件夹中,例如铁电主程序位于“out/build/linux-intel-Debug/apps/PhaseFieldFerroelectric/apps/basic/muFerroBasic”。

为了方便日后使用可执行文件,我们可以在 bashrc 文件中为可执行文件创建别名。例如,对于铁电可执行文件,我们可以使用以下命令:

echo 'alias muferro="~/work/PhaseFieldSDK/out/build/linux-intel-Debug/apps/PhaseFieldFerroelectric/apps/basic/muFerroBasic"' >> ~/.bashrc

测试和调试

如果没有合适的工具,调试会变得缓慢而痛苦。我建议使用 vscode 中基于 gdb 的调试器来调试 fortran 程序。市场上肯定有更多的调试器可供选择,例如,如果你有相对较快的网络连接,那么你可以考虑在服务器上打开一个像 totalview 这样的 gui 软件来调试你的程序,但在我看来,这不如 vscode 方便。

步骤 1:选择启动器

1.单击垂直工具栏上的Run and Debug图标;
2.使用下拉菜单选择启动器;
3.点击程序中任意文件代码行号的左侧,设置断点。

debug

步骤 1.5:或创建启动器

如果没有能满足你需要的启动器,那么你可以自己创建一个新的。

1.在RUN AND DEBUG下拉菜单中选择 Add Configuration …。这将打开 .vscode/launch.json 文件供你编辑;
2.选择 C/C++: (gdb) Launch,vscode 会提供一个模板供你使用; 3.编辑 name(本次启动的名称)、program 程序(可执行文件)和 cwd(程序运行的当前工作目录)。

add launch

步骤 2:开始调试

点击RUN AND DEBUG右侧的绿色三角形按钮,启动调试器。
然后,你会看到输出开始打印到终端,并在你设置的第一个断点处停止。

debugging

你可以使用浮动按钮(从左到右、继续、跨步、跨入、跨出、重启、停止)浏览代码。

WATCH区域双击,或单击 WATCH 面板上的 + 按钮,然后输入变量名,即可在程序执行时跟踪变量。

你可以在 WATCH 中使用表达式,例如使用 use d(1) 来获取数组 d 的第一个元素,使用 sizeof(d) 来获取数组 d 的内存大小。

提交

无论何时对程序库或主程序做任何改动,都要记得 git commit 并 push。您可以使用 vscode 的源码控制插件来完成这项工作。

1.点击垂直工具栏上的源码控制图标;
2.找到正确的 git 仓库。由于我们的 PhaseFieldSDK 仓库中有多个子模块,因此在源码控制面板中会看到多个部分。在下面的示例中,我们正试图提交铁电子模块;
3.输入一条简短的信息,描述你所做的更改,然后点击 Commit 按钮;
4.然后,Commit 按钮会变成 Sync 按钮,点击后,本地修改就会同步到远程 git 服务器。现在你应该能在 Github 仓库中在线看到你的改动了。

git

拉取请求

一旦你完成了所有编程部分,你就应该创建一个拉取请求。之所以称为拉取请求,是因为您要向版本库管理员发送请求,将您的分支中的更改拉取到主分支中。

资深代码开发人员会审核您的拉取请求中的更改,并与您合作使其适合合并。