diff --git a/_book/abacus-candela.html b/_book/abacus-candela.html index f97e3e36..f3b65f32 100644 --- a/_book/abacus-candela.html +++ b/_book/abacus-candela.html @@ -953,7 +953,7 @@
这个函数实现了从 Input
类对象的数据成员到 GlobalV
和 GlobalC
等全局变量集合的转换。相当于从 Input
到 GlobalV
和 GlobalC
,以及其他直接的类的参数上载:
其他内容见 ABACUS 第一版开发手册(02. IO 模块,目前暂为飞书内部文档):
+其他内容见 ABACUS 第一版开发手册(02. IO 模块,目前暂为飞书内部文档):
void Input_Conv::Convert(void)
{
....
@@ -1308,7 +1308,7 @@
不要忘记我们已经完成 Driver::reading()
函数内容,到达 Driver::atomic_world()
。这一点从本文档设置的分级目录中也可以看得到。
cppvoid Driver::init()
+void Driver::init()
{
this->reading();
this->atomic_world(); // <- here!
@@ -1518,7 +1518,7 @@ 从 SIAB 到 ABACUS(一):准备工作(施工中 🚧)
下篇:Introduction to ABACUS: Path to PW calculation - Part 2
@@ -1562,7 +1562,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"Introduction to ABACUS: Path to PW calculation - Part 1","level":"1.2.6","depth":2,"next":{"title":"Introduction to ABACUS: Path to PW calculation - Part 2","level":"1.2.7","depth":2,"path":"develop-path2.md","ref":"develop-path2.md","articles":[]},"previous":{"title":"ABACUS 线上文档输入参数撰写规范","level":"1.2.5","depth":2,"path":"develop-input.md","ref":"develop-input.md","articles":[]},"dir":"ltr"},"config":{"plugins":["image-captions","auto-scroll-table","splitter","3-ba","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","tbfed-pagefooter","disqus","github-buttons","sharing-plus","-sharing","livereload"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"tbfed-pagefooter":{"copyright":"Copyright © mcresearch.gitee.io 2023","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"page-treeview":{"copyright":"Copyright © aleen42","minHeaderCount":"2","minHeaderDeep":"2"},"chapter-fold":{},"prism":{},"disqus":{"useIdentifier":false,"shortName":"abacus-user-guide"},"intopic-toc":{"isCollapsed":true,"isScrollspyActive":true,"label":"In this article","maxDepth":6,"mode":"nested","selector":".markdown-section h1, .markdown-section h2, .markdown-section h3, .markdown-section h4, .markdown-section h5, .markdown-section h6","visible":true},"livereload":{},"splitter":{},"sharing-plus":{"qq":false,"all":["facebook","google","twitter","instapaper","linkedin","pocket","stumbleupon"],"douban":false,"facebook":true,"weibo":false,"instapaper":false,"whatsapp":false,"hatenaBookmark":false,"twitter":true,"messenger":false,"line":false,"vk":false,"pocket":true,"google":false,"viber":false,"stumbleupon":false,"qzone":false,"linkedin":false},"auto-scroll-table":{},"code":{"copyButtons":true},"hide-element":{"elements":[".gitbook-link"]},"fontsettings":{"theme":"white","family":"sans","size":2},"favicon":"./picture/abacus-logo.jpg","theme-comscore":{},"page-toc-button":{"maxTocDepth":2,"minTocSize":2},"github-buttons":{"buttons":[{"user":"MCresearch","repo":"abacus-user-guide","type":"star","size":"middle","count":true}]},"custom-favicon":{},"3-ba":{"configuration":"auto","token":"25153cb8bd9a872cfec60b4b23ac0176"},"mathjax-pro":{"forceSVG":false,"version":"2.7.7"},"sharing":{"weibo":false},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"anchors":{},"insert-logo":{"style":"background: none;max-height: 70px;width: -webkit-fill-available;max-width: 180px;","url":"./picture/abacus-logo.svg"},"expandable-chapters":{},"search-plus":{},"image-captions":{"caption":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","variable_name":"_pictures"}},"theme":"default","name":"abacus-user-guide","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{"_pictures":[{"backlink":"abacus-upf.html#fig1.1.5.1","level":"1.1.5","list_caption":"Figure: 局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","alt":"局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","nro":1,"url":"picture/fig_upf-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","attributes":{},"skip":false,"key":"1.1.5.1"},{"backlink":"abacus-upf.html#fig1.1.5.2","level":"1.1.5","list_caption":"Figure: S赝波函数与全电子波函数对比","alt":"S赝波函数与全电子波函数对比","nro":2,"url":"picture/fig_upf-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"S赝波函数与全电子波函数对比","attributes":{},"skip":false,"key":"1.1.5.2"},{"backlink":"abacus-upf.html#fig1.1.5.3","level":"1.1.5","list_caption":"Figure: S的双投影波函数","alt":"S的双投影波函数","nro":3,"url":"picture/fig_upf-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"S的双投影波函数","attributes":{},"skip":false,"key":"1.1.5.3"},{"backlink":"abacus-upf.html#fig1.1.5.4","level":"1.1.5","list_caption":"Figure: 不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","alt":"不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","nro":4,"url":"picture/fig_upf-4.png","index":4,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","attributes":{},"skip":false,"key":"1.1.5.4"},{"backlink":"abacus-upf.html#fig1.1.5.5","level":"1.1.5","list_caption":"Figure: 不同轨道角动量对应的截断能","alt":"不同轨道角动量对应的截断能","nro":5,"url":"picture/fig_upf-5.png","index":5,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"不同轨道角动量对应的截断能","attributes":{},"skip":false,"key":"1.1.5.5"},{"backlink":"abacus-surface2.html#fig1.1.14.1","level":"1.1.14","list_caption":"Figure: 锯齿状势场分布图","alt":"锯齿状势场分布图","nro":6,"url":"picture/fig_surface2-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"锯齿状势场分布图","attributes":{},"skip":false,"key":"1.1.14.1"},{"backlink":"abacus-surface2.html#fig1.1.14.2","level":"1.1.14","list_caption":"Figure: 一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","alt":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","nro":7,"url":"picture/fig_surface2-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","attributes":{},"skip":false,"key":"1.1.14.2"},{"backlink":"abacus-surface2.html#fig1.1.14.3","level":"1.1.14","list_caption":"Figure: 静电势沿超胞Z轴变化图","alt":"静电势沿超胞Z轴变化图","nro":8,"url":"picture/fig_surface2-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"静电势沿超胞Z轴变化图","attributes":{},"skip":false,"key":"1.1.14.3"},{"backlink":"abacus-surface5.html#fig1.1.15.1","level":"1.1.15","list_caption":"Figure: Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","alt":"Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","nro":9,"url":"picture/fig_surface5-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","attributes":{},"skip":false,"key":"1.1.15.1"},{"backlink":"abacus-surface5.html#fig1.1.15.2","level":"1.1.15","list_caption":"Figure: 锯齿状势场分布图","alt":"锯齿状势场分布图","nro":10,"url":"picture/fig_surface2-1.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"锯齿状势场分布图","attributes":{},"skip":false,"key":"1.1.15.2"},{"backlink":"abacus-surface5.html#fig1.1.15.3","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","alt":"采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","nro":11,"url":"picture/fig_surface5-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","attributes":{},"skip":false,"key":"1.1.15.3"},{"backlink":"abacus-surface5.html#fig1.1.15.4","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","alt":"采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","nro":12,"url":"picture/fig_surface5-4.png","index":4,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","attributes":{},"skip":false,"key":"1.1.15.4"},{"backlink":"abacus-surface5.html#fig1.1.15.5","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","alt":"采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","nro":13,"url":"picture/fig_surface5-5.png","index":5,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","attributes":{},"skip":false,"key":"1.1.15.5"},{"backlink":"abacus-surface6.html#fig1.1.16.1","level":"1.1.16","list_caption":"Figure: 一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","alt":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","nro":14,"url":"picture/fig_surface6-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","attributes":{},"skip":false,"key":"1.1.16.1"},{"backlink":"abacus-surface6.html#fig1.1.16.2","level":"1.1.16","list_caption":"Figure: 静电势(Electrostatic Potential)沿超胞Z轴变化图","alt":"静电势(Electrostatic Potential)沿超胞Z轴变化图","nro":15,"url":"picture/fig_surface6-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"静电势(Electrostatic Potential)沿超胞Z轴变化图","attributes":{},"skip":false,"key":"1.1.16.2"}]},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"develop-path1.md","mtime":"2023-10-02T07:41:48.998Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-10-03T14:38:41.027Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"Introduction to ABACUS: Path to PW calculation - Part 1","level":"1.2.6","depth":2,"next":{"title":"Introduction to ABACUS: Path to PW calculation - Part 2","level":"1.2.7","depth":2,"path":"develop-path2.md","ref":"develop-path2.md","articles":[]},"previous":{"title":"ABACUS 线上文档输入参数撰写规范","level":"1.2.5","depth":2,"path":"develop-input.md","ref":"develop-input.md","articles":[]},"dir":"ltr"},"config":{"plugins":["image-captions","auto-scroll-table","splitter","3-ba","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","tbfed-pagefooter","disqus","github-buttons","sharing-plus","-sharing","livereload"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"tbfed-pagefooter":{"copyright":"Copyright © mcresearch.gitee.io 2023","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"page-treeview":{"copyright":"Copyright © aleen42","minHeaderCount":"2","minHeaderDeep":"2"},"chapter-fold":{},"prism":{},"disqus":{"useIdentifier":false,"shortName":"abacus-user-guide"},"intopic-toc":{"isCollapsed":true,"isScrollspyActive":true,"label":"In this article","maxDepth":6,"mode":"nested","selector":".markdown-section h1, .markdown-section h2, .markdown-section h3, .markdown-section h4, .markdown-section h5, .markdown-section h6","visible":true},"livereload":{},"splitter":{},"sharing-plus":{"qq":false,"all":["facebook","google","twitter","instapaper","linkedin","pocket","stumbleupon"],"douban":false,"facebook":true,"weibo":false,"instapaper":false,"whatsapp":false,"hatenaBookmark":false,"twitter":true,"messenger":false,"line":false,"vk":false,"pocket":true,"google":false,"viber":false,"stumbleupon":false,"qzone":false,"linkedin":false},"auto-scroll-table":{},"code":{"copyButtons":true},"hide-element":{"elements":[".gitbook-link"]},"fontsettings":{"theme":"white","family":"sans","size":2},"favicon":"./picture/abacus-logo.jpg","theme-comscore":{},"page-toc-button":{"maxTocDepth":2,"minTocSize":2},"github-buttons":{"buttons":[{"user":"MCresearch","repo":"abacus-user-guide","type":"star","size":"middle","count":true}]},"custom-favicon":{},"3-ba":{"configuration":"auto","token":"25153cb8bd9a872cfec60b4b23ac0176"},"mathjax-pro":{"forceSVG":false,"version":"2.7.7"},"sharing":{"weibo":false},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"anchors":{},"insert-logo":{"style":"background: none;max-height: 70px;width: -webkit-fill-available;max-width: 180px;","url":"./picture/abacus-logo.svg"},"expandable-chapters":{},"search-plus":{},"image-captions":{"caption":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","variable_name":"_pictures"}},"theme":"default","name":"abacus-user-guide","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{"_pictures":[{"backlink":"abacus-upf.html#fig1.1.5.1","level":"1.1.5","list_caption":"Figure: 局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","alt":"局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","nro":1,"url":"picture/fig_upf-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","attributes":{},"skip":false,"key":"1.1.5.1"},{"backlink":"abacus-upf.html#fig1.1.5.2","level":"1.1.5","list_caption":"Figure: S赝波函数与全电子波函数对比","alt":"S赝波函数与全电子波函数对比","nro":2,"url":"picture/fig_upf-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"S赝波函数与全电子波函数对比","attributes":{},"skip":false,"key":"1.1.5.2"},{"backlink":"abacus-upf.html#fig1.1.5.3","level":"1.1.5","list_caption":"Figure: S的双投影波函数","alt":"S的双投影波函数","nro":3,"url":"picture/fig_upf-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"S的双投影波函数","attributes":{},"skip":false,"key":"1.1.5.3"},{"backlink":"abacus-upf.html#fig1.1.5.4","level":"1.1.5","list_caption":"Figure: 不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","alt":"不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","nro":4,"url":"picture/fig_upf-4.png","index":4,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","attributes":{},"skip":false,"key":"1.1.5.4"},{"backlink":"abacus-upf.html#fig1.1.5.5","level":"1.1.5","list_caption":"Figure: 不同轨道角动量对应的截断能","alt":"不同轨道角动量对应的截断能","nro":5,"url":"picture/fig_upf-5.png","index":5,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"不同轨道角动量对应的截断能","attributes":{},"skip":false,"key":"1.1.5.5"},{"backlink":"abacus-surface2.html#fig1.1.14.1","level":"1.1.14","list_caption":"Figure: 锯齿状势场分布图","alt":"锯齿状势场分布图","nro":6,"url":"picture/fig_surface2-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"锯齿状势场分布图","attributes":{},"skip":false,"key":"1.1.14.1"},{"backlink":"abacus-surface2.html#fig1.1.14.2","level":"1.1.14","list_caption":"Figure: 一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","alt":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","nro":7,"url":"picture/fig_surface2-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","attributes":{},"skip":false,"key":"1.1.14.2"},{"backlink":"abacus-surface2.html#fig1.1.14.3","level":"1.1.14","list_caption":"Figure: 静电势沿超胞Z轴变化图","alt":"静电势沿超胞Z轴变化图","nro":8,"url":"picture/fig_surface2-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"静电势沿超胞Z轴变化图","attributes":{},"skip":false,"key":"1.1.14.3"},{"backlink":"abacus-surface5.html#fig1.1.15.1","level":"1.1.15","list_caption":"Figure: Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","alt":"Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","nro":9,"url":"picture/fig_surface5-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","attributes":{},"skip":false,"key":"1.1.15.1"},{"backlink":"abacus-surface5.html#fig1.1.15.2","level":"1.1.15","list_caption":"Figure: 锯齿状势场分布图","alt":"锯齿状势场分布图","nro":10,"url":"picture/fig_surface2-1.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"锯齿状势场分布图","attributes":{},"skip":false,"key":"1.1.15.2"},{"backlink":"abacus-surface5.html#fig1.1.15.3","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","alt":"采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","nro":11,"url":"picture/fig_surface5-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","attributes":{},"skip":false,"key":"1.1.15.3"},{"backlink":"abacus-surface5.html#fig1.1.15.4","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","alt":"采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","nro":12,"url":"picture/fig_surface5-4.png","index":4,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","attributes":{},"skip":false,"key":"1.1.15.4"},{"backlink":"abacus-surface5.html#fig1.1.15.5","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","alt":"采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","nro":13,"url":"picture/fig_surface5-5.png","index":5,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","attributes":{},"skip":false,"key":"1.1.15.5"},{"backlink":"abacus-surface6.html#fig1.1.16.1","level":"1.1.16","list_caption":"Figure: 一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","alt":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","nro":14,"url":"picture/fig_surface6-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","attributes":{},"skip":false,"key":"1.1.16.1"},{"backlink":"abacus-surface6.html#fig1.1.16.2","level":"1.1.16","list_caption":"Figure: 静电势(Electrostatic Potential)沿超胞Z轴变化图","alt":"静电势(Electrostatic Potential)沿超胞Z轴变化图","nro":15,"url":"picture/fig_surface6-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"静电势(Electrostatic Potential)沿超胞Z轴变化图","attributes":{},"skip":false,"key":"1.1.16.2"},{"backlink":"develop-path4.html#fig1.2.9.1","level":"1.2.9","list_caption":"Figure: ","alt":" ","nro":16,"url":"picture/fig_path4-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":" ","attributes":{},"skip":false,"key":"1.2.9.1"},{"backlink":"develop-path4.html#fig1.2.9.2","level":"1.2.9","list_caption":"Figure: PW_Basis::distribute_r():设一个pool中有5个processors","alt":"PW_Basis::distribute_r():设一个pool中有5个processors","nro":17,"url":"picture/fig_path4-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"PW_Basis::distribute_r():设一个pool中有5个processors","attributes":{},"skip":false,"key":"1.2.9.2"},{"backlink":"develop-path4.html#fig1.2.9.3","level":"1.2.9","list_caption":"Figure: this->count_pw_st(st_length2D, st_bottom2D)","alt":"this->count_pw_st(st_length2D, st_bottom2D)","nro":18,"url":"picture/fig_path4-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"this->count_pw_st(st_length2D, st_bottom2D)","attributes":{},"skip":false,"key":"1.2.9.3"},{"backlink":"develop-path5.html#fig1.2.10.1","level":"1.2.10","list_caption":"Figure: 善用Ctrl+F","alt":"善用Ctrl+F","nro":19,"url":"picture/fig_path5-9.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"善用Ctrl+F","attributes":{},"skip":false,"key":"1.2.10.1"},{"backlink":"develop-path5.html#fig1.2.10.2","level":"1.2.10","list_caption":"Figure: klist.cpp line 486: K_Vectors::Monkhorst_Pack_formula(), k_type = 0 and 1","alt":"klist.cpp line 486: K_Vectors::Monkhorst_Pack_formula(), k_type = 0 and 1","nro":20,"url":"picture/fig_path5-10.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"klist.cpp line 486: K_Vectors::Monkhorst_Pack_formula(), k_type = 0 and 1","attributes":{},"skip":false,"key":"1.2.10.2"},{"backlink":"develop-path5.html#fig1.2.10.3","level":"1.2.10","list_caption":"Figure: klist.cpp line 520: const int i = mpnx * mpny * (z - 1) + mpnx * (y - 1) + (x - 1)","alt":"klist.cpp line 520: const int i = mpnx * mpny * (z - 1) + mpnx * (y - 1) + (x - 1)","nro":21,"url":"picture/fig_path5-11.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"klist.cpp line 520: const int i = mpnx * mpny * (z - 1) + mpnx * (y - 1) + (x - 1)","attributes":{},"skip":false,"key":"1.2.10.3"},{"backlink":"develop-path5.html#fig1.2.10.4","level":"1.2.10","list_caption":"Figure: 1-dimensional example","alt":"1-dimensional example","nro":22,"url":"picture/fig_path5-12.png","index":4,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"1-dimensional example","attributes":{},"skip":false,"key":"1.2.10.4"},{"backlink":"develop-path5.html#fig1.2.10.5","level":"1.2.10","list_caption":"Figure: 2-dimensional example","alt":"2-dimensional example","nro":23,"url":"picture/fig_path5-13.png","index":5,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"2-dimensional example","attributes":{},"skip":false,"key":"1.2.10.5"}]},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"develop-path1.md","mtime":"2023-10-04T14:18:52.079Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-10-04T15:29:41.868Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/develop-path2.html b/_book/develop-path2.html
index 191dfe74..d829579b 100644
--- a/_book/develop-path2.html
+++ b/_book/develop-path2.html
@@ -1028,7 +1028,7 @@ // a(i) is lattice vector
}
-我们约定,LATTICE_CONSTANT无量纲,LATTICE_VECTORS有量纲,STRU文件中原子坐标无量纲。
+我们约定,LATTICE_CONSTANT
无量纲,LATTICE_VECTORS
有量纲,STRU
文件中原子坐标无量纲。
UnitCell::read_atom_positions()
🔧重构思考
@@ -1042,7 +1042,7 @@
::
STRU 第二行指定坐标类型,被读取为 UnitCell::Coordinate
。UnitCell::Coordinate
在 STRU
里有不同选项,⚙ 决定原子的具体位置和单位:
if(Coordinate != "Cartesian"
+ if(Coordinate != "Cartesian"
&& Coordinate != "Direct"
&& Coordinate != "Cartesian_angstrom"
&& Coordinate != "Cartesian_au"
@@ -1092,7 +1092,7 @@ int na = 0;
+ int na = 0;
this->nat = 0;
assert(ntype>0);
for (int it = 0;it < ntype; it++)
@@ -1105,7 +1105,7 @@ ModuleBase::GlobalFunc::READ_VALUE(ifpos, atoms[it].label);
+ ModuleBase::GlobalFunc::READ_VALUE(ifpos, atoms[it].label);
bool sequence_match = false;
for(int it2=0; it2<ntype; it2++)
{
@@ -1121,7 +1121,7 @@ }
读取当前原子类型的 starting_magnetization、原子总数 na
-ModuleBase::GlobalFunc::READ_VALUE(ifpos, magnet.start_magnetization[it] );
+ ModuleBase::GlobalFunc::READ_VALUE(ifpos, magnet.start_magnetization[it] );
...
ModuleBase::GlobalFunc::READ_VALUE(ifpos, na);
this->atoms[it].na = na;
@@ -1149,17 +1149,17 @@ [
it].m_loc_ = new ModuleBase::Vector3<double>[na];
⚙ 然后在 ATOMIC_POSITIONS 中读取:
-atoms[it].mass = this->atom_mass[it];
+ atoms[it].mass = this->atom_mass[it];
❗ 此处的 atoms[it].mass
与 this->atom_mass[it]
的用法与 atomis[it].label
与 this->atom_label[it]
不同:传值 vs 核对。
接下来读取类中每个原子的速度信息,在做分子动力学模拟的时候可能需要用到:
-for (int ia = 0;ia < na; ia++)
+ for (int ia = 0;ia < na; ia++)
{
ifpos >> v.x >> v.y >> v.z;
然而,当前 STRU
文件在 ATOMIC_POSITIONS
的设计比较复杂,其可以包括任何一组 atom-specific 数据,且数量和顺序均不受限制,这导致判断条件变得复杂,详见 module_cell/read_atoms.cpp:line 536 - 567
(link)。
atoms[it].mag
的赋值并非直接读取:
-else if ( tmpid == "mag" || tmpid == "magmom")
+ else if ( tmpid == "mag" || tmpid == "magmom")
{
set_element_mag_zero = true;
double tmpamg=0; ifpos >> tmpamg;
@@ -1185,7 +1185,7 @@ }
⚙ 若 mag/magmom 后有一个值,则读取其值赋给 atoms[it]::mag[ia]
,将 input_vec_mag
置为 false
,若有三个值,则三个值依次被传入 atoms[it].m_loc_[ia].x
, atoms[it].m_loc_[ia].y
和 atoms[it].m_loc_[ia].z
,并将 input_vec_mag
置为 true
,之后其向量模长为 atoms[it]::mag[ia]
,然后在使用 angle1
, angle2
来重新生成 mag
。
if(GlobalV::NSPIN==4)
+ if(GlobalV::NSPIN==4)
{
if(GlobalV::NONCOLIN)
{
@@ -1227,7 +1227,7 @@ pw.x input description
ABACUS 对 nspin=4
情况的参数处理:
//module_io/input_conv.cpp line 376
if (INPUT.noncolin || INPUT.lspinorb)
@@ -1312,7 +1312,7 @@
UnitCell::setup_cell(): the rest, and an example of backtracking unclear variable
离开 STRU
文件的解析部分,接下来计算了初始磁化强度:
-//after read STRU, calculate initial total magnetization when NSPIN=2
+ //after read STRU, calculate initial total magnetization when NSPIN=2
if(GlobalV::NSPIN == 2 && !GlobalV::TWO_EFERMI)
{
for(int it = 0;it<this->ntype; it++)
@@ -1326,31 +1326,25 @@ if (std::abs(INPUT.nupdown) > 1e-6)
- {
- GlobalV::TWO_EFERMI = true;
- GlobalV::nupdown = INPUT.nupdown;
- }
-
-因此 GlobalV::TWO_EFERMI
变量实际依赖于 INPUT.nupdown
。
-
-- 接下来在
module_io/input.cpp
中寻找含 INPUT.nupdown
的 if(strcmp(...))
单元,查看在 INPUT
文件中是何参数赋予其具体值:
-
-else if (strcmp("nupdown", word) == 0)
+在 module_io/input_conv.cpp
中寻找该变量,是何变量赋其值,发现: if (std::abs(INPUT.nupdown) > 1e-6)
{
- read_value(ifs, nupdown);
- }
+ GlobalV::TWO_EFERMI = true;
+ GlobalV::nupdown = INPUT.nupdown;
+ }
-即 INPUT.nupdown
在 INPUT
中也为 nupdown
。接下来打开 Full keyword list 寻找其解释。
-
+ 因此 GlobalV::TWO_EFERMI
变量实际依赖于 INPUT.nupdown
。
+接下来在 module_io/input.cpp
中寻找含 INPUT.nupdown
的 if(strcmp(...))
单元,查看在 INPUT
文件中是何参数赋予其具体值: else if (strcmp("nupdown", word) == 0)
+ {
+ read_value(ifs, nupdown);
+ }
+
+即 INPUT.nupdown
在 INPUT
中也为 nupdown
。接下来打开 Full keyword list 寻找其解释。
得到结果,即 nupdown
为 spin up 和 spin down 电子数量差值:
因此该部分逻辑为:若未使用 nupdown
来指定单电子数量,则对每种原子内每个原子,累加其 mag/magmom,即磁矩模长,赋予 GlobalV::nupdown
。❗ 但对于两种方式均赋予,但值不一致的情况未进行处理。
接下来根据在 STRU 中读取的晶胞参数,计算晶胞体积,并计算倒空间矢量(在上篇中已经对 latvec
, G
, GT
, GGT
有所介绍,invGGT
的意义也不言自明):
-this->omega = std::abs( latvec.Det() ) * this->lat0 * lat0 * lat0 ;
+ this->omega = std::abs( latvec.Det() ) * this->lat0 * lat0 * lat0 ;
this->GT = latvec.Inverse();
this->G = GT.Transpose();
@@ -1442,7 +1436,7 @@ =
static_cast<ModulePW::PW_Basis_Big*>(pw_rho);
对于 ESolver 本身,其指针对象 p_esolver 实际上也有类似操作:
-//Some API to operate E_Solver
+ //Some API to operate E_Solver
void init_esolver(ESolver*& p_esolver)
{
//determine type of esolver based on INPUT information
@@ -1907,7 +1901,7 @@ Introduction to ABACUS: Path to PW calculation - Part 1
下篇:Introduction to ABACUS: Path to PW calculation - Part 3
@@ -1951,7 +1945,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"Introduction to ABACUS: Path to PW calculation - Part 2","level":"1.2.7","depth":2,"next":{"title":"Introduction to ABACUS: Path to PW calculation - Part 3","level":"1.2.8","depth":2,"path":"develop-path3.md","ref":"develop-path3.md","articles":[]},"previous":{"title":"Introduction to ABACUS: Path to PW calculation - Part 1","level":"1.2.6","depth":2,"path":"develop-path1.md","ref":"develop-path1.md","articles":[]},"dir":"ltr"},"config":{"plugins":["image-captions","auto-scroll-table","splitter","3-ba","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","tbfed-pagefooter","disqus","github-buttons","sharing-plus","-sharing","livereload"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"tbfed-pagefooter":{"copyright":"Copyright © mcresearch.gitee.io 2023","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"page-treeview":{"copyright":"Copyright © aleen42","minHeaderCount":"2","minHeaderDeep":"2"},"chapter-fold":{},"prism":{},"disqus":{"useIdentifier":false,"shortName":"abacus-user-guide"},"intopic-toc":{"isCollapsed":true,"isScrollspyActive":true,"label":"In this article","maxDepth":6,"mode":"nested","selector":".markdown-section h1, .markdown-section h2, .markdown-section h3, .markdown-section h4, .markdown-section h5, .markdown-section h6","visible":true},"livereload":{},"splitter":{},"sharing-plus":{"qq":false,"all":["facebook","google","twitter","instapaper","linkedin","pocket","stumbleupon"],"douban":false,"facebook":true,"weibo":false,"instapaper":false,"whatsapp":false,"hatenaBookmark":false,"twitter":true,"messenger":false,"line":false,"vk":false,"pocket":true,"google":false,"viber":false,"stumbleupon":false,"qzone":false,"linkedin":false},"auto-scroll-table":{},"code":{"copyButtons":true},"hide-element":{"elements":[".gitbook-link"]},"fontsettings":{"theme":"white","family":"sans","size":2},"favicon":"./picture/abacus-logo.jpg","theme-comscore":{},"page-toc-button":{"maxTocDepth":2,"minTocSize":2},"github-buttons":{"buttons":[{"user":"MCresearch","repo":"abacus-user-guide","type":"star","size":"middle","count":true}]},"custom-favicon":{},"3-ba":{"configuration":"auto","token":"25153cb8bd9a872cfec60b4b23ac0176"},"mathjax-pro":{"forceSVG":false,"version":"2.7.7"},"sharing":{"weibo":false},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"anchors":{},"insert-logo":{"style":"background: none;max-height: 70px;width: -webkit-fill-available;max-width: 180px;","url":"./picture/abacus-logo.svg"},"expandable-chapters":{},"search-plus":{},"image-captions":{"caption":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","variable_name":"_pictures"}},"theme":"default","name":"abacus-user-guide","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{"_pictures":[{"backlink":"abacus-upf.html#fig1.1.5.1","level":"1.1.5","list_caption":"Figure: 局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","alt":"局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","nro":1,"url":"picture/fig_upf-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","attributes":{},"skip":false,"key":"1.1.5.1"},{"backlink":"abacus-upf.html#fig1.1.5.2","level":"1.1.5","list_caption":"Figure: S赝波函数与全电子波函数对比","alt":"S赝波函数与全电子波函数对比","nro":2,"url":"picture/fig_upf-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"S赝波函数与全电子波函数对比","attributes":{},"skip":false,"key":"1.1.5.2"},{"backlink":"abacus-upf.html#fig1.1.5.3","level":"1.1.5","list_caption":"Figure: S的双投影波函数","alt":"S的双投影波函数","nro":3,"url":"picture/fig_upf-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"S的双投影波函数","attributes":{},"skip":false,"key":"1.1.5.3"},{"backlink":"abacus-upf.html#fig1.1.5.4","level":"1.1.5","list_caption":"Figure: 不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","alt":"不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","nro":4,"url":"picture/fig_upf-4.png","index":4,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","attributes":{},"skip":false,"key":"1.1.5.4"},{"backlink":"abacus-upf.html#fig1.1.5.5","level":"1.1.5","list_caption":"Figure: 不同轨道角动量对应的截断能","alt":"不同轨道角动量对应的截断能","nro":5,"url":"picture/fig_upf-5.png","index":5,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"不同轨道角动量对应的截断能","attributes":{},"skip":false,"key":"1.1.5.5"},{"backlink":"abacus-surface2.html#fig1.1.14.1","level":"1.1.14","list_caption":"Figure: 锯齿状势场分布图","alt":"锯齿状势场分布图","nro":6,"url":"picture/fig_surface2-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"锯齿状势场分布图","attributes":{},"skip":false,"key":"1.1.14.1"},{"backlink":"abacus-surface2.html#fig1.1.14.2","level":"1.1.14","list_caption":"Figure: 一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","alt":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","nro":7,"url":"picture/fig_surface2-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","attributes":{},"skip":false,"key":"1.1.14.2"},{"backlink":"abacus-surface2.html#fig1.1.14.3","level":"1.1.14","list_caption":"Figure: 静电势沿超胞Z轴变化图","alt":"静电势沿超胞Z轴变化图","nro":8,"url":"picture/fig_surface2-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"静电势沿超胞Z轴变化图","attributes":{},"skip":false,"key":"1.1.14.3"},{"backlink":"abacus-surface5.html#fig1.1.15.1","level":"1.1.15","list_caption":"Figure: Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","alt":"Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","nro":9,"url":"picture/fig_surface5-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","attributes":{},"skip":false,"key":"1.1.15.1"},{"backlink":"abacus-surface5.html#fig1.1.15.2","level":"1.1.15","list_caption":"Figure: 锯齿状势场分布图","alt":"锯齿状势场分布图","nro":10,"url":"picture/fig_surface2-1.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"锯齿状势场分布图","attributes":{},"skip":false,"key":"1.1.15.2"},{"backlink":"abacus-surface5.html#fig1.1.15.3","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","alt":"采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","nro":11,"url":"picture/fig_surface5-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","attributes":{},"skip":false,"key":"1.1.15.3"},{"backlink":"abacus-surface5.html#fig1.1.15.4","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","alt":"采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","nro":12,"url":"picture/fig_surface5-4.png","index":4,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","attributes":{},"skip":false,"key":"1.1.15.4"},{"backlink":"abacus-surface5.html#fig1.1.15.5","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","alt":"采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","nro":13,"url":"picture/fig_surface5-5.png","index":5,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","attributes":{},"skip":false,"key":"1.1.15.5"},{"backlink":"abacus-surface6.html#fig1.1.16.1","level":"1.1.16","list_caption":"Figure: 一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","alt":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","nro":14,"url":"picture/fig_surface6-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","attributes":{},"skip":false,"key":"1.1.16.1"},{"backlink":"abacus-surface6.html#fig1.1.16.2","level":"1.1.16","list_caption":"Figure: 静电势(Electrostatic Potential)沿超胞Z轴变化图","alt":"静电势(Electrostatic Potential)沿超胞Z轴变化图","nro":15,"url":"picture/fig_surface6-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"静电势(Electrostatic Potential)沿超胞Z轴变化图","attributes":{},"skip":false,"key":"1.1.16.2"}]},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"develop-path2.md","mtime":"2023-10-02T07:41:59.210Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-10-03T14:38:41.027Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"Introduction to ABACUS: Path to PW calculation - Part 2","level":"1.2.7","depth":2,"next":{"title":"Introduction to ABACUS: Path to PW calculation - Part 3","level":"1.2.8","depth":2,"path":"develop-path3.md","ref":"develop-path3.md","articles":[]},"previous":{"title":"Introduction to ABACUS: Path to PW calculation - Part 1","level":"1.2.6","depth":2,"path":"develop-path1.md","ref":"develop-path1.md","articles":[]},"dir":"ltr"},"config":{"plugins":["image-captions","auto-scroll-table","splitter","3-ba","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","tbfed-pagefooter","disqus","github-buttons","sharing-plus","-sharing","livereload"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"tbfed-pagefooter":{"copyright":"Copyright © mcresearch.gitee.io 2023","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"page-treeview":{"copyright":"Copyright © aleen42","minHeaderCount":"2","minHeaderDeep":"2"},"chapter-fold":{},"prism":{},"disqus":{"useIdentifier":false,"shortName":"abacus-user-guide"},"intopic-toc":{"isCollapsed":true,"isScrollspyActive":true,"label":"In this article","maxDepth":6,"mode":"nested","selector":".markdown-section h1, .markdown-section h2, .markdown-section h3, .markdown-section h4, .markdown-section h5, .markdown-section h6","visible":true},"livereload":{},"splitter":{},"sharing-plus":{"qq":false,"all":["facebook","google","twitter","instapaper","linkedin","pocket","stumbleupon"],"douban":false,"facebook":true,"weibo":false,"instapaper":false,"whatsapp":false,"hatenaBookmark":false,"twitter":true,"messenger":false,"line":false,"vk":false,"pocket":true,"google":false,"viber":false,"stumbleupon":false,"qzone":false,"linkedin":false},"auto-scroll-table":{},"code":{"copyButtons":true},"hide-element":{"elements":[".gitbook-link"]},"fontsettings":{"theme":"white","family":"sans","size":2},"favicon":"./picture/abacus-logo.jpg","theme-comscore":{},"page-toc-button":{"maxTocDepth":2,"minTocSize":2},"github-buttons":{"buttons":[{"user":"MCresearch","repo":"abacus-user-guide","type":"star","size":"middle","count":true}]},"custom-favicon":{},"3-ba":{"configuration":"auto","token":"25153cb8bd9a872cfec60b4b23ac0176"},"mathjax-pro":{"forceSVG":false,"version":"2.7.7"},"sharing":{"weibo":false},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"anchors":{},"insert-logo":{"style":"background: none;max-height: 70px;width: -webkit-fill-available;max-width: 180px;","url":"./picture/abacus-logo.svg"},"expandable-chapters":{},"search-plus":{},"image-captions":{"caption":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","variable_name":"_pictures"}},"theme":"default","name":"abacus-user-guide","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{"_pictures":[{"backlink":"abacus-upf.html#fig1.1.5.1","level":"1.1.5","list_caption":"Figure: 局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","alt":"局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","nro":1,"url":"picture/fig_upf-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","attributes":{},"skip":false,"key":"1.1.5.1"},{"backlink":"abacus-upf.html#fig1.1.5.2","level":"1.1.5","list_caption":"Figure: S赝波函数与全电子波函数对比","alt":"S赝波函数与全电子波函数对比","nro":2,"url":"picture/fig_upf-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"S赝波函数与全电子波函数对比","attributes":{},"skip":false,"key":"1.1.5.2"},{"backlink":"abacus-upf.html#fig1.1.5.3","level":"1.1.5","list_caption":"Figure: S的双投影波函数","alt":"S的双投影波函数","nro":3,"url":"picture/fig_upf-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"S的双投影波函数","attributes":{},"skip":false,"key":"1.1.5.3"},{"backlink":"abacus-upf.html#fig1.1.5.4","level":"1.1.5","list_caption":"Figure: 不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","alt":"不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","nro":4,"url":"picture/fig_upf-4.png","index":4,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","attributes":{},"skip":false,"key":"1.1.5.4"},{"backlink":"abacus-upf.html#fig1.1.5.5","level":"1.1.5","list_caption":"Figure: 不同轨道角动量对应的截断能","alt":"不同轨道角动量对应的截断能","nro":5,"url":"picture/fig_upf-5.png","index":5,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"不同轨道角动量对应的截断能","attributes":{},"skip":false,"key":"1.1.5.5"},{"backlink":"abacus-surface2.html#fig1.1.14.1","level":"1.1.14","list_caption":"Figure: 锯齿状势场分布图","alt":"锯齿状势场分布图","nro":6,"url":"picture/fig_surface2-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"锯齿状势场分布图","attributes":{},"skip":false,"key":"1.1.14.1"},{"backlink":"abacus-surface2.html#fig1.1.14.2","level":"1.1.14","list_caption":"Figure: 一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","alt":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","nro":7,"url":"picture/fig_surface2-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","attributes":{},"skip":false,"key":"1.1.14.2"},{"backlink":"abacus-surface2.html#fig1.1.14.3","level":"1.1.14","list_caption":"Figure: 静电势沿超胞Z轴变化图","alt":"静电势沿超胞Z轴变化图","nro":8,"url":"picture/fig_surface2-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"静电势沿超胞Z轴变化图","attributes":{},"skip":false,"key":"1.1.14.3"},{"backlink":"abacus-surface5.html#fig1.1.15.1","level":"1.1.15","list_caption":"Figure: Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","alt":"Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","nro":9,"url":"picture/fig_surface5-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","attributes":{},"skip":false,"key":"1.1.15.1"},{"backlink":"abacus-surface5.html#fig1.1.15.2","level":"1.1.15","list_caption":"Figure: 锯齿状势场分布图","alt":"锯齿状势场分布图","nro":10,"url":"picture/fig_surface2-1.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"锯齿状势场分布图","attributes":{},"skip":false,"key":"1.1.15.2"},{"backlink":"abacus-surface5.html#fig1.1.15.3","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","alt":"采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","nro":11,"url":"picture/fig_surface5-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","attributes":{},"skip":false,"key":"1.1.15.3"},{"backlink":"abacus-surface5.html#fig1.1.15.4","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","alt":"采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","nro":12,"url":"picture/fig_surface5-4.png","index":4,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","attributes":{},"skip":false,"key":"1.1.15.4"},{"backlink":"abacus-surface5.html#fig1.1.15.5","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","alt":"采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","nro":13,"url":"picture/fig_surface5-5.png","index":5,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","attributes":{},"skip":false,"key":"1.1.15.5"},{"backlink":"abacus-surface6.html#fig1.1.16.1","level":"1.1.16","list_caption":"Figure: 一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","alt":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","nro":14,"url":"picture/fig_surface6-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","attributes":{},"skip":false,"key":"1.1.16.1"},{"backlink":"abacus-surface6.html#fig1.1.16.2","level":"1.1.16","list_caption":"Figure: 静电势(Electrostatic Potential)沿超胞Z轴变化图","alt":"静电势(Electrostatic Potential)沿超胞Z轴变化图","nro":15,"url":"picture/fig_surface6-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"静电势(Electrostatic Potential)沿超胞Z轴变化图","attributes":{},"skip":false,"key":"1.1.16.2"},{"backlink":"develop-path4.html#fig1.2.9.1","level":"1.2.9","list_caption":"Figure: ","alt":" ","nro":16,"url":"picture/fig_path4-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":" ","attributes":{},"skip":false,"key":"1.2.9.1"},{"backlink":"develop-path4.html#fig1.2.9.2","level":"1.2.9","list_caption":"Figure: PW_Basis::distribute_r():设一个pool中有5个processors","alt":"PW_Basis::distribute_r():设一个pool中有5个processors","nro":17,"url":"picture/fig_path4-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"PW_Basis::distribute_r():设一个pool中有5个processors","attributes":{},"skip":false,"key":"1.2.9.2"},{"backlink":"develop-path4.html#fig1.2.9.3","level":"1.2.9","list_caption":"Figure: this->count_pw_st(st_length2D, st_bottom2D)","alt":"this->count_pw_st(st_length2D, st_bottom2D)","nro":18,"url":"picture/fig_path4-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"this->count_pw_st(st_length2D, st_bottom2D)","attributes":{},"skip":false,"key":"1.2.9.3"},{"backlink":"develop-path5.html#fig1.2.10.1","level":"1.2.10","list_caption":"Figure: 善用Ctrl+F","alt":"善用Ctrl+F","nro":19,"url":"picture/fig_path5-9.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"善用Ctrl+F","attributes":{},"skip":false,"key":"1.2.10.1"},{"backlink":"develop-path5.html#fig1.2.10.2","level":"1.2.10","list_caption":"Figure: klist.cpp line 486: K_Vectors::Monkhorst_Pack_formula(), k_type = 0 and 1","alt":"klist.cpp line 486: K_Vectors::Monkhorst_Pack_formula(), k_type = 0 and 1","nro":20,"url":"picture/fig_path5-10.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"klist.cpp line 486: K_Vectors::Monkhorst_Pack_formula(), k_type = 0 and 1","attributes":{},"skip":false,"key":"1.2.10.2"},{"backlink":"develop-path5.html#fig1.2.10.3","level":"1.2.10","list_caption":"Figure: klist.cpp line 520: const int i = mpnx * mpny * (z - 1) + mpnx * (y - 1) + (x - 1)","alt":"klist.cpp line 520: const int i = mpnx * mpny * (z - 1) + mpnx * (y - 1) + (x - 1)","nro":21,"url":"picture/fig_path5-11.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"klist.cpp line 520: const int i = mpnx * mpny * (z - 1) + mpnx * (y - 1) + (x - 1)","attributes":{},"skip":false,"key":"1.2.10.3"},{"backlink":"develop-path5.html#fig1.2.10.4","level":"1.2.10","list_caption":"Figure: 1-dimensional example","alt":"1-dimensional example","nro":22,"url":"picture/fig_path5-12.png","index":4,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"1-dimensional example","attributes":{},"skip":false,"key":"1.2.10.4"},{"backlink":"develop-path5.html#fig1.2.10.5","level":"1.2.10","list_caption":"Figure: 2-dimensional example","alt":"2-dimensional example","nro":23,"url":"picture/fig_path5-13.png","index":5,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"2-dimensional example","attributes":{},"skip":false,"key":"1.2.10.5"}]},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"develop-path2.md","mtime":"2023-10-04T14:37:12.149Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-10-04T15:29:41.868Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/develop-path3.html b/_book/develop-path3.html
index b8de33d9..09176394 100644
--- a/_book/develop-path3.html
+++ b/_book/develop-path3.html
@@ -750,11 +750,11 @@ Driver
-Driver::atomic_world()
-Driver::driver_run()
-多层继承:Init() functions in esolver class
-Trigger: ESolver_FP::Init()
+Driver
+Driver::atomic_world()
+Driver::driver_run()
+多层继承:Init() functions in esolver class
+Trigger: ESolver_FP::Init()
承接上篇中已经导入的结构信息,以及了解到构造函数及其伴随的变量初始化和 ABACUS 里应用到的 C++ 多态编程,接下来即将(逐渐)步入 ABACUS 的核心内容。我们暂时跳过位于 source/driver_run.cpp:driver_run()
的:
// 3. For these two types of calculations
// nothing else need to be initialized
@@ -830,14 +830,14 @@ }
同理,ESolver_KS
的数据成员,也被 ESolver_KS_PW
继承。ESolver_FP::Init()
首先调用 UnitCell::read_pseudo()
函数进行赝势文件读取,而将赝势文件读取任务放在 FP 层级下,也暗示对于 ABACUS 的第一性原理方法实现来讲,都需要使用赝势。
-Pseudopotential import: UnitCell::read_pseudo()
+Pseudopotential import: UnitCell::read_pseudo()
void UnitCell::read_pseudo(std::ofstream &ofs)
{
read_cell_pseudopots(GlobalV::global_pseudo_dir, ofs);
在解读赝势文件读取功能之前,首先需要对赝势文件的结构和信息做一定程度的了解。
-# ONCV pseudopotential file
-## Section 0: Norm-conserving conditions, generation of pseudopotential and header of exact UPF file
+ONCV pseudopotential file
+Section 0: Norm-conserving conditions, generation of pseudopotential and header of exact UPF file
赝势的意义不言自明,其中模守恒赝势需满足如下条件:
- (赝势得到的能级和全电子方法求解的能级一样,这里 ps 代表 pseudopotentials)
@@ -852,7 +852,7 @@ V_l(r)=\frac{1}{\phi^\text{ps}_l(r)}[\epsilon^\text{ps}_l-\frac{\hbar^2}{2m}\frac{l(l+1)}{r^2}+\frac{\hbar^2}{2m}\frac{d^2}{dr^2}]\phi^\text{ps}_l(r),解得。
- 扣除中 Hartree、xc 部分,得到:。
-更多细节见
+更多细节见:www.tcm.phy.cam.ac.uk
<UPF version="2.0.1">
<PP_INFO>
<!-- omitted information here -->
@@ -865,8 +865,8 @@ <!-- -->
从 UPF 文件(注意 UPF 文件也有不同的版本,目前 ABACUS 都支持,若有不支持的,可以提 Github 的 issues 进行讨论)开始,截止到 <PP_HEADER>
之前,提供了赝势文件的作者信息,引用信息以及生成赝势文件所使用的程序和相应输入文件,并附带输入文件参数中的解释。由于此块内容对实际计算并不起作用,因此暂时略过。
<PP_HEADER
+Section 1:
+ <PP_HEADER
generated="Generated using ONCVPSP code by D. R. Hamann" author="Martin Schlipf and Francois Gygi"
date="150105" comment=""
element="Al"
@@ -890,8 +890,8 @@ number_of_proj
="4"/>
<PP_HEADER>
部分尽管已经位于所谓“not human readable”区域,但也并非如此。这部分“标签”(HTML 语境)/block 实际上包含了众多精简过的信息,如元素名称(element)、赝势类型(pseudo_type,模守恒,norm-conserving,NC),相对论效应(relativistic),是否为超软赝势等等信息。当前 Al 理论上其原子序数 13,因此有 13 个电子,但此处 z_valence 参数为 11,即有两个 1s 电子被赝化,只留下 2s, 2p, 3s, 3p 电子共 2+6+2+1 个。对于某些元素,甚至有大核赝势与小核赝势之分,根据赝化电子数量不同进行区分。显而易见地,赝化电子数量越多,则计算量越小,但计算结果的精确程度可能更低。
<PP_MESH>
+Section 2:
+ <PP_MESH>
<PP_R type="real" size=" 602" columns="8">
0.0000 0.0100 0.0200 0.0300 0.0400 0.0500 0.0600 0.0700
<!-- omitted information here -->
@@ -907,8 +907,8 @@ </PP_MESH>
这部分开始出现了关于实空间格点相关量的定义。在 tag 中不仅指定数据类型为实数,也指定当前数据的长度(size),以及数据存储的列数(columns = 8)。PP_R
为格点坐标,PP_RAB
则为格点间距。
<PP_LOCAL type="real" size=" 602" columns="4">
+Section 3:
+ <PP_LOCAL type="real" size=" 602" columns="4">
-4.5793174225E+01 -4.5788454271E+01 -4.5774276797E+01 -4.5750659428E+01
<!-- omitted information here -->
-3.6912752197E+00 -3.6850921941E+00 -3.6789298138E+00 -3.6727880140E+00
@@ -917,8 +917,8 @@ <PP_LOCAL>
部分开始,正式开始写入赝势的具体数值,建立在 <PP_R>
和 <PP_RAB>
所描述的实空间格点上。。<PP_LOCAL>
正是赝势的局域势部分。
<PP_NONLOCAL>
+Section 4:
+ <PP_NONLOCAL>
<PP_BETA.1
type="real"
size=" 602"
@@ -938,8 +938,8 @@ cutoff_radius_index
=" 246" cutoff_radius=" 2.4500000000E+00" >
<!-- omitted information here -->
</PP_BETA.2>
- <PP_BETA.3 type="real" size=" 602" columns="4" index="3" angular_momentum="1"<strong>
-</strong> cutoff_radius_index=" 246" cutoff_radius=" 2.4500000000E+00" >
+ <PP_BETA.3 type="real" size=" 602" columns="4" index="3" angular_momentum="1"
+ cutoff_radius_index=" 246" cutoff_radius=" 2.4500000000E+00" >
<!-- omitted information here -->
</PP_BETA.3>
<PP_BETA.4 type="real" size=" 602" columns="4" index="4" angular_momentum="1"
@@ -956,7 +956,7 @@ <PP_PSWFC>
</PP_PSWFC>
<PP_RHOATOM type="real" size=" 602" columns="4">
@@ -975,7 +975,7 @@ |\beta\rangle和 pswfc 已经乘径向坐标。
-# UnitCell::read_cell_pseudopots()
+UnitCell::read_cell_pseudopots()
link to Github -> link
void UnitCell::read_cell_pseudopots(const std::string &pp_dir, std::ofstream &log)
{
@@ -1030,7 +1030,7 @@ while (ifs.good())
+ while (ifs.good())
{
ifs >> dummy;
if(dummy=="<PP_HEADER>")
@@ -1044,7 +1044,7 @@ if ( ModuleBase::GlobalFunc::SCAN_BEGIN(ifs, "<PP_MESH>") )
+ if ( ModuleBase::GlobalFunc::SCAN_BEGIN(ifs, "<PP_MESH>") )
{
read_pseudo_mesh(ifs);
ModuleBase::GlobalFunc::SCAN_END(ifs, "</PP_MESH>");
@@ -1052,7 +1052,7 @@ if (this->nlcc)
+ if (this->nlcc)
{
ModuleBase::GlobalFunc::SCAN_BEGIN(ifs, "<PP_NLCC>");
read_pseudo_nlcc(ifs);
@@ -1061,12 +1061,12 @@ ModuleBase::GlobalFunc::SCAN_BEGIN(ifs, "<PP_LOCAL>");
+ ModuleBase::GlobalFunc::SCAN_BEGIN(ifs, "<PP_LOCAL>");
read_pseudo_local(ifs);
ModuleBase::GlobalFunc::SCAN_END(ifs, "</PP_LOCAL>");
与 类似的还有 , , , 从 则可以读取旋轨耦合相关信息:
-if (has_so)
+ if (has_so)
{
ModuleBase::GlobalFunc::SCAN_BEGIN (ifs,"<PP_ADDINFO>");
read_pseudo_so (ifs);
@@ -1140,7 +1140,7 @@ if(error==0)
+ if(error==0)
{
if(this->atoms[i].flag_empty_element) upf.set_empty_element();
error_ap = upf.average_p(GlobalV::soc_lambda);
@@ -1148,7 +1148,7 @@ if(GlobalV::MY_RANK==0)
+ if(GlobalV::MY_RANK==0)
{
atoms[i].ncpp.set_pseudo_nc( upf );
....
@@ -1178,7 +1178,7 @@ }
该函数属于类 pseudo_nc
,而 pseudo_nc
对象为 atom
的数据成员,atoms
则为 UnitCell
的数据成员。pseudo_nc::set_pseudo_h()
,pseudo_nc::set_pseudo_atom
和 pseudo_nc::set_pseudo_vl
的内容在此省略,但其分别为将 Hamilton, 原子性质和 Vlocal 相关数据从 upf 对象拷贝。之后(1)使用 lll
刷新为 upf 对象的 projectors 的角动量,然后计算出磁角动量区分时的 projector 个数。(2)取所有 projector 衰减到 0 时候的最大最普适半径。
回到 module_cell/unitcell.cpp
line 663,接下来为每个原子创建目录,在目录中写 [原子label].NONLOCAL
文件。[label].NONLOCAL
文件中内容包含 <HEADER>
, <DIJ>
和 <PP_BETA>
三个 tag。
<HEADER>
中包含内容:
ofs << "<HEADER>" << std::endl;
@@ -1222,21 +1222,61 @@ }
ofs << "</PP_BETA>" << std::endl;
-#ifdef __MPI
接下来对赝势信息进行MPI进程(processor)间的分发:
+#ifdef __MPI
+ bcast_unitcell2();
+#endif
+
+// module_cell/unitcell.cpp:bcast_unitcell2()
+void UnitCell::bcast_unitcell2(void)
+{
+ for (int i = 0; i < ntype; i++)
+ {
+ atoms[i].bcast_atom2();
+ }
+ return;
+}
+
+// module_cell/atom_spec.cpp:Atom::bcast_atom2()
+void Atom::bcast_atom2()
+{
+ this->ncpp.bcast_atom_pseudo();
+}
+
+// module_cell/atom_pseudo.cpp::Atom_pseudo::bcast_atom_pseudo()
+void Atom_pseudo::bcast_atom_pseudo(void)
+{
+....
+ Parallel_Common::bcast_int( lmax );
+....
+ Parallel_Common::bcast_double( etotps );
+....
+ Parallel_Common::bcast_bool( tvanp );
+....
+ Parallel_Common::bcast_string( psd );
+....
+ // below two 'bcast_double' lines of codes seem to have bugs,
+ // on some computers, the code will stuck here for ever.
+ // mohan note 2021-04-28
+ Parallel_Common::bcast_double( dion.c , nbeta * nbeta);
+ Parallel_Common::bcast_double( betar.c, nr * nc );
+}
+
#endif
接下来跨原子种类检验泛函是否一致:
-for(int it=0; it<ntype; it++)
+ for(int it=0; it<ntype; it++)
{
if(atoms[0].ncpp.xc_func !=atoms[it].ncpp.xc_func)
{
-# STRU 结构检查:UnitCell::check_structure()
+STRU 结构检查:UnitCell::check_structure()
检验结构中任意两原子之间距离是否大于其固定倍数(<1)的共价半径和,
-check_structure(GlobalV::MIN_DIST_COEF);
+ check_structure(GlobalV::MIN_DIST_COEF);
-# 计算轨道数:UnitCell::cal_natomwfc()
+计算轨道数:UnitCell::cal_natomwfc()
UnitCell::cal_natomwfc()
函数计算所有种类的原子轨道数量加和,对于非 nspin=4
,即非 soc(自旋轨道耦合)情况,角量子数 l 和 s 非耦合,l 单独可以作为好的量子数来区分量子态,因此对于每个赝势中定义的 wfc,若其对应 occupation 大于等于 0(即有效 wfc),则对应于其角量子数 l,轨道数量增加 2l+1,即计数其磁量子数 m,也相当于对 alpha 和 beta spin 的单独计数。对于 nspin=4
的情况,若考虑 soc,则轨道数对 j=l+s 的情况,当前原子种类当前角量子数对应轨道数量记为 2l+1+1,否则为 2l+1。对于非 soc 但 nspin=4
,当前原子种类轨道当前角量子数对应轨道数量记(2l+1)*2:
void UnitCell::cal_natomwfc(std::ofstream &log)
{
@@ -1291,9 +1331,9 @@ 计算跨原子种类最大角量子数 UnitCell::lmax 和某 l 对应最大 zeta 数 UnitCell::nmax
,以及跨原子种类的类内 zeta 数总和最大值 UnitCell::nmax_total
寻找赝势中最大角量子数 UnitCell::lmax_ppwf
。
-# 价电子数核对
+价电子数核对
核对赝势中定义的价电子数与 ABACUS 预置库中原子的最小价电子数
-# 获取最大格点数量:UnitCell::cal_meshx()
+获取最大格点数量:UnitCell::cal_meshx()
计算跨原子种类的最大格点数量,存储在 UnitCell::meshx
中,目前 ABACUS 代码中变量命名后缀 x 可能代表 max,正如之前看到 npwx
等。
至此,我们离开函数 UnitCell::read_pseudo()
,回到 ModuleESolver::ESolver_FP::Init()
函数。
@@ -1304,7 +1344,7 @@ Introduction to ABACUS: Path to PW calculation - Part 2
下篇:Introduction to ABACUS: Path to PW calculation - Part 4
@@ -1348,7 +1388,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"Introduction to ABACUS: Path to PW calculation - Part 3","level":"1.2.8","depth":2,"next":{"title":"Introduction to ABACUS: Path to PW calculation - Part 4","level":"1.2.9","depth":2,"path":"develop-path4.md","ref":"develop-path4.md","articles":[]},"previous":{"title":"Introduction to ABACUS: Path to PW calculation - Part 2","level":"1.2.7","depth":2,"path":"develop-path2.md","ref":"develop-path2.md","articles":[]},"dir":"ltr"},"config":{"plugins":["image-captions","auto-scroll-table","splitter","3-ba","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","tbfed-pagefooter","disqus","github-buttons","sharing-plus","-sharing","livereload"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"tbfed-pagefooter":{"copyright":"Copyright © mcresearch.gitee.io 2023","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"page-treeview":{"copyright":"Copyright © aleen42","minHeaderCount":"2","minHeaderDeep":"2"},"chapter-fold":{},"prism":{},"disqus":{"useIdentifier":false,"shortName":"abacus-user-guide"},"intopic-toc":{"isCollapsed":true,"isScrollspyActive":true,"label":"In this article","maxDepth":6,"mode":"nested","selector":".markdown-section h1, .markdown-section h2, .markdown-section h3, .markdown-section h4, .markdown-section h5, .markdown-section h6","visible":true},"livereload":{},"splitter":{},"sharing-plus":{"qq":false,"all":["facebook","google","twitter","instapaper","linkedin","pocket","stumbleupon"],"douban":false,"facebook":true,"weibo":false,"instapaper":false,"whatsapp":false,"hatenaBookmark":false,"twitter":true,"messenger":false,"line":false,"vk":false,"pocket":true,"google":false,"viber":false,"stumbleupon":false,"qzone":false,"linkedin":false},"auto-scroll-table":{},"code":{"copyButtons":true},"hide-element":{"elements":[".gitbook-link"]},"fontsettings":{"theme":"white","family":"sans","size":2},"favicon":"./picture/abacus-logo.jpg","theme-comscore":{},"page-toc-button":{"maxTocDepth":2,"minTocSize":2},"github-buttons":{"buttons":[{"user":"MCresearch","repo":"abacus-user-guide","type":"star","size":"middle","count":true}]},"custom-favicon":{},"3-ba":{"configuration":"auto","token":"25153cb8bd9a872cfec60b4b23ac0176"},"mathjax-pro":{"forceSVG":false,"version":"2.7.7"},"sharing":{"weibo":false},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"anchors":{},"insert-logo":{"style":"background: none;max-height: 70px;width: -webkit-fill-available;max-width: 180px;","url":"./picture/abacus-logo.svg"},"expandable-chapters":{},"search-plus":{},"image-captions":{"caption":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","variable_name":"_pictures"}},"theme":"default","name":"abacus-user-guide","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{"_pictures":[{"backlink":"abacus-upf.html#fig1.1.5.1","level":"1.1.5","list_caption":"Figure: 局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","alt":"局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","nro":1,"url":"picture/fig_upf-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","attributes":{},"skip":false,"key":"1.1.5.1"},{"backlink":"abacus-upf.html#fig1.1.5.2","level":"1.1.5","list_caption":"Figure: S赝波函数与全电子波函数对比","alt":"S赝波函数与全电子波函数对比","nro":2,"url":"picture/fig_upf-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"S赝波函数与全电子波函数对比","attributes":{},"skip":false,"key":"1.1.5.2"},{"backlink":"abacus-upf.html#fig1.1.5.3","level":"1.1.5","list_caption":"Figure: S的双投影波函数","alt":"S的双投影波函数","nro":3,"url":"picture/fig_upf-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"S的双投影波函数","attributes":{},"skip":false,"key":"1.1.5.3"},{"backlink":"abacus-upf.html#fig1.1.5.4","level":"1.1.5","list_caption":"Figure: 不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","alt":"不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","nro":4,"url":"picture/fig_upf-4.png","index":4,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","attributes":{},"skip":false,"key":"1.1.5.4"},{"backlink":"abacus-upf.html#fig1.1.5.5","level":"1.1.5","list_caption":"Figure: 不同轨道角动量对应的截断能","alt":"不同轨道角动量对应的截断能","nro":5,"url":"picture/fig_upf-5.png","index":5,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"不同轨道角动量对应的截断能","attributes":{},"skip":false,"key":"1.1.5.5"},{"backlink":"abacus-surface2.html#fig1.1.14.1","level":"1.1.14","list_caption":"Figure: 锯齿状势场分布图","alt":"锯齿状势场分布图","nro":6,"url":"picture/fig_surface2-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"锯齿状势场分布图","attributes":{},"skip":false,"key":"1.1.14.1"},{"backlink":"abacus-surface2.html#fig1.1.14.2","level":"1.1.14","list_caption":"Figure: 一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","alt":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","nro":7,"url":"picture/fig_surface2-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","attributes":{},"skip":false,"key":"1.1.14.2"},{"backlink":"abacus-surface2.html#fig1.1.14.3","level":"1.1.14","list_caption":"Figure: 静电势沿超胞Z轴变化图","alt":"静电势沿超胞Z轴变化图","nro":8,"url":"picture/fig_surface2-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"静电势沿超胞Z轴变化图","attributes":{},"skip":false,"key":"1.1.14.3"},{"backlink":"abacus-surface5.html#fig1.1.15.1","level":"1.1.15","list_caption":"Figure: Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","alt":"Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","nro":9,"url":"picture/fig_surface5-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","attributes":{},"skip":false,"key":"1.1.15.1"},{"backlink":"abacus-surface5.html#fig1.1.15.2","level":"1.1.15","list_caption":"Figure: 锯齿状势场分布图","alt":"锯齿状势场分布图","nro":10,"url":"picture/fig_surface2-1.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"锯齿状势场分布图","attributes":{},"skip":false,"key":"1.1.15.2"},{"backlink":"abacus-surface5.html#fig1.1.15.3","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","alt":"采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","nro":11,"url":"picture/fig_surface5-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","attributes":{},"skip":false,"key":"1.1.15.3"},{"backlink":"abacus-surface5.html#fig1.1.15.4","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","alt":"采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","nro":12,"url":"picture/fig_surface5-4.png","index":4,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","attributes":{},"skip":false,"key":"1.1.15.4"},{"backlink":"abacus-surface5.html#fig1.1.15.5","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","alt":"采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","nro":13,"url":"picture/fig_surface5-5.png","index":5,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","attributes":{},"skip":false,"key":"1.1.15.5"},{"backlink":"abacus-surface6.html#fig1.1.16.1","level":"1.1.16","list_caption":"Figure: 一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","alt":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","nro":14,"url":"picture/fig_surface6-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","attributes":{},"skip":false,"key":"1.1.16.1"},{"backlink":"abacus-surface6.html#fig1.1.16.2","level":"1.1.16","list_caption":"Figure: 静电势(Electrostatic Potential)沿超胞Z轴变化图","alt":"静电势(Electrostatic Potential)沿超胞Z轴变化图","nro":15,"url":"picture/fig_surface6-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"静电势(Electrostatic Potential)沿超胞Z轴变化图","attributes":{},"skip":false,"key":"1.1.16.2"}]},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"develop-path3.md","mtime":"2023-10-02T07:42:10.126Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-10-03T14:38:41.027Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"Introduction to ABACUS: Path to PW calculation - Part 3","level":"1.2.8","depth":2,"next":{"title":"Introduction to ABACUS: Path to PW calculation - Part 4","level":"1.2.9","depth":2,"path":"develop-path4.md","ref":"develop-path4.md","articles":[]},"previous":{"title":"Introduction to ABACUS: Path to PW calculation - Part 2","level":"1.2.7","depth":2,"path":"develop-path2.md","ref":"develop-path2.md","articles":[]},"dir":"ltr"},"config":{"plugins":["image-captions","auto-scroll-table","splitter","3-ba","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","tbfed-pagefooter","disqus","github-buttons","sharing-plus","-sharing","livereload"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"tbfed-pagefooter":{"copyright":"Copyright © mcresearch.gitee.io 2023","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"page-treeview":{"copyright":"Copyright © aleen42","minHeaderCount":"2","minHeaderDeep":"2"},"chapter-fold":{},"prism":{},"disqus":{"useIdentifier":false,"shortName":"abacus-user-guide"},"intopic-toc":{"isCollapsed":true,"isScrollspyActive":true,"label":"In this article","maxDepth":6,"mode":"nested","selector":".markdown-section h1, .markdown-section h2, .markdown-section h3, .markdown-section h4, .markdown-section h5, .markdown-section h6","visible":true},"livereload":{},"splitter":{},"sharing-plus":{"qq":false,"all":["facebook","google","twitter","instapaper","linkedin","pocket","stumbleupon"],"douban":false,"facebook":true,"weibo":false,"instapaper":false,"whatsapp":false,"hatenaBookmark":false,"twitter":true,"messenger":false,"line":false,"vk":false,"pocket":true,"google":false,"viber":false,"stumbleupon":false,"qzone":false,"linkedin":false},"auto-scroll-table":{},"code":{"copyButtons":true},"hide-element":{"elements":[".gitbook-link"]},"fontsettings":{"theme":"white","family":"sans","size":2},"favicon":"./picture/abacus-logo.jpg","theme-comscore":{},"page-toc-button":{"maxTocDepth":2,"minTocSize":2},"github-buttons":{"buttons":[{"user":"MCresearch","repo":"abacus-user-guide","type":"star","size":"middle","count":true}]},"custom-favicon":{},"3-ba":{"configuration":"auto","token":"25153cb8bd9a872cfec60b4b23ac0176"},"mathjax-pro":{"forceSVG":false,"version":"2.7.7"},"sharing":{"weibo":false},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"anchors":{},"insert-logo":{"style":"background: none;max-height: 70px;width: -webkit-fill-available;max-width: 180px;","url":"./picture/abacus-logo.svg"},"expandable-chapters":{},"search-plus":{},"image-captions":{"caption":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","variable_name":"_pictures"}},"theme":"default","name":"abacus-user-guide","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{"_pictures":[{"backlink":"abacus-upf.html#fig1.1.5.1","level":"1.1.5","list_caption":"Figure: 局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","alt":"局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","nro":1,"url":"picture/fig_upf-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"局域势函数与非局域势不同轨道角动量对应的半局域径向势函数","attributes":{},"skip":false,"key":"1.1.5.1"},{"backlink":"abacus-upf.html#fig1.1.5.2","level":"1.1.5","list_caption":"Figure: S赝波函数与全电子波函数对比","alt":"S赝波函数与全电子波函数对比","nro":2,"url":"picture/fig_upf-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"S赝波函数与全电子波函数对比","attributes":{},"skip":false,"key":"1.1.5.2"},{"backlink":"abacus-upf.html#fig1.1.5.3","level":"1.1.5","list_caption":"Figure: S的双投影波函数","alt":"S的双投影波函数","nro":3,"url":"picture/fig_upf-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"S的双投影波函数","attributes":{},"skip":false,"key":"1.1.5.3"},{"backlink":"abacus-upf.html#fig1.1.5.4","level":"1.1.5","list_caption":"Figure: 不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","alt":"不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","nro":4,"url":"picture/fig_upf-4.png","index":4,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"不同能级波函数在截断半径处log导数对比,其影响散射性质的计算","attributes":{},"skip":false,"key":"1.1.5.4"},{"backlink":"abacus-upf.html#fig1.1.5.5","level":"1.1.5","list_caption":"Figure: 不同轨道角动量对应的截断能","alt":"不同轨道角动量对应的截断能","nro":5,"url":"picture/fig_upf-5.png","index":5,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"不同轨道角动量对应的截断能","attributes":{},"skip":false,"key":"1.1.5.5"},{"backlink":"abacus-surface2.html#fig1.1.14.1","level":"1.1.14","list_caption":"Figure: 锯齿状势场分布图","alt":"锯齿状势场分布图","nro":6,"url":"picture/fig_surface2-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"锯齿状势场分布图","attributes":{},"skip":false,"key":"1.1.14.1"},{"backlink":"abacus-surface2.html#fig1.1.14.2","level":"1.1.14","list_caption":"Figure: 一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","alt":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","nro":7,"url":"picture/fig_surface2-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","attributes":{},"skip":false,"key":"1.1.14.2"},{"backlink":"abacus-surface2.html#fig1.1.14.3","level":"1.1.14","list_caption":"Figure: 静电势沿超胞Z轴变化图","alt":"静电势沿超胞Z轴变化图","nro":8,"url":"picture/fig_surface2-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"静电势沿超胞Z轴变化图","attributes":{},"skip":false,"key":"1.1.14.3"},{"backlink":"abacus-surface5.html#fig1.1.15.1","level":"1.1.15","list_caption":"Figure: Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","alt":"Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","nro":9,"url":"picture/fig_surface5-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"Nanoribbon结构图,黑框代表超胞大小,有真空。超胞里包含32个碳原子(棕色),超胞里接触真空的2个碳原子(每个表面一个碳原子)被2个氢原子(白色)饱和。","attributes":{},"skip":false,"key":"1.1.15.1"},{"backlink":"abacus-surface5.html#fig1.1.15.2","level":"1.1.15","list_caption":"Figure: 锯齿状势场分布图","alt":"锯齿状势场分布图","nro":10,"url":"picture/fig_surface2-1.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"锯齿状势场分布图","attributes":{},"skip":false,"key":"1.1.15.2"},{"backlink":"abacus-surface5.html#fig1.1.15.3","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","alt":"采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","nro":11,"url":"picture/fig_surface5-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和非自旋极化得到的二维nanoribbon的能带图,可以看出费米面附近CBM(Conduction Band Minimum)和VBM(Valence Band Maximum)重合,无带隙。","attributes":{},"skip":false,"key":"1.1.15.3"},{"backlink":"abacus-surface5.html#fig1.1.15.4","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","alt":"采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","nro":12,"url":"picture/fig_surface5-4.png","index":4,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和自旋极化得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出不加电场时,两个自旋方向的能带图几乎一样,都有带隙。","attributes":{},"skip":false,"key":"1.1.15.4"},{"backlink":"abacus-surface5.html#fig1.1.15.5","level":"1.1.15","list_caption":"Figure: 采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","alt":"采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","nro":13,"url":"picture/fig_surface5-5.png","index":5,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"采用PBE交换关联泛函和自旋极化,再给体系加上0.1 V/Å的电场得到的二维nanoribbon的能带图。蓝色和红色代表自旋极化方向不同时对应的两副能带图像,可以看出加了能带之后,其中一个自旋方向的能带图出现费米面附近的交叠,呈现金属性质,另外一个自旋方向的能带图依旧保持在费米面处的能隙。","attributes":{},"skip":false,"key":"1.1.15.5"},{"backlink":"abacus-surface6.html#fig1.1.16.1","level":"1.1.16","list_caption":"Figure: 一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","alt":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","nro":14,"url":"picture/fig_surface6-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"一个水分子位于超胞中,红色代表氧原子,白色代表氢原子","attributes":{},"skip":false,"key":"1.1.16.1"},{"backlink":"abacus-surface6.html#fig1.1.16.2","level":"1.1.16","list_caption":"Figure: 静电势(Electrostatic Potential)沿超胞Z轴变化图","alt":"静电势(Electrostatic Potential)沿超胞Z轴变化图","nro":15,"url":"picture/fig_surface6-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"静电势(Electrostatic Potential)沿超胞Z轴变化图","attributes":{},"skip":false,"key":"1.1.16.2"},{"backlink":"develop-path4.html#fig1.2.9.1","level":"1.2.9","list_caption":"Figure: ","alt":" ","nro":16,"url":"picture/fig_path4-1.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":" ","attributes":{},"skip":false,"key":"1.2.9.1"},{"backlink":"develop-path4.html#fig1.2.9.2","level":"1.2.9","list_caption":"Figure: PW_Basis::distribute_r():设一个pool中有5个processors","alt":"PW_Basis::distribute_r():设一个pool中有5个processors","nro":17,"url":"picture/fig_path4-2.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"PW_Basis::distribute_r():设一个pool中有5个processors","attributes":{},"skip":false,"key":"1.2.9.2"},{"backlink":"develop-path4.html#fig1.2.9.3","level":"1.2.9","list_caption":"Figure: this->count_pw_st(st_length2D, st_bottom2D)","alt":"this->count_pw_st(st_length2D, st_bottom2D)","nro":18,"url":"picture/fig_path4-3.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"this->count_pw_st(st_length2D, st_bottom2D)","attributes":{},"skip":false,"key":"1.2.9.3"},{"backlink":"develop-path5.html#fig1.2.10.1","level":"1.2.10","list_caption":"Figure: 善用Ctrl+F","alt":"善用Ctrl+F","nro":19,"url":"picture/fig_path5-9.png","index":1,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"善用Ctrl+F","attributes":{},"skip":false,"key":"1.2.10.1"},{"backlink":"develop-path5.html#fig1.2.10.2","level":"1.2.10","list_caption":"Figure: klist.cpp line 486: K_Vectors::Monkhorst_Pack_formula(), k_type = 0 and 1","alt":"klist.cpp line 486: K_Vectors::Monkhorst_Pack_formula(), k_type = 0 and 1","nro":20,"url":"picture/fig_path5-10.png","index":2,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"klist.cpp line 486: K_Vectors::Monkhorst_Pack_formula(), k_type = 0 and 1","attributes":{},"skip":false,"key":"1.2.10.2"},{"backlink":"develop-path5.html#fig1.2.10.3","level":"1.2.10","list_caption":"Figure: klist.cpp line 520: const int i = mpnx * mpny * (z - 1) + mpnx * (y - 1) + (x - 1)","alt":"klist.cpp line 520: const int i = mpnx * mpny * (z - 1) + mpnx * (y - 1) + (x - 1)","nro":21,"url":"picture/fig_path5-11.png","index":3,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"klist.cpp line 520: const int i = mpnx * mpny * (z - 1) + mpnx * (y - 1) + (x - 1)","attributes":{},"skip":false,"key":"1.2.10.3"},{"backlink":"develop-path5.html#fig1.2.10.4","level":"1.2.10","list_caption":"Figure: 1-dimensional example","alt":"1-dimensional example","nro":22,"url":"picture/fig_path5-12.png","index":4,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"1-dimensional example","attributes":{},"skip":false,"key":"1.2.10.4"},{"backlink":"develop-path5.html#fig1.2.10.5","level":"1.2.10","list_caption":"Figure: 2-dimensional example","alt":"2-dimensional example","nro":23,"url":"picture/fig_path5-13.png","index":5,"caption_template":"图 _PAGE_IMAGE_NUMBER_. _CAPTION_","label":"2-dimensional example","attributes":{},"skip":false,"key":"1.2.10.5"}]},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"develop-path3.md","mtime":"2023-10-04T15:11:45.401Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-10-04T15:29:41.868Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/develop-path4.html b/_book/develop-path4.html
index 1840948c..2b9cddf9 100644
--- a/_book/develop-path4.html
+++ b/_book/develop-path4.html
@@ -750,14 +750,14 @@ Driver
-Driver::atomic_world()
-Driver::driver_run()
-多层继承:Init() functions in esolver class
-Trigger: ESolver_FP::Init()
-平面波格点初始化:PW_Basis:: initgrids()
+Driver
+Driver::atomic_world()
+Driver::driver_run()
+多层继承:Init() functions in esolver class
+Trigger: ESolver_FP::Init()
+平面波格点初始化:PW_Basis:: initgrids()
完成了 INPUT
和 STRU
,以及赝势文件的读取环节,接下来我们来到平面波的初始化设置相关部分。
-void ESolver_FP::Init(Input& inp, UnitCell& cell)
+ void ESolver_FP::Init(Input& inp, UnitCell& cell)
{
....
if (inp.nx * inp.ny * inp.nz == 0)
@@ -782,7 +782,7 @@ virtual void initgrids(const double lat0_in,const ModuleBase::Matrix3 latvec_in,
+ virtual void initgrids(const double lat0_in,const ModuleBase::Matrix3 latvec_in,
const double gridecut)
{
// generation of nx, ny and nz are omitted here
@@ -868,7 +868,7 @@ }
❗ 注意:这里还完成了倒空间格点数量 fftnx
, fftny
和 fftnz
的赋值。因为 FFT 变换前后的格点数量一般相同,因此 fftnx = nx
,fftny = ny
,...。
-
+
然后对平面波在 MPI 进程间进行分发:
//module_esolver/esolver_fp.cpp
void ESolver_FP::Init(Input& inp, UnitCell& cell)
@@ -889,9 +889,9 @@ ::
timer::tick(this->classname, "setuptransform");
}
-到这里,我们不得不开始对平面波的 MPI 并行机制有一个大致的认识。在 ABACUS 中,CPU(=processor)首先根据不同的布里渊区 k 点分组被划分成不同的并行池(parallelizaiton pool),每个 pool 都包含几个 k 点,在每个 pool 里面会有完整的对该 k 点求解 Kohn-Sham 方程的过程。因此,在每个 pool 中采用一定数量的 CPU 进程来完成计算。在 INPUT
文件中,KPAR
参数决定了并行池的数量(即 pool 的个数)。换句话说,ABACUS 的 k 点并行机制为,将 k 点(设其数量为 nkpt)分配在 KPAR
个 pool 中,若一共有 nproc
个 processor,则:
nproc
/KPAR
个 processorrank 是一个在 MPI 并行里常被用到的变量。在拥有不止一个 processor 的时候,每个 processor 都具有唯一的编号,称为 rank。如果在每个 processor 都有 rank 的基础上还定义了 pool,以及在每个 pool 中的 processor 数量,则 processor 除了有跨 pool 的全局 rank,也可以有 pool 之内的局部 rank,这部分内容见 module_base/global_variable.cpp
:
int NPROC = 1;
int KPAR = 1;
@@ -926,7 +926,7 @@ }
于是问题便到来:在并行条件下,代码究竟是如何执行的?
通常来讲,尽管 OpenMP 提供了线程并行,但由于共享内存可能并不存在于 processors 之间,或 computer, nodes 之间,且没有适合的内存共享系统(multi-socket server),此时如果以 OpenMP 放心运行,则可能得出错误结果或直接报错——因为内存无法访问。对于这种情况,需要使用 MPI(Message passing interface)来维持无内存共享处理单元之间的信息交换,以及信息分发和分布计算,而在处理单元内部,即可以共享内存的域内,则可以通过 OpenMP 技术来进行线程级并行。
-在简单介绍完并行机制后,我们知道,对于未显式以并行方式实现的函数,其运行将在每一个 processor。在接下来的平面波分发过程中,请始终牢记这一理念,尤其在 processor-local 变量和 processor-global 变量的传值过程中。
稍加回溯:
void ESolver_FP::Init(Input& inp, UnitCell& cell)
@@ -968,7 +968,7 @@ ## 实空间:PW_Basis::distribute_r()
+实空间:PW_Basis::distribute_r()
❗Attention
注意,此时实际调用的也是 PW_Basis_Big
而非 PW_Basis
的 distribute_r()
函数。
@@ -1011,8 +1011,8 @@ {
该判断不会 always true
。因此 PW_Basis::distribute_r()
将 3D 实空间格点,按照 z 方向进行分发,分给了不同的 processors,并赋值 this->npz
,this->nplane
, this->startz_current
和 this->nrxx
,意义分别为当前 processor 的 z 方向格点数量、xy 平面数量、z 格点的起始索引以及当前 processor 所分得实空间格点总数(分配后 z 方向格点 ×xy 平面格点)。
倒空间格点的分发采用了和实空间不同的方式,这主要是因为倒空间“球”的存在(ecutwfc 和 ecutrho),使得非空间中所有点都需要考虑在内,而实空间则并非如此。更一般而言,有限的实空间带来无限的倒空间(即实空间 delta 函数需要无限数量的平面波展开)延展,而有限的倒空间(倒空间 delta 点)带来无限的实空间延展(如一个平面波)。
[] st_bottom2D; delete[] st_length2D; } -🔧重构信息 @@ -1066,7 +1066,7 @@
delete
穿过布里渊区的整数点(2pi/a 的整数倍)都代表一个三个 index 的平面波,而一系列的点在截断半径以内沿着某个方向就组成了所谓的“stick”(代表平面波集合的“棍子”,一个“棍子”包含了多个平面波,简称就叫“棍子”)。
PW_Basis::count_pw_st()
函数(Link)计算了每个(x,y)对应的“棍子”的底部和“长度”,即对倒空间只分辨(x,y),则会得到沿 z 方向的点的集合,被称为“棍子”。而“棍子”区域内部每一个点都代表一个平面波。“棍子”的底部对应于最小的 iz 值,“根子”的长度则为当前(x,y)所包含的平面波数量:
for (int ix = ix_start; ix <= ix_end; ++ix)
@@ -1098,7 +1098,7 @@ }
}
-在倒空间分发平面波时,由于 x/y/z 均等在正负半轴 span,因此常常会涉及到 C++ 不支持负数索引的问题(btw: Python 和 FORTRAN 支持负数索引,但支持方式不同),ABACUS 当前所采取的策略是:
if (x<0) x += this->nx; if (y<0) y += this->ny; if (z<0) z += this->nz;
@@ -1107,7 +1107,7 @@ PW_Basis::collect_st()
和 PW_Basis::divide_sticks_1()
分别排序与分发“棍子”到不同 processor:
st_length2D
由大到小排序,然后适用于 st_bottom2D
等变量在倒空间平面波的分发过程中,共建立过四个映射表,分别是 this->fftixy2ip
, this->istot2ixy
, this->ig2isz
和 this->is2fftixy
,其意义分别为: