1
natom 32
-struf_dgx 2.5133
-struf_dgy 2.5133
-struf_dgz 2.5133
+struf_dgx 1.32656
+struf_dgy 1.32656
+struf_dgz 1.32656
struf_ng 6
以上参数在 Candela 的线上文档中均有详细说明,这里再进行简单概述:
@@ -500,10 +500,10 @@ 40
dt_snapshots 0.00006
-isf_target_q 2.51
-isf_dgx 2.5133
-isf_dgy 2.5133
-isf_dgz 2.5133
+isf_target_q 2.65
+isf_dgx 1.32656
+isf_dgy 1.32656
+isf_dgz 1.32656
isf_ngx 6
isf_ngy 6
isf_ngz 6
@@ -607,7 +607,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"ABACUS+Candela 使用教程","level":"1.1.13","depth":2,"next":{"title":"ABACUS 新闻稿整理","level":"1.2","depth":1,"path":"abacus-news.md","ref":"abacus-news.md","articles":[]},"previous":{"title":"ABACUS+LibRI 做杂化泛函计算教程","level":"1.1.12","depth":2,"path":"abacus-libri.md","ref":"abacus-libri.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-candela.md","mtime":"2023-08-23T07:57:18.023Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"ABACUS+Candela 使用教程","level":"1.1.13","depth":2,"next":{"title":"ABACUS 新闻稿整理","level":"1.2","depth":1,"path":"abacus-news.md","ref":"abacus-news.md","articles":[]},"previous":{"title":"ABACUS+LibRI 做杂化泛函计算教程","level":"1.1.12","depth":2,"path":"abacus-libri.md","ref":"abacus-libri.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-candela.md","mtime":"2023-08-23T08:34:14.107Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/abacus-contribute.html b/_book/abacus-contribute.html
index 28160761..583efcaf 100644
--- a/_book/abacus-contribute.html
+++ b/_book/abacus-contribute.html
@@ -446,7 +446,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"如何贡献ABACUS使用教程","level":"1.3","depth":1,"previous":{"title":"ABACUS 新闻稿整理","level":"1.2","depth":1,"path":"abacus-news.md","ref":"abacus-news.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-contribute.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"如何贡献ABACUS使用教程","level":"1.3","depth":1,"previous":{"title":"ABACUS 新闻稿整理","level":"1.2","depth":1,"path":"abacus-news.md","ref":"abacus-news.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-contribute.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/abacus-dcu.html b/_book/abacus-dcu.html
index 0b1c3f70..6e9ef2a7 100644
--- a/_book/abacus-dcu.html
+++ b/_book/abacus-dcu.html
@@ -612,7 +612,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"ABACUS 在曙光 DCU 集群上的编译与使用","level":"1.1.1","depth":2,"next":{"title":"模守恒赝势生成方法简介","level":"1.1.2","depth":2,"path":"abacus-upf.md","ref":"abacus-upf.md","articles":[]},"previous":{"title":"ABACUS使用教程","level":"1.1","depth":1,"path":"README.md","ref":"README.md","articles":[{"title":"ABACUS 在曙光 DCU 集群上的编译与使用","level":"1.1.1","depth":2,"path":"abacus-dcu.md","ref":"abacus-dcu.md","articles":[]},{"title":"模守恒赝势生成方法简介","level":"1.1.2","depth":2,"path":"abacus-upf.md","ref":"abacus-upf.md","articles":[]},{"title":"数值原子轨道(一):ABACUS 中的数值原子轨道命名和使用方法","level":"1.1.3","depth":2,"path":"abacus-nac1.md","ref":"abacus-nac1.md","articles":[]},{"title":"数值原子轨道(二):生成给定模守恒赝势的数值原子轨道","level":"1.1.4","depth":2,"path":"abacus-nac2.md","ref":"abacus-nac2.md","articles":[]},{"title":"数值原子轨道(三):产生高精度数值原子轨道","level":"1.1.5","depth":2,"path":"abacus-nac3.md","ref":"abacus-nac3.md","articles":[]},{"title":"ABACUS 分子动力学使用教程","level":"1.1.6","depth":2,"path":"abacus-md.md","ref":"abacus-md.md","articles":[]},{"title":"ABACUS 随机波函数DFT方法使用教程","level":"1.1.7","depth":2,"path":"abacus-sdft.md","ref":"abacus-sdft.md","articles":[]},{"title":"ABACUS 无轨道密度泛函理论方法使用教程","level":"1.1.8","depth":2,"path":"abacus-ofdft.md","ref":"abacus-ofdft.md","articles":[]},{"title":"ABACUS+Phonopy 计算声子谱","level":"1.1.9","depth":2,"path":"abacus-phonopy.md","ref":"abacus-phonopy.md","articles":[]},{"title":"ABACUS+ShengBTE 计算晶格热导率","level":"1.1.10","depth":2,"path":"abacus-shengbte.md","ref":"abacus-shengbte.md","articles":[]},{"title":"ABACUS+DPGEN 使用教程","level":"1.1.11","depth":2,"path":"abacus-dpgen.md","ref":"abacus-dpgen.md","articles":[]},{"title":"ABACUS+LibRI 做杂化泛函计算教程","level":"1.1.12","depth":2,"path":"abacus-libri.md","ref":"abacus-libri.md","articles":[]},{"title":"ABACUS+Candela 使用教程","level":"1.1.13","depth":2,"path":"abacus-candela.md","ref":"abacus-candela.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-dcu.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"ABACUS 在曙光 DCU 集群上的编译与使用","level":"1.1.1","depth":2,"next":{"title":"模守恒赝势生成方法简介","level":"1.1.2","depth":2,"path":"abacus-upf.md","ref":"abacus-upf.md","articles":[]},"previous":{"title":"ABACUS使用教程","level":"1.1","depth":1,"path":"README.md","ref":"README.md","articles":[{"title":"ABACUS 在曙光 DCU 集群上的编译与使用","level":"1.1.1","depth":2,"path":"abacus-dcu.md","ref":"abacus-dcu.md","articles":[]},{"title":"模守恒赝势生成方法简介","level":"1.1.2","depth":2,"path":"abacus-upf.md","ref":"abacus-upf.md","articles":[]},{"title":"数值原子轨道(一):ABACUS 中的数值原子轨道命名和使用方法","level":"1.1.3","depth":2,"path":"abacus-nac1.md","ref":"abacus-nac1.md","articles":[]},{"title":"数值原子轨道(二):生成给定模守恒赝势的数值原子轨道","level":"1.1.4","depth":2,"path":"abacus-nac2.md","ref":"abacus-nac2.md","articles":[]},{"title":"数值原子轨道(三):产生高精度数值原子轨道","level":"1.1.5","depth":2,"path":"abacus-nac3.md","ref":"abacus-nac3.md","articles":[]},{"title":"ABACUS 分子动力学使用教程","level":"1.1.6","depth":2,"path":"abacus-md.md","ref":"abacus-md.md","articles":[]},{"title":"ABACUS 随机波函数DFT方法使用教程","level":"1.1.7","depth":2,"path":"abacus-sdft.md","ref":"abacus-sdft.md","articles":[]},{"title":"ABACUS 无轨道密度泛函理论方法使用教程","level":"1.1.8","depth":2,"path":"abacus-ofdft.md","ref":"abacus-ofdft.md","articles":[]},{"title":"ABACUS+Phonopy 计算声子谱","level":"1.1.9","depth":2,"path":"abacus-phonopy.md","ref":"abacus-phonopy.md","articles":[]},{"title":"ABACUS+ShengBTE 计算晶格热导率","level":"1.1.10","depth":2,"path":"abacus-shengbte.md","ref":"abacus-shengbte.md","articles":[]},{"title":"ABACUS+DPGEN 使用教程","level":"1.1.11","depth":2,"path":"abacus-dpgen.md","ref":"abacus-dpgen.md","articles":[]},{"title":"ABACUS+LibRI 做杂化泛函计算教程","level":"1.1.12","depth":2,"path":"abacus-libri.md","ref":"abacus-libri.md","articles":[]},{"title":"ABACUS+Candela 使用教程","level":"1.1.13","depth":2,"path":"abacus-candela.md","ref":"abacus-candela.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-dcu.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/abacus-dpgen.html b/_book/abacus-dpgen.html
index 923c4973..af89a306 100644
--- a/_book/abacus-dpgen.html
+++ b/_book/abacus-dpgen.html
@@ -933,7 +933,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"ABACUS+DPGEN 使用教程","level":"1.1.11","depth":2,"next":{"title":"ABACUS+LibRI 做杂化泛函计算教程","level":"1.1.12","depth":2,"path":"abacus-libri.md","ref":"abacus-libri.md","articles":[]},"previous":{"title":"ABACUS+ShengBTE 计算晶格热导率","level":"1.1.10","depth":2,"path":"abacus-shengbte.md","ref":"abacus-shengbte.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-dpgen.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"ABACUS+DPGEN 使用教程","level":"1.1.11","depth":2,"next":{"title":"ABACUS+LibRI 做杂化泛函计算教程","level":"1.1.12","depth":2,"path":"abacus-libri.md","ref":"abacus-libri.md","articles":[]},"previous":{"title":"ABACUS+ShengBTE 计算晶格热导率","level":"1.1.10","depth":2,"path":"abacus-shengbte.md","ref":"abacus-shengbte.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-dpgen.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/abacus-libri.html b/_book/abacus-libri.html
index 3ce92ca0..6515a32a 100644
--- a/_book/abacus-libri.html
+++ b/_book/abacus-libri.html
@@ -559,7 +559,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"ABACUS+LibRI 做杂化泛函计算教程","level":"1.1.12","depth":2,"next":{"title":"ABACUS+Candela 使用教程","level":"1.1.13","depth":2,"path":"abacus-candela.md","ref":"abacus-candela.md","articles":[]},"previous":{"title":"ABACUS+DPGEN 使用教程","level":"1.1.11","depth":2,"path":"abacus-dpgen.md","ref":"abacus-dpgen.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-libri.md","mtime":"2023-08-21T09:50:53.226Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"ABACUS+LibRI 做杂化泛函计算教程","level":"1.1.12","depth":2,"next":{"title":"ABACUS+Candela 使用教程","level":"1.1.13","depth":2,"path":"abacus-candela.md","ref":"abacus-candela.md","articles":[]},"previous":{"title":"ABACUS+DPGEN 使用教程","level":"1.1.11","depth":2,"path":"abacus-dpgen.md","ref":"abacus-dpgen.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-libri.md","mtime":"2023-08-21T09:50:53.226Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/abacus-md.html b/_book/abacus-md.html
index 429ab35d..fd17569b 100644
--- a/_book/abacus-md.html
+++ b/_book/abacus-md.html
@@ -833,7 +833,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"ABACUS 分子动力学使用教程","level":"1.1.6","depth":2,"next":{"title":"ABACUS 随机波函数DFT方法使用教程","level":"1.1.7","depth":2,"path":"abacus-sdft.md","ref":"abacus-sdft.md","articles":[]},"previous":{"title":"数值原子轨道(三):产生高精度数值原子轨道","level":"1.1.5","depth":2,"path":"abacus-nac3.md","ref":"abacus-nac3.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-md.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"ABACUS 分子动力学使用教程","level":"1.1.6","depth":2,"next":{"title":"ABACUS 随机波函数DFT方法使用教程","level":"1.1.7","depth":2,"path":"abacus-sdft.md","ref":"abacus-sdft.md","articles":[]},"previous":{"title":"数值原子轨道(三):产生高精度数值原子轨道","level":"1.1.5","depth":2,"path":"abacus-nac3.md","ref":"abacus-nac3.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-md.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/abacus-nac1.html b/_book/abacus-nac1.html
index 6befaaf1..756313fb 100644
--- a/_book/abacus-nac1.html
+++ b/_book/abacus-nac1.html
@@ -505,7 +505,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"数值原子轨道(一):ABACUS 中的数值原子轨道命名和使用方法","level":"1.1.3","depth":2,"next":{"title":"数值原子轨道(二):生成给定模守恒赝势的数值原子轨道","level":"1.1.4","depth":2,"path":"abacus-nac2.md","ref":"abacus-nac2.md","articles":[]},"previous":{"title":"模守恒赝势生成方法简介","level":"1.1.2","depth":2,"path":"abacus-upf.md","ref":"abacus-upf.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-nac1.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"数值原子轨道(一):ABACUS 中的数值原子轨道命名和使用方法","level":"1.1.3","depth":2,"next":{"title":"数值原子轨道(二):生成给定模守恒赝势的数值原子轨道","level":"1.1.4","depth":2,"path":"abacus-nac2.md","ref":"abacus-nac2.md","articles":[]},"previous":{"title":"模守恒赝势生成方法简介","level":"1.1.2","depth":2,"path":"abacus-upf.md","ref":"abacus-upf.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-nac1.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/abacus-nac2.html b/_book/abacus-nac2.html
index abe80fee..b5cccd77 100644
--- a/_book/abacus-nac2.html
+++ b/_book/abacus-nac2.html
@@ -806,7 +806,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"数值原子轨道(二):生成给定模守恒赝势的数值原子轨道","level":"1.1.4","depth":2,"next":{"title":"数值原子轨道(三):产生高精度数值原子轨道","level":"1.1.5","depth":2,"path":"abacus-nac3.md","ref":"abacus-nac3.md","articles":[]},"previous":{"title":"数值原子轨道(一):ABACUS 中的数值原子轨道命名和使用方法","level":"1.1.3","depth":2,"path":"abacus-nac1.md","ref":"abacus-nac1.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-nac2.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"数值原子轨道(二):生成给定模守恒赝势的数值原子轨道","level":"1.1.4","depth":2,"next":{"title":"数值原子轨道(三):产生高精度数值原子轨道","level":"1.1.5","depth":2,"path":"abacus-nac3.md","ref":"abacus-nac3.md","articles":[]},"previous":{"title":"数值原子轨道(一):ABACUS 中的数值原子轨道命名和使用方法","level":"1.1.3","depth":2,"path":"abacus-nac1.md","ref":"abacus-nac1.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-nac2.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/abacus-nac3.html b/_book/abacus-nac3.html
index a4b7c819..f8cf2393 100644
--- a/_book/abacus-nac3.html
+++ b/_book/abacus-nac3.html
@@ -598,7 +598,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"数值原子轨道(三):产生高精度数值原子轨道","level":"1.1.5","depth":2,"next":{"title":"ABACUS 分子动力学使用教程","level":"1.1.6","depth":2,"path":"abacus-md.md","ref":"abacus-md.md","articles":[]},"previous":{"title":"数值原子轨道(二):生成给定模守恒赝势的数值原子轨道","level":"1.1.4","depth":2,"path":"abacus-nac2.md","ref":"abacus-nac2.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-nac3.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"数值原子轨道(三):产生高精度数值原子轨道","level":"1.1.5","depth":2,"next":{"title":"ABACUS 分子动力学使用教程","level":"1.1.6","depth":2,"path":"abacus-md.md","ref":"abacus-md.md","articles":[]},"previous":{"title":"数值原子轨道(二):生成给定模守恒赝势的数值原子轨道","level":"1.1.4","depth":2,"path":"abacus-nac2.md","ref":"abacus-nac2.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-nac3.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/abacus-news.html b/_book/abacus-news.html
index ee539c76..27ca52b0 100644
--- a/_book/abacus-news.html
+++ b/_book/abacus-news.html
@@ -549,7 +549,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"ABACUS 新闻稿整理","level":"1.2","depth":1,"next":{"title":"如何贡献ABACUS使用教程","level":"1.3","depth":1,"path":"abacus-contribute.md","ref":"abacus-contribute.md","articles":[]},"previous":{"title":"ABACUS+Candela 使用教程","level":"1.1.13","depth":2,"path":"abacus-candela.md","ref":"abacus-candela.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-news.md","mtime":"2023-08-04T03:07:18.018Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"ABACUS 新闻稿整理","level":"1.2","depth":1,"next":{"title":"如何贡献ABACUS使用教程","level":"1.3","depth":1,"path":"abacus-contribute.md","ref":"abacus-contribute.md","articles":[]},"previous":{"title":"ABACUS+Candela 使用教程","level":"1.1.13","depth":2,"path":"abacus-candela.md","ref":"abacus-candela.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-news.md","mtime":"2023-08-04T03:07:18.018Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/abacus-ofdft.html b/_book/abacus-ofdft.html
index a1e5f4b6..0994aae6 100644
--- a/_book/abacus-ofdft.html
+++ b/_book/abacus-ofdft.html
@@ -674,7 +674,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"ABACUS 无轨道密度泛函理论方法使用教程","level":"1.1.8","depth":2,"next":{"title":"ABACUS+Phonopy 计算声子谱","level":"1.1.9","depth":2,"path":"abacus-phonopy.md","ref":"abacus-phonopy.md","articles":[]},"previous":{"title":"ABACUS 随机波函数DFT方法使用教程","level":"1.1.7","depth":2,"path":"abacus-sdft.md","ref":"abacus-sdft.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-ofdft.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"ABACUS 无轨道密度泛函理论方法使用教程","level":"1.1.8","depth":2,"next":{"title":"ABACUS+Phonopy 计算声子谱","level":"1.1.9","depth":2,"path":"abacus-phonopy.md","ref":"abacus-phonopy.md","articles":[]},"previous":{"title":"ABACUS 随机波函数DFT方法使用教程","level":"1.1.7","depth":2,"path":"abacus-sdft.md","ref":"abacus-sdft.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-ofdft.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/abacus-phonopy.html b/_book/abacus-phonopy.html
index c664339a..ed9c5a49 100644
--- a/_book/abacus-phonopy.html
+++ b/_book/abacus-phonopy.html
@@ -593,7 +593,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"ABACUS+Phonopy 计算声子谱","level":"1.1.9","depth":2,"next":{"title":"ABACUS+ShengBTE 计算晶格热导率","level":"1.1.10","depth":2,"path":"abacus-shengbte.md","ref":"abacus-shengbte.md","articles":[]},"previous":{"title":"ABACUS 无轨道密度泛函理论方法使用教程","level":"1.1.8","depth":2,"path":"abacus-ofdft.md","ref":"abacus-ofdft.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-phonopy.md","mtime":"2023-08-14T01:33:59.008Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"ABACUS+Phonopy 计算声子谱","level":"1.1.9","depth":2,"next":{"title":"ABACUS+ShengBTE 计算晶格热导率","level":"1.1.10","depth":2,"path":"abacus-shengbte.md","ref":"abacus-shengbte.md","articles":[]},"previous":{"title":"ABACUS 无轨道密度泛函理论方法使用教程","level":"1.1.8","depth":2,"path":"abacus-ofdft.md","ref":"abacus-ofdft.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-phonopy.md","mtime":"2023-08-14T01:33:59.008Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/abacus-sdft.html b/_book/abacus-sdft.html
index 9231d08a..4d4bb6db 100644
--- a/_book/abacus-sdft.html
+++ b/_book/abacus-sdft.html
@@ -572,7 +572,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"ABACUS 随机波函数DFT方法使用教程","level":"1.1.7","depth":2,"next":{"title":"ABACUS 无轨道密度泛函理论方法使用教程","level":"1.1.8","depth":2,"path":"abacus-ofdft.md","ref":"abacus-ofdft.md","articles":[]},"previous":{"title":"ABACUS 分子动力学使用教程","level":"1.1.6","depth":2,"path":"abacus-md.md","ref":"abacus-md.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-sdft.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"ABACUS 随机波函数DFT方法使用教程","level":"1.1.7","depth":2,"next":{"title":"ABACUS 无轨道密度泛函理论方法使用教程","level":"1.1.8","depth":2,"path":"abacus-ofdft.md","ref":"abacus-ofdft.md","articles":[]},"previous":{"title":"ABACUS 分子动力学使用教程","level":"1.1.6","depth":2,"path":"abacus-md.md","ref":"abacus-md.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-sdft.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/abacus-shengbte.html b/_book/abacus-shengbte.html
index 63030a1d..f7a943fa 100644
--- a/_book/abacus-shengbte.html
+++ b/_book/abacus-shengbte.html
@@ -583,7 +583,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"ABACUS+ShengBTE 计算晶格热导率","level":"1.1.10","depth":2,"next":{"title":"ABACUS+DPGEN 使用教程","level":"1.1.11","depth":2,"path":"abacus-dpgen.md","ref":"abacus-dpgen.md","articles":[]},"previous":{"title":"ABACUS+Phonopy 计算声子谱","level":"1.1.9","depth":2,"path":"abacus-phonopy.md","ref":"abacus-phonopy.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-shengbte.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"ABACUS+ShengBTE 计算晶格热导率","level":"1.1.10","depth":2,"next":{"title":"ABACUS+DPGEN 使用教程","level":"1.1.11","depth":2,"path":"abacus-dpgen.md","ref":"abacus-dpgen.md","articles":[]},"previous":{"title":"ABACUS+Phonopy 计算声子谱","level":"1.1.9","depth":2,"path":"abacus-phonopy.md","ref":"abacus-phonopy.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-shengbte.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/abacus-upf.html b/_book/abacus-upf.html
index ad0b5ded..2fe669d3 100644
--- a/_book/abacus-upf.html
+++ b/_book/abacus-upf.html
@@ -864,7 +864,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"模守恒赝势生成方法简介","level":"1.1.2","depth":2,"next":{"title":"数值原子轨道(一):ABACUS 中的数值原子轨道命名和使用方法","level":"1.1.3","depth":2,"path":"abacus-nac1.md","ref":"abacus-nac1.md","articles":[]},"previous":{"title":"ABACUS 在曙光 DCU 集群上的编译与使用","level":"1.1.1","depth":2,"path":"abacus-dcu.md","ref":"abacus-dcu.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-upf.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"模守恒赝势生成方法简介","level":"1.1.2","depth":2,"next":{"title":"数值原子轨道(一):ABACUS 中的数值原子轨道命名和使用方法","level":"1.1.3","depth":2,"path":"abacus-nac1.md","ref":"abacus-nac1.md","articles":[]},"previous":{"title":"ABACUS 在曙光 DCU 集群上的编译与使用","level":"1.1.1","depth":2,"path":"abacus-dcu.md","ref":"abacus-dcu.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"abacus-upf.md","mtime":"2023-08-04T02:08:19.202Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/examples/candela/DSF/INPUT b/_book/examples/candela/DSF/INPUT
index d55a5f0f..70f7ed69 100644
--- a/_book/examples/candela/DSF/INPUT
+++ b/_book/examples/candela/DSF/INPUT
@@ -12,10 +12,10 @@ isf_nt1 11
isf_nt2 40
dt_snapshots 0.00006
-isf_target_q 2.51
-isf_dgx 2.5133
-isf_dgy 2.5133
-isf_dgz 2.5133
+isf_target_q 2.65
+isf_dgx 1.32656
+isf_dgy 1.32656
+isf_dgz 1.32656
isf_ngx 6
isf_ngy 6
isf_ngz 6
\ No newline at end of file
diff --git a/_book/examples/candela/DSF/ref_dsf.txt b/_book/examples/candela/DSF/ref_dsf.txt
index b7928d06..354fec2e 100644
--- a/_book/examples/candela/DSF/ref_dsf.txt
+++ b/_book/examples/candela/DSF/ref_dsf.txt
@@ -1,14 +1,138 @@
-0.000000000000000000e+00 2.465688626500947304e-05
-2.552881461363759172e+03 2.413365530499548260e-05
-5.105762922727518344e+03 2.261005084034131799e-05
-7.658644384091277061e+03 2.021664847245482555e-05
-1.021152584545503669e+04 1.714779967445337846e-05
-1.276440730681879722e+04 1.363386360823672130e-05
-1.531728876818255412e+04 9.913350415902901595e-06
-1.787017022954631466e+04 6.210403475947112303e-06
-2.042305169091007338e+04 2.720220481048546727e-06
-2.297593315227383209e+04 -3.976629158008453670e-07
-2.552881461363759445e+04 -3.019986095749431407e-06
-2.808169607500135317e+04 -5.056615492557239131e-06
-3.063457753636510824e+04 -6.445794737116893135e-06
-3.318745899772887060e+04 -7.149423068291925601e-06
+0.000000000000000000e+00 1.813021610798463946e-04
+2.506465434793508962e+02 1.796193290115139722e-04
+5.012930869587017924e+02 1.746276249344512271e-04
+7.519396304380526317e+02 1.664951377850108966e-04
+1.002586173917403585e+03 1.554944912590266483e-04
+1.253232717396754424e+03 1.419919034225918658e-04
+1.503879260876105263e+03 1.264325465739768320e-04
+1.754525804355456103e+03 1.093228462702485880e-04
+2.005172347834807169e+03 9.121048942071875785e-05
+2.255818891314157554e+03 7.266300707008649222e-05
+2.506465434793508848e+03 5.424585368289736921e-05
+2.757111978272860142e+03 3.650091900149288551e-05
+3.007758521752210527e+03 1.992638046128723955e-05
+3.258405065231561821e+03 4.958735277011439622e-06
+3.509051608710912205e+03 -8.042254867177464341e-06
+3.759698152190263500e+03 -1.880511188127108354e-05
+4.010344695669614339e+03 -2.715425117121869904e-05
+4.260991239148965178e+03 -3.301340380846544290e-05
+4.511637782628315108e+03 -3.640479177581395240e-05
+4.762284326107666857e+03 -3.744418757743100750e-05
+5.012930869587017696e+03 -3.633217122515288198e-05
+5.263577413066368536e+03 -3.334206222918634953e-05
+5.514223956545720284e+03 -2.880514427218238251e-05
+5.764870500025070214e+03 -2.309390952054479624e-05
+6.015517043504421054e+03 -1.660412334638456457e-05
+6.266163586983771893e+03 -9.736545659247301864e-06
+6.516810130463123642e+03 -2.879141003961841352e-06
+6.767456673942473572e+03 3.609433109766702298e-06
+7.018103217421824411e+03 9.414348864353793830e-06
+7.268749760901176160e+03 1.427654133425967387e-05
+7.519396304380526999e+03 1.800158798382302028e-05
+7.770042847859877838e+03 2.046522532839878028e-05
+8.020689391339228678e+03 2.161535989400659348e-05
+8.271335934818578608e+03 2.147059987135141359e-05
+8.521982478297930356e+03 2.011549793010586202e-05
+8.772629021777280286e+03 1.769284674348329845e-05
+9.023275565256630216e+03 1.439349983767887199e-05
+9.273922108735983784e+03 1.044429548679610852e-05
+9.524568652215333714e+03 6.094735952360685515e-06
+9.775215195694685463e+03 1.603115422188351528e-06
+1.002586173917403539e+04 -2.777203761805211382e-06
+1.027650828265338532e+04 -6.810695146343833372e-06
+1.052715482613273707e+04 -1.029114144946008239e-05
+1.077780136961208882e+04 -1.305115504590505042e-05
+1.102844791309144057e+04 -1.496933617112337713e-05
+1.127909445657078868e+04 -1.597478937330965091e-05
+1.152974100005014043e+04 -1.604885936515674309e-05
+1.178038754352949218e+04 -1.522409140644692764e-05
+1.203103408700884211e+04 -1.358056140551962561e-05
+1.228168063048819386e+04 -1.123985011827172759e-05
+1.253232717396754379e+04 -8.357047883943348154e-06
+1.278297371744689553e+04 -5.111265987639229563e-06
+1.303362026092624728e+04 -1.695193934195003612e-06
+1.328426680440559903e+04 1.695723972015704258e-06
+1.353491334788494714e+04 4.873915423364005399e-06
+1.378555989136429889e+04 7.669558771773136798e-06
+1.403620643484364882e+04 9.939215626578308562e-06
+1.428685297832300057e+04 1.157279745994770680e-05
+1.453749952180235232e+04 1.249854419089990248e-05
+1.478814606528170225e+04 1.268580504507536490e-05
+1.503879260876105400e+04 1.214553263467471639e-05
+1.528943915224040211e+04 1.092852374982703632e-05
+1.554008569571975568e+04 9.121558398324818619e-06
+1.579073223919910561e+04 6.841696124897755809e-06
+1.604137878267845736e+04 4.229080191103601996e-06
+1.629202532615780729e+04 1.438671335364409644e-06
+1.654267186963715722e+04 -1.368619765081614513e-06
+1.679331841311651078e+04 -4.034910570542855072e-06
+1.704396495659586071e+04 -6.413949306517712084e-06
+1.729461150007521428e+04 -8.378886592097341881e-06
+1.754525804355456057e+04 -9.828814539270483175e-06
+1.779590458703391414e+04 -1.069374611510090649e-05
+1.804655113051326043e+04 -1.093779788568969189e-05
+1.829719767399261764e+04 -1.056044052432870953e-05
+1.854784421747196757e+04 -9.595788102923896029e-06
+1.879849076095131750e+04 -8.110003437234833044e-06
+1.904913730443066743e+04 -6.196996975404481799e-06
+1.929978384791001736e+04 -3.972685665471135903e-06
+1.955043039138937093e+04 -1.568151348931799759e-06
+1.980107693486872085e+04 8.779081484976896760e-07
+2.005172347834807078e+04 3.227010483031721166e-06
+2.030237002182742435e+04 5.348569895236596292e-06
+2.055301656530677064e+04 7.127010337238805934e-06
+2.080366310878612421e+04 8.467930635624153291e-06
+2.105430965226547414e+04 9.302999289873063095e-06
+2.130495619574482407e+04 9.593330678858157687e-06
+2.155560273922417764e+04 9.331180978645732969e-06
+2.180624928270352757e+04 8.539896150769528562e-06
+2.205689582618288114e+04 7.272140766703219538e-06
+2.230754236966223107e+04 5.606529955704002064e-06
+2.255818891314157736e+04 3.642872383395962251e-06
+2.280883545662093093e+04 1.496305356915537079e-06
+2.305948200010028086e+04 -7.093398983818425832e-07
+2.331012854357963442e+04 -2.848566924086419816e-06
+2.356077508705898435e+04 -4.801243939252652266e-06
+2.381142163053833065e+04 -6.459246994367523289e-06
+2.406206817401768421e+04 -7.732354263645520073e-06
+2.431271471749703414e+04 -8.553074730657228881e-06
+2.456336126097638771e+04 -8.880156690016049084e-06
+2.481400780445573764e+04 -8.700596904647049277e-06
+2.506465434793508757e+04 -8.030055682993426030e-06
+2.531530089141444114e+04 -6.911671884911838070e-06
+2.556594743489379107e+04 -5.413360050226739972e-06
+2.581659397837314100e+04 -3.623754666188334830e-06
+2.606724052185249457e+04 -1.647039579647232240e-06
+2.631788706533184450e+04 4.030401801493926359e-07
+2.656853360881119806e+04 2.409644489149199455e-06
+2.681918015229054436e+04 4.259419057021109147e-06
+2.706982669576989429e+04 5.848824882374916330e-06
+2.732047323924924785e+04 7.089866838759769776e-06
+2.757111978272859778e+04 7.914907995846710769e-06
+2.782176632620795135e+04 8.280309249187654363e-06
+2.807241286968729764e+04 8.168700745811890271e-06
+2.832305941316664757e+04 7.589768687645496038e-06
+2.857370595664600114e+04 6.579524075287720624e-06
+2.882435250012535107e+04 5.198104231780732331e-06
+2.907499904360470464e+04 3.526238887482431362e-06
+2.932564558708405093e+04 1.660585790196331805e-06
+2.957629213056340450e+04 -2.917977444943140561e-07
+2.982693867404275807e+04 -2.219534520019607497e-06
+3.007758521752210800e+04 -4.013216666227551234e-06
+3.032823176100145793e+04 -5.571552771103713293e-06
+3.057887830448080422e+04 -6.807030927073938633e-06
+3.082952484796016142e+04 -7.650784119361735765e-06
+3.108017139143951135e+04 -8.056390026067426034e-06
+3.133081793491886128e+04 -8.002397565105948772e-06
+3.158146447839821121e+04 -7.493444038505220412e-06
+3.183211102187756478e+04 -6.559905511757450588e-06
+3.208275756535691471e+04 -5.256104761413411551e-06
+3.233340410883626828e+04 -3.657181218510828795e-06
+3.258405065231561457e+04 -1.854801420244334570e-06
+3.283469719579496450e+04 4.804750938099420223e-08
+3.308534373927431443e+04 1.942888401151344696e-06
+3.333599028275367164e+04 3.721881558481486257e-06
+3.358663682623302157e+04 5.283906287142323527e-06
+3.383728336971236422e+04 6.540256579571632909e-06
+3.408792991319172143e+04 7.419633028858355269e-06
+3.433857645667107136e+04 7.872152571188545928e-06
diff --git a/_book/examples/candela/DSF/ref_isf.txt b/_book/examples/candela/DSF/ref_isf.txt
index d40a7145..702504c2 100644
--- a/_book/examples/candela/DSF/ref_isf.txt
+++ b/_book/examples/candela/DSF/ref_isf.txt
@@ -1,12 +1,12 @@
#time ISF
-0 0.545525
-6e-05 0.548246
-0.00012 0.54904
-0.00018 0.547915
-0.00024 0.544759
-0.0003 0.540041
-0.00036 0.533489
-0.00042 0.5254
-0.00048 0.515866
-0.00054 0.504843
-0.0006 0.492305
+0 0.606753
+6e-05 0.610541
+0.00012 0.612256
+0.00018 0.611912
+0.00024 0.609538
+0.0003 0.605178
+0.00036 0.598888
+0.00042 0.590738
+0.00048 0.580807
+0.00054 0.569183
+0.0006 0.555962
diff --git a/_book/examples/candela/SSF/INPUT b/_book/examples/candela/SSF/INPUT
index 86fbde83..2e1d0085 100644
--- a/_book/examples/candela/SSF/INPUT
+++ b/_book/examples/candela/SSF/INPUT
@@ -9,7 +9,7 @@ geo_ignore 50
ssf_out Al_ssf.txt
ntype 1
natom 32
-struf_dgx 2.5133
-struf_dgy 2.5133
-struf_dgz 2.5133
+struf_dgx 1.32656
+struf_dgy 1.32656
+struf_dgz 1.32656
struf_ng 6
\ No newline at end of file
diff --git a/_book/examples/candela/SSF/ref_Al_ssf.txt b/_book/examples/candela/SSF/ref_Al_ssf.txt
index f1625a44..1ecc80f0 100644
--- a/_book/examples/candela/SSF/ref_Al_ssf.txt
+++ b/_book/examples/candela/SSF/ref_Al_ssf.txt
@@ -1,66 +1,66 @@
-2.5133 0.345999
-3.55434 0.745128
-4.35316 0.494162
-5.0266 1.19746
-5.61991 1.2372
-6.1563 1.27521
-7.10869 1.11122
-7.5399 0.844335
-7.94775 0.832462
-8.33567 0.772972
-8.70633 0.901797
-9.06183 1.01054
-9.40391 1.06041
-10.0532 0.61635
-10.3626 1.06843
-10.663 0.982719
-10.9552 0.641951
-11.2398 0.895978
-11.5174 0.818662
-11.7884 0.889137
-12.3126 0.864581
-12.5665 1.01906
-12.8154 0.996543
-13.0595 1.2461
-13.5345 0.95306
-13.7659 0.934613
-14.2174 1.36614
-14.4378 1.08725
-14.6549 0.960906
-14.8689 0.949919
-15.0798 1.0475
-15.2878 0.911362
-15.493 1.04402
-15.8955 1.19865
-16.093 0.928915
-16.288 0.893584
-16.4808 1.06504
-16.6713 1.10534
-16.8597 0.96935
-17.046 1.12444
-17.4127 0.686601
-17.5931 1.05733
-17.7717 1.00406
-17.9486 1.19276
-18.1237 0.983091
-18.2971 0.93808
-18.4689 0.870007
-18.8078 0.819792
-18.975 1.14617
-19.305 0.903498
-19.6295 1.11241
-19.7897 0.95827
-20.2629 0.987416
-20.4181 1.01844
-20.7252 0.949082
-21.0278 1.15255
-21.3261 0.938464
-21.4736 1.0361
-21.7658 1.0149
-21.9104 1.00169
-22.0541 0.970528
-22.6197 1.24256
-23.3074 0.967219
-23.5768 0.79158
-24.7531 1.07262
-26.119 0.972749
+1.32656 0.167935
+1.87604 0.297491
+2.29767 0.409901
+2.65312 0.310341
+2.96628 0.632946
+3.2494 0.741784
+3.75208 0.653969
+3.97968 1.12947
+4.19495 0.760354
+4.3997 0.659939
+4.59534 0.388886
+4.78298 0.831378
+4.96353 1.17734
+5.30624 1.05643
+5.46955 0.942158
+5.62812 1.31937
+5.78234 1.13488
+5.93256 1.21469
+6.07906 1.15898
+6.22212 0.954795
+6.49879 1.42856
+6.6328 1.42298
+6.76416 0.739915
+6.89301 1.03439
+7.14374 0.943183
+7.26587 0.984094
+7.50416 0.954448
+7.62051 0.989969
+7.73511 1.10763
+7.84803 1.14592
+7.95936 0.831941
+8.06915 1.09111
+8.17747 1.09693
+8.3899 0.765447
+8.49413 0.932756
+8.59709 0.967282
+8.69884 0.916869
+8.7994 1.01185
+8.89884 0.893268
+8.99717 1.01255
+9.19068 0.607474
+9.28592 0.941192
+9.3802 0.955372
+9.47353 0.695223
+9.56596 0.957924
+9.6575 0.802796
+9.74819 1.2518
+9.92707 1.05179
+10.0153 1.02417
+10.1895 1.13744
+10.3608 1.085
+10.4453 0.918181
+10.6951 1.0876
+10.777 0.877025
+10.9391 0.950274
+11.0988 1.13241
+11.2562 0.664974
+11.3341 0.906562
+11.4883 0.694058
+11.5647 0.678278
+11.6405 0.866218
+11.939 0.969126
+12.302 0.88411
+12.4442 0.987857
+13.0651 0.781879
+13.786 1.12759
diff --git a/_book/examples/candela/SSF/ref_sm-Al_ssf.txt b/_book/examples/candela/SSF/ref_sm-Al_ssf.txt
index 4e45e458..d05afe21 100644
--- a/_book/examples/candela/SSF/ref_sm-Al_ssf.txt
+++ b/_book/examples/candela/SSF/ref_sm-Al_ssf.txt
@@ -1,63 +1,51 @@
-2.5133 0.345999
-3.55434 0.745128
-4.35316 0.494162
-5.0266 1.19746
-5.61991 1.2372
-6.1563 1.27521
-7.10869 1.11122
-7.5399 0.844335
-7.94775 0.832462
-8.33567 0.772972
-8.70633 0.901797
-9.06183 1.01054
-9.40391 1.06041
-10.0532 0.61635
-10.3626 1.06843
-10.663 0.982719
-10.9552 0.641951
-11.2398 0.895978
-11.5174 0.818662
-11.7884 0.889137
-12.3126 0.864581
-12.5665 1.01906
-12.8154 0.996543
-13.0595 1.2461
-13.5345 0.95306
-13.7659 0.934613
-14.2174 1.36614
-14.4378 1.08725
-14.6549 0.960906
-14.8689 0.949919
-15.0798 1.0475
-15.2878 0.911362
-15.493 1.04402
-15.8955 1.19865
-16.093 0.928915
-16.288 0.893584
-16.4808 1.06504
-16.6713 1.10534
-16.8597 0.96935
-17.046 1.12444
-17.5673 1.00437
-17.7717 1.00406
-17.9486 1.19276
-18.1237 0.983091
-18.2971 0.93808
-18.4689 0.870007
-18.8635 0.928584
-19.305 0.903498
-19.6936 1.05075
-20.2629 0.987416
-20.4181 1.01844
-20.7252 0.949082
-21.0278 1.15255
-21.3261 0.938464
-21.4736 1.0361
-21.7658 1.0149
-21.9104 1.00169
-22.0541 0.970528
-22.6197 1.24256
-23.3074 0.967219
-23.5768 0.79158
-24.7531 1.07262
-26.119 0.972749
+1.32656 0.167935
+1.87604 0.297491
+2.29767 0.409901
+2.65312 0.310341
+2.96628 0.632946
+3.2494 0.741784
+3.75208 0.653969
+3.97968 1.12947
+4.19495 0.760354
+4.3997 0.659939
+4.59534 0.388886
+4.78298 0.831378
+4.96353 1.17734
+5.30624 1.05643
+5.46955 0.942158
+5.68981 1.24557
+5.93256 1.21469
+6.07906 1.15898
+6.22212 0.954795
+6.49879 1.42856
+6.72552 0.940815
+6.89301 1.03439
+7.14374 0.943183
+7.26587 0.984094
+7.50416 0.954448
+7.67781 1.0488
+7.89085 1.02516
+8.15039 1.09548
+8.3899 0.765447
+8.52845 0.944265
+8.74912 0.964358
+8.93817 0.940981
+9.19068 0.607474
+9.3383 0.94907
+9.51975 0.826573
+9.70284 1.0273
+9.92707 1.05179
+10.1024 1.0808
+10.3608 1.085
+10.4453 0.918181
+10.7224 1.01741
+10.9391 0.950274
+11.0988 1.13241
+11.3082 0.826033
+11.5456 0.682223
+11.6405 0.866218
+11.939 0.969126
+12.302 0.88411
+12.4442 0.987857
+13.0651 0.781879
+13.786 1.12759
diff --git a/_book/index.html b/_book/index.html
index 396f30a6..021c3450 100644
--- a/_book/index.html
+++ b/_book/index.html
@@ -511,7 +511,7 @@ No results matching "
var gitbook = gitbook || [];
gitbook.push(function() {
- gitbook.page.hasChanged({"page":{"title":"ABACUS使用教程","level":"1.1","depth":1,"next":{"title":"ABACUS 在曙光 DCU 集群上的编译与使用","level":"1.1.1","depth":2,"path":"abacus-dcu.md","ref":"abacus-dcu.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"README.md","mtime":"2023-08-04T02:08:18.502Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T07:59:18.754Z"},"basePath":".","book":{"language":""}});
+ gitbook.page.hasChanged({"page":{"title":"ABACUS使用教程","level":"1.1","depth":1,"next":{"title":"ABACUS 在曙光 DCU 集群上的编译与使用","level":"1.1.1","depth":2,"path":"abacus-dcu.md","ref":"abacus-dcu.md","articles":[]},"dir":"ltr"},"config":{"plugins":["disqus","3-ba","pageview-count","theme-comscore","insert-logo","custom-favicon","intopic-toc","anchors","chapter-fold","expandable-chapters","-lunr","-search","search-plus","prism","-highlight","code","mathjax-pro","hide-element","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":{"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":{},"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},"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},"pageview-count":{},"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":{}},"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":{},"gitbook":"*","description":"国产DFT开源软件ABACUS中文使用教程"},"file":{"path":"README.md","mtime":"2023-08-04T02:08:18.502Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-08-23T08:35:48.372Z"},"basePath":".","book":{"language":""}});
});
diff --git a/_book/search_plus_index.json b/_book/search_plus_index.json
index 7e251a13..04921fe8 100644
--- a/_book/search_plus_index.json
+++ b/_book/search_plus_index.json
@@ -1 +1 @@
-{"./":{"url":"./","title":"ABACUS使用教程","keywords":"","body":"ABACUS使用教程 一、介绍 ABACUS(Atomic-orbtial Based Ab-initio Computation at UStc,中文名原子算筹)是国产开源密度泛函理论软件,相关介绍 ABACUS 的新闻可在ABACUS 新闻稿整理查看,以下是一些常用地址: ABACUS 在 DeepModeling 社区中的 GitHub 仓库地址为: https://github.com/deepmodeling/abacus-develop ABACUS 的 Gitee 镜像仓库地址为: https://gitee.com/deepmodeling/abacus-develop ABACUS 网站访问: http://abacus.ustc.edu.cn/ 文档(包括安装方法、输入输出参数介绍、功能介绍、算例介绍、开发者须知等): https://abacus.deepmodeling.com/en/latest/。 本教程系列旨在帮助新手用户入门了解 ABACUS 的使用。秉着开源软件的理念,本文档是由开源社区的老师同学们贡献所成。如果你也想贡献一份文档,我们十分欢迎,请参考如何贡献ABACUS使用教程 二、ABACUS基本操作教程 ABACUS的编译介绍 官方编译教程 知乎上用户提供的ABACUS 3.0安装教程 编译无MPI的ABACUS 曙光DCU平台编译教程:ABACUS 在曙光 DCU 集群上的编译与使用 ABACUS建模介绍 准备晶胞和原子位置等信息的文件STRU:如何转换STRU的格式 准备赝势: 模守恒赝势生成方法简介 数值原子轨道基组生成教程: 数值原子轨道(一):ABACUS 中的数值原子轨道命名和使用方法 数值原子轨道(二):生成给定模守恒赝势的数值原子轨道 数值原子轨道(三):产生高精度数值原子轨道 Kohn-Sham密度泛函理论 电子自洽迭代 平面波PW(缺) 数值原子轨道LCAO(缺) 带自旋的体系计算:ABACUS磁性材料计算使用教程 +U计算:ABACUS DFT+U使用教程 结构优化(缺) 分子动力学:ABACUS 分子动力学使用教程 DeePKS方法(缺) 隐式溶剂计算等相关功能(缺) 随机波函数密度泛函理论:ABACUS 随机波函数DFT方法使用教程 无轨道密度泛函理论:ABACUS 无轨道密度泛函理论方法使用教程 分析结果 能带计算 如何正确画能带,NSCF读电荷密度 用ABACUS-ASE自动产生能带路径 PDOS计算 ABACUS里怎样做DOS和PDOS计算 和其他软件对接 ABACUS+Phonopy 计算声子谱 ABACUS+ShengBTE 计算晶格热导率 ABACUS+DPGEN 使用教程 ABACUS+LibRI 做杂化泛函计算教程 ABACUS+Candela 使用教程 ABACUS+CINEB教程(缺) ABACUS-ASE做NEB计算 (简单算例) 三、使用经验 有VASP使用背景的用户上手ABACUS教程:ABACUS新人使用的一些注意事项 "},"abacus-dcu.html":{"url":"abacus-dcu.html","title":"ABACUS 在曙光 DCU 集群上的编译与使用","keywords":"","body":"ABACUS 在曙光 DCU 集群上的编译与使用 作者:贾志炜,邮箱:jiazhiwei@stu.pku.edu.cn 审核:韩昊知,邮箱:haozhi.han@stu.pku.edu.cn 最后更新时间:2023/07/07 一、介绍 本教程旨在介绍 ABACUS 在 曙光 DCU 计算平台 上的编译与使用。 1. DCU DCU (Deep Computing Unit) 是一款面向人工智能、科学计算的高性能全功能 GPGPU (General-Purpose computing on Graphics Processing Units) 加速卡。 中科海光基于 DCU 硬件提供完整的软件工具链,以 DTK(DCU toolkit)为基础软件层为开发者提供运行、编译、调试和性能分析等功能,并提供多种深度优化的计算加速库。DCU 加速卡支持 ROCm/Hip 并行架构。 曙光计算集群采用 CPU 和 DCU 加速卡(Deep Computing Unit)相结合的异构融合计算体系结构。 2. ABACUS 的异构并行计算 INPUT 文件中 device 参数需设置为 gpu。 目前 GPU/DCU 版本的 ABACUS 仅支持 PW 基组的计算,因此 INPUT 文件中 basis_type 参数仅能设置为 pw。 二、准备 1. 曙光计算平台 用户需要在平台上申请异构计算资源: https://ac.sugon.com/doc/1.0.6/30000/general-handbook/platform/source.html 2. E-shell 曙光计算平台采用 E-shell 来对管理节点进行操作。 可使用网页版或 E-Shell Client。 不可直接运行任务,而是使用 Slurm 调度系统。 采用 modules 工具 来管理环境变量与系统依赖项。许多依赖如编译器版本等可以通过 modules 来处理。 3. slurm Slurm 工作调度工具是面向 Linux 和 Unix 及类似内核的免费和开源工作调度程序,可以方便用户进行作业的提交、管理、监测。 sinfo: 查看系统资源。 squeue: 查看当前作业状态。 salloc: 分配节点的作业提交,用 salloc 申请的节点会在当前终端退出时释放掉。用于程序测试以及中小型任务的提交。 sbatch: 批处理模式的作业提交,需要编写 slurm 作业提交脚本。在 E-shell 的默认目录存有 slurm 脚本模板。在下面的流程中也会介绍提交 ABACUS 任务的脚本案例。 srun: 交互式提交作业命令,有屏幕输出,但容易受网络波动影响,断网或关闭窗口会导致作业中断。 三、流程 1. 配置超算环境 module avail # 列出已有环境 module list # 查看当前已加载环境 module load # 加载环境 module unload # 卸载环境 昆山节点 module purge 1) compiler/devtoolset/7.3.1 2) compiler/rocm/dtk-22.10 3) compiler/cmake/3.17.2 4) mpi/hpcx/2.6.0/gcc-7.3.1 乌镇节点 1) compiler/devtoolset/7.3.1 2) compiler/dtk/23.04 3) compiler/cmake/3.23.1 4) mpi/hpcx/gcc-7.3.1 对于使用其他 DCU 节点(合肥、哈尔滨、西安)的用户,如果 module 中没有找到类似的环境,欢迎在 ABACUS 仓库 提出 issue,我们将尽力协助解决。 2. 编译 ABACUS 依赖软件包 目前按照 DCU 版本已验证的编译方法,有三个数学库需要自行编译。 若曙光平台网络连接不畅,请在软件官网选择合适的软件包,再用曙光平台的 E-File 传送至节点。 FFTW: https://fftw.org/pub/fftw/fftw-3.3.10.tar.gz OpenBLAS: https://github.com/xianyi/OpenBLAS/releases/download/v0.3.21/OpenBLAS-0.3.21.tar.gz ScaLAPACK: https://github.com/Reference-ScaLAPACK/scalapack/archive/refs/tags/v2.2.0.tar.gz 2.1 编译 FFTW tar -zxvf fftw-3.3.10.tar.gz mkdir build ./configure --prefix=/work/home/your_username/fftw-3.3.10/build cd ~/fftw-3.3.10/build make make install FFTW 需要编译单精度版本和双精度版本: cd ~/fftw-3.3.10/build ./configure --prefix=/work/home/your_username/fftw-3.3.10/build --enable-float make make install 2.2 编译 OpenBLAS tar -zxvf OpenBLAS-0.3.23.tar.gz cd OpenBLAS-0.3.23 make USE_OPENMP=1 NO_AVX512=1 FC=\"gfortran -fPIC\" CC=\"gcc -fPIC\" -j8 mkdir build make PREFIX=/work/home/your_username/OpenBLAS-0.3.21/build install 2.3 编译 ScaLAPACK cp SLmake.inc.example SLmake.inc 复制包中提供的 SLmake.inc.example 作为基准,并对 SLmake.inc 的内容作出一部分修改: FC = mpif90 -fPIC CC = mpicc -fPIC BLASLIB = LAPACKLIB = -L/work/home/your_username/OpenBLAS-0.3.21/build/lib -lopenblas make 3. 编译 DCU 版本的 ABACUS git clone https://gitee.com/deepmodeling/abacus-develop # main分支 cd abacus-develop mkdir build cd build CMake 配置: 指定编译器为 clang,关闭 OpenMP、LCAO 计算模块,设定三个数学库的位置,设定 USE_ROCM=ON。 CC=clang CXX=clang++ cmake -B build -DUSE_OPENMP=OFF -DENABLE_LCAO=OFF \\ -DFFTW3_DIR=/work/home/your_username/fftw-3.3.10/build/ \\ -DLAPACK_DIR=/work/home/your_username/OpenBLAS-0.3.21/build/lib \\ -DSCALAPACK_DIR=/work/home/your_username/scalapack-2.2.0/ \\ -DUSE_ROCM=ON Make 编译:make 部分建议不要并行编译。 make 4. 提交任务 salloc(中小型任务与交互性程序测试) salloc -p [队列名] -N 1 -n 32 --gres=dcu:4 ... load text ... salloc: Waiting for resource configuration salloc: Nodes node_num are ready for job # 分配计算节点,可用ssh直接连接 ssh node_num ...交互式进行计算任务 sbatch(大型任务与批量提交) 写一个作业提交脚本,可以参考以下结构: #!/bin/bash #SBATCH --job-name=ABACUS_GPU #SBATCH --partition=kshdnormal #SBATCH --nodes=1 #SBATCH --output=output.log #SBATCH --ntasks-per-node=32 #SBATCH --mail-user=username@email #SBATCH --gres=dcu:4 #dcu个数 #SBATCH --time=01:00:00 #SBATCH --error=error.log #以上的SBATCH信息会由slurm识别 abacus=/work/home/your_username/abacus-develop/build/abacus_pw #设置环境 module purge module load compiler/devtoolset/7.3.1 module load compiler/rocm/dtk-22.10 module load compiler/cmake/3.17.2 module load mpi/hpcx/2.11.0/gcc-7.3.1 #运行脚本 cd your_task_path mpirun -np 4 $abacus sbatch abacus_dcu.slurm 作业已提交,可在“作业管理”中查看。 四、结语 DCU 可以提高 ABACUS 计算性能,也充分利用了 ROCm 并行框架,使得 ABACUS 异构计算能应用在更多的平台上。 "},"abacus-upf.html":{"url":"abacus-upf.html","title":"模守恒赝势生成方法简介","keywords":"","body":"模守恒赝势生成方法简介 作者:陈涛,邮箱:chentao@stu.pku.edu.cn;刘千锐,邮箱:terry_liu@pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/06/30 一、介绍 UPF(unified PP format)是一种类似 XML 格式的文件格式,用于存储赝势及其相关参数。该格式由 Quantum ESPRESSO(QE)团队开发,并已成为许多量子计算软件包的标准格式之一。 ABACUS(截至 v3.2.3)的 Kohn-Sham 密度泛函理论计算主要支持 UPF 格式的模守恒赝势,在使用 ABACUS 过程中,一般可以直接使用网上已经生成好的赝势,常见的下载位置: ABACUS 官网 SG15-ONCV,参考文献:Optimization algorithm for the generation of ONCV pseudopotentials Quantum ESPRESSO 官网中的模守恒赝势 pseudo-dojo 官网(psp8 格式,需要转换) PWmat 官网 但是,在实际计算中,可能这些赝势并不符合当前的需求,这时候就需要自己生成模守恒赝势。可以通过其他格式赝势转换或者利用赝势软件生成两种方式来获得赝势。 注:ABACUS 的无轨道密度泛函理论计算(Orbital-Free Density Functional Theory,简称 OFDFT)需要用到一种特殊的局域势(不包含非局域势),一般采用 BLPS 局域赝势文件而非上文提到的 UPF 文件,如果做 OFDFT 计算的,可以阅读介绍 OFDFT 计算的文档,或者登录 Emily A. Carter 教授主页寻找相关的信息。 二、从其他格式赝势转换 1. 使用 QE upflib 中的 upfconv 进行转换 其支持将 UPF v.1 格式、vdb/van 格式(Vanderbilt US pseudopotential)、cpi/fhi 格式(FHI/abinit)转化成 UPF v.2 格式 path_to_QE/upflib/upfconv.x -u *.upf/UPF/vdb/van/cpi/fhi 注:这里的 path_to_QE 代表下载的 Quantum Espresso 的软件包地址。 注:文件夹 upflib 在 QE 5.x 和 6.x 版本名称为 upftools,在QE 7.x 版本为 upflib。 2. psp8 格式转换 psp8 格式是 ONCVPSP 软件生成的一种赝势格式,在 Abinit 官网(pseudo-dojo)中,其使用的就是 psp8 的格式,目前没有直接将 psp8 格式的赝势直接转换成 UPF 格式的脚本,但可以将 psp8 中输入文件部分摘抄下来,用 ONCVPSP 软件重新生成 UPF 格式的赝势(具体生成见下面 ONCVPSP 的讲解)。 可供参考的批量处理脚本:https://github.com/pipidog/ONCVPSP 三、赝势的生成 下面介绍三个可以生成 UPF 模守恒赝势的软件,分别是 ONCVPSP,Opium,和 ld1.x 1 ONCVPSP 1.1 介绍 ONCVPSP(Optimized Norm-Conservinng Vanderbilt PSeudoPotential)是由 D.R. Hamann 等人提出的优化版模守恒赝势,其有更高的精度与效率。ONCVPSP 依赖 Libxc,支持多种交换关联泛函。 参考文献:Optimized norm-conserving Vanderbilt pseudopotentials。 1.2 安装 1.2.1 安装 Libxc Libxc 网址:Libxc - a library of exchange-correlation functionals for density-functional theory 推荐下载 libxc-4.3.4 然后执行如下命令: cd libxc-4.3.4 ./configure --prefix='PATH/TO/LIBXC' CC=icc FC=ifort make make install 命令执行完毕后即可在 PATH/TO/LIBXC 目录下看到 bin,include 和 lib 三个目录,代表安装成功 1.2.2 安装 oncvpsp 推荐下载 oncvpsp-4.0.1 然后执行 cd oncvpsp-4.0.1,进入文件夹 这时需要修改 make.inc 文件 修改 F77 = ifort, F90 = ifort, CC = icc FFLAGS 删去 -ffast-math LIBS 改为 -qmkl=\"sequential\" LIBS+ 和 FFLAGS 中的地址改为自己的 PATH/TO/LIBXC 具体如下: # System-dependent makefile options for ONCVPSP # This must be carefully edited before executing \"make\" in src # # Copyright (c) 1989-2019 by D. R. Hamann, Mat-Sim Research LLC and Rutgers # University ##### Edit the following lines to correspond to your compilers #### F77 = ifort F90 = ifort CC = icc FCCPP = cpp FLINKER = $(F90) #FCCPPFLAGS = -ansi -DLIBXC_VERSION=301 #Use this for versions 400 ##### Edit the following optimization flags for your system #### FFLAGS = -O3 -funroll-loops CFLAGS = -O3 ##### Edit the following LAPACK and BLAS library paths for your system #### LIBS = -qmkl=\"sequential\" ##### Edit the following for to use libxc if available ##### OBJS_LIBXC = exc_libxc_stub.o # oncvpsp is compatible with libxc # To build oncvpsp with libxc, uncomment the e following lines and edit # the paths to point to your libxc library and include directories # make clean in src before rebuilding after changing this LIBS += -L/PATH/TO/LIBXC/lib -lxcf90 -lxc FFLAGS += -I/PATH/TO/LIBXC/include #LIBS += -L/home/drh/abinit/fallbacks/exports/lib -lxcf90 -lxc #FFLAGS += -I/home/drh/abinit/fallbacks/exports/include OBJS_LIBXC = functionals.o exc_libxc.o 然后执行如下命令: make # 如果make -j报错,可以忽略再make,即可编译成功 安装测试完成后,即可在 src 目录下看到 oncvpsp.x 可以在 ~/.bashrc 中增加如下命令将 oncvpsp.x 加入环境变量,方便直接调用: export PATH=$PATH:/PATH/TO/ONCVPSP/src 1.3 输入文件 输入文件的准备可以参考 PATH_TO_ONCVPSP/doc/32_Ge_annotated.dat,或者参考已知 ONCV 的赝势里面的 部分来写。 这里以铝(Al)为例,输入文件 Al.dat: # ATOM AND REFERENCE CONFIGURATION # atsym, z, nc, nv, iexc psfile Al 13 1 4 4 upf # # n, l, f (nc+nv lines) 1 0 2 2 0 2 2 1 6 3 0 2 3 1 1 # # PSEUDOPOTENTIAL AND OPTIMIZATION # lmax 1 # # l, rc, ep, ncon, nbas, qcut (lmax+1 lines, l's must be in order) 0 1.29163 0 5 8 10.3003 1 2.40653 0 5 8 7.02214 # # LOCAL POTENTIAL # lloc, lpopt, rc(5), dvloc0 4 5 0.932267 0 # # VANDERBILT-KLEINMAN-BYLANDER PROJECTORs # l, nproj, debl (lmax+1 lines, l's in order) 0 2 0 1 2 0 # # MODEL CORE CHARGE # icmod, fcfact 0 0 # # LOG DERIVATIVE ANALYSIS # epsh1, epsh2, depsh -5.0 3.0 0.02 # # OUTPUT GRID # rlmax, drl 6.0 0.01 # # TEST CONFIGURATIONS # ncnf 0 # nvcnf # n l f 一些可以调整的参数如下: nc:c = core,芯电子层数 nv:v = valence,价电子层数,调整 nc 和 nv 可以改变赝势的价电子数 iexc:生成赝势所用的交换关联泛函,详情可参考 ONCVPSP-4.0.1 目录下 doc 内的 pwscf_exc.txt 文件,常用的如下 iexc==3 .or. iexc==-001009, 'functional=\"PZ\"' iexc==4 .or. iexc==-101130, 'functional=\"PBE\"' psfile:赝势格式,有 upf 和 psp8 两种。ABACUS 支持 upf 的格式 rc: rc 中较小的为赝势的截断半径。在温度较高或密度较大的温稠密体系,通常需要调整赝势的截断半径,推荐小于 0.7 倍维格纳半径,单位为 Bohr;每个 l 对应一个 rc,其中最小的为赝势的截断半径 rc(5):rc 都要大于等于 rc(5)。例如 Al 的 l=0 的 rc 为 1.29163 Bohr,l=1 的 rc 为 2.40653 Bohr,rc(5) 为 0.932267 Bohr,因此该赝势的截断半径为 1.29163 Bohr。 qcut:通过调整(+-0.1),直到推荐 ECUT 达到最小 dvloc0:通过调整(+-0.5),直到消除赝势的 GHOST 态(可参考文献 Phys. Rev. B 41, 12264 (1990)) 1.4 生成赝势 执行命令: oncvpsp.x Al.out sed -n '//,//p' Al.out > Al.UPF 生成完赝势需要查看 Al.out 文件,确定没有 GHOST 态(可参考文献 Phys. Rev. B 41, 12264 (1990)): Testing for highly-localized positive-energy ghosts l \\/rc E Basis Diag. E Cutoff 1 0.974041 120.256772 338.98 WARNING - GHOST(+) 如上,出现 WARNING - GHOST 说明有 GHOST,需要调整 dvloc0 (+-0.5)直到消除 GHOST 态 sed 命令是为了从 Al.out 文件中截取赝势文件到 Al.UPF 中 如果同时要画出类似 Phys. Rev. B 88, 085117 (2013) 的图,需要准备输入文件 Al.dat 并执行命令: sh PATH_TO_ONCVPSP/scripts/run.sh Al 可以画出如下的图: 图1. 局域势函数与非局域势不同轨道角动量对应的半局域径向势函数 图2. S赝波函数与全电子波函数对比 图3. S的双投影波函数 图4. 不同能级波函数在截断半径处log导数对比,其影响散射性质的计算 图5. 不同轨道角动量对应的截断能 1.5 优化赝势 依次调节不同 l 对应的 qcut(+-0.1),检查对应 ECUT(l) 变化情况,直到 ECUT(l) 达到最小 参考的脚本: !/bin/bash qcut=17 dq=0.1 #遍历l=0的qcut从17到25,间隔为0.1,输出其对应的ECUT while [ `echo \"$qcut test.dat qcut$qcut.out grep -A 5 \"Energy error\" qcut$qcut.out > _tmp.txt E1=`sed -n \"6p\" _tmp.txt | awk '{print $3}'` E2=`sed -n \"13p\" _tmp.txt | awk '{print $3}'` E3=`sed -n \"20p\" _tmp.txt | awk '{print $3}'` E4=`sed -n \"27p\" _tmp.txt | awk '{print $3}'` # echo $qcut $E1 $E2 $E3 $E4 if [ `echo \"$E1>$E2\" | bc` == '1' ] ;then Emax1=$E1 else Emax1=$E2 fi if [ `echo \"$E3>$E4\" | bc` == '1' ];then Emax2=$E3 else Emax2=$E4 fi echo $qcut $Emax1 $Emax2 qcut=`echo \"$qcut+$dq\" | bc` done 不同的 l 都会有对应的能量截断值 ECUT(l)。一般 rc(l) 越小,对应的 ECUT(l) 越大,赝势也就越精确。由于 DFT 计算中的截断能 ECUT 是由赝势中较大的那个 ECUT(l) 决定,如果不同 l 的 ECUT(l) 相差很大,可以适当减小较小的 ECUT(l) 对应 l 的截断半径 rc,使得不同 l 对应的 ECUT(l) 更接近,这样并不会增加赝势计算的 ECUT,却可以提升精度。 这样调完之后如果有 GHOST 态,需要调整 dvloc0 (+-0.5)直到消除 GHOST 态,这个赝势才可使用 2. Opium Opium 软件包可以生成 RRKJ、TM 或 Kerker 径向波函数的赝势,官网有 LDA、GGA 赝势库(但是某些输入文件已经不匹配最新的 4.1 版本,需要稍作修改) 下载 Opium 之后利用 configure 安装: ./configure make 输入文件可以参考官网 LDA、GGA 赝势库,也可以参考 PATH_TO_OPIUM/tests,这里以铝(Al)为例,输入文件 al.param: [Atom] Al 6 100 2.00 -13.0 # reference configuration 200 2.00 -1.4 # reference configuration 210 6.00 -0.4 # reference configuration 300 2.00 -0.1 # reference configuration 310 0.95 -13.0 # reference configuration 320 -1.0 -0.0 # 这条能带是非束缚态,需要将占据数调成负数,官网给错了 [Pseudo] 3 1.85 1.85 1.97 opt [Optinfo] 7.07 10 # rc[a.u.] qc[sqrt(Ry)] Nb 7.07 10 7.07 10 [Configs] 3 # number of valence configurations # 300 2.00 -13.0 # nlm occ eigen(- means auto-generate) 310 1.00 -6.0 320 0.00 -6.0 # 300 1.00 -13.0 310 2.00 -6.0 320 0.00 -6.0 # 300 2.00 -13.0 310 0.00 -6.0 320 0.00 -6.0 [XC] gga [Relativity] srl 这里的参数可以参考官网手册 之后执行 opium al log all #输出在log文件里,依次执行全电子计算、计算赝势、计算非局域势、可移植性测试 opium al log upf #生成al.upf的输出文件 upfconv.x -u al.upf #利用QE的upflib将UPFv.1转化成UPFv.2格式 3. ld1.x QE 的 atomic 模块中的 ld1.x 支持生成赝势。其不仅可以生成模守恒赝势、还支持超软赝势、PAW 方法,支持全相对论、标量(非)相对论赝势(rel, non-rel/sca-rel),其径向波函数支持 TM(更稳定)与 RRKJ 两种方法,支持交换关联近似 7 类 LDA( pz),GGA(pbe, pbesol, revpbe, bp, wc, pw91。 下载好 QE 软件后,可以直接安装: ./configure make ld1 3.1 pslibrary 赝势库 推荐 ld1.x 生成其自带的 pslibrary 赝势库,下载好 pslibrary.1.0.0.tar.gz,解压,进入文件夹,修改 QE_path 文件,指定 QE 的路径。然后打开 make_ps 文件,解锁相应赝势: # These two files generate PAW and US PPs for all elements. These are # high accuracy - high kinetic energy cut-off PPs. # . ../paw_ps_high.job #默认打开的 . ../us_ps_high.job # # These two files generate additional PAW and US PPs for some elements. # These are less accurate PP than the previous one but require # lower kinetic energy cut-off or have less projectors or less semicore # states. # . ../paw_ps_low.job . ../us_ps_low.job # Uncomment the following line to generate the old pslibrary 0.3.1 PPs. # 打开下面的注释,可以解锁其余赝势 # #. ../paw_ps_collection.job #可以打开注释 #. ../us_ps_collection.job #可以打开注释 # Uncomment the following line to generate the NC-PPs. Be very careful # these PPs are completely untested. # 虽然可以生成,但其也提示该赝势的准确性并不能保证 # #. ../nc_ps_collection.job #可以打开注释 下面运行 ./make_all_ps 就能看到在一个个生成赝势库里的赝势: Making Ac.pz-spfn-kjpaw_psl.1.0.0.in ... Done Making Ac.pz-spfn-rrkjus_psl.1.0.0.in ... Done Making Ag.pz-n-kjpaw_psl.1.0.0.in ... Done Making Ag.pz-n-rrkjus_psl.1.0.0.in ... Done Making Ag.pz-spn-kjpaw_psl.1.0.0.in ... Done Making Ag.pz-spn-rrkjus_psl.1.0.0.in ... Done Making Al.pz-n-kjpaw_psl.1.0.0.in ... Done Making Al.pz-n-rrkjus_psl.1.0.0.in ... Done Making Al.pz-nl-kjpaw_psl.1.0.0.in ... Done Making Al.pz-nl-rrkjus_psl.1.0.0.in ... Done 如果不想生成所有的元素的赝势,则可以修改 make_ps 的 element,例如: element='C Si Ge' 3.2 生成自己的赝势 参数的详细解释见 PATH_TO_QE/atomic/Doc/INPUT_LD1.html 或线上的文档(不是最新的,建议前者),输入文件可以参考 pslibrary 赝势库的例子。 这里就简单给个 Al(铝)的例子,准备输入文件 al.in: &input title='Al', zed=13.0, rel=1, config='[Ne] 3s2 3p1 3d-2.0 4f-2.0', iswitch=3, dft='PBE' / &inputp pseudotype=2, file_pseudopw='Al.pbe-n-nc.UPF', #输入赝势 lloc=2, nlcc=.true., tm=.true. / 3 3S 1 0 2.00 0.00 2.60 2.60 0.0 3P 2 1 1.00 0.00 2.60 2.60 0.0 3D 3 2 0.00 0.10 2.60 2.60 0.0 运行 ld1.x 即可生成 Al.pbe-n-nc.UPF 模守恒赝势。 四、结尾 ABACUS 使用的是模守恒赝势,基于模守恒赝势还可以产生数值原子轨道,进行基于数值原子轨道的高效率密度泛函理论计算。有些情况下,网上提供的赝势不能满足需求,这个时候赝势的生成需要对赝势理论有比较深入的了解之后,才能调整好相关参数,生成质量较好的赝势。此外,生成之后,应该经过较为充分的测试,才能保证赝势的可移植性和正确性。如果大家有任何问题,欢迎发 email 至文档开头的邮箱。 "},"abacus-nac1.html":{"url":"abacus-nac1.html","title":"数值原子轨道(一):ABACUS 中的数值原子轨道命名和使用方法","keywords":"","body":"数值原子轨道(一):ABACUS 中的数值原子轨道命名和使用方法 作者:梁馨元,邮箱:2201111875@stu.pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/07/18 一、数值原子轨道的背景知识 1. 数值原子轨道 对电子结构的求解可以在不同的表象下进行,电子的波函数以及势函数也可以在不同基矢量下表示,常用的有平面波和局域轨道等。LCAO(Linear Combination of Atomic Orbitals)方法就是通过局域的原子轨道来求解量子力学问题。其中局域轨道的选取方式有多种,例如高斯轨道(Gaussian type Orbitals,GTOs 或 Gaussians)、数值原子轨道(Numerical Atomic Orbitals)、万尼尔函数(Wannier Functions)等。 2. 数值原子轨道作为基矢量的优点 数值原子轨道作为基矢量有几个优点:第一,基矢量个数相比于一些常用的基矢量(例如平面波和实空间网格)大幅度降低;第二,数值原子轨道是局域的,空间上可以严格截断,采用数值原子轨道来构建体系的哈密顿量的效率可以达到线性标度的时间复杂度。 3. 构造数值原子轨道基组的几种方案 构造精度高、可系统提升数量、可移植性好的原子轨道基组颇有挑战,因此也有多种方案被提出。例如,Junquera 等人提出在一维薛定谔方程中加入不同形式的约束势场,从而求解出具有严格截断的数值原子轨道[1]。Ozaki 在 OpenMX 软件中采用变分的方法来优化局域轨道的形状,从而得出一组最优的数值原子轨道[2]。Volker 等人提出在一个大的局域轨道基组中挑选最合适的局域轨道组成不同等级的基组轨道,该方案用于全电子密度泛函理论软件 FHI-aims 中[3]。Chen 等人提出利用前人提出的溢出函数(Spillage function)[4-5]来构造可系统提高数量的数值原子轨道,其中每个轨道都由一组球贝塞尔函数作为基矢量展开,该轨道被用在 ABACUS(原子算筹)软件中[6]。 二、数值原子轨道的命名方法 1. 数值原子轨道的组成 数值原子轨道(Numerical Atomic Orbitals,简称 NAO)是目前在 ABACUS 程序中支持的一种基矢量。从数学形式上来看,数值原子轨道可以分解为径向函数 flζ 和球谐函数 Ylm 的乘积。 \\phi_{l m \\zeta}(\\mathbf{r})=f_{l \\zeta}(r) Y_{l m}(\\hat{r}), 其中 l 是角量子数,m 是磁量子数,ζ 代表了每个角量子数上对应的多个径向轨道,实际计算中通常采用多于 1 个轨道来增加基矢量的完备性。 2. 数值原子轨道的命名方法 数值原子轨道有一套常用的命名方案用来表示选取的基组大小,早期该命名方案在 SIESTA 软件中被采用[7][8][9][10],后来在 OpenMX、FHI-aims 和 ABACUS 中也采取这套命名方案。具体来说是,对于每个被电子占据的角量子数 l,若采用 1 条径向轨道,则称该基组为 Single-ζ 轨道,简称 SZ 轨道基组。若采用 2 条径向轨道,则称该基组为 Double-ζ 轨道,简称 DZ 轨道基组。 目前,在许多赝势结合数值原子轨道的程序里,通常会在 DZ 轨道的基础上引入 1 条极化(polar)的径向轨道,即角量子数更高的轨道,来组成 DZP(Double-ζ valence orbitals plus SZ polarization) 轨道基组。此外,还有基组数量更大的 TZDP(Triple-ζ valence orbitals plus DZ polarization) 轨道等。 3. 数值原子轨道基组的个数 数值原子轨道基组的具体个数除了取决于轨道类别(比如 SZ、DZP、TZDP)外,也取决于元素种类、所选取的赝势。 轨道类别:比如对于 O 元素的赝势而言,一般将两个 1s 电子作为核内电子,在构造赝势的时候只考虑它的外层 6 个价电子部分 2s、2p 轨道,则该 O 赝势下的电子的极化轨道为 d 轨道。故它的 SZ(Single-ζ)轨道包含 1 组 s 轨道、1 组 p 轨道,共 1*1+1*3=4 个轨道;DZP 轨道包含 2 组 s 轨道、2 组 p 轨道、1 组 d 轨道,共包含 2*1+2*3+1*5=13 个轨道;TZDP 轨道包含 3 组 s 轨道、3 组 p 轨道、2 组 d 轨道,共包含 3*1+3*3+2*5=22 个轨道。 元素种类:比如同为 DZP 轨道,对于 H 元素(1 个价电子)即为 2 组 s 轨道、1 组 p 轨道(p 轨道也是 H 的极化轨道),共包含 2*1+1*3=5 个轨道。对于 O 元素即为 2 组 s 轨道、2 组 p 轨道、1 组 d 轨道,共包含 2*1+2*3+1*5=13 个轨道。 赝势:比如对于 Fe 元素而言,同为 DZP 轨道。若选取的赝势为,[Ne]3s^23p^64s^23d^6,即[Ne]=1s^22s^22p^6部分为芯电子,3s^23p^64s^23d^6部分为 16 个价电子,则 DZP 轨道包含 2*2 套 s 轨道(3s 和 4s)、2 套 p 轨道(3p)、2 套 d 轨道(3d)、1 套 f 轨道(极化轨道),即每个原子的 DZP 数值原子轨道个数为 2*2*1+2*3+2*5+1*7=27 个轨道。若选取的赝势为[Ar]4s^23d^6,则 DZP 轨道包含 2 套 s 轨道、2 套 d 轨道、1 套 p 轨道,共 2*1+2*5+1*3=15 个轨道。 三、ABACUS 中数值原子轨道的使用方法 1. ABACUS 中的数值原子轨道文件 ABACUS 提供了已经生成好的数值原子轨道库打包文件供下载(官网下载链接),对于绝大多数计算任务,这些数值原子轨道是经过精度和可靠性验证,可以直接使用的。这些轨道文件的开头提供了关于该轨道的重要信息。以 O_gga_7au_100Ry_2s2p1d.orb 轨道文件为例,首先文件名包含的信息有:氧元素(o),GGA 泛函(gga),数值原子轨道截断半径(7au,即 7 Bohr),推荐能量截断值(100 Ry),数值原子轨道个数(2s2p1d,2 个 s 的径向轨道,2 个 p 的径向轨道,1 个 d 的径向轨道)。值得注意的三个点是: ABACUS 里用到的模守恒赝势和轨道是需要匹配的。因为不同的赝势可能有不同的价电子,而数值原子轨道是用来描述这些价电子的,如果赝势的价电子多,则相应的默认数值原子轨道基组数量也会增多。 推荐用户直接使用轨道文件包含的能量截断值做计算。ABACUS 里的数值原子轨道在生成时,是尽量的去匹配平面波输出的波函数,从而优化得到的。而平面波计算是有一个能量截断值的,因此为了尽可能的保证 LCAO 的精度,我们建议直接使用推荐的能量截断值,而不需要真正做计算的时候做体系能量随着能量截断值变化的收敛性测试。当你在 LCAO 计算时改变能量截断值时候,其实只是改变了平面波的个数,这些平面波是用来做一些数值计算的,本质上并没有改变基矢量的个数,而基矢量的个数增加是靠改变基组大小,例如 DZP 到 TZDP 来实现的。 特殊情况可以自己生成数值原子轨道。如果用户有自己特殊的赝势,或者对目前提供的原子轨道的参数或者个数感觉不满意,例如对于导带的描述能力较差,也可以自己生成数值原子轨道,具体生成的方法可以参考这个系列文档的第二和第三篇。 打开以上提到的氧的数值原子轨道文件,文件的开头如下: --------------------------------------------------------------------------- Element O Energy Cutoff(Ry) 100 Radius Cutoff(a.u.) 7 Lmax 2 Number of Sorbital--> 2 Number of Porbital--> 2 Number of Dorbital--> 1 --------------------------------------------------------------------------- SUMMARY END 这里包括元素种类(Element),生成轨道时指定的截断能量值(Energy Cutoff)、截断半径(Radius Cutoff),最大角量子数(Lmax)及各角量子数轨道的个数(Number of * orbital,*为 S、P、D 等轨道角动量)。根据这些信息可以知道该轨道的类别,比如该举例文件即包含 O 的 DZP 轨道。 上述 ABACUS 提供的数值原子轨道文件中,在取名中即包含文件开头的重要信息,包括各角量子数的轨道个数。由这些轨道的文件名即可判断轨道类型。 轨道文件中包含的后续内容为不同类型、不同角量子数(L)的多个径向数值原子轨道(即不同 N)的具体数据,目前轨道是存在均匀格点上的,之后有可能也会支持非均匀格点。 2. 如何选择数值原子轨道文件 用户需要根据精度要求,选择数值原子轨道合适的截断能量值、截断半径及轨道类型。截断能量值、截断半径越大,轨道类型提升(SZ、DZP、TZDP),精度越高,结果更接近平面波。注意对于不同元素,要达到同样的精度,以上数值设置并不一定相同。 3. 如何修改数值原子轨道文件的设置,获得低精度轨道类型文件 在 ABACUS 中生成数值原子轨道文件时,可以设置同时生成多种精度的轨道文件,即设置 SIAB_INPUT 文件中的参数 Save Orbitals,详见篇目(三)。 如果已有一份数值原子轨道文件,但希望直接用此文件进行低精度计算,比如希望使用 DZP 轨道文件进行 SZ 计算。可以修改文件开头的信息实现,具体是 Lmax 及各角量子数轨道个数,将这些参数调整到低精度计算对应的数值。文件的后续内容不需要做更改。 比如对于 O 元素而言,DZP 轨道文件参数如 3.1 所示,若要进行 SZ 基矢量的计算,则将 Lmax 设置为 1,Number of Sorbital/Porbital/Dorbital=1/1/0 即可。 四、参考文献 [1] J. Junquera, Ó. Paz, D. Sánchez-Portal, and E. Artacho, Numerical Atomic Orbitals for Linear-Scaling Calculations, Phys. Rev. B, 64, 235111 (2001). [2] T. Ozaki, Variationally Optimized Atomic Orbitals for Large-Scale Electronic Structures, Phys. Rev. B, 67, 155108 (2003). [3] V. Blum, R. Gehrke, F. Hanke, P. Havu, V. Havu, X. Ren, K. Reuter, and M. Scheffler, Ab Initio Molecular Simulations with Numeric Atom-Centered Orbitals, Comput. Phys. Commun., 180, 2175 (2009). [4] M. Chen, G.-C. Guo, and L. He, Systematically Improvable Optimized Atomic Basis Sets for Ab Initio Calculations, J. Phys.: Condens. Matter, 22, 445501 (2010). [5] M. Chen, G.-C. Guo, and L. He, Electronic Structure Interpolation via Atomic Orbitals, J. Phys.: Condens. Matter, 23, 325501 (2011). [6] Liu Xiao-Hui et al., Introduction to first-principles simulation package ABACUS based on systematically improvable atomic orbitals, Acta Phys. Sin., 64, 187104 (2015). [7] Sánchez‐Portal D, Ordejon P, Artacho E, et al. Density‐functional method for very large systems with LCAO basis sets, J. International Journal of Quantum Chemistry, 65, 453-461 (1997). [8] Artacho E, Sánchez‐Portal D, Ordejón P, et al. Linear‐scaling ab‐initio calculations for large and complex systems, J. Physica Status Solidi (b), 215, 809-817 (1999). [9] Junquera J, Paz Ó, Sánchez-Portal D, et al. Numerical atomic orbitals for linear-scaling calculations, J. Physical Review B, 64, 235111 (2001). [10] Soler J M, Artacho E, Gale J D, et al. The SIESTA method for ab initio order-N materials simulation, J. Phys.: Condens. Matter, 14, 2475 (2002). "},"abacus-nac2.html":{"url":"abacus-nac2.html","title":"数值原子轨道(二):生成给定模守恒赝势的数值原子轨道","keywords":"","body":"数值原子轨道(二):生成给定模守恒赝势的数值原子轨道 作者:刘裕,邮箱:liuyu@stu.pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/06/15 一、ABACUS 中的数值原子轨道背景知识 1. 数值原子轨道 ABACUS 中的三维数值原子轨道[1]:可以分解为径向部分与角向球谐函数的乘积,即 \\phi_\\mu(\\mathbf{r})=f_{\\mu, l}(\\mathbf{r}) Y_{l m}(\\hat{r}), 其中 \\mu=\\{\\alpha,i,\\xi,l,m\\},\\alpha是原子种类的指标,i是每个原子种类对应的原子个数的指标,\\xi是角动量l对应的径向函数的个数,m是磁量子数。 径向部分函数:第 \\mu个轨道的径向部分函数可以写为球贝塞尔函数的线性组合(可参考文献[1]) f_{\\mu l}(\\mathbf{r})= \\begin{cases}\\sum_q c_{\\mu q} j_l(q r), & r 其中 j_l(q r)是波矢为q的球贝塞尔函数,r_c是径向部分的截断半径,满足关系j_l(q r_c)=0。q的个数由能量截断值决定(以下会介绍)。在实际计算里,通过用户指定每种元素的数值原子轨道截断半径和能量截断值来确定需要用到多少个球贝塞尔函数。组合系数 c_{\\mu q}是可优化的量,决定了数值原子轨道的形状。 2. 参考体系 参考系统:在ABACUS中构造某个元素对应的数值原子轨道的最普遍方式是为每个元素选取一组参考体系做平面波计算(可以是单k点也可以是多k点),得到这些参考体系的电子波函数,然后通过最小化自定义的一个溢出函数(下面会介绍)来优化c_{\\mu q}系数。换句话说,我们需要选定一组参考系统,生成数值原子轨道基组,并期望它们有良好的迁移性,以便可以在更一般的情况下使用。 Dimer(二聚体):我们发现二聚体是较为合适的参考系统。具体来说,推荐选择的是若干个不同键长的二聚体(dimer),有时也可选择三聚体(trimer)或四聚体。对同一个元素,我们通常选择几个键长不同的二聚体(例如5-6个),这些键长覆盖二聚体稳定键长附近能量区间,通常可以取与最稳定能量差别为1-2个eV的能量曲线上的点。 周期性体系:数值原子轨道还有一些特殊用途,例如能带插值。面对这种场景,可以选择一系列带多个k点的周期性体系,此时参考态中的每个原子构型就对应了不同k点指标和不同能带指标的波函数,这些波函数会被用于最小化溢出函数来生成数值原子轨道,可以参考文献[2]。 3. 溢出函数 溢出函数(英文为spillage):由给定参考体系的多个电子波函数与生成的数值原子轨道之间的差别来定义。换个角度理解,溢出函数的大小反映的是由一组“精确”波函数所张成的希尔伯特空间与局域轨道所张成的空间的差别。溢出函数定义如下: \\mathcal{S}=\\frac{1}{N_n} \\sum_{n=1}^{N_n}\\left\\langle\\Psi_n|1-\\hat{P}| \\Psi_n\\right\\rangle, 其中\\Psi_n表示平面波基组下的本征态,N_n是选定的参考电子态的个数,\\hat{P}是由所有原子轨道张成的投影子 \\hat{P}=\\sum_{\\mu v}\\left|\\phi_\\mu\\right\\rangle S_{\\mu v}^{-1}\\left\\langle\\phi_v\\right| \\text, 其中S_{\\mu v}=\\left\\langle\\phi_\\mu \\mid \\phi_v\\right\\rangle是局域轨道\\phi_\\mu与\\phi_v之间的重叠矩阵,投影子用到了重叠矩阵的逆。 轨道正交:事实上,如果我们有了给定的数值原子轨道,我们可以在此基础上再次定义新的溢出函数来得到一组新的数值原子轨道,这也是为什么该算法可以系统性的增加数值原子轨道的原因。定义的方式也比较直接,可以将|\\Psi_n\\rangle和已有原子轨道形成的投影子\\hat{P}正交,公式为 |\\Psi_n^{new}\\rangle=(1-\\hat{P})|\\Psi_n\\rangle, 这个公式里,左边的波函数经过正交已经不包含原子轨道的成分,这样可以再次作为新的参考体系波函数生成新的数值原子轨道,以上算法已经被实现在SIAB这个程序里。 最小化溢出函数:优化原子轨道时,最终溢出函数值定义为选定的几个二聚体的平均溢出函数值。溢出函数可以用来评估获得的原子轨道基组的质量,溢出函数越小,则原子轨道所张成的空间越接近于参考态波函数。在ABACUS中,通过最小化溢出函数的方式来优化c_{\\mu q},该系数决定了原子轨道的径向函数的形状。这种方法的好处在于 轨道形状可调:可以由球贝塞尔函数基组的线性组合自动生成,而不需要任何先决条件,因此原则上可获得完全优化的原子轨道。 基组数量可调:可以用统一的方式系统的增加轨道数量,包括增加径向轨道的数量(multi-ζ)和增加更高角动量的轨道(极化轨道)两种方式。为此,我们可以首先生成具有给定角动量的轨道,然后更高级的轨道可以使用相同的程序生成,但是此时只需最小化剩余的希尔伯特空间中的溢出函数,该空间与所有先前生成的原子轨道所张成的空间正交。 参考系统可调:通过选择参考系统及对应能级,可以提高原子轨道基组在不同环境的可迁移性。例如,对于涉及到激发态能级的计算,往往需要在生成数值原子轨道的时候,考虑这组轨道对于非占据态能级的拟合能力,这个时候可以在生成参考体系的时候加入一定数量的非占据能级。 4. 模拟退火算法SA(Simulated Annealing) 我们首先介绍模拟退火法Simulated Annealing(SA)来最小化溢出函数[1],从而优化球贝塞尔函数的系数c_{\\mu q}。在模拟退火算法中我们用的是Metropolis的算法,需要设置一个初始温度,并且指定温度下降的方式。代码部分我们之后会介绍,这里先简要介绍一下算法。 初始系数:如果没有特别指定,一开始的系数c_{\\mu q}是随机产生的, 每一步SA会更新其中一个系数,当溢出函数被改变的数值在允许接收的范围内时,参数c_{\\mu q}会被更新。 优化过程:当要优化的所有轨道的所有参数c_{\\mu q}都被更新过一次之后,我们称为一步优化。 我们发现大约在每个温度行走500 ~ 1000步就已经足够产生好的原子轨道。最开始的温度我们一般取为1.0e-5,事实上我们发现即便初始温度取得更小,最后的结果也是不错的。 在每一步优化之后,我们将温度乘上一个比率,来达到降温的目的从而得到新的温度,这个参数我们一般取为0.5~0.8,最后的温度一般降到1.0e-9~1.0e-12。接收的概率可以控制在0.2~0.4范围内。 能量截断值:这里的能量截断值实际上是能量截断值,我们知道每个平面波 e^{i\\mathbf{q}\\cdot\\mathbf{r}}都对应一个二阶求导后的动能q^2/2。同样的,每个球贝塞尔函数 j_l(q r)也有一个对应的动能是 q^2/2。在平面波计算里我们通过能量截断值来控制平面波的数量,从而控制计算精度。在生成数值原子轨道的时候,我们也通过能量截断值来控制球贝塞尔函数的个数,从而控制生成的数值原子轨道的精度。 对于ABACUS的平面波计算和产生球贝塞尔函数 j_l(q r)个数的计算,我们建议采用同样的能量截断值,该截断值取得越高,基矢量个数越多同时基组也越完备。对于采用赝势的平面波计算,15~30个球贝塞尔函数已经足够得到质量比较高的数值原子轨道。 数值原子轨道的二阶可导:除了以上操作之外,还有一个需要注意到的地方。为了使数值原子轨道的动能积分是良定义的,需要使原子轨道的二阶导数连续。这可以通过将原子轨道的径向部分乘以一个平滑函数g(r)来实现 g(r)=1-\\exp \\left[-\\frac{\\left(r-r_{\\mathrm{c}}\\right)^2}{2 \\sigma^2}\\right], 该径向轨道会在数值原子轨道的截断值以内起作用,使其在截断值处2阶连续,超过阶段半径之后就严格截断。在我们的测试中,我们发现参数\\sigma对轨道的质量影响不大,所以我们一般固定\\sigma为常数0.1。 数值原子轨道动能和再次使用模拟退火算法:如果仅仅最小化溢出函数值,原子轨道的径向部分经常会出现震荡,原因是震荡有时候有利于溢出函数的值尽可能的低,但震荡厉害的函数往往动能高,可移植性较差。因此,为了去除这些实际上非物理的震荡,在算法中我们还定义了原子轨道的动能: T_{\\mu}=\\sum_{q} c_{\\mu q}^{2} q^{2} / 2+\\kappa, 并再次通过模拟退火算法最小化原子轨道的动能,其中\\kappa则是模拟退火的一个惩罚函数: \\kappa=\\left\\{\\begin{array}{ll} 0, & \\mathcal{S} / \\mathcal{S}_{0}-1\\Delta \\end{array}\\right., 这里\\mathcal{S}\\_{0}是在优化动能之前所得到的数值原子轨道算出来的溢出函数的值,而\\mathcal{S}则是当前在参数c_{\\mu q}下面的溢出函数的值。我们发现参数取\\Delta=0.002~0.005足够使得原子轨道平滑了。轨道动能也是通过同样的模拟退火算法得到,经过动能优化之后,轨道的形状会变平滑,同时溢出函数的值也会相比没有动能优化的轨道会有一点点增加,但是对精度的影响是很小的。 优化动能用的模拟退火算法几乎和优化溢出函数一样,除了一点点参数的区别。 目标函数选择的是所有轨道中最大的动能,而不是像溢出函数一样取平均值。对于每个轨道来说,温度是不一样的,因为每个轨道会有一个不同的动能,在这步动能优化中,我们发现结果对初始的温度不敏感,但最终达到的温度必须取得足够小。实际中我们发现只需要100~200步,动能就可以下降得很快。 所以一般来说优化动能的步数就取得比优化溢出函数要少。 二、ABACUS中产生数值原子轨道的具体流程 注:本文档介绍的是模拟退火算法SA,不适用于基于Pytorch的PyTorch-Gradient方法,关于这两个算法,可以参考本数值原子轨道中文文档系列的第三篇文档。 1. 平面波计算 简化计算量:前文我们提到的溢出函数公式,如果把投影子\\hat{P}带进公式,则可以发现我们不需要在计算溢出函数的时候显示的包含任何基矢量(例如平面波)的操作。实际上,我们只需要先算好数值原子轨道|\\phi_\\mu\\rangle和电子波函数|\\Psi_i\\rangle的重叠矩阵(Overlap Matrix)\\langle \\Psi_i|\\phi_\\mu\\rangle并存下来,以及数值原子轨道之间的重叠矩阵\\langle \\phi_\\mu|\\phi_\\nu\\rangle存下来就可以算溢出函数了。更进一步,我们意识到数值原子轨道|\\phi_\\mu\\rangle的径向部分在程序里是写成了球贝塞尔函数的线性组合,根据线性叠加的原理,我们只需要计算球贝塞尔函数和电子波函数的内积,以及球贝塞尔函数之间的内积,并把这些结果存下来,就可以优化系数c_{\\mu q}了!注意这里指标i遍历体系的所有电子态,包括所有的k点以及能带对应的电子波函数。 换句话说,只需要存储线性代数里的内积结果而不是每个波函数在基矢量下的展开系数就可以优化我们想要的系数,因此数值原子轨道的优化过程可以极大提速! 采用ABACUS做平面波计算: 因此,第一步我们先调用ABACUS主程序,计算出以上overlap矩阵,首先需要准备INPUT文件如下: INPUT_PARAMETERS suffix H pseudo_dir /home/liuyu/github/abacus-develop/tests/PP_ORB wannier_card INPUTw calculation scf ks_solver dav nspin 1 lmaxmax 1 symmetry 0 nbands 10 ecutwfc 100 scf_thr 1.0e-7 scf_nmax 1000 smearing_method gauss smearing_sigma 0.01 mixing_type pulay mixing_beta 0.4 mixing_ndim 8 printe 1 bessel_nao_ecut 100 // same as ecutwfc bessel_nao_rcut 6 // rcut 如上所示,该INPUT与平常的平面波计算相比,只有3个参数(已标红)需要注意: wannier_card:指定wannier相关参数的输入文件名INPUTw bessel_nao_ecut:球贝塞尔函数的截断能,根据公式\\sqrt{E_{cut}} \\times r_{cut} / \\pi来决定求贝塞尔函数的数量 bessel_nao_rcut:数值原子轨道的截断半径r_{cut} 此外,我们还需要准备输入文件 INPUTw 如下(将来计划会把 INPUTw 文件去掉,把参数加入 INPUT 里): WANNIER_PARAMETERS out_spillage 2 // output overlap spillage_outdir OUT.H // could be the same as OUT.${suffix} 通过 ABACUS 做平面波基矢量计算可以计算出: 1)电子波函数|\\Psi_i\\rangle和球贝塞尔函数 j_l(q r)之间的 overlap\\langle \\Psi_i|j_l(q r)\\rangle; 2)球贝塞尔函数之间的 overlap\\langle j_{l_2}(q_2 r)|j_{l_1}(q_1 r)\\rangle; 3)电子波函数|\\Psi_i\\rangle之间的 overlap\\langle \\Psi_i|\\Psi_i\\rangle。 这些输出将存在文件 OUT.${suffix}/orb_matrix.0.dat 中,而这个文件将被读入进行数值原子轨道的生成。 2. 编译 SIAB SIAB 的全称是 Systematically Improvable Atomic orbital Basis generator based on spillage formula,目前是包含在 ABACUS 软件里的一个独立程序,可用来读入以上 ABACUS 产生的数据文件并且生成数值原子轨道,具体编译方法如下: 拉取 deepmodeling/abacus-develop 仓库(github 和 gitee 二选一即可,国内建议用 gitee) # github仓库 $ git clone -b develop https://github.com/deepmodeling/abacus-develop.git # gitee仓库 $ git clone -b develop https://gitee.com/deepmodeling/abacus-develop.git 编译 SIAB 模拟退火(SA)方法生成数值原子轨道的代码在 SIAB 文件夹里,采用 C++ 编写,目前 Makefile 仅支持 intel 编译器。 SIAB 程序有串行(make s)和并行(make p)两种版本,一般情况下串行版本即可满足使用需求。 $ cd abacus-develop/tools/SIAB/SimulatedAnnealing/source $ make clean $ make s 编译成功后,在目录 abacus-develop/tools/SIAB/SimulatedAnnealing/source 下可以看到生成数值原子轨道的可执行程序 SIA_s.exe,这里 s 代表编译串行版(serial)。此外,对于并行版本,SIAB 还可以结合 MPI 编译并行版,通过命令 make p 指令得到 SIA_p.exe 可执行程序,这里 p 代表 parallel,但注意并行版只对某些特定算法进行并行,之后对代码进行一个更好整理之后我们会给出并行版的教程。 3. 运行例子 进入 tests_s 目录,可以看到 H-6-0.6.15.dat 文件,这是用来生成数值原子轨道所需要准备的输入文件,从 ABACUS 的平面波自洽迭代计算后获得,现在该文件已经改名为 OUT.${suffix}/orb_matrix.0.dat。 此外,还有一个输入文件 INPUT 如下: 1 // bool: calculate the spillage. 1/0 0 // bool: restart or not. 1/0 1 // bool: output the file. 1/0 1 // integer: number of structures. H-6-0.6.15.dat // Each structure's file name occupies one line 1 // integer: number of k points (for parallel version) 1 // integer: number of pools (for parallel version) 15 // can be ignored now 2 // The way to calculate spillage, 2 means averaged spillage 1.0e-8 // real: start temperature for minimizing spillage 0.5 // real: cooling rate for the temperature in minimizing spillage 2 // integer: number of temperatures (spillage) 500 // integer: number of steps per temperature (spillage) 1.0e-2 // real: starting temperature for the kinetic energy 0.8 // real: cooling rate for temperature in minimizing kinetic energy 1 // integer: number of temperatures (kinetic) 100 // integer: number of steps per temperature (kinetic) 0.05 // real: delta kappa for kinetic energy 49 // integer: selectly output information every n steps 100 // integer: change accept rate every n steps, can be ignored now 0.4 // real: acceptance rate (high), can be ignored now 0.2 // real: acceptance rate (low), can be ignored now 50 // real: max allowed kinetic energy (Rydberg) 0.01 // real: 'dr' for the 1d r grid to compute kinetic energy 1 // integer: 1: Kin 2: Ecut, can be ignored now 1 // bool: to control the number of bands 1 // int, the start band index(>0). 1 // int, the end band index( 2 // Number of levels. # label / na / skip / lmax / each L / 01 2 new 1 1 1 01 2 new 1 1 1 01 2 new 1 1 1 0.01 //dr(a.u.) of uniform mesh. Attention!!dr will affect kinetic energy minmized largely. -6 //xmin 1 //zed, chosen as valence charge. 0.01 //dx 6.0 //xmax 0 // print out the C4, this section can be ignored now 2 ./FILE/Si-S.ORBITAL 0 ./FILE/Si-P.ORBITAL 1 0 // for tests, can be ignored now 14.0 // rcut, only useful for test program 0.01 // dr, for simpson integral 2 // test eigenvalue index 2 // lmax C4:代表 4 个重要参数:\\alpha,\\xi,l,nq,\\alpha是原子种类的指标,\\xi是角动量l对应的径向函数的个数,nq 是对应的球贝塞尔函数的个数。 该输入文件包含 SIAB 程序需要读取的一系列参数,基本上重要参数的说明都有列上去,一些可忽略的参数可以先不用设置,之后我们会推出更详细的关于此输入文件的说明文档。 准备好该输入文件后,可以通过如下命令执行 SIAB 程序: $ ~/abacus-develop/tools/SIAB/SimulatedAnnealing/source/SIA_s.exe 运行完毕后,可以得到一系列输出文件,其中 ORBITAL_1U.dat 则是我们需要的数值原子轨道文件。我们可以通过文件的前几行获取关键信息:这是 H 原子的轨道文件,平面波截断能为 100 Ry,截断半径为 6 Bohr,最大角动量为 1,角动量 s 和 p 的径向函数的个数都为 2,即 2 条 s 轨道和 6 条 p 轨道,共 8 条轨道。为了体现这些关键信息,在使用轨道的时候我们建议重命名该文件为 H_gga_100Ry_6au_2s2p.orb。 --------------------------------------------------------------------------- Element H Energy Cutoff(Ry) 100 Radius Cutoff(a.u.) 6 Lmax 1 Number of Sorbital--> 2 Number of Porbital--> 2 --------------------------------------------------------------------------- SUMMARY END 三、ABACUS 中数值原子轨道的生成脚本 我们需要采用平面波计算不同键长的二聚体,并且存在不同层级的轨道,因此也可以通过一个脚本来实现自动化整个流程:abacus-develop/tools/SIAB/Generate_Orbital_AllInOne.sh。该脚本需要读入一个输入文件 ORBITAL_INPUT 如下: #1.exe_dir #-------------------------------------------------------------------------------- EXE_mpi mpirun -np 4 EXE_pw /home/liuyu/github/abacus-develop/build/abacus EXE_orbital /home/liuyu/github/abacus-develop/tools/SIAB/SimulatedAnnealing/source/SIA_s.exe #-------------------------------------------------------------------------------- #( In this part, the direction of the two used exe is provided ) #2.electronic calculatation #-------------------------------------------------------------------------------- targets 14_Si_60 # element ref_bands 4 6 # reference bands nbands 8 12 # num of bands for calculate Ecut 60 # cutoff energy (in Ry) Rcut 6 7 # cutoff radius (in a.u.) Pseudo_dir /home/liuyu/github/abacus-develop/tests/PP_ORB Pseudo Si_ONCV_PBE-1.0.upf smearing_sigma 0.01 # energy range for gauss smearing (in Ry) #-------------------------------------------------------------------------------- #( In this part , some parameters of calculating are given ) #3.structure information #-------------------------------------------------------------------------------- #the Bond Length list for each STRU BLSTRU1 1.8 2.0 BLSTRU2 2.4 # if skip the orbital optimization for each STRU (1:skip, 0:not skip). SkipSTRU 0 0 # set the objective structure list to fit for orbital optimization ListSTRU dimer trimer #-------------------------------------------------------------------------------- #(In this part, it gives us the bond length of the reference system(in angstrom) ) #4.orbital calculatation #-------------------------------------------------------------------------------- maxL 2 # the max angular momentum Level 2 3 # num of levels to generate orbitals( 该输入文件主要分为 5 个部分: 1. exe_dir EXE_mpi:MPI 并行计算命令,这里我们采用的是 4 核 MPI 并行进行 dimer(或者 trimer)的平面波计算。 EXE_pw:ABACUS 可执行程序的绝对路径。 EXE_orbital:数值原子轨道生成程序 SIA_s.exe 的绝对路径。 2. electronic calculatation targets:可以任取,一般格式是${原子序数}_${元素名}_${截断能}。 ref_bands:参考体系的能带数,取值为电子总数的一半。注意这里有多个取值,原因是我们选择了多组参考构型,既有 dimer,也有 trimer。 nbands:平面波计算中的实际能带数,必须大于 ref_bands,以保证包含非占据态。同理,由于多组参考构型,nbands 也有多个取值。 Ecut:平面波截断能,单位为 Ry。 Rcut:数值原子轨道的截断半径,单位为 Bohr。这里的多个取值表明,采用相同的一套参数,生成多个不同截断半径的数值原子轨道文件,根据第一部分的基础知识,截断半径会极大地影响数值原子轨道的质量,因此该参数可以帮助我们一次性生成多个不同截断半径的数值原子轨道文件。 Pseudo_dir:平面波计算采用的赝势文件所在文件夹的绝对路径。 Pseudo:平面波计算采用的赝势文件名。 smearing_sigma:平面波计算采用 Gaussian smearing 的展宽,单位为 Ry,一般取 0.01 即可。 3. structure information BLSTRU1:第一组参考构型的键长,单位为埃。如上所示,第一组参考构型包含两个构型,键长分别为 1.8 和 2.0 埃。 BLSTRU2:第二组参考构型的键长,单位为埃。如上所示,第二组参考构型包含一个构型,键长为 2.4 埃。 以此类推,可以存在 BLSTRU3、BLSTRU4 等等。 SkipSTRU:是否跳过该组参考构型的优化,一般而言,都取为 0 即可。 ListSTRU:指定 BLSTRU1、BLSTRU2 等等参考体系的具体构型,这里说明 BLSTRU1 是 dimer,BLSTRU2 是 trimer。如果取值缺省(第一个不可缺省),则默认为 dimer。 4. orbital calculatation maxL:最大角动量。 Level1:根据上文可知,轨道可以分为多个层级,这里 level1 是 SZ 层级,最大角动量为 1,角动量 s 和 p 的径向函数的个数为 1 和 1,即 1 条 s 轨道和 3 条 p 轨道。 Level2:同上,这里 level2 的最大角动量为 2,角动量 s,p 和 d 的径向函数的个数为 1,1 和 1,即 1 条 s 轨道,3 条 p 轨道和 5 条 d 轨道。level1 和 level2 合在一起,是 DZP 层级。 Level3:同 Level2。 Level:BLSTRU1 和 BLSTRU2 分别负责一部分轨道的生成,Level 的 2 个取值对应的是 BLSTRU1 和 BLSTRU2 的 endlevel,即 BLSTRU1 用于 level1 和 level2 轨道的生成,BLSTRU2 用于 level3 轨道的生成。 5. Metropolis parameters 如注释所说,这部分参数实际上大多数情况下不需要改变。 Start_tem_S:优化 Spillage 的初始温度,更高的初始温度可以搜索更大的温度范围。 Start_tem_K:优化动能的初始温度,更高的初始温度可以搜索更大的温度范围。 Step_S:优化 Spillage 的步数。 Step_K:优化动能的步数。 Delta_kappa:模拟退火的惩罚函数\\kappa所用的参数\\Delta。 准备好以上输入文件后,通过以下命令即可开始生成轨道: $ ~/abacus-develop/tools/SIAB/Generate_Orbital_AllInOne.sh ORBITAL_INPUT 四、ABACUS 中数值原子轨道的测试流程 在生成轨道之后,为了保证基于数值原子轨道基组的第一性原理计算拥有与平面波基组相当的精度,我们需要针对该元素的一些常见的晶体结构做一些验证性计算。 以 Al 元素为例,我们可以选择 simple cubic(sc),body center cubic(bcc),face center cubic(fcc)和 hexagonal close-packed(hcp)这 4 种常见的晶体结构,采用平面波(Plane wave)基组和数值原子轨道基组计算这些晶体结构的平衡晶格常数、体弹性模量等基态性质,评估两种基组之间的误差随着截断半径、最大角动量以及轨道数量的收敛趋势,选择合适的数值原子轨道文件。例如以下就是用 ABACUS 的平面波和数值原子轨道 DZP 计算的铝的四种体相材料的体积-能量曲线,来自文献[1]。从图中可以看到,DZP 轨道描述不同体相的铝的相对能量还是精度较高的。细心的读者会发现纵坐标给出的是绝对能量,因为两种基矢量采用了相同的赝势,但左图给出的能量更低,这是因为平面波更加完备,所以根据 Honhenberg-Kohn 定理,体系总能量的密度泛函可以在更完备的基矢量下得到更好的收敛,即总能量更低。一般来说,平面波得到的总能量比 DZP 轨道小一些,大概在 0.1-0.2 eV/atom,是比较合理的。如果采用了同样的赝势,但两种基矢量给出的能量差别远远大于这个数值,则要检查一下是不是数值原子轨道产生出了问题。最后,大家有任何问题,欢迎写邮件到文档开头邮箱。 五、参考文献 [1] M. Chen, G.-C. Guo, and L. He, Systematically Improvable Optimized Atomic Basis Sets for Ab Initio Calculations, J. Phys.: Condens. Matter 22, 445501 (2010). [2] M. Chen, G.-C. Guo, and L. He, Electronic Structure Interpolation via Atomic Orbitals, J. Phys.: Condens. Matter 23, 325501 (2011). "},"abacus-nac3.html":{"url":"abacus-nac3.html","title":"数值原子轨道(三):产生高精度数值原子轨道","keywords":"","body":"数值原子轨道(三):产生高精度数值原子轨道 作者:刘裕,邮箱:liuyu@stu.pku.edu.cn 审核:林霈泽,邮箱:linpeize@sslab.org.cn 最后更新时间:2023/06/20 一、PTG(PyTorch Gradient)方法 这篇文档是数值原子轨道系列的第三篇文档,除了第二篇文档提到的模拟退火算法之外,还可以使用 Pytorch 中的自动微分算法来最小化溢出函数。首先定义损失函数如下,并可以证明它与溢出函数是等价的: \\Delta \\mathrm{PSI} \\stackrel{\\text { def }}{=} \\frac{1}{N_n} \\sum_{n=1}^{N_m} \\|\\left|\\Psi_n\\right\\rangle-\\left|\\tilde{\\Psi}_n\\right\\rangle \\|^2, 其中 \\left|\\tilde{\\Psi}_n\\right\\rangle \\stackrel{\\text { def }}{=} \\hat{P}\\left|\\Psi_n\\right\\rangle, 且\\hat{P}是由所有原子轨道张成的投影子,即\\hat{P}=\\sum_{\\mu v}\\left|\\phi_\\mu\\right\\rangle S_{\\mu v}^{-1}\\left\\langle\\phi_v\\right| \\text {}。由 \\hat{P}^2=\\hat{P}及 \\left\\langle\\Psi_n|\\Psi_n\\right\\rangle=\\delta_{mn}可知,此处的损失函数\\Delta \\mathrm{PSI}与溢出函数是等价的。 二、PTG_dpsi(PyTorch Gradient with dpsi)方法 为了增加局域轨道做电子结构计算时的精度,损失函数的定义还可以被拓展,即在其中加入波函数的梯度,将总的损失函数定义为: \\Delta \\mathrm{PSI} \\stackrel{\\text { def }}{=} \\frac{1}{N_n} \\sum_{n=1}^{N_m} [\\|\\left|\\Psi_n\\right\\rangle-\\left|\\tilde{\\Psi}_n\\right\\rangle \\|^2+\\|\\left|\\nabla\\Psi_n\\right\\rangle-\\left|\\nabla\\tilde{\\Psi}_n\\right\\rangle \\|^2]. 由于投影波函数\\left|\\tilde{\\Psi}_{n}\\right\\rangle是数值原子轨道的线性组合: \\left|\\tilde{\\Psi}_{n}\\right\\rangle=\\sum_{\\mu} a_{\\mu n}\\left|\\phi_{\\mu}\\right\\rangle, 其中系数的表达式为 a_{\\mu n}=\\sum_{\\nu} S_{\\mu \\nu}^{-1}\\left\\langle\\phi_{\\nu} \\mid \\Psi_{n}\\right\\rangle. 那么投影波函数的梯度可以表示为数值原子轨道梯度的线性组合: \\left|\\nabla \\tilde{\\Psi}_{n}\\right\\rangle=\\sum_{\\mu} a_{\\mu n}\\left|\\nabla \\phi_{\\mu}\\right\\rangle. 因此,损失函数的梯度项可以转化为: \\begin{array}{l} \\|\\left|\\nabla \\Psi_{n}\\right\\rangle-\\left|\\nabla \\tilde{\\Psi}_{n}\\right\\rangle \\|^{2} \\\\ =\\left\\langle\\nabla \\Psi_{n} \\mid \\nabla \\Psi_{n}\\right\\rangle-\\sum_{\\mu} a_{\\mu n}\\left\\langle\\nabla \\Psi_{n} \\mid \\nabla \\phi_{\\mu}\\right\\rangle \\\\ -\\sum_{\\nu} a_{v n}^{*}\\left\\langle\\nabla \\phi_{v} \\mid \\nabla \\Psi_{n}\\right\\rangle+\\sum_{\\mu \\nu} a_{\\mu n} a_{v n}^{*}\\left\\langle\\nabla \\phi_{v} \\mid \\nabla \\phi_{\\mu}\\right\\rangle. \\end{array} 根据经验,使用这个算法生成的双重-ζ + 极化(DZP)基组,精度与模拟退火法或 PTG 法生成的三重-ζ + 双极化(TZDP)甚至四倍-ζ + 三重极化(QZTP)基组相当。 在平面波计算中,除了数值原子轨道(二):生成给定模守恒赝势的数值原子轨道 提到的 overlap 输出文件 OUT.${suffix}/orb_matrix.0.dat 之外,overlap 输出文件 OUT.${suffix}/orb_matrix.1.dat 同样会作为生成轨道的输入文件之一,该文件保存与波函数梯度相关的如下 overlap 项: 1)电子波函数梯度|\\nabla \\Psi_i\\rangle和局域轨道梯度|\\nabla \\phi_\\mu\\rangle的 overlap,也就是电子波函数梯度|\\nabla \\Psi_i\\rangle以及球贝塞尔函数梯度\\nabla j_l(q r)之间的 overlap\\langle \\nabla \\Psi_i|\\nabla j_l(q r)\\rangle; 2)球贝塞尔函数梯度\\nabla j_l(q r)之间的 overlap\\langle \\nabla j_{l_2}(q_2 r)|\\nabla j_{l_1}(q_1 r)\\rangle; 3)电子波函数梯度|\\nabla \\Psi_i\\rangle之间的 overlap\\langle \\nabla \\Psi_i|\\nabla \\Psi_i\\rangle。 三、安装 Pytorch PTG 和 PTG_dpsi 方法采用 python 语言,无需编译,但是依赖 pytorch 包,下面介绍利用 conda 安装 pytorch 的方法: # 确定conda版本 $ conda -V conda 4.8.3 # 确定python3版本 $ python3 -V Python 3.5.2 # 创建python环境 $ conda create -n pytorch python=3.5 # 激活环境(每次使用pytorch需要激活该环境) $ source activate pytorch # 安装pytorch $ conda install pytorch torchvision torchaudio cpuonly -c pytorch # 安装依赖库 $ pip3 install --user scipy numpy $ pip3 install --user torch_optimizer # 退出python环境(使用完毕后) $ source deactivate 四、产生高精度数值原子轨道流程 首先下载 PTG_dpsi 仓库 # github仓库 git clone -b main https://github.com/abacusmodeling/ABACUS-orbitals 接着准备输入文件 SIAB_INPUT #-------------------------------------------------------------------------------- #1. CMD & ENV EXE_mpi mpirun -np 4 EXE_pw /home/liuyu/github/abacus-develop/build/abacus EXE_opt /home/liuyu/github/ABACUS-orbitals/SIAB/opt_orb_pytorch_dpsi/main.py #-------------------------------------------------------------------------------- #2. Electronic calculatation element Si # Element Name Ecut 100 # in Ry Rcut 6 7 # in Bohr Pseudo_dir /home/liuyu/github/abacus-develop/tests/PP_ORB Pseudo_name Si_ONCV_PBE-1.0.upf sigma 0.01 # energy range for gauss smearing (in Ry) #-------------------------------------------------------------------------------- #3. Reference structure related parameters for PW calculation #For the built-in structure types (including 'dimer', 'trimer' and 'tetramer'): #STRU Name #STRU Type #nbands #MaxL #nspin #Bond Length list STRU1 dimer 8 2 1 1.8 2.0 2.3 2.8 3.8 STRU2 trimer 10 2 1 1.9 2.1 2.6 #-------------------------------------------------------------------------------- #4. SIAB calculatation max_steps 200 # Orbital configure and reference target for each level #LevelIndex #Ref STRU Name #Ref Bands #InputOrb #OrbitalConf Level1 STRU1 4 none 1s1p Level2 STRU1 4 fix 2s2p1d Level3 STRU2 6 fix 3s3p2d #-------------------------------------------------------------------------------- #5. Save Orbitals #Index #LevelNum #OrbitalType Save1 Level1 SZ Save2 Level2 DZP Save3 Level3 TZDP 该输入文件同样包含 5 个部分: 1. CMD & ENV EXE_mpi:MPI 并行计算命令,这里我们采用的是 4 核 MPI 并行进行 dimer(或者 trimer)的平面波计算。 EXE_pw:ABACUS 可执行程序的绝对路径。 EXE_opt:数值原子轨道生成程序 PTG_dpsi 的绝对路径。 2. Electronic calculatation element:元素名。 Ecut:平面波截断能,单位为 Ry。 Rcut:数值原子轨道的截断半径,单位为 Bohr。这里的多个取值表明,采用相同的一套参数,生成多个不同截断半径的数值原子轨道文件,根据第一部分的基础知识,截断半径会极大地影响数值原子轨道的质量,因此该参数可以帮助我们一次性生成多个不同截断半径的数值原子轨道文件。 Pseudo_dir:平面波计算采用的赝势文件所在文件夹的绝对路径。 Pseudo:平面波计算采用的赝势文件名。 sigma:平面波计算采用 Gaussian smearing 的展宽,单位为 Ry,一般取 0.01 即可。 3. Reference structure related parameters for PW calculation STRU Name:参考构型组别 STRU1、STRU2、STRU3...... STRU Type:参考体系构型,一般可取 dimer,trimer,tetramer。 nbands:平面波计算中的实际能带数,必须保证包含非占据态。 MaxL:最大角动量。 nspin:自旋量子数。 Bond Length list:键长取值列表,单位为埃。以 STRU1 为例,这一组共有 5 个不同键长的 dimer 作为生成轨道的参考构型。 4. SIAB calculatation max_steps:优化步数 LevelIndex:轨道分层的 index,取 Level1、Level2、Level3...... Ref STRU Name:该层级的轨道采用哪一组参考构型生成。以上面的输入参数为例,Level1 和 Level2 的轨道采用 STRU1 组别的 dimer 参考构型生成,Level3 的轨道采用 STRU2 组别的 trimerr 参考构型生成。 Ref Bands:拟合参考体系的能带数,若输入“auto”则自动拟合所有基态。 InputOrb:是否在已有的轨道基础上生成新轨道,一般 Level1 设为 none,即没有旧轨道;Level2 一般以 Level1 生成的轨道为基础继续生成轨道,Level3 往后同理。 OrbitalConf:轨道的具体配置,这里 Level1 是 SZ 层级,Level2 是 DZP 层级,Level3 是 TZDP 层级,实际上还可以继续设置更高层级的轨道。 5. Save Orbitals Index:取值 Save1、Save2、Save3...... LevelNum:将特定 Level 的轨道保存到一个轨道文件中。以上面的输入参数为例,分别将 Level1、Level2、Level3 对应的轨道保存到单独的轨道文件中。 OrbitalType:即保存的轨道文件中,该轨道基组所属的层级。以上面的输入参数为例,分别为 SZ、DZP、TDZP。 准备好输入参数文件 SIAB_INPUT 后,运行如下命令即可开始生成轨道: $ python3 ~/github/ABACUS-orbitals/SIAB/SIAB.py SIAB_INPUT 程序正常结束后,轨道会分别保存在 Orbital_Si_SZ、Orbital_Si_DZP、Orbital_Si_TZDP 中,并自动命名成标准格式(如 Si_gga_6au_100Ry_2s2p1d.orb)。 五、参考文献 [1] Peize Lin, Xinguo Ren and Lixin He, Strategy for constructing compact numerical atomic orbital basis sets by incorporating the gradients of reference wavefunctions, Phys. Rev. B 103, 235131 (2021). "},"abacus-md.html":{"url":"abacus-md.html","title":"ABACUS 分子动力学使用教程","keywords":"","body":"ABACUS 分子动力学使用教程 作者:刘裕,邮箱:liuyu@stu.pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/07/20 一、分子动力学方法简介 分子动力学(Molecular Dynamics,简称 MD):一种模拟原子体系随时间运动的方法,被广泛的用来研究与原子运动路径相关的一些基本过程,如相变、扩散、化学反应等等。本教程旨在介绍 ABACUS 中的分子动力学功能,分子动力学模拟重要的一件事情是如何选取精度和效率的平衡,其中精度高低主要取决于势函数的准确程度,而效率主要受限于求出每个原子的能量和受力的计算量。 经典分子动力学(Classical MD,简称 CMD):通过构建描述原子间相互作用的势函数,获得每个原子的受力(受力等于能量对原子位置的导数),再通过积分运动方程来获得每个原子的下一时刻位置,从而获得随时间演化的粒子位置和速度。当系统处在一定的密度、温度和压强等物理条件限制下,可以结合统计物理的方法计算物质的性质。具体来说,采取某个系综后,对粒子位置和速度采样,之后统计出体系的热力学宏观性质。 从头算分子动力学(ab initio molecular dynamics,简称 AIMD):也称为第一性原理的分子动力学方法(first-principles molecular dynamics,简称 FPMD),该方法采用的是第一性原理方法(例如密度泛函理论)来计算体系的势能面,因此计算量相比于经典分子动力学方法要昂贵很多。 ABACUS 的分子动力学功能:支持第一性原理分子动力学 FPMD 方法,也支持经典的 Lennard-Jones(LJ 对势)的分子动力学模拟。此外,ABACUS 还支持深度势能分子动力学(Deep Potential Molecular Dynamics,简称 DPMD)方法,此时需要编译 DeePMD-kit 软件包并在编译原子算筹软件时进行动态库的链接。 二、文档和算例下载地址 ABACUS 里关于分子动力学方法的线上文档地址为:http://abacus.deepmodeling.com/en/latest/advanced/md.html ABACUS 里关于分子动力学参数的线上文档地址为: http://abacus.deepmodeling.com/en/latest/advanced/input_files/input-main.html#molecular-dynamics ABACUS 的 MD 算例下载地址为(国内 gitee): https://gitee.com/mcresearch/abacus-user-guide/tree/master/examples/md 可以采用的下载命令是: git clone https://gitee.com/mcresearch/abacus-user-guide.git 之后进入 /abacus-user-guide/examples/md 目录 或者采用 Github 仓库地址: https://github.com/MCresearch/abacus-user-guide/tree/master/examples/md 注:算例仓库里面包含 1_AIMD,2_LJMD(采用 Lennard-Jones 经典势做 MD)和 3_DPMD(采用深度势能方法做 MD)三个目录。 注:以上算例要在 ABACUS v3.2.1 版本及以上可以运行成功,并且我们强烈建议下载使用 ABACUS 最新版本! 1. 第一性原理分子动力学(AIMD) 进入 1_AIMD 目录,该目录提供了 8 个输入文件,使用的时候将 INPUT_* 复制为 INPUT 即可(INPUT_* 代表从 INPUT_0 到 INPUT_7 共 8 个不同的 INPUT 文件,对应 8 种不同的 MD 算法)。该算例采用 8 原子的金刚石结构 Si,晶格结构放在 STRU 文件里,布里渊区的 k 点采样放在 KPT 文件里。 8 个 INPUT 文件对应的 MD 方法如下: INPUT_0:采用 NVE 微正则系综 INPUT_1:采用 NVT 正则系综 INPUT_2:采用 Langevin 热库 INPUT_3:采用 Anderson 热库,NVT 系综 INPUT_4:采用 MSST 方法 INPUT_5:采用 Berendsen 热库,NVT 系综 INPUT_6:采用 rescaling 方法,NVT 系综 INPUT_7:采用 rescale_v 方法,NVT 系综 以 INPUT_0 为例: INPUT_PARAMETERS #Parameters (1.General) suffix Si_nve calculation md nbands 20 symmetry 0 pseudo_dir ../../../tests/PP_ORB orbital_dir ../../../tests/PP_ORB #Parameters (2.Iteration) ecutwfc 30 scf_thr 1e-5 scf_nmax 100 #Parameters (3.Basis) basis_type lcao ks_solver genelpa gamma_only 1 #Parameters (4.Smearing) smearing_method gaussian smearing_sigma 0.001 #Parameters (5.Mixing) mixing_type pulay mixing_beta 0.3 chg_extrap second-order #Parameters (6.MD) md_type nve md_nstep 10 md_dt 1 md_tfirst 300 这些参数在 ABACUS 线上文档中均有说明,在这里再进行简单概述: calculation:设置 ABACUS 计算类型,做分子动力学模拟请设置为 md。 esolver_type:给定原子位置进行系统能量的计算,默认 Kohn-Sham 密度泛函理论(ksdft),还可以设置 LJ 势(lj)或者深度势能(dp)。理论上来说,所有的 esolver_type 都可以用于 MD 计算。 chg_extrap:电荷外插法,在 relax 和 md 计算中可用于优化电荷密度初始化,加速电子迭代收敛,MD 中可以设置为 second-order。 md_type:MD 算法种类,默认是正则系统 nvt,这里的例子选择的是 nve,即 NVE 微正则系综。 md_nstep:MD 模拟的总步数。 md_dt:MD 计算每一步的时间步长(单位是 fs),与 md_nstep 共同决定 MD 总时长。 md_tfirst:MD 系统的初始温度(单位是 K)。 2. Lennard-Jones 势函数 进入 2_LJMD 目录,ABACUS 软件包中提供了一个采用 Lennard-Jones(LJ)经典势函数进行 MD 模拟的算例,该算例采用 LJ 对势作为能量求解器来做经典分子动力学,初始结构是边长 20 埃的正方体盒子中的 256 个无序 He 原子。 2.1 LJ 对势 LJ 对势的解析形式如下:u^{ij}表示原子 i 与原子 j 之间的相互作用能,r^{ij}表示这两个原子之间的距离,\\epsilon,\\sigma和r_{cut}则是 LJ 势需要的 3 个参数。LJ 势只考虑截断半径r_{cut}内的近邻原子 j 对中心原子 i 的能量贡献。 \\begin{array}{c} u^{i j}=4 \\varepsilon\\left[\\left(\\frac{\\sigma}{r_{i j}}\\right)^{12}-\\left(\\frac{\\sigma}{r_{i j}}\\right)^{6}\\right] \\\\ \\boldsymbol{F}_{i}=-\\nabla_{i} U=\\sum_{j} 4 \\varepsilon\\left[12\\left(\\frac{\\sigma}{r_{i j}}\\right)^{12}-6\\left(\\frac{\\sigma}{r_{i j}}\\right)^{6}\\right] \\frac{\\boldsymbol{r}_{i}-\\boldsymbol{r}_{j}}{r_{i j}^{2}} H\\left(r_{c u t}-r_{i j}\\right) \\end{array} \\\\ H(x)=\\left\\{\\begin{array}{l} 0\\ \\ \\ \\ (x0) \\end{array}\\right.\\\\ 2.2 STRU LJMD 是经典分子动力学,不需要提供 KPT,赝势和轨道文件,STRU 的前面几部分如下: ATOMIC_SPECIES He 4.0026 LATTICE_CONSTANT 1.889727 LATTICE_VECTORS 20 0 0 0 20 0 0 0 20 ATOMIC_POSITIONS Cartesian He #label 0 #magnetism 256 #number of atoms ATOMIC_SPECIES:不需要提供赝势信息 NUMERICAL_ORBITAL:不需要添加轨道信息 2.3 INPUT INPUT 文件中的参数也需要做少量修改: INPUT_PARAMETERS #Parameters (General) suffix autotest calculation md pseudo_dir ../../PP_ORB #Parameters (esolver) esolver_type lj lj_rcut 8.5 lj_epsilon 0.01032 lj_sigma 3.405 cal_force 1 cal_stress 1 #Parameters (MD) md_nstep 5 md_type nve md_dt 1 md_tfirst 300 init_vel 1 esolver_type:指定为 lj 就可以做 Lennard-Jones 经典势函数。 lj_rcut:LJ 对势的参数,即截断半径r_{cut}。 lj_epsilon:LJ 对势的参数,即\\epsilon。 lj_sigma:LJ 对势的参数,即\\sigma。 init_vel:读取 STRU 中的原子速度信息,原子单位制。 3. 深度势能(Deep Potential) ABACUS 软件包中提供了一个 DPMD 的算例,进入 3_DPMD 目录。该算例采用 DP 模型(DeePMD-kit 产生的深度势能模型)作为能量求解器来做基于机器学习的分子动力学,初始结构是 864 个无序铝原子。 3.1 DP 模型 DeePMD-kit 是一种基于机器学习的分子动力学模拟方法,该方法是通过使用第一性原理计算数据对深度神经网络模型进行训练,从而得到通用的多体势能模型(DP 模型)。 3.2 编译方式 ABACUS 采用 DP 模型做 MD 计算需要编译与 DeePMD-kit 的接口,cmake 以及 makefile 编译方式可以参考 ABACUS 线上文档。 3.3 INPUT 文件设置 DPMD 是经典分子动力学,不需要提供 KPT,赝势和轨道文件 INPUT 文件中的参数需要做少量修改: INPUT_PARAMETERS #Parameters (General) suffix autotest calculation md esolver_type dp pot_file ../../PP_ORB/Al-SCAN.pb cal_force 1 cal_stress 1 md_nstep 3 md_type msst md_dt 1 md_tfirst 200 md_dumpfreq 1 md_restartfreq 1 msst_qmass 200 msst_vel 0.028 msst_vis 0.3 init_vel 1 esolver_type:设置为 dp pot_file:DP 模型文件路径 md_dumpfreq:MD 输出文件 MD_dump 中原子以及晶胞信息的输出频率 md_restartfreq:结构文件 STRU_MD_${istep} 的输出频率,MD 续算文件 Restart_md.dat 的更新频率 3.4 STRU 文件的设置 首先,我们可以通过如下命令确定 DP 势文件中是否存在关键字“type_map”: $ strings Al-SCAN.pb | grep type_map {\"model\": {\"type_map\": [\"Al\"], \"descriptor\": {\"type\": \"se_e2_a\", \"sel\": [150], \"rcut_smth\": 0.5, \"rcut\": 6.0, \"neuron\": [25, 50, 100], \"resnet_dt\": false, \"axis_neuron\": 16, \"seed\": 1, \"activation_function\": \"tanh\", \"type_one_side\": false, \"precision\": \"default\", \"trainable\": true, \"exclude_types\": [], \"set_davg_zero\": false}, \"fitting_net\": {\"neuron\": [240, 240, 240], \"resnet_dt\": true, \"seed\": 1, \"type\": \"ener\", \"numb_fparam\": 0, \"numb_aparam\": 0, \"activation_function\": \"tanh\", \"precision\": \"default\", \"trainable\": true, \"rcond\": 0.001, \"atom_ener\": []}, \"data_stat_nbatch\": 10, \"data_stat_protect\": 0.01}, \"learning_rate\": {\"type\": \"exp\", \"decay_steps\": 5000, \"start_lr\": 0.001, \"stop_lr\": 3.51e-08, \"scale_by_worker\": \"linear\"}, \"loss\": {\"type\": \"ener\", \"start_pref_e\": 0.02, \"limit_pref_e\": 1, \"start_pref_f\": 1000, \"limit_pref_f\": 1, \"start_pref_v\": 0, \"limit_pref_v\": 0, \"start_pref_ae\": 0.0, \"limit_pref_ae\": 0.0, \"start_pref_pf\": 0.0, \"limit_pref_pf\": 0.0, \"enable_atom_ener_coeff\": false}, \"training\": {\"training_data\": {\"systems\": [\"../deepmd_data/\"], \"batch_size\": \"auto\", \"set_prefix\": \"set\", \"auto_prob\": \"prob_sys_size\", \"sys_probs\": null}, \"validation_data\": {\"systems\": [\"../deepmd_validation\"], \"batch_size\": 1, \"numb_btch\": 3, \"set_prefix\": \"set\", \"auto_prob\": \"prob_sys_size\", \"sys_probs\": null}, \"numb_steps\": 1000000, \"seed\": 10, \"disp_file\": \"lcurve.out\", \"disp_freq\": 100, \"save_freq\": 1000, \"save_ckpt\": \"model.ckpt\", \"disp_training\": true, \"time_training\": true, \"profiling\": false, \"profiling_file\": \"timeline.json\", \"enable_profiler\": false, \"tensorboard\": false, \"tensorboard_log_dir\": \"log\", \"tensorboard_freq\": 1}} 如果存在关键字 type_map,那么 ABACUS 会自动匹配 STRU 和 DP 势文件中的原子种类顺序。 否则,STRU 中的原子种类以及顺序必须与 DP 势文件中的原子种类以及顺序一致。 例如,如果我们用 Al-Cu-Mg 三元合金的 DP 势文件来跑 Al-Mg 二元合金的 MD,那么 STRU 应该如下所示: ATOMIC_SPECIES Al 26.982 Cu 63.546 Mg 24.305 LATTICE_CONSTANT 1.889727000000 LATTICE_VECTORS 4.0 0.0 0.0 0.0 4.0 0.0 0.0 0.0 4.0 ATOMIC_POSITIONS Cartesian Al 0 2 0.0 0.0 0.0 0.5 0.5 0.0 Cu 0 0 Mg 0 2 0.5 0.0 0.5 0.0 0.5 0.5 注:在这个例子中,即使 Cu 原子的数量为 0,也必须在 STRU 中给出 Cu 原子相关信息。 三、MD 输出和续算功能 1. MD 输出文件 ABACUS 的 MD 模拟会产生 3 类输出文件:结构文件 STRU_MD_${istep},续算文件 Restart_md.dat,信息文件 MD_dump。 1.1 结构文件 STRU_MD_${istep} 参数 md_restartfreq 控制 OUT.${suffix}/STRU/文件夹中结构文件STRU_MD_${istep}的输出频率,该文件格式与输入结构文件 STRU 相同,主要用于 MD 续算。这里 istep 代表离子步,从 0 开始计数。 1.2 续算文件 Restart_md.dat 参数 md_restartfreq 控制 OUT.${suffix}/Restart_md.dat 的更新频率,用于 MD 续算。 1.3 信息文件 MD_dump 参数 md_dumpfreq 控制 OUT.${suffix}/MD_dump 文件的追加输出频率,该文件输出每 md_dumpfreq 步的 MD 信息,包括 MD 步数,晶格常数,晶格矢量,晶格维里,原子编号,原子位置,原子受力,原子速度。其中,晶格维里,原子受力,原子速度可以通过输入参数 dump_virial,dump_force,dump_vel 控制是否输出。 MDSTEP: 0 LATTICE_CONSTANT: 5.397605400000 Angstrom LATTICE_VECTORS 0.500000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.500000000000 VIRIAL (kbar) 123.045275146001 -3.807535058112 -13.541439282961 -3.807535058112 124.421300186299 24.047959743672 -13.541439282961 24.047959743672 125.016024430342 INDEX LABEL POSITION (Angstrom) FORCE (eV/Angstrom) VELOCITY (Angstrom/fs) 0 Si 0.000000000000 0.000000000000 0.000000000000 -0.885362725233 0.500467424348 0.150239620206 -0.003506076235 0.000412570794 0.000094403053 1 Si 1.300822817264 1.376389287977 1.354798867769 0.885362725233 -0.500467424348 -0.150239620206 0.003506076235 -0.000412570794 -0.000094403053 MDSTEP: 1 LATTICE_CONSTANT: 5.397605400000 Angstrom LATTICE_VECTORS 0.500000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.500000000000 VIRIAL (kbar) 123.051574098220 -2.465332696362 -10.608474638302 -2.465332696362 123.587154919736 16.307187552709 -10.608474638302 16.307187552709 123.960669810770 INDEX LABEL POSITION (Angstrom) FORCE (eV/Angstrom) VELOCITY (Angstrom/fs) 0 Si 5.389827754452 2.701629481339 2.699621723525 -0.602062173578 0.391990779819 0.096323485153 -0.010548689866 0.004659227844 0.001267888485 1 Si 1.308600113700 1.373562332082 1.353979669688 0.602062173578 -0.391990779819 -0.096323485153 0.010548689866 -0.004659227844 -0.001267888485 MDSTEP: 2 LATTICE_CONSTANT: 5.397605400000 Angstrom LATTICE_VECTORS 0.500000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.500000000000 VIRIAL (kbar) 122.953007762375 -0.240072876170 -4.211946086929 -0.240072876170 122.930693852071 3.378536464243 -4.211946086929 3.378536464243 122.992607262385 INDEX LABEL POSITION (Angstrom) FORCE (eV/Angstrom) VELOCITY (Angstrom/fs) 0 Si 5.376757913710 2.708010452044 2.701308224779 -0.124946902346 0.155367961328 0.009378252255 -0.012739769308 0.006644009927 0.001613591879 1 Si 1.321669954442 1.367181361377 1.352293168434 0.124946902346 -0.155367961328 -0.009378252255 0.012739769308 -0.006644009927 -0.001613591879 MDSTEP: 3 LATTICE_CONSTANT: 5.397605400000 Angstrom LATTICE_VECTORS 0.500000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.500000000000 VIRIAL (kbar) 122.881221914392 1.206247195689 2.345023988024 1.206247195689 123.110079832453 -8.436042066928 2.345023988024 -8.436042066928 123.123976300784 INDEX LABEL POSITION (Angstrom) FORCE (eV/Angstrom) VELOCITY (Angstrom/fs) 0 Si 5.364727401370 2.714719749381 2.702800880457 0.310711926370 -0.086233730382 -0.043760493686 -0.009222308089 0.005510922784 0.001122226311 1 Si 1.333700466782 1.360472064040 1.350800512757 -0.310711926370 0.086233730382 0.043760493686 0.009222308089 -0.005510922784 -0.001122226311 2 MD 续算功能 如果 ABACUS 运行达到指定的 MD 步数,或者计算中断,可以通过 MD 续算功能继续之前的 MD 计算。 以上一个 INPUT 文件为例: INPUT_PARAMETERS #Parameters (General) suffix autotest calculation md pseudo_dir ../../PP_ORB esolver_type dp pot_file ../../PP_ORB/Al-SCAN.pb cal_force 1 cal_stress 1 md_nstep 3 md_type msst md_dt 1 md_tfirst 200 md_dumpfreq 1 md_restartfreq 1 md_restart 1 msst_qmass 200 msst_vel 0.028 msst_vis 0.3 init_vel 1 md_restart:控制续算的开关,在 MD 续算时将这个参数设为 1,其他参数不变。当 md_restart 设为 1,ABACUS 会读取${read_file_dir}/Restart_md.dat文件,从中获取当前MD步数istep以及续算所需的其他参数如恒温器以及恒压器的信息,根据istep从OUT.${suffix}/STRU/ 文件夹中读取相应的结构文件 STRU_MD_${istep},之后就可以进行 MD 续算了。 四、MD 后处理 目前主流的可视化软件如 VESTA、VMD、OVITO 并不支持 ABACUS 的文件格式,因此我们需要通过一些后处理软件实现 ABACUS 的 STRU、MD_dump 文件与常用文件格式的转化。我们比较推荐的后处理软件有: 1 ASE 官网:https://wiki.fysik.dtu.dk/ase/ 用法参考 ABACUS 线上文档:http://abacus.deepmodeling.com/en/latest/advanced/interface/ase.html 2 dpdata github 网址:https://github.com/deepmodeling/dpdata gitee 网址:https://gitee.com/deepmodeling/dpdata 3 案例 现在我们用 LJMD 算例来演示如何采用dpdata+OVITO的方式在 MD 计算完成后制作分子动力学轨迹动画。 3.1 MD 计算 下载案例文件 $ git clone https://gitee.com/mcresearch/abacus-user-guide 进入 LJMD 文件夹 $ cd abacus-user-guide/examples/md/2_LJMD 修改 INPUT 参数,把 md_nstep 改为 100 INPUT_PARAMETERS #Parameters (General) suffix autotest calculation md pseudo_dir ../../PP_ORB #Parameters (esolver) esolver_type lj lj_rcut 8.5 lj_epsilon 0.01032 lj_sigma 3.405 cal_force 1 cal_stress 1 #Parameters (MD) md_nstep 100 md_type nve md_dt 1 md_tfirst 300 init_vel 1 运行 abacus $ abacus 3.2 dpdata 转化格式 安装 dpdata $ git clone https://github.com/deepmodeling/dpdata.git dpdata $ cd dpdata $ pip install . 运行 dpdata,将 MD_dump 文件转化为 GROMACS 的 gro 格式的文件 data.gro $ python3 >>> import dpdata >>> data = dpdata.LabeledSystem(\"./\", fmt=\"abacus/md\") >>> data.to_gro(\"data.gro\") 3.3 OVITO 制作动画 打开 OVITO,点击左上角 load file,选择上一步的 data.gro 文件 右上角 rendering settings 点击 Render active viewport 即可保存动画文件 "},"abacus-sdft.html":{"url":"abacus-sdft.html","title":"ABACUS 随机波函数DFT方法使用教程","keywords":"","body":"ABACUS 随机波函数 DFT 方法使用教程 作者:陈涛,邮箱:chentao@stu.pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/07/11 一、介绍 本教程旨在介绍 ABACUS 中随机波函数密度泛函理论(Stochastic Density Functional Theory,以下简称 SDFT)计算功能。目前 ABACUS 使用 SDFT 主要聚焦在高温高压物质的模拟,特别是温稠密物质(Warm Dense Matter,简称 WDM)。在进行温稠密物质计算时(温度高达数十到上千 eV, 1 eV=11604.5 K),传统的 Kohn-Sham 密度泛函理论(KSDFT)需要用到极大数量的占据态电子波函数导致计算困难,而 SDFT 使用随机波函数轨道,可以有效地避开对角化哈密顿矩阵这个问题,应用于高温计算。关于 ABACUS 中实现 SDFT 算法的细节可以参考 Qianrui Liu and Mohan Chen*, \"Plane-wave-based stochastic-deterministic density functional theory for extended systems,\" Phys. Rev. B, 106, 125132 (2022)。本教程中将会展示如何在 ABACUS 计算中使用 SDFT 功能,此外还会介绍混合随机波函数密度泛函理论方法使用(mixed stochastic-deterministic DFT,简称 MDFT),即在 SDFT 计算中,混入一部分的低能 Kohn-Sham 轨道,从而加速结果收敛。 二、软件和算例准备 ABACUS 的软件包(3.2.0 版本)中提供了一个 SDFT 的算例,可以从 Gitee 上下载。可以在网页右侧点击克隆/下载-> 下载 ZIP 得到算例,或者在 linux 终端执行如下命令得到算例: git clone https://gitee.com/mcresearch/abacus-user-guide.git 下载后解压,之后进入/abacus-user-guide/examples/stochastic 文件夹。算例中有三个文件夹,pw_Si2、pw_md_Al 和 186_PW_SDOS_10D10S。 三、采用 SDFT 进行电子自洽迭代计算 pw_Si2文件夹:这是一个电子温度为 0.6 Ry(约 8.16 eV)的 2 个原子的金刚石结构硅(Si)的电子自洽迭代(Self Consistent Field,简称 SCF)算例,包含布里渊区 K 点的 KPT 文件和包含原子位置的 STRU 文件与传统的 KSDFT 计算并无区别,主要的不同在于输入文件 INPUT,注意目前 SDFT 仅支持 smearing_method 为 fd。INPUT 文件如下: INPUT_PARAMETERS #Parameters (General) calculation scf esolver_type sdft pseudo_dir ../../PP_ORB nbands 4 nbands_sto 64 nche_sto 100 method_sto 1 #Parameters (Accuracy) ecutwfc 50 scf_nmax 20 symmetry 1 #Parameters (Smearing) smearing_method fd smearing_sigma 0.6 以上参数在 ABACUS 的线上文档中均有详细说明,这里再进行简单概述: calculation设置为 scf,代表进行电子自洽迭代计算(self-consistent field)。 esolver_type是选择系统总能量求解方法的,默认为 ksdft(Kohn-Sham density functiona theory),这里需要设置为 sdft 才会使用 SDFT 或者 MDFT 进行计算。 nbands是使用的 Kohn-Sham 轨道的数目(也叫 determinstic orbitals,是通过严格对角化矩阵计算出来的)。如果 nbands 设置为 0,且 nbands_sto(随机轨道数目,这里设成 64)不为 0,则会进行 SDFT 计算;如果 nbands>0,且 nbands_sto>0,则会进行混合 KS 电子轨道和随机轨道(stochastic orbitals)的 MDFT 计算。注意:一般 nbands 设置为能量低于费米能级对应的能带数,计算效率会比较高。 nbands_sto是使用随机波函数(stochastic orbitals)轨道数目,原则上取得越大则随机误差越小,但计算效率也会相应降低。 判断随机波函数个数是否足够的一个经验法则是:测试能量误差。实际计算中,一般可以采用10 个左右不同的随机数种子(可以参考 seed_sto 参数设置随机数种子,下面有介绍)生成的相同数目的随机波函数轨道进行 SDFT 计算,得到系统能量并求得相应误差,增加随机波函数轨道数目直到控制能量误差小于万分之一即可。 当 nbands_sto 设为 0 时, 程序会自动转成 KSDFT 进行计算(ABACUS 3.2.2 版本以后)。 nche_sto是将电子体系的哈密顿量进行切比雪夫展开的阶数,这个数取得越大则用到的切比雪夫展开阶数越多,相应的计算精度也会越高但效率会降低。大致关系为与温度成反比,温度越高,阶数可以取得越小;ecut(正比关系)越大,阶数越大;推荐使用的 nche_sto 的大小是使得输出文件 running_scf.log 中的 Chebyshev Precision 小于 1e-8。 method_sto是进行 SDFT 计算使用的方法:1 代表消耗内存较少但稍慢的方法,2 代表更快但需要更大内存的方法,默认是 2。 此外还有如下参数可能会用到: seed_sto:生成随机轨道的随机种子。默认是 0,代表随时间随机生成;若要控制使用相同的随机种子,可以设置一个大于 1 的整数。 bndpar:将所有并行的进程分成 bndpar 个组,计算所用随机轨道将平均分布在每个组中,可以提高并行效率,默认为 1。值得注意的是,这个参数并不是越大越好,并且不如 K 点并行(kpar参数)有效,实际计算中应该优先使用 K 点并行,然后测试不同大小的 bndpar,确定最佳的 bndpar。 平面波能量截断值 ecut 的测试:由于随机误差的出现,SDFT 的 ecut 的测试与传统的 KSDFT 稍有区别,但是原理是类似的。在确定好 nbands_sto 后,就可以测试 ecut 了。与测试 nbands_sto 类似,在不同的 ecut,需要采用 10 个左右不同的随机种子生成的相同数目的随机波函数轨道进行 SDFT 计算,然后取平均能量。由于温稠密物质能量一般都比较高,因此只要控制相邻二个 ecut(相差为 10 Ry)对应的平均能量差小于一定标准即可(例如万分之一)。 注 1:在这个例子里我们提供的赝势是 Si.pz-vbc.UPF 文件,这个文件包含 4 个硅的价电子。事实上,当温度特别高的时候,一般的赝势可能会面临可移植性差的问题,例如高温会使得内壳层电离。这个时候,要选择合理的赝势进行计算,甚至可能需要自己造一个新的赝势,目前 ABACUS 3.2.0 支持的是模守恒的赝势。 注 2:ABACUS 的 SDFT 和 MDFT 支持多个 k 点采样,因此可以在 KPT 文件里设置不同的 k 点个数,在某些性质的计算里,要注意计算性质随着 k 点的收敛。 四、采用 SDFT 进行分子动力学模拟 pw_md_Al 文件夹:这是一个电子温度为 7.35 Ry(约 100 eV)、包含 16 个铝(Al)原子的结构,我们对其进行分子动力学(Molecular Dynamics,简称 MD)的模拟。INPUT 文件如下: INPUT_PARAMETERS #Parameters (General) calculation md esolver_type sdft pseudo_dir ../../PP_ORB nbands 0 nbands_sto 64 nche_sto 20 method_sto 2 #Parameters (Accuracy) ecutwfc 50 scf_nmax 20 scf_thr 1e-6 symmetry 1 #Parameters (Smearing) smearing_method fd smearing_sigma 7.34986072 #Parameters (MD) md_tfirst 1160400 md_dt 0.2 md_nstep 10 注意要进行分子动力学模拟,calculation 参数需设置为 md。esolver_type 需设置为 sdft,才能进行 SDFT 的计算。这里 nbands 设置为 0,nbands_sto 设置为 64,代表仅仅使用随机轨道而没有 KS 轨道的 SDFT 计算。 五、采用 SDFT 计算态密度 186_PW_SDOS_10D10S 文件夹:采用 SDFT 还可以计算给定体系的态密度(Density of States,简称 DOS)。例如,186_PW_SDOS_10D10S 是一个 1 个 Si 原子的算例,电子温度约为0.6 Ry(约 8.16 eV)。如下所示: INPUT_PARAMETERS #Parameters (1.General) suffix autotest calculation scf esolver_type sdft method_sto 2 nbands 10 nbands_sto 10 nche_sto 120 emax_sto 0 emin_sto 0 seed_sto 20000 pseudo_dir ../../PP_ORB symmetry 1 kpar 1 bndpar 2 #Parameters (2.Iteration) ecutwfc 20 scf_thr 1e-6 scf_nmax 20 #Parameters (3.Basis) basis_type pw #Parameters (4.Smearing) smearing_method fd smearing_sigma 0.6 #Parameters (5.Mixing) mixing_type broyden mixing_beta 0.4 out_dos 1 dos_emin_ev -20 dos_emax_ev 100 dos_edelta_ev 0.1 dos_sigma 4 dos_nche 240 npart_sto 2 以上参数在 ABACUS 的线上文档中均有说明,这里再进行简单概述: out_dos:需要设置为 1,才能输出能态密度。 dos_emin_ev:能态密度的能量最小范围,单位 eV。 dos_emax_ev:能态密度的能量最大范围,单位 eV。 dos_edelta_ev:控制输出DOS时的能量间隔,单位 eV。 dos_sigma:能态密度的高斯展宽的因子,单位 eV。 dos_nche:计算能态密度时切比雪夫展开阶数,默认为 100。 npart_sto:当使用 method_sto=2 运行例如 DOS 的 SDFT 后处理时,将控制使用内存大小为正常的 1/npart_sto,防止内存不够导致无法计算,默认为 1。 注:态密度的输出文件是 OUT 文件夹下的 DOS1_smearing.dat。 六、结尾 总体来讲,随机波函数密度泛函理论方法(SDFT 或者 MDFT)的使用与 KSDFT 并无太大的区别,直接运行 ABACUS 程序即可,但是对一些关键参数的选取会影响精度和效率(例如 nbands, nbands_sto, nche_sto, method_sto, kpar, bnd_par)。对于极端高温计算(>10 eV),使用 SDFT 可以大大提高计算速度,是比普通的 KSDFT 更好的选择。如果大家使用有问题,欢迎写信联系(见上)。 "},"abacus-ofdft.html":{"url":"abacus-ofdft.html","title":"ABACUS 无轨道密度泛函理论方法使用教程","keywords":"","body":"ABACUS 无轨道密度泛函理论方法使用教程 作者:孙亮,邮箱:l.sun@pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/07/19 一、无轨道密度泛函理论背景知识 无轨道密度泛函理论(Orbital free density functional theory, OFDFT)是一种第一性原理模拟方法,相比于 Kohn Sham DFT (KSDFT),它的优势之一在于O(N\\ln N)的算法复杂度,这使得 OFDFT 可以用于上万原子甚至更大体系的电子基态计算,或者大体系、长时间的第一性原理分子动力学等。 目前,OFDFT 已被应用于简单金属、合金、半导体、小分子、温稠密物质等体系。 1. 无轨道密度泛函理论 在 OFDFT 的框架下,体系的总能量泛函可以写为 E_{\\rm{OF}}[\\rho] = T_{\\rm{s}}[\\rho] + E_{\\rm{ext}}[\\rho] + E_{\\rm{H}}[\\rho] + E_{\\rm{xc}}[\\rho] + E_{\\rm{II}}. 依次为无相互作用动能T_{\\rm{s}}[\\rho],电子-离子相互作用能E_{\\rm{ext}}[\\rho],电子-电子相互作用能E_{\\rm{H}}[\\rho],交换关联能E_{\\rm{xc}}[\\rho],离子-离子相互作用能E_{\\rm{II}},其中\\rho为电荷密度。 为了在粒子数守恒的条件下求解其极小值,利用拉格朗日乘子法,定义 L=E_{OF}[\\rho]-\\mu(\\int{\\rho(r)dr}-N), 可以证明,这里的乘子\\mu就是无相互作用体系中最高占据态的能量,即化学势。为了保证密度处处为正,一般对\\sqrt\\rho进行优化,因此求L对\\sqrt\\rho的导数,为了方便,定义\\phi(r) = \\sqrt {\\rho(r)},则有 \\frac{\\delta L}{\\delta \\phi}=\\frac{ \\delta E_{OF}[ \\rho ] }{ \\delta \\phi }-2\\mu\\phi=0 \\rightarrow V(r)\\phi(r)=\\mu\\phi(r). \\ \\ \\ \\ \\ \\ \\ \\ (*) 其中V(r)=\\frac{ \\delta E_{OF}[ \\rho ] }{ \\delta \\rho(r) }为势能。这就是 OFDFT 求解的方程,一般用共轭梯度(CG)法、截断牛顿(TN)法或 L-BFGS 等优化算法求解。目前 ABACUS 中实现了 TN 法和两种 CG 法(Polak-Ribire 形式和 Hager-Zhang 形式),默认采用 TN 法。 ABACUS 基于平面波基矢量,实现了上述流程,可以进行基于 OFDFT 的自洽计算,分子动力学计算,以及结构弛豫。 2. 动能泛函 OFDFT 的精度高度依赖于动能泛函(kinetic energy density functional, 简称 KEDF)的精度,目前 ABACUS 中实现了 Thomas-Fermi (TF) [1], von Weizsäcker (vW) [2], TFλvW [3], Wang-Teter (WT) [4], Luo-Karasiev-Trickey (LKT) [5]共五种动能泛函。 下面我们对这些泛函做简单介绍,并且介绍在 ABACUS 的 INPUT 文件中如何设置相关的参数。 2.1 Thomas-Fermi KEDF 设置 INPUT 文件中的 of_kinetic tf 参数 T_{\\rm{TF}}=\\frac{3}{10}(3\\pi^2)^{2/3}\\int{\\rho^{5/3}(r)dr}, 对均匀电子气精确成立,可用于极高温体系,比如处于温稠密状态的金属。 可通过 of_tf_weight 调整其权重,默认为 1。 2.2 von Weizsäcker KEDF 设置 of_kinetic vw T_{\\rm{vW}}=-\\frac{1}{2}\\int{\\sqrt{\\rho(r)} \\nabla^2 \\sqrt{\\rho(r)}dr}, 对单电子、双电子体系(只有一条轨道)严格成立,一般不单独使用。 可通过 of_vw_weight 调整其权重,默认为 1。 2.3 TFλvW KEDF 设置 of_kinetic tf+ T=T_\\text{TF}+\\lambda T_\\text{vW}, 当\\lambda=\\frac{1}{9}时就是TF KEDF的二阶梯度展开,一般\\lambda=\\frac{1}{5}时表现最好。 参数\\lambda可通过of_vw_weight设置,默认为1。 2.4 Wang-Teter KEDF 设置of_kinetic wt T_{\\rm{WT}} = \\frac{3}{10}(3\\pi^2)^{2/3} \\iint{\\rho ^{\\alpha}(r)W(r - r'){\\rho ^{\\beta}}(r') drdr'} + T_{\\rm{vW}} + T_{\\rm{TF}}, 基于 Lindhard 响应函数推导,在简单金属 Li、Mg、Al 中有着不错的表现。是 ABACUS 默认采用的 KEDF。 参数\\alpha,\\beta可通过 of_wt_alpha 和 of_wt_beta 设置,默认值均为\\frac{5}{6}。 2.5 Luo-Karasiev-Trickey KEDF 设置 of_kinetic lkt T_{\\rm{LKT}}= \\int{\\tau_{\\rm{TF}}\\frac{1}{\\cosh as}dr} + T_{\\rm{vW}}, s=\\frac{1}{2(3\\pi^2)^{1/3}}\\frac{|\\nabla\\rho|}{\\rho^{4/3}}. 可用于简单金属和半导体,计算效率较高,但在简单金属中精度低于 WT KEDF。 参数 a 可通过 of_lkt_a 设置,默认值为 1.3。 3. 局域赝势 由于 OFDFT 中舍弃了单电子轨道,无法采用常用的非局域赝势,如模守恒赝势,而必须采用局域赝势。 目前 ABACUS 支持 BLPS (bulk-derived local pseudopotential)。 下载地址: https://github.com/EACcodes/local-pseudopotentials实空间赝势:ABINIT, ABACUS; 倒空间赝势:PROFESS。赝势生成(需要和 ABINIT 7.0.5 结合):https://github.com/EACcodes/BLPSGenerator覆盖 Li, Mg, Al, Si, P, Ga, As, In, Sb 九种元素 使用 BLPS 时,需要在 ABACUS 里调整的参数有: INPUT 中:pseudo_rcut 16 STRU 中:赝势种类设置为 blps,比如 Al 26.98 al.lda.lps blps 二、ABACUS 中进行 OFDFT 计算的具体流程 1. 自洽计算 1.1 示例 下面是输入文件的示例: INPUT 文件记录 OFDFT 计算所需主要参数 INPUT_PARAMETERS #Parameters (1.General) suffix example calculation scf esolver_type ofdft symmetry 1 pseudo_dir ../../PP_ORB/ pseudo_rcut 16 nspin 1 #Parameters (2.Iteration) ecutwfc 60 scf_nmax 50 #Parameters (3.Basis) basis_type pw #OFDFT of_kinetic wt of_method tn STRU 文件记录元素种类、质量、赝势,晶格矢量,原子坐标等信息 ATOMIC_SPECIES Al 26.98 al.lda.lps blps LATTICE_CONSTANT 7.50241114482312 // add lattice constant LATTICE_VECTORS 0.000000000000 0.500000000000 0.500000000000 0.500000000000 0.000000000000 0.500000000000 0.500000000000 0.500000000000 0.000000000000 ATOMIC_POSITIONS Direct Al 0 1 0.000000000000 0.000000000000 0.000000000000 1 1 1 KPT 文件(因为 OFDFT 没有电子波函数,所以不需要布里渊区的多个 k 点,Gamma 点就可以) K_POINTS 0 Gamma 1 1 1 0 0 0 如上所示,与 KSDFT 的自洽计算相比,OFDFT 自洽计算的输入文件有以下几个区别: INPUT 不需要设置 smearing 和 charge mixing 相关参数,如果设置了也没有关系,这些参数不会影响 OFDFT 计算; 将 esolver_type 设置为 ofdft; 将 pseudo_rcut 设置为 16,以适配 BLPS 赝势。 STRU 将赝势种类设置为 blps。 做完以上调整后,即可使用默认参数进行 OFDFT 的自洽计算。 下面列举一些其它的重要参数: of_kinetic:用于选择动能泛函,可选项有 tf, vw, tf+, wt, lkt,默认值为 wt,具体介绍见 1.2 节; of_method:用于选择优化方法,可选项有 tn, cg1, cg2,分别对应截断牛顿法和两种 CG 法(Polak-Ribire 形式和 Hager-Zhang 形式),默认为 tn。一般而言,效率上 tn > cg2 > cg1; of_full_pw:做快速傅里叶变换(FFT)时,是否使用全部的平面波,默认为 True。建议打开,可以保证计算的稳定性和精度; of_full_pw_dim:控制 FFT 维数的奇偶性,可选项有 0, 1, 2,分别表示可奇可偶,保证为奇数,保证为偶数,默认为 0。FFT 维数为偶数时,可能导致微小的误差,但一般来说可以忽略。需要注意的是,如果打开了 nbspline,则需要设置 of_full_pw_dim 1,否则会导致计算不稳定。 1.2 注意事项 目前 ABACUS 的 OFDFT 模块并不是十分完善,使用时请注意以下几个注意事项: 目前 OFDFT 不支持 gamma only,因此使用 OFDFT 功能时请关闭 gamma_only; 目前 OFDFT 只支持自旋简并,即 nspin 1 的计算; 如果使用 PBE 泛函,建议用 dft_functional XC_GGA_X_PBE+XC_GGA_C_PBE 调用 Libxc 中的 PBE,否则可能导致计算不稳定。 2. 分子动力学与结构弛豫 ABACUS 中支持使用 OFDFT 作为能量、力和应力的求解器,进行分子动力学模拟与结构弛豫。 与使用 KSDFT 进行分子动力学或结构弛豫相比,使用 OFDFT 时,不需要对 MD,relax,或 cell-relax 相关参数进行修改,只需要按照 2.1 中的方式,将能量、力和应力的求解器替换为 OFDFT。 下面是几个实际的 INPUT 例子: 2.1 分子动力学(MD) INPUT_PARAMETERS #Parameters (1.General) suffix test calculation md esolver_type ofdft pseudo_dir ../../PP_ORB pseudo_rcut 16 #Parameters (2.Iteration) ecutwfc 60 scf_nmax 100 #OFDFT of_kinetic wt of_method tn of_full_pw_dim 1 #Parameters (3.Basis) basis_type pw md_restart 0 md_type nvt md_nstep 2 md_dt 0.25 md_tfirst 58022.52706 md_dumpfreq 10 md_tfreq 1.08 md_tchain 1 nbspline 10 2.2 原子结构弛豫(relax) INPUT_PARAMETERS #Parameters (1.General) suffix test calculation relax esolver_type ofdft pseudo_dir ../../PP_ORB pseudo_rcut 16 #Parameters (2.Iteration) ecutwfc 60 scf_nmax 100 #OFDFT of_kinetic wt of_method tn #Parameters (3.Basis) basis_type pw relax_nmax 50 2.3 晶格弛豫(cell-relax) INPUT_PARAMETERS #Parameters (1.General) suffix test calculation cell-relax esolver_type ofdft pseudo_dir ../../PP_ORB pseudo_rcut 16 #Parameters (2.Iteration) ecutwfc 60 scf_nmax 100 #OFDFT of_kinetic wt of_method tn #Parameters (3.Basis) basis_type pw relax_nmax 50 三、参考文献 [1] Fermi E. Statistical method to determine some properties of atoms[J]. Rend. Accad. Naz. Lincei, 1927, 6(602-607): 5. [2] Weizsäcker C F. Zur theorie der kernmassen[J]. Zeitschrift für Physik, 1935, 96(7-8): 431-458. [3] Berk A. Lower-bound energy functionals and their application to diatomic systems[J]. Physical Review A, 1983, 28(4): 1908. [4] Wang L W, Teter M P. Kinetic-energy functional of the electron density[J]. Physical Review B, 1992, 45(23): 13196. [5] Luo K, Karasiev V V, Trickey S B. A simple generalized gradient approximation for the noninteracting kinetic energy density functional[J]. Physical Review B, 2018, 98(4): 041111. "},"abacus-phonopy.html":{"url":"abacus-phonopy.html","title":"ABACUS+Phonopy 计算声子谱","keywords":"","body":"ABACUS+Phonopy 计算声子谱 作者:赵天琦,邮箱:zhaotq13@tsinghua.org.cn;陈涛,邮箱:chentao@stu.pku.edu.cn 审核:刘建川,邮箱:liujianchuan2013@163.com 最后更新时间:2023/08/14 一、介绍 本教程旨在介绍采用 ABACUS(基于 ABACUS 3.2.2 版本)做密度泛函理论计算,并且结合 Phonopy 软件计算声子谱的流程。此外,本教程还用到 gnuplot 来绘图。 首先推荐大家阅读以下文档中的详细说明: ABACUS 官方文档:Phonopy - ABACUS documentation Phonopy 相关文档:ABACUS & phonopy calculation — Phonopy v.2.19.1 Gnuplot 主页:gnuplot homepage 二、准备 我们以 FCC Al 这个简单例子来演示使用 有限位移方法 来结合 ABACUS 和 Phonopy 计算声子谱。 1. 下载并安装 Phonopy git clone https://github.com/phonopy/phonopy.git cd phonopy python3 setup.py install 2. 下载 FCC Al 例子 可以从 Gitee 上下载。可以在网页右侧点击克隆/下载-> 下载 ZIP 得到算例,或者在 linux 终端执行如下命令得到算例: git clone https://gitee.com/mcresearch/abacus-user-guide.git 下载后解压,之后进入 abacus-user-guide/examples/interface_Phonopy 文件夹 三、流程 1. 使用 ABACUS 优化结构 这里我们已经给出一个已经优化好的 FCC Al 结构 ABACUS 中的结构文件名为 STRU: ATOMIC_SPECIES Al 26.982 Al_ONCV_PBE-1.0.upf upf201 NUMERICAL_ORBITAL Al_gga_7au_100Ry_4s4p1d.orb LATTICE_CONSTANT 1.88972612546 LATTICE_VECTORS 4.03459549706 0 0 #latvec1 0 4.03459549706 0 #latvec2 0 0 4.03459549706 #latvec3 ATOMIC_POSITIONS Direct Al #label 0 #magnetism 4 #number of atoms 0 0 0 m 0 0 0 0.5 0.5 0 m 0 0 0 0.5 0 0.5 m 0 0 0 0 0.5 0.5 m 0 0 0 2. 用 Phonopy 产生需要计算的超胞及相应微扰构型 这里我们使用 有限位移方法 计算声子谱,因此需要对晶格进行扩胞并对原子位置进行微扰。执行如下命令即可生成 222 的扩胞并产生微扰结构: phonopy -d --dim=\"2 2 2\" --abacus 这一步 phonopy 会根据晶格对称性自动产生相应个数的微扰结构。由于 FCC 的晶格对称性较强,因此这个例子只产生一个微扰结构:STRU-001。这里类似 K 点的对称性分析,晶体结构对称性越强,所需的微扰结构就越少,对称性稍差的体系一般会产生多个微扰结构。 经验性设置:1)扩胞越大,计算结果越精确,但是计算量也会上升,一般来说扩胞三个方向的 cell 长度均在 10-20 Å 是比较合适的;2)对于优化后的晶胞(复杂体系),原子位置可能不处于高对称点上,phonopy 可能计算存在一定的误差,可以使用 Matertial Studio 等软件把对称性加回去之后,再做上述步骤,这样能够得到准确的声子谱数据(保证计算出来的声子谱满足体系的对称性特征)。 3. 产生 FORCE_SET 文件 接着用 ABACUS 计算原子受力,其中需要注意的是 calculation 需要设置为 scf,并且设置 cal_force 为 1,因为这一步目的是输出原子受力。 小技巧:即为了计算不同的微扰结构的受力,可以在 INPUT 里添加关键字 stru_file 来指定 STRU 文件的路径和文件名:stru_file ./STRU-001 INPUT 内容如下: INPUT_PARAMETERS #Parameters (1.General) suffix Al-fcc calculation scf esolver_type ksdft symmetry 1 pseudo_dir ./psp orbital_dir ./psp cal_stress 1 cal_force 1 stru_file STRU-001 #Parameters (2.Iteration) ecutwfc 100 scf_thr 1e-7 scf_nmax 50 #Parameters (3.Basis) basis_type lcao gamma_only 0 #Parameters (4.Smearing) smearing_method mp smearing_sigma 0.015 #Parameters (5.Mixing) mixing_type pulay mixing_beta 0.7 mixing_gg0 1.5 算完之后用以下命令产生 FORCE_SET 文件: phonopy -f ./disp-001/OUT/running_scf.log ./disp-002/OUT/running_scf.log ... 即要指定所有微扰构型算完之后的 running_scf.log 文件位置。如果运行有错,需要首先检查是否所有构型都已正常结束,且其中有力输出(可以找“FORCE”来确认)。 4. 设置 band.conf 文件计算得到声子谱 执行如下命令: phonopy -p band.conf --abacus band.conf 内容如下: ATOM_NAME = Al DIM = 2 2 2 MESH = 8 8 8 PRIMITIVE_AXES = 0 1/2 1/2 1/2 0 1/2 1/2 1/2 0 BAND = 1 1 1 1/2 1/2 1 3/8 3/8 3/4 0 0 0 1/2 1/2 1/2 BAND_POINTS = 101 BAND_CONNECTION = .TRUE. 这一步结束之后会有 band.yaml 文件输出 以上参数在 Phonopy 的线上文档中均有详细说明,这里再进行简单概述: ATOM_NAME:指定结构文件中的元素种类。 DIM:扩胞的大小,需要跟 3.2 用Phonopy产生需要计算的超胞及相应微扰构型 中的“dim”一致。 MESH:q 点的采样网格。‘8 8 8’意味着采用 888 的 q 点网格,默认以(0,0,0)为中心。 PRIMITIVE_AXES:输入晶胞到目标原胞的转换矩阵,并将根据原胞基矢量作为声子计算的坐标系。这里是 FCC 的原胞转换矩阵。 BAND:采样能带的 q 点路径。不同晶格的高对称点不同,具体可以使用 SeeK-path,自动生成 q 点路径。 BAND_POINTS:给出了包括能带路径末端的采样点的数量。 BAND_CONNECTION:在能带交叉处辅助连接能带。 5. 绘制声子谱 本教程使用 gnuplot 绘制声子谱,在 Ubuntu 上 gnuplot 的安装如下: sudo apt-get install gnuplot 用如下命令输出 gnuplot 格式的声子谱,并使用 gnuplot 绘制声子谱并存为 Al-FCC_plot.png: phonopy-bandplot --gnuplot > pho.dat gnuplot plot_pho.gp plot_pho.gp 内容如下: set terminal pngcairo size 1920, 1080 font 'Arial, 36' ## 格式,大小和字体 set output \"Al-FCC_plot.png\" ###输出的文件名 set ylabel 'Frequency (THz)' set ytics 2 unset key x1 = 0.13115990 x2 = 0.17753200 x3 = 0.31664810 xmax = 0.43023590 ymin = 0 ymax = 12 set xrange [0:xmax] set yrange [ymin:ymax] set xtics (\"{/Symbol G}\" 0, \"X\" x1, \"K\" x2, \"{/Symbol G}\" x3, \"L\" xmax) set arrow 1 nohead from x1,ymin to x1,ymax lt 2 set arrow 2 nohead from x2,ymin to x2,ymax lt 2 set arrow 3 nohead from x3,ymin to x3,ymax lt 2 plot 'pho.dat' using 1:($2) w l lw 3 FCC Al 的声子谱: 也可使用 Origin 绘图,pho.dat 的第一列就是上图的横轴(K 点路径),其中高对称 K 点位置见 pho.dat 的第二行,第二列就是上图的纵轴(声子频率,单位 THz)。 "},"abacus-shengbte.html":{"url":"abacus-shengbte.html","title":"ABACUS+ShengBTE 计算晶格热导率","keywords":"","body":"ABACUS+ShengBTE 计算晶格热导率 作者:陈涛,邮箱:chentao@stu.pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/06/15 一、介绍 本教程旨在介绍采用 ABACUS(基于 ABACUS 3.2.0 版本)做密度泛函理论计算,并且结合 ShengBTE 软件计算晶格的热导率的流程。其中,整个计算过程中还用到了:1)采用 Phonopy 程序来计算二阶力常数,2)采用 ASE 程序进行原子结构的转换,3)采用 ShengBTE 的 thirdorder 程序计算三阶力常数,4)最后使用 ShengBTE 来计算材料的晶格热导率。 上述提到了一些需要结合的外部软件,这里推荐大家阅读这些软件的相关文档和说明: ShengBTE:https://bitbucket.org/sousaw/shengbte/src/master/ phonopy:http://abacus.deepmodeling.com/en/latest/advanced/interface/phonopy.html ASE:http://abacus.deepmodeling.com/en/latest/advanced/interface/ase.html thirdorder: https://bitbucket.org/sousaw/thirdorder/src/master/ 二、准备 ABACUS 的软件包中提供了一个 ABACUS+ShengBTE 计算晶格热导率的算例,可以从 Gitee 上下载。算例中包含采用数值原子轨道的 LCAO(Linear Combination of Atomic Orbitals)和采用平面波基矢量的 PW(Plane Wave,平面波)两个文件夹。每个文件夹下分别又包含了 2nd、3rd 和 shengbte 这三个文件夹,分别保存了使用 phonopy 计算二阶力常数(2nd)、thirdorder 计算三阶力常数(3rd)和 ShengBTE 计算晶格热导率(shengbte)的相关文件。 三、流程 以 LCAO 文件夹为例,我们这里提供的测试案例是包含 2 个原子的金刚石结构 Si 结构,采用的模守恒赝势是 Si_ONCV_PBE-1.0.upf,以及原子轨道文件采用的是 Si_gga_7au_100Ry_2s2p1d.orb(GGA 泛函,7 au 截断半径,100 Ry 能量截断,以及包含 2s2p1d 的 DZP 轨道)。 1. 计算二阶力常数 要计算二阶力常数,除了 ABACUS 之外,还需要结合 Phonopy 和 ASE。首先,进入 2nd 文件夹。 1.1 结构优化 做晶格热导率计算之前要先对模拟的材料体系的进行原子构型的优化。下面是采用 ABACUS 做结构优化(relax)后得到的原子构型文件 STRU。在这个例子里,为了简单起见,结构优化过程采用的是 2*2*2 的布里渊区 k 点采样,平面波的能量截断值 ecut(LCAO 里面也用到了平面波基矢量)为 100 Ry,注意实际计算中应该要采用更收敛的 k 点采样。 ATOMIC_SPECIES Si 28.0855 Si_ONCV_PBE-1.0.upf NUMERICAL_ORBITAL Si_gga_7au_100Ry_2s2p1d.orb LATTICE_CONSTANT 1.88972612546 LATTICE_VECTORS 0 2.81594778072 2.81594778072 #latvec1 2.81594778072 0 2.81594778072 #latvec2 2.81594778072 2.81594778072 0 #latvec3 ATOMIC_POSITIONS Direct # direct coordinate Si #label 0 #magnetism 2 #number of atoms 0.875 0.875 0.875 m 0 0 0 0.125 0.125 0.125 m 0 0 0 注意:第一行 Si 的质量 28.0855 在计算中不起作用。 1.2 计算二阶力常数 调用 Phonopy 软件产生需要计算的超胞及相应微扰的多个原子构型,命令如下: phonopy setting.conf --abacus -d 其中 setting.conf 文件的内容为: DIM = 2 2 2 ATOM_NAME = Si 这里我们采用的 Si 的例子只需要产生 1 个微扰构型 STRU-001 即可,对所有微扰构型(这里 Si 的例子只有 1 个)进行 SCF 计算(SCF 代表 Self-consistent field,这里代表进行密度泛函理论的电子迭代自洽计算)获得原子受力,算完之后用以下命令产生 FORCE_SET 文件: phonopy -f OUT.DIA-50/running_scf.log 小技巧:在 ABACUS 的输入文件 INPUT 中可以设置变量 stru_file,该变量对应的原子构型文件为 STRU-001 则 ABACUS 可以直接读取该结构文件。 下一步,设置 band.conf 文件计算得到声子谱以及二阶力常数: phonopy -p band.conf --abacus 这里出现的 band.conf 文件,其内容如下(具体参数含义可以查看 Phonopy 说明文档): ATOM_NAME = Si DIM = 2 2 2 MESH = 8 8 8 PRIMITIVE_AXES = 1 0 0 0 1 0 0 0 1 BAND = 0.0 0.0 0.0 0.5 0.0 0.5 0.625 0.25 0.625, 0.375 0.375 0.75 00 0.0 0.0 0.5 0.5 0.5 BAND_POINTS = 101 BAND_CONNECTION = .TRUE. FORCE_CONSTANTS = WRITE FULL_FORCE_CONSTANTS = .TRUE. 这一步结束之后,Phonopy 软件会产生 band.yaml(用于绘制声子谱)和 FORCE_CONSTANTS 文件。其中,FORCE_CONSTANTS 文件包含的数据即为二阶力常数,注意这里务必设置 FULL_FORCE_CONSTANTS = .TRUE.,输出全部的二阶力常数,否则 ShengBTE 读取数据会报错。 此外,可以使用如下命令输出 gnuplot 格式的声子谱,用于绘制声子谱: phonopy-bandplot --gnuplot > pho.dat 1.3 后处理 注意 ShengBTE 软件要求 FORCE_CONSTANTS_2ND 文件里数据的单位为 eV/Å^2,但是 ABACUS 结合 phonopy 计算的 FORCE_CONSTANTS 单位为 eV/(Å*au),其中 au 是原子单位制,1 au=0.52918 Å。可以使用 2nd 目录下提供的 au2si.py 脚本进行单位转换,生成 FORCE_CONSTANTS_2ND 文件,命令如下: python au2si.py 在 shengbte 文件夹中提供了 FORCE_CONSTANTS_2ND 文件供参考计算结果。 2. 计算三阶力常数 要计算三阶力常数,需要结合 thirdorder 程序,计算后输出三阶力常数文件 FORCE_CONSTANTS_3RD。但是,thirdorder 目前只支持读取 VASP 和 QE 的输入输出文件。因此,这里我们是通过将 ABACUS 的结构文件和输出受力分别转换为 POSCAR 和 vasprun.xml 来使用 thirdorder,请先进入 3rd 文件夹,具体步骤将在以下叙述。 2.1 获得微扰构型 首先将 ABACUS 软件进行结构优化(relax)后的 STRU 文件转化为 POSCAR(目录下已给出转化过的 POSCAR,或者需要自己动手进行这个转换)。 之后,运行 thirdorder_vasp 程序,产生微扰过后的一系列原子构型文件 3RD.POSCAR.*,例如这个例子一共产生了 40 个构型: thirdorder_vasp.py sow 2 2 2 -2 运行 pos2stru.py,将上述 POSCAR 转化为 STRU 文件,注意该脚本里调用了 ASE 软件包的函数(需提前安装好 ASE): python pos2stru.py 注意:这里不能调用 dpdata 软件进行转化。因为 dpdata 会强制将晶格改为下三角矩阵,相当于旋转了晶格,会导致原子间受力方向也相应旋转,从而发生错误。 2.2 计算微扰构型的原子受力 可以参考目录下 run_stru.sh 使用脚本批量产生 SCF-* 文件夹并提交计算,这里需要采用 ABACUS 对 40 个原子构型分别进行 SCF 计算,会有些耗时。建议每个 SCF 单独在 SCF-* 文件夹内运行,这里的 INPUT 中的scf_thr 需要至少小到1e-8才能得到收敛的结果。 计算完成后,运行 aba2vasp.py,将 ABACUS 计算的原子受力包装成 vasprun.xml 格式,放置在每个 SCF-* 文件夹中,命令如下: python aba2vasp.py vasprun.xml 格式示意: 1.865e-05 -0.04644196 -0.00153852 -1.77e-05 -0.00037715 -0.00149635 1.973e-05 0.002213 -0.00149461 -1.976e-05 0.00065303 -0.0014804 8.31e-06 -0.0003306 -0.00024288 -8.25e-06 -0.00038306 -0.00025385 1.071e-05 0.00060621 -0.00025797 -1.05e-05 -0.00014553 -0.00027532 0.00668053 0.00645634 -0.04642593 -0.00668085 0.00645595 -0.00040122 -0.00650454 0.00628877 -0.00025123 0.00650504 0.00628892 -0.00028948 -0.00039591 2.479e-05 0.00223371 0.00039608 2.426e-05 0.0006732 0.0003264 3.122e-05 0.00052874 -0.00032589 3.415e-05 -0.00023577 -2.908e-05 -0.00832477 0.00635709 3.737e-05 -0.00125057 -7.444e-05 -2.582e-05 0.00656076 0.00636285 2.566e-05 -0.00049974 -6.661e-05 -5.431e-05 0.00502637 0.00639077 4.553e-05 -0.00180978 0.0001325 -3.609e-05 -0.00676473 0.00638092 3.806e-05 5.503e-05 0.00012759 -0.00670704 0.00646596 0.01310437 0.00670119 3.673e-05 0.00602948 0.00036366 0.00627899 -0.00657272 -0.00036508 2.288e-05 0.00026009 0.00648649 0.0064463 -0.00036521 -0.00648098 1.594e-05 0.00671469 -0.00034493 0.00630074 0.00662932 0.00034331 4.157e-05 -0.0002028 最后执行如下命令: find SCF-* -name vasprun.xml|sort -n|thirdorder_vasp.py reap 2 2 2 -2 即可得到三阶力常数文件 FORCE_CONSTANTS_3RD。在 shengbte 文件夹中提供了 FORCE_CONSTANTS_3rd 文件供参考计算结果。 3. 运行 ShengBTE 得到晶格热导率 进入 shengbte 文件夹,里面已经准备好 CONTROL(ShengBTE 的参数文件)、FORCE_CONSTANTS_2ND(二阶力常数文件)、FORCE_CONSTANTS_3RD(三阶力常数文件)这三个文件,使用如下命令运行 ShengBTE 即可得到晶格热导率,其中 Ref 文件夹中给出了计算结果供参考: mpirun -n 10 ShengBTE 四、结尾 对于 ABACUS 中使用平面波(PW)来做 ShengBTE 的计算也是采用以上类似的流程,但要注意使用平面波时,计算三阶力常数的 INPUT 中scf_thr 需要至少小到1e-12。通过计算结果可以发现,PW 和 LCAO 基组计算出的 Si 的晶格热导率是接近的,300 K 下均在 100 W/(m K) 左右,而实验中 Si 在 300 K 的热导率在 150 W/(m K) 附近。这是因为作为教学例子,这里使用的是 2*2*2 的扩胞以及 2*2*2 的 K 点,导致计算结果偏小,实际科研中需要测试扩胞的大小以及 K 点的采样方案来达到收敛的结果。以上就是 ABACUS(3.2.0)+ShengBTE 计算晶格热导率的全部流程,如果有什么问题,欢迎通过邮件联系。 "},"abacus-dpgen.html":{"url":"abacus-dpgen.html","title":"ABACUS+DPGEN 使用教程","keywords":"","body":"ABACUS+DPGEN 使用教程 作者:刘建川,邮箱:liujianchuan2013@163.com 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/06/15 一、介绍 本教程旨在介绍结合 ABACUS(中文名原子算筹,这里基于 ABACUS 3.2.0 版本)和 DPGEN 软件结合生成机器学习 DP 势,这里 ABACUS 扮演了提供第一性原理训练数据的作用。本教程以碳化硅(SiC)材料为案例,并且教大家使用 DPGEN autotest 功能,计算 SiC 的 Equation of State (EOS)和弹性常数等性质。先介绍主要软件和计算平台: DPGEN软件:是一个结合第一性原理软件来自动产生训练数据标签的软件,如果不熟悉 DPGEN 的读者,这里可以推荐大家先阅读 DPGEN 的相关原理文档和说明,熟悉这部分的读者可以跳过: https://docs.deepmodeling.com/projects/dpgen/en/latest/ https://bohrium-doc.dp.tech/docs/software/DP-GEN https://bohrium-doc.dp.tech/docs/software/DP-GEN_init https://bohrium-doc.dp.tech/docs/software/DP-GEN_autotest https://www.sciencedirect.com/science/article/pii/S001046552030045X?via%3Dihub 计算平台:由于本案例通过 Bohrium 平台教学,所以所用到的 machine.json 文件仅限于 Bohrium 平台使用,如需在其他平台上使用,可参考下面网址,修改 machine.json 文件: https://docs.deepmodeling.com/projects/dpgen/en/latest/run/example-of-machine.html 二、准备 1. 案例下载地址 本教程用到的所有输入文件,均可点击这里下载。 (https://gitee.com/mcresearch/abacus-user-guide/tree/master/examples/abacus-dpgen) 此外,在 Linux 下可以采用的下载命令是: git clone https://gitee.com/mcresearch/abacus-user-guide.git 之后进入 /abacus-user-guide/examples/md 目录 或者采用 Github 仓库地址: https://github.com/MCresearch/abacus-user-guide/tree/master/examples/md 下载完之后,应该可以看到三个文件夹: init,run,以及 auto-test init 文件夹:包含用于 dpgen init_bulk 步骤所需的输入文件,用户可参考其设置自己的体系参数。 run 文件夹:包含用于 dpgen run 步骤所需的输入文件,用户可参考其设置自己的体系参数。 auto-test 文件夹:包含用于计算弹性常数等性质的输入文件,用户可参考其设置自己的体系参数。 2. 安装相关软件 这里默认读者已经安装好了 ABACUS 软件,本算例中 ABACUS 计算采用的是数值原子轨道的 LCAO(Linear Combination of Atomic Orbitals)方法,因为一般来说 LCAO 会比平面波效率更高,此外读者也可以把密度泛函理论计算部分改成平面波基矢量(后续会讲到)。 开始之前,请务必安装/更新 dpgen 和 dpdata(用来转换数据)到最新版本: 1. 安装/更新 dpdata pip install --user git+``https://gitee.com/deepmodeling/dpdata.git@devel 2. 安装/更新 dpgen pip install --user git+``https://gitee.com/deepmodeling/dpgen.git@devel 三、结合 DPGEN 生成 DP 数据的流程 DPGEN 使用流程如下,接下来我们将一一展开介绍: 1. 准备赝势和数值原子轨道文件 本例子所需文件有: 模守恒赝势文件,格式为*.upf,也可以使用其他 ABACUS 支持的赝势格式,注意 ABACUS 目前不支持 PAW 方法或者超软赝势。 数值原子轨道文件,格式为*.orb,注意这里的数值原子轨道文件要和赝势文件匹配,也就是数值原子轨道是由指定赝势产生的,关于如何生成数值原子轨道,我们会提供中文教程。 注:在 ABACUS 官网上可以下载到赝势和数值原子轨道文件: http://abacus.ustc.edu.cn/pseudo/list.htm 本例采用的赝势和轨道是: C 的 PBE 模守恒 ONCV 模守恒赝势:C_ONCV_PBE-1.0.upf Si 的 PBE 模守恒 ONCV 模守恒赝势:Si_ONCV_PBE-1.0.upf C 的 PBE 模守恒 ONCV 赝势对应的数值原子轨道:C_gga_9au_100Ry_3s3p2d.orb Si 的 PBE 模守恒 ONCV 赝势对应的数值原子轨道:Si_gga_9au_100Ry_3s3p2d.orb 注:如果是使用平面波基矢量来做密度泛函理论计算,则不需要提供数值原子轨道文件,结合 DPGEN 使用的流程是一致的(仅需要删除调用轨道文件的输入参数即可)。如果采用其他 ABACUS 支持的赝势文件,可自行生成轨道文件(请参考本教程系列的其它相关中文教程). 注:这里 C_gga_9au_100Ry_3s3p2d.orb 的意思是 C 元素、采用 GGA 泛函、轨道截断半径是 9 a.u.(轨道截断半径越大,则 ABACUS 所需求解 Kohn-Sham 方程的时间会越长,而且这个时间对于轨道半径极其敏感,推荐可以测试不同轨道半径,选取合适的、截断半径小的轨道可以加速计算),100 Ry 是推荐的平面波截断值(哪怕用了数值原子轨道,程序里还是会用平面波来做某些物理量的计算,比如模守恒赝势的局域赝势部分),3s3p2d 表示 3 个 s 径向轨道、3 个 p 轨道、2 个 d 轨道。 2. 准备原子体系的结构文件 本步骤所需的描述原子结构的文件有: *.cif 可以从多个渠道下载所需体系的结构文件,本案例主要从 materials project 网站下载 cif 文件,使用的 SiC 对应多个原子构型,主要有 3C、2H、4H、6H 四个构型,采用哪些构型取决于用户所研究的体系和性质,一般可选取所关心的物质温度和压强区间内可能出现的结构。本案例主要采用3C 和 2H构型来演示。 3C-SiC:https://materialsproject.org/materials/mp-8062?formula=SiC 2H-SiC: https://materialsproject.org/materials/mp-7140?_skip=15&formula=SiC 4H-SiC: https://materialsproject.org/materials/mp-11714?formula=SiC 6H-SiC: https://materialsproject.org/materials/mp-7631?formula=SiC 得到了 cif 之后,可以使用下列方法把 cif 转换成 STRU 文件: 1. 安装 ASE-ABACUS 接口: git clone https://gitlab.com/1041176461/ase-abacus.git cd ase-abacus python3 setup.py install 2. 设置环境变量(可选) ABACUS 支持两种基组:平面波(PW)和数值原子轨道(LCAO)。赝势和轨道文件的存放路径可以通过环境变量设置,分别为:ABACUS_PP_PATH 和 ABACUS_ORBITAL_PATH,设置方法如下: PP=${HOME}/pseudopotentials ORB=${HOME}/orbitals export ABACUS_PP_PATH=${PP} export ABACUS_ORBITAL_PATH=${ORB} PW 计算只需要设置 ABACUS_PP_PATH 。 LCAO 需要两个都设置:ABACUS_PP_PATH and ABACUS_ORBITAL_PATH 。 3. CIF 转 STRU from ase.io import read, write from pathlib import Path cs_dir = './' cs_vasp = Path(cs_dir, 'SiC.cif') # 修改为自己的cif文件名 cs_atoms = read(cs_vasp, format='cif') cs_stru = Path(cs_dir, 'STRU') pp = {'Si':'Si_ONCV_PBE-1.0.upf','C':'C_ONCV_PBE-1.0.upf'} # 修改为所对应的赝势文件名 basis = {'Si':'Si_gga_9au_100Ry_3s3p2d.orb','C':'C_gga_9au_100Ry_3s3p2d.orb'} # 修改为所对应的轨道文件名 write(cs_stru, cs_atoms, format='abacus', pp=pp, basis=basis) 运行上述 python 脚本,把 cif 转成 ABACUS 所需的 STRU 文件。 3. 产生初始训练数据 本步骤所需文件有: 原子结构文件:STRU 数值原子轨道文件:*.orb 赝势文件:*.upf 布里渊区 k 点采样:KPT 提交任务的文件:machine.json DPGEN 的输入参数文件:param.json 为每一个构型新建一个名为 init 的文件夹。进入该文件夹后,为每个构型都新建一个单独的文件夹,之后单独运行 dpgen init_bulk 命令,用于产生接下来的 dpgen run 步骤的初始数据集。本案例所提供的初始原子构型为 3C 和 2H 结构,并把赝势文件、轨道文件、STRU 文件放入对应的文件夹里。按照下面链接的案例准备适合自己机器的 machine.json 文件,并分别放入 3C 和 2H 文件夹。 https://docs.deepmodeling.com/projects/dpgen/en/latest/run/example-of-machine.html 本教程所用到的文件可以从 Gitee 下载,修改为符合自己的配置即可。 接下来准备 param.jsion 文件,本步骤最关键的设置也是 param.json 文件设置,案例如下: { \"init_fp_style\": \"ABACUS\", \"stages\": [1,2,3,4], \"cell_type\": \"diamond\", \"super_cell\": [1, 1, 1], \"elements\": [\"Si\",\"C\"], \"from_poscar\": true, \"from_poscar_path\": \"./STRU\", \"potcars\": [\"Si_ONCV_PBE-1.0.upf\",\"C_ONCV_PBE-1.0.upf\"], \"orb_files\": [\"Si_gga_9au_100Ry_3s3p2d.orb\",\"C_gga_9au_100Ry_3s3p2d.orb\"], \"relax_incar\": \"./INPUT_rlx\", \"md_incar\" : \"./INPUT_md\", \"relax_kpt\": \"./KPT\", \"md_kpt\": \"./KPT\", \"md_nstep\": 10, \"scale\": [0.99,1.00,1.01], \"skip_relax\": false, \"pert_numb\": 10, \"pert_box\": 0.03, \"pert_atom\": 0.01, \"deepgen_templ\": \"../generator/template/\", \"coll_ndata\": 5000, \"_comment\": \"that's all\" } init_fp_style 关键字需设置为 ABACUS,如果 from_poscar 为 true,则会读取 from_poscar_path 指定的 STRU 文件,且 cell_type 关键字失效。super_cell 用于括胞,推荐直接使用括胞之后的 STRU 文件,则 super_cell 设置为[1, 1, 1]。括胞一般根据需求而定,使得三个方向的 cell 长度约为 6 埃以上(经验性的)。其中还用到了 *.``upf 和 *.``orb 文件,修改为自己所计算的体系即可。 init_bulk 的基本操作流程分为以下 4 个顺序步骤: 生成初始(平衡)结构:输出文件存储在 00.place_ele。 产生 MD 起始构象:放缩扰动 00.place_ele 中的结构,输出文件存储在 01.scale_pert。 执行 AIMD:取 01.scale_pert 起始构象调用 vasp 执行少步数 AIMD,输出文件存储在 02.md。 整理初始数据:调用 dpdata 提取 02.md 中 AIMD 各 snapshots 的数据作为初始数据,输出文件存储在 02.md。 param.json 中将使用 stages 关键词的取值 1~4 控制以上 4 步的执行,操作中,各步骤(2, 3, 4 在所需前一步输出文件存在的前提下)可独立执行。 其他具体参数含义可参考 dpgen 官网: https://docs.deepmodeling.com/projects/dpgen/en/latest/init/init-bulk-jdata.html 另外,还需准备两个 ABACUS 输入文件 INPUT_rlx 和 INPUT_md。 INPUT_rlx 主要用于优化所下载的结构,如下: INPUT_PARAMETERS #Parameters (1.General) suffix ABACUS calculation cell-relax #Parameters (2.Iteration) ecutwfc 100 scf_thr 1e-6 scf_nmax 100 #Parameters (3.Basis) basis_type lcao #Parameters (4.Smearing) smearing_method gauss smearing_sigma 0.002 #Parameters (5.Mixing) mixing_type pulay mixing_beta 0.3 cal_stress 1 INPUT_md 主要用于产生一定数量的 AIMD 轨迹,用于 DPGEN 迭代的输出数据,如下: INPUT_PARAMETERS #Parameters (1.General) suffix ABACUS calculation md #Parameters (2.Iteration) ecutwfc 100 scf_thr 1e-6 scf_nmax 100 #Parameters (3.Basis) basis_type lcao #Parameters (4.Smearing) smearing_method gauss smearing_sigma 0.002 #Parameters (5.Mixing) mixing_type pulay mixing_beta 0.3 cal_stress 1 #MD chg_extrap second-order md_type 2 md_tfirst 300 md_tlast 300 md_nstep 10 md_tfirst 10 md_tfreq 0.5 注:ABACUS 的 MD 关键字在此 3.2.0新版本有所更改,如果是使用的最新版本,请严格参考手册设置关键字,如md_type在新版本里改为了nvt、npt等形式,而不再用数字(如:2)等: 此外,还需准备一个存放布里渊区 k 点的文件,名为 KPT: K_POINTS 0 Gamma 4 4 4 0 0 0 也可在 INPUT 文件里直接指定 kspacing 参数(注意该参数可选 1 维或者 3 维,如果是表面系统可选 3 维因为真空方向不需要太多 k 点)。 用户可自行根据所研究体系,设置、更改上述参数。 所有以上输入文件准备完毕后,采用如下命令分别对 3C 和 2H 结构运行 dpgen: nohup dpgen init_bulk param.json machine.json 1>log 2>err& 上述命令采用后台提交 dpgen,等所有计算完成之后,dpgen 会自动收集训练 DP 势所需的数据,且转换为 DeePMD-kit 的数据格式,保存在 ./STRU.01x01x01/02.md/sys-0036-0036/deepmd 目录里。 4. 进行数据采样的迭代 run主流程包含一系列迭代,各迭代会根据所选系综在给定的温度、压力或体积等条件下进行 DPMD 采样与筛选,实现同步学习,所有迭代希望能够有效覆盖训练可靠模型所需的势能面上样本空间。每个迭代依次:基于init 准备的初始训练数据与之前迭代积累的训练数据|训练多个新的模型->使用当前的模型进行DPMD采样,根据模型间预测偏差(model-deviation)|挑选候选 snapshot 构象->将本轮候选 snapshot 构象进行第一性原理标定并加入数据集|扩展数据集 。 以上每个迭代中包含的 3 个步骤分别被命名为 00.train,01.model_devi,02.fp,细节如下: 00.train: 使用 init 准备的初始训练数据与之前迭代积累的训练数据,调用 DeepMD-kit 训练多个 (默认 4 个) 模型。模型间的唯一区别来自于初始化神经网络时使用不同的随机数种子。 01.model_devi: 指代 model-deviation。 调用 LAMMPS 使用 00.train 的 1 个模型进行 MD 模拟。对于任一 MD 中 snapshot,模型间预测偏差越大意味着当前模型系综对该 snapshot 构象的精度越低,通过引入模型偏差作为误差判据并设定上下限, 挑选出有希望有效改进模型对 PES 整体预测精度的 snapshot 构象,作为准备加入训练数据集的候选构象。 02.fp: 调用 ABACUS 对 01.model_devi 选取的候选构象进行第一性原理定标(单点计算),并调用 dpdata 收集整理所得数据加入到训练数据集中。 run 执行后,相关文件即存储在....../iter.*(迭代序号)/步骤文件夹内。以上每个迭代中的每个步骤在实现中被分解为 3 个阶段。以 00.train 为例,3 阶段分别对应: 0:make_train ,为训练任务准备脚本;1: run_train,依据机器配置上传文件并执行训练任务;2:post_train,收集整理分析训练任务的结果。01.model_devi 与 02.fp 的实现步骤与之类似,分别使用 3,4,5 及 6,7,8 来标记其阶段。 用输出文件record.dpgen来记录进程已经执行过及当前正在执行的阶段。如进程中断后需要续算,DP-GEN将根据此文件的记录来自动恢复run主进程。用户也可根据需求手动修改record.dpgen中的记录,来控制接下来将执行哪一阶段的任务:例如,删除最后一阶段(可能未执行完成即中断)的记录,并从前一个已完成阶段后恢复任务。可以通过查看record.dpgen文件监控当前任务的执行阶段。 本步骤所需文件有: STRU *.orb *.upf machine.json (可以直接用 dpgen init bulk 里的) param.json dpgen init bulk 产生的初始训练数据 主要步骤如下: 1. 新建一个文件夹,命名为:run,并进入此目录里 2. 在 run 文件夹里面新建 init_conf 和 init_data 文件夹,用于存放 dpgen init bulk 产生的构型和初始训练数据 3. 为了区分不同构型和初始训练数据,在 init_conf 和 init_data 文件夹里新建名为 3C 和 2H 的两个文件夹 4. 拷贝 dpgen init bulk 产生的构型和初始训练数据至 init_conf 和 init_data 文件夹里,如: cp -rf yourPath/init/3C/STRU.01x01x01/02.md/sys-0032-0032 yourPath/run/init_conf/3C cp -rf yourPath/init/2H/STRU.01x01x01/02.md/sys-0036-0036 yourPath/run/init_conf/2H cp -rf yourPath/init/3C/STRU.01x01x01/02.md/sys-0032-0032/deepmd/* yourPath/run/init_data/3C cp -rf yourPath/init/2H/STRU.01x01x01/02.md/sys-0036-0036/deepmd/* yourPath/run/init_data/2H 5. 拷贝 machine.json、*.orb 和 *.upf 文件到 run 文件夹 6. 新建一个 param.json 文件,如下案例: { \"type_map\": [\"Si\",\"C\"], \"mass_map\": [28.085,12.011], \"init_data_prefix\": \"./init_data\", \"init_data_sys\": [ \"3C\", \"2H\" ], \"sys_format\":\"abacus/stru\", \"sys_configs_prefix\": \"./init_conf\", \"sys_configs\": [ [\"3C/sys-0032-0032/scale-1.000/00****/STRU\"], [\"2H/sys-0036-0036/scale-1.000/00****/STRU\"] ], \"_comment\": \" that's all \", \"numb_models\": 4, \"default_training_param\": { \"model\": { \"type_map\": [\"Si\",\"C\"], \"descriptor\": { \"type\": \"se_e2_a\", \"sel\": \"auto\", \"rcut_smth\": 0.5, \"rcut\": 6.0, \"neuron\": [25, 50, 100], \"resnet_dt\": true, \"axis_neuron\": 12, \"seed\": 1 }, \"fitting_net\": { \"neuron\": [240, 240, 240], \"resnet_dt\": false, \"seed\": 1 } }, \"learning_rate\": { \"type\": \"exp\", \"start_lr\": 0.001, \"stop_lr\": 3.5e-8, \"decay_steps\": 2000 }, \"loss\": { \"start_pref_e\": 0.02, \"limit_pref_e\": 2, \"start_pref_f\": 1000, \"limit_pref_f\": 1, \"start_pref_v\": 0.0, \"limit_pref_v\": 0.0 }, \"training\": { \"stop_batch\": 400000, \"disp_file\": \"lcurve.out\", \"disp_freq\": 100, \"numb_test\": 10, \"save_freq\": 1000, \"save_ckpt\": \"model.ckpt\", \"disp_training\": true, \"time_training\": true, \"profiling\": false, \"profiling_file\": \"timeline.json\", \"_comment\": \"that's all\" } }, \"model_devi_dt\": 0.002, \"model_devi_skip\": 1000, \"model_devi_f_trust_lo\": 0.05, \"model_devi_f_trust_hi\": 0.10, \"model_devi_clean_traj\": true, \"model_devi_merge_traj\": true, \"model_devi_jobs\": [ {\"sys_idx\": [0,1], \"temps\":[50, 250, 450, 650], \"press\": [0, 100, 1000, 5000, 10000, 20000, 50000], \"trj_freq\": 10, \"nsteps\": 3000, \"ensemble\": \"npt-tri\", \"_idx\": \"01\"}, {\"sys_idx\": [0,1], \"temps\":[50, 250, 450, 650], \"press\": [0, 100, 1000, 5000, 10000, 20000, 50000], \"trj_freq\": 10, \"nsteps\": 3000, \"ensemble\": \"npt-tri\", \"_idx\": \"02\"} ], \"fp_style\": \"abacus\", \"shuffle_poscar\": false, \"fp_task_max\": 100, \"fp_task_min\": 5, \"fp_accurate_threshold\": 0.999, \"fp_accurate_soft_threshold\": 0.998, \"fp_pp_path\": \"./\", \"fp_pp_files\": [\"Si_ONCV_PBE-1.0.upf\",\"C_ONCV_PBE-1.0.upf\"], \"fp_orb_files\": [\"Si_gga_9au_100Ry_3s3p2d.orb\",\"C_gga_9au_100Ry_3s3p2d.orb\"], \"user_fp_params\":{ \"ntype\": 2, \"symmetry\": 0, \"basis_type\": \"lcao\", \"ecutwfc\": 100, \"scf_thr\": 1e-6, \"scf_nmax\": 100, \"smearing_method\": \"gauss\", \"smearing_sigma\": 0.002, \"mixing_type\": \"pulay\", \"mixing_beta\": 0.3, \"cal_force\": 1, \"cal_stress\": 1, \"kspacing\": 0.08 } } type_map: 用列表方式设置了体系元素,注意顺序要和 STRU 结构文件里一致 mass_map: 记录了对应的原子质量,和 type_map 对应 init_data_prefix:指定初始训练集的位置所在目录,如:./init_data init_data_sys:定位到初始训练集的具体目录,用列表调用多个,即:./init_data/2H sys_format:指定为 ABACUS 计算的结构,即:abacus/stru sys_configs_prefix:指定探索步所需调用的结构目录,如:./init_conf sys_configs:指定具体的某个构型的目录,用列表调用多个,即:./init_conf/3C/sys-0032-0032/scale-1.000/00****/STRU。其中 00为通配符,dpgen 会遍历 00所有文件夹的 STRU 文件 model_devi_f_trust_lo 和 model_devi_f_trust_hi:可由“init 数据” 中力绝对值的平均值,然后取该值的 20%-50%,设置成 trust level 的上下限。可通过以下 python 脚本计算:(注意指定初始数据位置) import dpdata import numpy as np do06=dpdata.Labeledsystem(\"./\",\"deepmd/raw\") forces = np.absolute(d006[\"forces\"]) af = np.average(forces) f_trust_lo = af*0.2 f_trust_hi = af*0.5 print(f_trust_lo,f_trust_hi) 如果体系温度升高后力的幅度变大,trust level 也要增大设置 model_devi_jobs 里面每一行代表一轮,每轮设置参数为 LAMMPS 进行 MD 模拟的参数 fp_style 指定,使用 ABACUS 进行 SCF 计算 user_fp_params 里面记录 ABACUS 做 SCF 所需的参数 其他参数含义见:https://docs.deepmodeling.com/projects/dpgen/en/latest/run/index.html 1. 准备好所有输入文件之后,运行命令: nohup dpgen run param.json machine.json 1>log 2>err& 为后台提交,等待迭代计算完成即可。 2. 实时监测每轮的 accurate 数据,在 dpgen.log 文件里有记录 1)模型精度是判断每个迭代中的训练是否收敛的重要指标。 2)掌握训练策略有利于快速迭代和收敛。 3)经验性:一般体系在 5-8 轮迭代内会上升到 80% 以上,若没有提升,如下方法排查: a. 检查是否是探索步已经崩溃了,收集了许多不合理的结构 b. 检查train的loss是否是收敛 c. dp test查看fp数据是否偏差很大,或者有不合理的情况 d. 检查是否是温度设置过高而导致的结构变形严重 e. 及时调整trust level,体系温度升高后力的幅度变大,trust level也要增大设置 3. 一些经验 探索步已经崩溃的解决方案 原因:DPMD 跑崩的情况一般发生在 训练温度 高于 熔点,而这个温区的结构是从“有序”到“无序态”的 ,其构型易变,采样空间增大,导致训练难度增加。DPMD 跑崩表明当前势函数对这类构型描述较差,大概率是因为前期数据集中这类构型采集的较少;特别是无序态结构的原子距离变小。 策略:在熔点附近的 参数设置需要平滑缓慢对待,增加“MD 轨迹保存频率”;缩短“MD 模拟步数”或降低“MD 步长”,增加迭代次数,其 DP 训练势函数稳定后再延长 MD 模拟步数。 ABACUS 收敛性测试 对每种体系一定要先做各个参数的收敛性测试,特别是:K 点、能量截断,也可测试 scf_thr 降低计算量。另外,对于赝势文件也一定要做性质测试,看是否能够正确描述目标体系的性质 每隔几轮做一次 dp test 初始数据得到后,第一轮生成了 dp 势之后,一定要检查 trian 步骤收敛情况和做 dp test。dp test 用如下命令: dp test -m frozen_model.pb -s ./collect_data -n 2000 -d out.out frozen_model.pb 为生成的 4 个模型中的某一个,2000 为 collect_data 里面单个结构的总数。out.out 会生成 out.e.out out.f.out out.f.out 三个偏差数据文件,用于作图判断模型优劣屏幕会输出每个构型力、能量等误差平均值,也可用*.out 文件做出 DP 和 DFT 偏差图,如: 经验性的,力的精度在 1e-2 量级,能量精度在 5e-3 量级,说明模型比较好。 四、计算材料 EOS 和弹性常数的流程 本例子里提供了一个 auto-test 文件夹,进入之后可以结合 DPGEN 的 auto-test 命令计算材料 EOS、弹性常数的流程 auto-test 的详细流程,可以从如下网页教程查阅: https://bohrium-doc.dp.tech/docs/software/DP-GEN_autotest 这里贴上如何使用 ABACUS 来计算材料 EOS、弹性常数的相关输入文件 relaxation.json: { \"structures\": [\"conf\"], \"interaction\": { \"type\": \"abacus\", \"incar\": \"./INPUT\", \"potcar_prefix\":\"./\", \"potcars\": {\"Si\": \"Si_ONCV_PBE-1.0.upf\",\"C\": \"C_ONCV_PBE-1.0.upf\"}, \"orb_files\": {\"Si\":\"Si_gga_9au_100Ry_3s3p2d.orb\",\"C\":\"C_gga_9au_100Ry_3s3p2d.orb\"} }, \"relaxation\": { \"cal_type\": \"relaxation\", \"cal_setting\":{ \"input_prop\": \"./INPUT\" } } } property.json: { \"structures\": [\"conf\"], \"interaction\": { \"type\": \"abacus\", \"incar\": \"./INPUT\", \"potcar_prefix\":\"./\", \"potcars\": {\"Si\": \"Si_ONCV_PBE-1.0.upf\",\"C\": \"C_ONCV_PBE-1.0.upf\"}, \"orb_files\": {\"Si\":\"Si_gga_9au_100Ry_3s3p2d.orb\",\"C\":\"C_gga_9au_100Ry_3s3p2d.orb\"} }, \"properties\": [ { \"type\": \"eos\", \"vol_start\": 0.9, \"vol_end\": 1.1, \"vol_step\": 0.02 }, { \"type\": \"elastic\", \"norm_deform\": 1e-2, \"shear_deform\": 1e-2 } ] } INPUT: INPUT_PARAMETERS calculation cell-relax symmetry 0 basis_type lcao ecutwfc 100.0 scf_thr 1.0e-06 scf_nmax 100 smearing_method gauss smearing_sigma 0.002 mixing_type pulay mixing_beta 0.3 cal_force 1 cal_stress 1 kspacing 0.10 在当前目录建立一个 conf 文件夹,把 STRU 文件放进去,依次运行下面命令: dpgen autotest make relaxation.json nohup dpgen autotest run relaxation.json machine.json & dpgen autotest post relaxation.json dpgen autotest make property.json nohup dpgen autotest run property.json machine.json & dpgen autotest post property.json 计算完成之后,会在 conf/elastic_00/result.out 文件里记录弹性常数、模量等信息,conf/eos_00/result.out 里记录 EOS 等数据。 以上即为采用 ABACUS 3.2.0 和 DPGEN 软件结合的介绍,若有任何问题,欢迎给我们反馈。 "},"abacus-libri.html":{"url":"abacus-libri.html","title":"ABACUS+LibRI 做杂化泛函计算教程","keywords":"","body":"ABACUS+LibRI 做杂化泛函计算教程 作者:梁馨元,邮箱:2201111875@stu.pku.edu.cn 审核:林霈泽,邮箱:linpeize@sslab.org.cn 最后更新时间:2023/08/21 一、介绍 杂化泛函(Hybrid Functional)是指在密度泛函理论框架中的交换关联项里面加入一部分的 Hartree Fock (简称 HF)的精确交换能。开源密度泛函理论软件 ABACUS 可以结合另一款国产开源软件 LibRI 软件进行杂化密度泛函计算,目前仅支持在数值原子轨道基组下使用该功能。可以通过 dft_functional 参数指定所使用的杂化泛函类型,如可以选择 hf (Hartree-Fock), pbe0(PBE0), hse(HSE06)以及 scan0 杂化泛函。本教程以 HSE 杂化泛函为例,介绍如何在 ABACUS 里调用 LibRI 做杂化泛函自洽迭代、求力和应力以及结构优化。 注 1:使用 ABACUS+LibRI 做杂化泛函计算时,最大并行核数是N_a^4N_K^3,其中N_a是原子个数,N_k是 k 点个数。计算资源超出时可以运行,但会造成浪费。 注 2:使用 ABACUS+LibRI 做杂化泛函计算时,因为内存消耗比较大,推荐给定计算资源的前提下,先尽量使用 OpenMP 多线程并行,再考虑使用 MPI 多进程并行。 二、杂化泛函的使用 1. ABACUS 编译准备 如果要在 ABACUS 中使用杂化泛函进行计算,需要在编译 ABACUS 的时候也编译 Libxc、LibRI 和 LibComm 三个软件包,具体请见线上文档 Advanced Installation Options ‒ ABACUS documentation。 注意在链接 LibRI、LibComm 时如果报错未定义的引用等,可以先注意检查 ABACUS 源代码下 deps 文件夹下是否包含 LibRI、LibComm 两个文件夹。如果未包含这两个文件夹,或文件夹中无内容,在本地Github仓库中可以尝试如下两条语句,以获取这两个子仓库内容: git submodule init git submodule update --remote --recursive 2. 采用杂化泛函进行电子自洽迭代计算 本教程在 Gitee 上准备了一个硅晶体使用杂化泛函做自洽计算(SCF)的例子(Gitee 的下载链接),以下是 INPUT 文件及相关的参数。由 dft_functional 设置为 hse 可知,该例子使用的杂化泛函为 HSE 泛函。KPT 文件取的是 444 的布里渊区 k 点。 INPUT_PARAMETERS calculation scf basis_type lcao ntype 1 nbands 8 ecutwfc 60.0 scf_nmax 100 dft_functional hse scf_thr 1e-7 杂化泛函相关的完整参数列表及解释见 Full List of INPUT Keywords / exact-exchange ‒ ABACUS documentation。这里再进行简单概述: 泛函相关参数: exx_hybrid_alpha:杂化泛函中加入的 HF 精确交换能(Fock 交换能)的比例α,即有E_x=αE_{x}^{HF}+(1-α)E_{x}^{LDA/GGA}。如果 dft_functional 设置为 hf,则默认值为1。目前其他杂化泛函的默认值是0.25。但是,如果是 SCAN0 泛函,有的文献取的是 0.1,所以需要根据你想取的值进行设定[1]。 exx_hse_omega:为 HSE 泛函中的区间分割参数(range-separation parameter)\\omega,即有\\frac{1}{r}=\\frac{erfc({\\omega}r)}{r}+\\frac{erf({\\omega}r)}{r}。默认值为0.11(bohr^{-1}),此时为 HSE06 泛函[2]。 exx_lambda:在 basis_type 设置为 lcao_in_pw 的情况下,用于补偿使用 lcao_in_pw 方法评估精确交换能时 G=0 处的发散点。默认值为0.3。 exx_real_number:该参数设定为 True 时,强制 LibRI 使用 double 数据类型,当设定为 False 时,强制 LibRI 使用 complex 数据类型。当gamma_only=1 时,默认为 True,gamma_only=0 时默认为 False。 循环相关参数: exx_separate_loop:ABACUS 提供了两种迭代方法来评估精确交换能E_{exx}。当 exx_separate_loop 设置为False时:采用单层循环,即先进行 GGA 循环,然后进行 Hybrid 循环,在该过程中,使用电子迭代来更新E_{exx}对应的哈密顿量H_{exx}。当 exx_separate_loop 设置为True时:采用双层循环,在内层循环中,进行自洽迭代并更新密度矩阵,在外层循环中,根据在内层循环中收敛的密度矩阵来计算H_{exx}。默认值为 True,即采用双层循环计算。单层循环有利于难以自洽收敛的体系达到收敛,但会显著增加内存消耗。 exx_hybrid_step:在 exx_separate_loop 设置为 True 的情况下,外层循环的最大迭代步数。默认值为100。 exx_mixing_beta:在 exx_separate_loop 设置为 True 的情况下,内层循环每次迭代时,密度矩阵混合的 mixing_beta 取值,默认为1.0。 exx_pca_threshold:为了加速四中心积分\\langle ik\\vert\\ jl\\rangle的计算,ABACUS 采用 LRI 方法,将原子轨道的乘积在辅助基函数(ABF)的基础上展开,即\\Phi_i\\Phi_j \\approx \\sum_aC_{ij}^aP_a,并利用 PCA 减小辅助基函数(ABF)的大小(即P_a个数)。阈值越大,ABF 的数目越少,计算速度越快,计算精度越低。一个相对安全的值是1e-4,也是默认值。 exx_ccp_rmesh_times:此参数决定计算 Columb 势所需的截断半径比原子轨道的截断半径大多少倍。对于 HSE 泛函,设置为 1 就足够了。但是对于 PBE0,必须使用一个大得多的数字。当使用 HSE 泛函时,默认值为1.5,其他情况下默认值为5。 张量筛选相关参数: 针对杂化泛函计算过程中的物理量进行筛选可以加速计算。具体来说,exx_c_threshold、exx_v_threshold、exx_dm_threshold、exx_c_grad_threshold、exx_v_grad_threshold 分别是针对C_{ij}^a、V_{ab}=\\langle P_a\\vert\\ P_b\\rangle、密度矩阵、\\nabla C_{ij}^a、\\nabla V_{ab}。阈值越大,筛掉的张量越多,计算速度越快,计算精度越低。具体请查看完整 INPUT 参数文档。 Cauchy-Schwartz 不等式相关参数: exx_cauchy_threshold:在实际中,Fock 交换矩阵是稀疏的,利用 Cauchy-Schwartz 不等式,我们可以在进行显式求值之前找到每个矩阵元素的上界。小于 exx_cauchy_threshold 的值将被截断。阈值越大,筛掉的张量越多,计算速度越快,精度越低。一个相对安全的值是1e-7,也是默认值。不等式算法参见参考文献[3]。 exx_cauchy_force_threshold、exx_cauchy_stress_threshold与exx_cauchy_threshold类似,区别在于它们分别针对的是求力、应力计算中的 Fock 交换矩阵元。 opt_orb 相关参数:当dft_functional设置为 opt_orb 时使用,opt_orb 参考文献[4]。本功能仅用于生成 opt 辅助基组,不进行杂化泛函计算。 exx_opt_orb_lmax:球贝塞尔函数的最大角动量 L 值,opt-ABF 的径向部分用球贝塞尔函数的线性组合生成。 exx_opt_orb_ecut:球贝塞尔函数展开的截断,在优化 opt-ABF 的时候采用的是球贝塞尔函数基组。 exx_opt_orb_tolerence:解球贝塞尔函数零点时的阈值。 3. 杂化泛函计算代价 杂化泛函的计算精度高,与此同时它的计算代价也比较高。在 ABACUS 的输入参数文件 INPUT 中,若 exx_separate_loop 参数设为 True(默认),仅在 SCF 步骤中就涉及两层循环。每次内层循环完成,外层循环往前推进一步时,屏幕输出 Updating EXX and rerun SCF。 一次 SCF 需要的时间至少是以上两个循环涉及的单次电子迭代时间之和。对于单次电子迭代所需时间,在此提出一些已有的经验。以一步电子迭代的时间为衡量尺标,使用 DZP 基组,CPU 型号为 Intel(R) Xeon(R) Gold 6132 CPU @ 2.60GHz,使用 4 核计算一个水分子为 0.6s 左右,使用 14 个核计算 32 个水分子为 0.8s 左右,使用 14 个核计算 64 个水需要 1.9s 左右。 若将 exx_separate_loop 参数设为 False,即使用单层循环时,首先会进行 GGA 迭代直到自洽收敛,然后屏幕输出 Entering 2nd SCF, where EXX is updated,进行 Hybrid 迭代,此时每进行一次电子步得到新的密度后,都会更新一次精确交换能。以一步电子迭代 + 更新精确交换能的时间为衡量尺标,使用 DZP 基组,CPU 型号为 Intel(R) Xeon(R) Gold 6132 CPU @ 2.60GHz,使用 4 核计算一个水分子为 0.7s 左右,使用 14 个核计算 32 个水分子为 115s 左右,使用 14 个核计算 64 个水需要 330s 左右。对于更大的体系,如 2048 个 Si 原子的晶体,使用 DZP 基组,CPU 型号为 Intel(R) Xeon(R) Silver 4310 CPU @ 2.10GHz,用一个节点(56 核)算时,PBE 下一步电子迭代大概需要 380s,而 HSE 一步电子迭代 + 更新精确交换能大概需要 1680s。 在进行杂化泛函计算时推荐尽量使用多线程计算(OpenMP),此时内存开销相对较小,计算速度相对较快。 三、使用杂化泛函做结构优化 1. 数据准备 在 Gitee 上我们准备了一个简单的使用杂化泛函做结构优化的例子。该例子是在 LCAO 基组下,使用 HSE 泛函,优化单个水分子的结构。文件夹中 log.ref 是使用 3.2.1 版本的 ABACUS 软件包,v0.1.0 版本的 LibRI 和 LibComm 计算所得的屏幕输出。 2. 输入文件 准备计算所需的 INPUT 文件、STRU 文件、KPT 文件,以及 H、O 原子对应的数值原子轨道文件。其中 INPUT 文件如下。注意该文件中指明了计算类型为 relax,即不对晶胞做优化(cell relax),只对原子位置做优化(relax)。更多结构优化类型请看文档 Geometry Optimization ‒ ABACUS documentation。 INPUT_PARAMETERS calculation relax basis_type lcao ntype 2 ecutwfc 60.000000 scf_nmax 100 gamma_only 1 dft_functional hse relax_nmax 100 scf_thr 1e-6 force_thr_ev 1e-2 在该例子中,结构优化包括多个离子步,每个离子步中都要做一次 SCF。由 INPUT 文件可知,SCF 收敛的标准由 scf_thr=1e-6 指定,或达到 SCF 的最大步数 scf_nmax=100,并计算受力。根据上一个离子步计算得到的受力,计算下一个离子步的原子位置,计算收敛的标准此时为 force_thr_ev=1e-2,或达到离子步的最大步数 relax_nmax=100。STRU 文件如下,可见在结构弛豫步骤中,三个原子都可以移动。 ATOMIC_SPECIES O 16.00 O_ONCV_PBE-1.0.upf H 1.00 H_ONCV_PBE-1.0.upf LATTICE_CONSTANT 1 LATTICE_VECTORS 28 0 0 0 28 0 0 0 28 ATOMIC_POSITIONS Direct O #label 0 #magnetism 1 #number of atoms 0.677639488918 0.5227809096584 0.232500040128 m 1 1 1 H #label 0 #magnetism 2 #number of atoms 0.641808457616 0.5785821615863 0.228644198512 m 1 1 1 0.708889637644 0.5204300746076 0.175087721492 m 1 1 1 NUMERICAL_ORBITAL O_gga_6au_60Ry_2s2p1d.orb H_gga_6au_60Ry_2s1p.orb 3. 结果 结构弛豫(relax)后的原子结构可见 OUT.ABACUS/STRU_ION_D。由输出文件可知,即使该例子中采用了相对稳定的构型,且 scf_thr 仅设为 1e-6,使用 HSE 做结构弛豫的计算代价仍然很高,使用 6 个核(Intel(R) Xeon(R) Gold 6132 CPU @ 2.60GHz)计算需要 5 分钟左右。 四、参考文献 [1] Staroverov V N, Scuseria G E, Tao J, et al. Comparative assessment of a new nonempirical density functional: Molecules and hydrogen-bonded complexes[J]. The Journal of chemical physics, 2003, 119(23): 12129-12137. [2] Aliaksandr V. Krukau, Oleg A. Vydrov, Artur F. Izmaylov, Gustavo E. Scuseria; Influence of the exchange screening parameter on the performance of screened hybrid functionals. J. Chem. Phys. 14 December 2006; 125 (22): 224106. [3] Lin P, Ren X, He L. Efficient hybrid density functional calculations for large periodic systems using numerical atomic orbitals. Journal of Chemical Theory and Computation, 2021, 17(1): 222–239. [4] Lin P, Ren X, He L. Accuracy of localized resolution of the identity in periodic hybrid functional calculations with numerical atomic orbitals[J]. The Journal of Physical Chemistry Letters, 2020, 11(8): 3082-3088. "},"abacus-candela.html":{"url":"abacus-candela.html","title":"ABACUS+Candela 使用教程","keywords":"","body":"ABACUS+Candela 使用教程 作者:陈涛,邮箱:chentao@stu.pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/08/23 一、介绍 本教程旨在介绍采用 Candela 分析 ABACUS(基于 3.2.4 版本)分子动力学轨迹,计算径向分布函数(Radial Distribution Function,简称 RDF),静态结构因子(Static Structure Factor,简称 SSF),离子-离子动态结构因子(Ion-ion Dynamic Structure Factor,简称 DSF)以及均方差位移(Mean Square Displacement,简称 MSD)流程。 上述性质的具体描述可以参考:Qianrui Liu et al 2020 J. Phys.: Condens. Matter 32 144002,径向分布函数(RDF)见文中公式(12),静态结构因子(SSF)见公式(13),离子-离子动态结构因子(DSF)见公式(15,16,17)以及均方差位移(MSD)见公式(18)。 Candela 全称 Collection of ANalysis DEsigned for Large-scale Atomic simulations,目前支持分析 QE、ABACUS、LAMMPS 和 VASP 的分子动力学轨迹,Github 主页:https://github.com/MCresearch/Candela 二、准备 1. 下载并安装 Candela git clone https://github.com/MCresearch/Candela.git cd Candela make -j4 #使用intel oneapi编译器 若使用 Intel Oneapi 编译器,按照上述流程操作,在编译完成后即可在 bin 目录下看到 candela 可执行文件 若使用其他编译器,需要按照 Candela 目录下 Makefile.vars 修改相应的 CXX 2 下载例子 可以从 Gitee 上下载。在网页右侧点击克隆/下载-> 下载 ZIP 得到算例,或者在 linux 终端执行如下命令得到算例: git clone https://gitee.com/mcresearch/abacus-user-guide.git 下载完成后解压,之后进入 abacus-user-guide/examples/candela 文件夹 算例中包含 RDF、SSF、DSF、MSD 四个文件夹和 MD_dump 文件。其中 MD_dump 是 32 原子的铝的 MD 轨迹 三、流程 1 计算径向分布函数 进入 RDF 文件夹,INPUT 文件即为 Candela 的输入文件,具体如下: calculation pdf geo_in_type ABACUS geo_directory ../MD_dump geo_1 0 geo_2 100 geo_interval 2 geo_ignore 50 geo_out Al_rdf.txt ntype 1 natom 32 rcut 2.3 dr 0.01 以上参数在 Candela 的线上文档中均有详细说明,这里再进行简单概述: calculation:设置为 pdf(Pair Distribution Function)即计算径向分布函数 geo_in_type:读取的 MD 轨迹的格式,目前支持分析 pw.x(QE2),cp.x(QE),ABACUS(ABACUS)、LAMMPS(LAMMPS)和 VASP(VASP) geo_directory:MD 轨迹的位置 geo_1:MD 轨迹起始的索引 geo_2:MD 轨迹结束的索引 geo_interval:Candela 读取 MD 轨迹的间隔 geo_ignore:需要跳过的 MD 轨迹帧数 geo_out:输出的文件名,默认为 result.dat ntype:原子种类 natom:原子数 rcut:计算 RDF 的截断半径,一般取晶格的一半,单位为 Angstrom dr:计算 RDF 的 r 的间隔,单位为 Angstrom 执行如下命令: mpirun -n 2 candela 即可得到 RDF,输出到 Al_rdf.txt,其中第一列为 r,单位为 Angstrom,第二列即为对应的 RDF,第三列为对第二列积分的结果。 2 静态结构因子 进入 SSF 文件夹,INPUT 文件具体如下: calculation ssf geo_in_type ABACUS geo_directory ../MD_dump geo_1 0 geo_2 100 geo_interval 2 geo_ignore 50 ssf_out Al_ssf.txt ntype 1 natom 32 struf_dgx 2.5133 struf_dgy 2.5133 struf_dgz 2.5133 struf_ng 6 以上参数在 Candela 的线上文档中均有详细说明,这里再进行简单概述: calculation:设置为 ssf,即计算静态结构因子 ssf_out:输出的文件名 struf_dgx:倒空间中的间隔,一般取 2\\pi/a,其中a为x方向的晶格长度,单位为\\mathrm{Angstrom^{-1}} struf_dgy:一般取 2\\pi/b,其中b为y方向的晶格长度,单位为\\mathrm{Angstrom^{-1}} struf_dgz:一般取 2\\pi/c,其中c为z方向的晶格长度,单位为\\mathrm{Angstrom^{-1}} struf_ng:上述倒空间中的间隔的数量 执行如下命令: mpirun -n 2 candela 即可得到 SSF,输出到 Al_ssf.txt(原始的计算结果)以及 sm-Al_ssf.txt(平滑的计算结果),其中第一列为 q,单位为\\mathrm{Angstrom^{-1}},第二列即为对应的 SSF。 3 离子-离子动态结构因子 进入 DSF 文件夹,离子-离子动态结构因子需要对中间散射函数(Intermediate Scattering Function)进行傅里叶变换得到,因此需要先计算中间散射函数,INPUT 文件具体如下: calculation isf2 geo_in_type ABACUS geo_directory ../MD_dump geo_1 50 geo_2 100 geo_interval 1 isf_outfile isf.txt ntype 1 natom 32 isf_nt1 11 isf_nt2 40 dt_snapshots 0.00006 isf_target_q 2.51 isf_dgx 2.5133 isf_dgy 2.5133 isf_dgz 2.5133 isf_ngx 6 isf_ngy 6 isf_ngz 6 以上参数在 Candela 的线上文档中均有详细说明,这里再进行简单概述: calculation:设置为 isf2,即计算中间散射函数 isf_outfile:输出的文件名 isf_nt1:中间散射函数的时间长度 isf_nt2:用于平均中间散射函数的时间长度,注意需要控制 interval*(nt1+nt2) dt_snapshots:MD 轨迹每一帧之间的时间步长,单位为 ps isf_target_q:中间散射函数计算的目标 q,单位为\\mathrm{Angstrom^{-1}} isf_dgx:倒空间中的间隔,一般取 2\\pi/a,其中a为x方向的晶格长度,单位为\\mathrm{Angstrom^{-1}} isf_dgy:一般取 2\\pi/b,其中b为y方向的晶格长度,单位为\\mathrm{Angstrom^{-1}} isf_dgz:一般取 2\\pi/c,其中c为z方向的晶格长度,单位为\\mathrm{Angstrom^{-1}} isf_ngx:上述倒空间中 x 方向的间隔的数量 isf_ngy:上述倒空间中 y 方向的间隔的数量 isf_ngz:上述倒空间中 z 方向的间隔的数量 执行如下命令: mpirun -n 2 candela 即可得到 ISF,输出到 isf.txt,其中第一列为时间,单位为 ps,第二列即为对应的 ISF。 接着执行如下命令得到离子-离子动态结构因子,其中PathtoCandela指的是Candela的下载目录: python PathtoCandela/examples/e3_dsf/onedsf.py 0.00006 0.0006 其中第一个参数 0.00006 = dt_snapshots * geo_interval,为 ISF 的时间步长,单位为 ps;第二个参数 0.0006,为对 ISF 做傅里叶变换的总时长,单位为 ps。这里 onedsf.py 默认读取 isf.txt,并输出到 dsf.txt,其中第一列为\\hbar \\omega,单位为 meV,第二列即为对应的 DSF。 4 均方差位移 进入 MSD 文件夹,INPUT 文件具体如下: calculation msd_multiple geo_in_type ABACUS geo_directory ../MD_dump geo_1 0 geo_2 100 geo_interval 1 geo_ignore 50 ntype 1 natom 32 msd_n 2 msd_t0 0.003 msd_t 0.0015 msd_dt0 0.0015 msd_dt 0.00006 msd_natom 32 以上参数在 Candela 的线上文档中均有详细说明,这里再进行简单概述: calculation:设置为 msd_multiple,即计算均方差位移 msd_n:计算均方差位移的段数,目的是将 MD 轨迹分成若干段,分别计算均方差位移 msd_t0:计算均方差位移的起始时间,单位为 ps msd_t:每段均方差位移的时长,单位为 ps msd_dt0:两段均方差位移起始位置的间隔,单位为 ps。若设置等于 msd_t,则每段均方差位移之间的时间距离为 0 msd_dt:获取的 MD 轨迹每一帧之间的时间步长(等于geo_interval * dt,其中 dt 为 MD 轨迹每一帧之间的时间步长),单位为 ps msd_natom:需要设置为计算的原子数 执行如下命令: mpirun -n 2 candela 即可得到 MSD,输出到 MSD_each.txt 和 MSD_total.txt。其中 MSD_each.txt 第一列为时间,单位为 ps,第二列到最后一列即为对应的每段的 MSD,单位为\\mathrm{Angstrom^{2}};MSD_total.txt 第一列为时间,单位为 ps,第二列为平均的每段的 MSD,单位为\\mathrm{Angstrom^{2}}。 "},"abacus-news.html":{"url":"abacus-news.html","title":"ABACUS 新闻稿整理","keywords":"","body":"ABACUS 新闻稿整理 整理人:陈涛,邮箱:chentao@stu.pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/08/01 标题 链接 日期 ABACUS开发者大会 \\ 聚焦国产密度泛函理论开源软件的进步与挑战 https://mp.weixin.qq.com/s/EX5WcKtVucRbY8DIvj3PyQ 2023/08/01 ABACUS 3.3 发布:自动化测试工作流赋能高效研发,为代码质量保驾护航 https://mp.weixin.qq.com/s/IelmHC-Ck4-Stsagu_7HUA 2023/07/13 国产开源软件专题研讨会——第三届 ABACUS 开发者会议第三轮通知 https://mp.weixin.qq.com/s/z9_NrGlciHwKSHwLPZrGvA 2023/07/11 LibRI:携手 DeepModeling 社区,助力超越常规 DFT 方法的高阶方法计算 https://mp.weixin.qq.com/s/xblxgWlGMdy7OcI1qMZ4Uw 2023/05/26 ABACUS 3.2 发布:支持 Hefei-NAMD 接口,全面提升代码稳定性和易用性 https://mp.weixin.qq.com/s/lB9Q3JiSuMmipkhd2-_ylA 2023/04/01 ABACUS 还能干这个?探索准一维材料碳纳米管中的无序超均匀性 https://mp.weixin.qq.com/s/VTf67VFAW0pVBMMnAKjBUg 2023/03/07 ABACUS 3.1 发布,支持平面波基组下的 GPU 高效计算,发布固液界面计算新功能 https://mp.weixin.qq.com/s/D8gcQb0bikMdgizLsbvCfQ 2023/01/01 探索 AI+DFT 最前线,「原子算筹」ABACUS 3.0 重磅发布! https://mp.weixin.qq.com/s/NJWbv96nF1wyjPb19NiE1Q 2022/10/02 探索 AI+DFT 最前线,「原子算筹」ABACUS 3.0 重磅发布! https://mp.weixin.qq.com/s/2YGVyNXMGL6S_MAyNhMADw 2022/10/01 ABACUS 3.0:共建 AI 辅助的新一代电子结构算法平台 https://mp.weixin.qq.com/s/qWQGGkwHMMDeTFP1kLAiCA 2022/10/01 ABACUS 新进展:用混合随机密度泛函理论方法模拟极端高温物质电子性质 https://mp.weixin.qq.com/s/oOF-Zel5ufqUx8ahZ0mpcw 2022/09/20 以合作促发展:共建国产密度泛函理论开源软件 ABACUS https://mp.weixin.qq.com/s/TyQe1JwnswHMvPIdG5bDmw 2022/09/14 ABACUS 新进展:能带反折叠(band unfolding)方法及相关应用 https://mp.weixin.qq.com/s/cPf6nxXihtprnISUXBmbYw 2022/07/22 v2.3 来了!ABACUS 小步快跑,重大升级,更快更稳更好用! https://mp.weixin.qq.com/s/WR6nszXCe_mooz8nZxfg5A 2022/07/01 ABACUS 新进展:用密度泛函理论模拟千原子以上半导体电极表面反应 https://mp.weixin.qq.com/s/M0R3WdrpcPtVV68rlsNZuQ 2022/06/21 DeePKS+ABACUS:构建高精度第一性原理计算与机器学习势函数的桥梁 https://mp.weixin.qq.com/s/DXrE5zNHtjQw813Ho0OBIQ 2022/06/13 ABACUS 2.2 版本介绍 https://mp.weixin.qq.com/s/idmkOuyAyeoLvof8ABbHwg 2022/04/08 涓流汇沧海,积篑成丘山:一位科学家与 ABACUS 的十五年 https://mp.weixin.qq.com/s/Alqgy3mkzlRTzQUjbRsZug 2021/09/28 ABACUS :携手 DeepModeling,做源自中国、开源开放的 DFT 软件 https://mp.weixin.qq.com/s/Fx5jx99g9PVjgnLAsOyQ9Q 2021/09/22 "},"abacus-contribute.html":{"url":"abacus-contribute.html","title":"如何贡献ABACUS使用教程","keywords":"","body":"如何贡献ABACUS使用教程 一、明确教程格式 第一行,写作者姓名,单位,联系方式(例如Github ID或者邮箱),如果不愿意透露作者信息,也可以不写 第一部分“介绍”:本文档教程要展示的例子、要教授的内容有哪些,相关知识可以给一些参考文献。 第二部分“准备”:介绍输入文件需要哪些,最好是能够提供输入文件的下载(例如网上github仓库),或者直接贴上输入文件 第三部分“流程”:最好通过图文结合的方式,一步步的介绍每一步的命令,能得到什么结果。 第四部分“结语”:对这个功能使用需要注意的地方,或者可以应用的场景都可以给与相关介绍 二、投稿 写好教程,检查无误后,AISI内部直接把稿件发给陈默涵老师(邮箱mohanchen@pku.edu.cn),或者向DeepModeling社区(deepmodeling@deepmodeling.com)投稿,审核通过后会加入到“ABACUS使用教程汇总” "}}
\ No newline at end of file
+{"./":{"url":"./","title":"ABACUS使用教程","keywords":"","body":"ABACUS使用教程 一、介绍 ABACUS(Atomic-orbtial Based Ab-initio Computation at UStc,中文名原子算筹)是国产开源密度泛函理论软件,相关介绍 ABACUS 的新闻可在ABACUS 新闻稿整理查看,以下是一些常用地址: ABACUS 在 DeepModeling 社区中的 GitHub 仓库地址为: https://github.com/deepmodeling/abacus-develop ABACUS 的 Gitee 镜像仓库地址为: https://gitee.com/deepmodeling/abacus-develop ABACUS 网站访问: http://abacus.ustc.edu.cn/ 文档(包括安装方法、输入输出参数介绍、功能介绍、算例介绍、开发者须知等): https://abacus.deepmodeling.com/en/latest/。 本教程系列旨在帮助新手用户入门了解 ABACUS 的使用。秉着开源软件的理念,本文档是由开源社区的老师同学们贡献所成。如果你也想贡献一份文档,我们十分欢迎,请参考如何贡献ABACUS使用教程 二、ABACUS基本操作教程 ABACUS的编译介绍 官方编译教程 知乎上用户提供的ABACUS 3.0安装教程 编译无MPI的ABACUS 曙光DCU平台编译教程:ABACUS 在曙光 DCU 集群上的编译与使用 ABACUS建模介绍 准备晶胞和原子位置等信息的文件STRU:如何转换STRU的格式 准备赝势: 模守恒赝势生成方法简介 数值原子轨道基组生成教程: 数值原子轨道(一):ABACUS 中的数值原子轨道命名和使用方法 数值原子轨道(二):生成给定模守恒赝势的数值原子轨道 数值原子轨道(三):产生高精度数值原子轨道 Kohn-Sham密度泛函理论 电子自洽迭代 平面波PW(缺) 数值原子轨道LCAO(缺) 带自旋的体系计算:ABACUS磁性材料计算使用教程 +U计算:ABACUS DFT+U使用教程 结构优化(缺) 分子动力学:ABACUS 分子动力学使用教程 DeePKS方法(缺) 隐式溶剂计算等相关功能(缺) 随机波函数密度泛函理论:ABACUS 随机波函数DFT方法使用教程 无轨道密度泛函理论:ABACUS 无轨道密度泛函理论方法使用教程 分析结果 能带计算 如何正确画能带,NSCF读电荷密度 用ABACUS-ASE自动产生能带路径 PDOS计算 ABACUS里怎样做DOS和PDOS计算 和其他软件对接 ABACUS+Phonopy 计算声子谱 ABACUS+ShengBTE 计算晶格热导率 ABACUS+DPGEN 使用教程 ABACUS+LibRI 做杂化泛函计算教程 ABACUS+Candela 使用教程 ABACUS+CINEB教程(缺) ABACUS-ASE做NEB计算 (简单算例) 三、使用经验 有VASP使用背景的用户上手ABACUS教程:ABACUS新人使用的一些注意事项 "},"abacus-dcu.html":{"url":"abacus-dcu.html","title":"ABACUS 在曙光 DCU 集群上的编译与使用","keywords":"","body":"ABACUS 在曙光 DCU 集群上的编译与使用 作者:贾志炜,邮箱:jiazhiwei@stu.pku.edu.cn 审核:韩昊知,邮箱:haozhi.han@stu.pku.edu.cn 最后更新时间:2023/07/07 一、介绍 本教程旨在介绍 ABACUS 在 曙光 DCU 计算平台 上的编译与使用。 1. DCU DCU (Deep Computing Unit) 是一款面向人工智能、科学计算的高性能全功能 GPGPU (General-Purpose computing on Graphics Processing Units) 加速卡。 中科海光基于 DCU 硬件提供完整的软件工具链,以 DTK(DCU toolkit)为基础软件层为开发者提供运行、编译、调试和性能分析等功能,并提供多种深度优化的计算加速库。DCU 加速卡支持 ROCm/Hip 并行架构。 曙光计算集群采用 CPU 和 DCU 加速卡(Deep Computing Unit)相结合的异构融合计算体系结构。 2. ABACUS 的异构并行计算 INPUT 文件中 device 参数需设置为 gpu。 目前 GPU/DCU 版本的 ABACUS 仅支持 PW 基组的计算,因此 INPUT 文件中 basis_type 参数仅能设置为 pw。 二、准备 1. 曙光计算平台 用户需要在平台上申请异构计算资源: https://ac.sugon.com/doc/1.0.6/30000/general-handbook/platform/source.html 2. E-shell 曙光计算平台采用 E-shell 来对管理节点进行操作。 可使用网页版或 E-Shell Client。 不可直接运行任务,而是使用 Slurm 调度系统。 采用 modules 工具 来管理环境变量与系统依赖项。许多依赖如编译器版本等可以通过 modules 来处理。 3. slurm Slurm 工作调度工具是面向 Linux 和 Unix 及类似内核的免费和开源工作调度程序,可以方便用户进行作业的提交、管理、监测。 sinfo: 查看系统资源。 squeue: 查看当前作业状态。 salloc: 分配节点的作业提交,用 salloc 申请的节点会在当前终端退出时释放掉。用于程序测试以及中小型任务的提交。 sbatch: 批处理模式的作业提交,需要编写 slurm 作业提交脚本。在 E-shell 的默认目录存有 slurm 脚本模板。在下面的流程中也会介绍提交 ABACUS 任务的脚本案例。 srun: 交互式提交作业命令,有屏幕输出,但容易受网络波动影响,断网或关闭窗口会导致作业中断。 三、流程 1. 配置超算环境 module avail # 列出已有环境 module list # 查看当前已加载环境 module load # 加载环境 module unload # 卸载环境 昆山节点 module purge 1) compiler/devtoolset/7.3.1 2) compiler/rocm/dtk-22.10 3) compiler/cmake/3.17.2 4) mpi/hpcx/2.6.0/gcc-7.3.1 乌镇节点 1) compiler/devtoolset/7.3.1 2) compiler/dtk/23.04 3) compiler/cmake/3.23.1 4) mpi/hpcx/gcc-7.3.1 对于使用其他 DCU 节点(合肥、哈尔滨、西安)的用户,如果 module 中没有找到类似的环境,欢迎在 ABACUS 仓库 提出 issue,我们将尽力协助解决。 2. 编译 ABACUS 依赖软件包 目前按照 DCU 版本已验证的编译方法,有三个数学库需要自行编译。 若曙光平台网络连接不畅,请在软件官网选择合适的软件包,再用曙光平台的 E-File 传送至节点。 FFTW: https://fftw.org/pub/fftw/fftw-3.3.10.tar.gz OpenBLAS: https://github.com/xianyi/OpenBLAS/releases/download/v0.3.21/OpenBLAS-0.3.21.tar.gz ScaLAPACK: https://github.com/Reference-ScaLAPACK/scalapack/archive/refs/tags/v2.2.0.tar.gz 2.1 编译 FFTW tar -zxvf fftw-3.3.10.tar.gz mkdir build ./configure --prefix=/work/home/your_username/fftw-3.3.10/build cd ~/fftw-3.3.10/build make make install FFTW 需要编译单精度版本和双精度版本: cd ~/fftw-3.3.10/build ./configure --prefix=/work/home/your_username/fftw-3.3.10/build --enable-float make make install 2.2 编译 OpenBLAS tar -zxvf OpenBLAS-0.3.23.tar.gz cd OpenBLAS-0.3.23 make USE_OPENMP=1 NO_AVX512=1 FC=\"gfortran -fPIC\" CC=\"gcc -fPIC\" -j8 mkdir build make PREFIX=/work/home/your_username/OpenBLAS-0.3.21/build install 2.3 编译 ScaLAPACK cp SLmake.inc.example SLmake.inc 复制包中提供的 SLmake.inc.example 作为基准,并对 SLmake.inc 的内容作出一部分修改: FC = mpif90 -fPIC CC = mpicc -fPIC BLASLIB = LAPACKLIB = -L/work/home/your_username/OpenBLAS-0.3.21/build/lib -lopenblas make 3. 编译 DCU 版本的 ABACUS git clone https://gitee.com/deepmodeling/abacus-develop # main分支 cd abacus-develop mkdir build cd build CMake 配置: 指定编译器为 clang,关闭 OpenMP、LCAO 计算模块,设定三个数学库的位置,设定 USE_ROCM=ON。 CC=clang CXX=clang++ cmake -B build -DUSE_OPENMP=OFF -DENABLE_LCAO=OFF \\ -DFFTW3_DIR=/work/home/your_username/fftw-3.3.10/build/ \\ -DLAPACK_DIR=/work/home/your_username/OpenBLAS-0.3.21/build/lib \\ -DSCALAPACK_DIR=/work/home/your_username/scalapack-2.2.0/ \\ -DUSE_ROCM=ON Make 编译:make 部分建议不要并行编译。 make 4. 提交任务 salloc(中小型任务与交互性程序测试) salloc -p [队列名] -N 1 -n 32 --gres=dcu:4 ... load text ... salloc: Waiting for resource configuration salloc: Nodes node_num are ready for job # 分配计算节点,可用ssh直接连接 ssh node_num ...交互式进行计算任务 sbatch(大型任务与批量提交) 写一个作业提交脚本,可以参考以下结构: #!/bin/bash #SBATCH --job-name=ABACUS_GPU #SBATCH --partition=kshdnormal #SBATCH --nodes=1 #SBATCH --output=output.log #SBATCH --ntasks-per-node=32 #SBATCH --mail-user=username@email #SBATCH --gres=dcu:4 #dcu个数 #SBATCH --time=01:00:00 #SBATCH --error=error.log #以上的SBATCH信息会由slurm识别 abacus=/work/home/your_username/abacus-develop/build/abacus_pw #设置环境 module purge module load compiler/devtoolset/7.3.1 module load compiler/rocm/dtk-22.10 module load compiler/cmake/3.17.2 module load mpi/hpcx/2.11.0/gcc-7.3.1 #运行脚本 cd your_task_path mpirun -np 4 $abacus sbatch abacus_dcu.slurm 作业已提交,可在“作业管理”中查看。 四、结语 DCU 可以提高 ABACUS 计算性能,也充分利用了 ROCm 并行框架,使得 ABACUS 异构计算能应用在更多的平台上。 "},"abacus-upf.html":{"url":"abacus-upf.html","title":"模守恒赝势生成方法简介","keywords":"","body":"模守恒赝势生成方法简介 作者:陈涛,邮箱:chentao@stu.pku.edu.cn;刘千锐,邮箱:terry_liu@pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/06/30 一、介绍 UPF(unified PP format)是一种类似 XML 格式的文件格式,用于存储赝势及其相关参数。该格式由 Quantum ESPRESSO(QE)团队开发,并已成为许多量子计算软件包的标准格式之一。 ABACUS(截至 v3.2.3)的 Kohn-Sham 密度泛函理论计算主要支持 UPF 格式的模守恒赝势,在使用 ABACUS 过程中,一般可以直接使用网上已经生成好的赝势,常见的下载位置: ABACUS 官网 SG15-ONCV,参考文献:Optimization algorithm for the generation of ONCV pseudopotentials Quantum ESPRESSO 官网中的模守恒赝势 pseudo-dojo 官网(psp8 格式,需要转换) PWmat 官网 但是,在实际计算中,可能这些赝势并不符合当前的需求,这时候就需要自己生成模守恒赝势。可以通过其他格式赝势转换或者利用赝势软件生成两种方式来获得赝势。 注:ABACUS 的无轨道密度泛函理论计算(Orbital-Free Density Functional Theory,简称 OFDFT)需要用到一种特殊的局域势(不包含非局域势),一般采用 BLPS 局域赝势文件而非上文提到的 UPF 文件,如果做 OFDFT 计算的,可以阅读介绍 OFDFT 计算的文档,或者登录 Emily A. Carter 教授主页寻找相关的信息。 二、从其他格式赝势转换 1. 使用 QE upflib 中的 upfconv 进行转换 其支持将 UPF v.1 格式、vdb/van 格式(Vanderbilt US pseudopotential)、cpi/fhi 格式(FHI/abinit)转化成 UPF v.2 格式 path_to_QE/upflib/upfconv.x -u *.upf/UPF/vdb/van/cpi/fhi 注:这里的 path_to_QE 代表下载的 Quantum Espresso 的软件包地址。 注:文件夹 upflib 在 QE 5.x 和 6.x 版本名称为 upftools,在QE 7.x 版本为 upflib。 2. psp8 格式转换 psp8 格式是 ONCVPSP 软件生成的一种赝势格式,在 Abinit 官网(pseudo-dojo)中,其使用的就是 psp8 的格式,目前没有直接将 psp8 格式的赝势直接转换成 UPF 格式的脚本,但可以将 psp8 中输入文件部分摘抄下来,用 ONCVPSP 软件重新生成 UPF 格式的赝势(具体生成见下面 ONCVPSP 的讲解)。 可供参考的批量处理脚本:https://github.com/pipidog/ONCVPSP 三、赝势的生成 下面介绍三个可以生成 UPF 模守恒赝势的软件,分别是 ONCVPSP,Opium,和 ld1.x 1 ONCVPSP 1.1 介绍 ONCVPSP(Optimized Norm-Conservinng Vanderbilt PSeudoPotential)是由 D.R. Hamann 等人提出的优化版模守恒赝势,其有更高的精度与效率。ONCVPSP 依赖 Libxc,支持多种交换关联泛函。 参考文献:Optimized norm-conserving Vanderbilt pseudopotentials。 1.2 安装 1.2.1 安装 Libxc Libxc 网址:Libxc - a library of exchange-correlation functionals for density-functional theory 推荐下载 libxc-4.3.4 然后执行如下命令: cd libxc-4.3.4 ./configure --prefix='PATH/TO/LIBXC' CC=icc FC=ifort make make install 命令执行完毕后即可在 PATH/TO/LIBXC 目录下看到 bin,include 和 lib 三个目录,代表安装成功 1.2.2 安装 oncvpsp 推荐下载 oncvpsp-4.0.1 然后执行 cd oncvpsp-4.0.1,进入文件夹 这时需要修改 make.inc 文件 修改 F77 = ifort, F90 = ifort, CC = icc FFLAGS 删去 -ffast-math LIBS 改为 -qmkl=\"sequential\" LIBS+ 和 FFLAGS 中的地址改为自己的 PATH/TO/LIBXC 具体如下: # System-dependent makefile options for ONCVPSP # This must be carefully edited before executing \"make\" in src # # Copyright (c) 1989-2019 by D. R. Hamann, Mat-Sim Research LLC and Rutgers # University ##### Edit the following lines to correspond to your compilers #### F77 = ifort F90 = ifort CC = icc FCCPP = cpp FLINKER = $(F90) #FCCPPFLAGS = -ansi -DLIBXC_VERSION=301 #Use this for versions 400 ##### Edit the following optimization flags for your system #### FFLAGS = -O3 -funroll-loops CFLAGS = -O3 ##### Edit the following LAPACK and BLAS library paths for your system #### LIBS = -qmkl=\"sequential\" ##### Edit the following for to use libxc if available ##### OBJS_LIBXC = exc_libxc_stub.o # oncvpsp is compatible with libxc # To build oncvpsp with libxc, uncomment the e following lines and edit # the paths to point to your libxc library and include directories # make clean in src before rebuilding after changing this LIBS += -L/PATH/TO/LIBXC/lib -lxcf90 -lxc FFLAGS += -I/PATH/TO/LIBXC/include #LIBS += -L/home/drh/abinit/fallbacks/exports/lib -lxcf90 -lxc #FFLAGS += -I/home/drh/abinit/fallbacks/exports/include OBJS_LIBXC = functionals.o exc_libxc.o 然后执行如下命令: make # 如果make -j报错,可以忽略再make,即可编译成功 安装测试完成后,即可在 src 目录下看到 oncvpsp.x 可以在 ~/.bashrc 中增加如下命令将 oncvpsp.x 加入环境变量,方便直接调用: export PATH=$PATH:/PATH/TO/ONCVPSP/src 1.3 输入文件 输入文件的准备可以参考 PATH_TO_ONCVPSP/doc/32_Ge_annotated.dat,或者参考已知 ONCV 的赝势里面的 部分来写。 这里以铝(Al)为例,输入文件 Al.dat: # ATOM AND REFERENCE CONFIGURATION # atsym, z, nc, nv, iexc psfile Al 13 1 4 4 upf # # n, l, f (nc+nv lines) 1 0 2 2 0 2 2 1 6 3 0 2 3 1 1 # # PSEUDOPOTENTIAL AND OPTIMIZATION # lmax 1 # # l, rc, ep, ncon, nbas, qcut (lmax+1 lines, l's must be in order) 0 1.29163 0 5 8 10.3003 1 2.40653 0 5 8 7.02214 # # LOCAL POTENTIAL # lloc, lpopt, rc(5), dvloc0 4 5 0.932267 0 # # VANDERBILT-KLEINMAN-BYLANDER PROJECTORs # l, nproj, debl (lmax+1 lines, l's in order) 0 2 0 1 2 0 # # MODEL CORE CHARGE # icmod, fcfact 0 0 # # LOG DERIVATIVE ANALYSIS # epsh1, epsh2, depsh -5.0 3.0 0.02 # # OUTPUT GRID # rlmax, drl 6.0 0.01 # # TEST CONFIGURATIONS # ncnf 0 # nvcnf # n l f 一些可以调整的参数如下: nc:c = core,芯电子层数 nv:v = valence,价电子层数,调整 nc 和 nv 可以改变赝势的价电子数 iexc:生成赝势所用的交换关联泛函,详情可参考 ONCVPSP-4.0.1 目录下 doc 内的 pwscf_exc.txt 文件,常用的如下 iexc==3 .or. iexc==-001009, 'functional=\"PZ\"' iexc==4 .or. iexc==-101130, 'functional=\"PBE\"' psfile:赝势格式,有 upf 和 psp8 两种。ABACUS 支持 upf 的格式 rc: rc 中较小的为赝势的截断半径。在温度较高或密度较大的温稠密体系,通常需要调整赝势的截断半径,推荐小于 0.7 倍维格纳半径,单位为 Bohr;每个 l 对应一个 rc,其中最小的为赝势的截断半径 rc(5):rc 都要大于等于 rc(5)。例如 Al 的 l=0 的 rc 为 1.29163 Bohr,l=1 的 rc 为 2.40653 Bohr,rc(5) 为 0.932267 Bohr,因此该赝势的截断半径为 1.29163 Bohr。 qcut:通过调整(+-0.1),直到推荐 ECUT 达到最小 dvloc0:通过调整(+-0.5),直到消除赝势的 GHOST 态(可参考文献 Phys. Rev. B 41, 12264 (1990)) 1.4 生成赝势 执行命令: oncvpsp.x Al.out sed -n '//,//p' Al.out > Al.UPF 生成完赝势需要查看 Al.out 文件,确定没有 GHOST 态(可参考文献 Phys. Rev. B 41, 12264 (1990)): Testing for highly-localized positive-energy ghosts l \\/rc E Basis Diag. E Cutoff 1 0.974041 120.256772 338.98 WARNING - GHOST(+) 如上,出现 WARNING - GHOST 说明有 GHOST,需要调整 dvloc0 (+-0.5)直到消除 GHOST 态 sed 命令是为了从 Al.out 文件中截取赝势文件到 Al.UPF 中 如果同时要画出类似 Phys. Rev. B 88, 085117 (2013) 的图,需要准备输入文件 Al.dat 并执行命令: sh PATH_TO_ONCVPSP/scripts/run.sh Al 可以画出如下的图: 图1. 局域势函数与非局域势不同轨道角动量对应的半局域径向势函数 图2. S赝波函数与全电子波函数对比 图3. S的双投影波函数 图4. 不同能级波函数在截断半径处log导数对比,其影响散射性质的计算 图5. 不同轨道角动量对应的截断能 1.5 优化赝势 依次调节不同 l 对应的 qcut(+-0.1),检查对应 ECUT(l) 变化情况,直到 ECUT(l) 达到最小 参考的脚本: !/bin/bash qcut=17 dq=0.1 #遍历l=0的qcut从17到25,间隔为0.1,输出其对应的ECUT while [ `echo \"$qcut test.dat qcut$qcut.out grep -A 5 \"Energy error\" qcut$qcut.out > _tmp.txt E1=`sed -n \"6p\" _tmp.txt | awk '{print $3}'` E2=`sed -n \"13p\" _tmp.txt | awk '{print $3}'` E3=`sed -n \"20p\" _tmp.txt | awk '{print $3}'` E4=`sed -n \"27p\" _tmp.txt | awk '{print $3}'` # echo $qcut $E1 $E2 $E3 $E4 if [ `echo \"$E1>$E2\" | bc` == '1' ] ;then Emax1=$E1 else Emax1=$E2 fi if [ `echo \"$E3>$E4\" | bc` == '1' ];then Emax2=$E3 else Emax2=$E4 fi echo $qcut $Emax1 $Emax2 qcut=`echo \"$qcut+$dq\" | bc` done 不同的 l 都会有对应的能量截断值 ECUT(l)。一般 rc(l) 越小,对应的 ECUT(l) 越大,赝势也就越精确。由于 DFT 计算中的截断能 ECUT 是由赝势中较大的那个 ECUT(l) 决定,如果不同 l 的 ECUT(l) 相差很大,可以适当减小较小的 ECUT(l) 对应 l 的截断半径 rc,使得不同 l 对应的 ECUT(l) 更接近,这样并不会增加赝势计算的 ECUT,却可以提升精度。 这样调完之后如果有 GHOST 态,需要调整 dvloc0 (+-0.5)直到消除 GHOST 态,这个赝势才可使用 2. Opium Opium 软件包可以生成 RRKJ、TM 或 Kerker 径向波函数的赝势,官网有 LDA、GGA 赝势库(但是某些输入文件已经不匹配最新的 4.1 版本,需要稍作修改) 下载 Opium 之后利用 configure 安装: ./configure make 输入文件可以参考官网 LDA、GGA 赝势库,也可以参考 PATH_TO_OPIUM/tests,这里以铝(Al)为例,输入文件 al.param: [Atom] Al 6 100 2.00 -13.0 # reference configuration 200 2.00 -1.4 # reference configuration 210 6.00 -0.4 # reference configuration 300 2.00 -0.1 # reference configuration 310 0.95 -13.0 # reference configuration 320 -1.0 -0.0 # 这条能带是非束缚态,需要将占据数调成负数,官网给错了 [Pseudo] 3 1.85 1.85 1.97 opt [Optinfo] 7.07 10 # rc[a.u.] qc[sqrt(Ry)] Nb 7.07 10 7.07 10 [Configs] 3 # number of valence configurations # 300 2.00 -13.0 # nlm occ eigen(- means auto-generate) 310 1.00 -6.0 320 0.00 -6.0 # 300 1.00 -13.0 310 2.00 -6.0 320 0.00 -6.0 # 300 2.00 -13.0 310 0.00 -6.0 320 0.00 -6.0 [XC] gga [Relativity] srl 这里的参数可以参考官网手册 之后执行 opium al log all #输出在log文件里,依次执行全电子计算、计算赝势、计算非局域势、可移植性测试 opium al log upf #生成al.upf的输出文件 upfconv.x -u al.upf #利用QE的upflib将UPFv.1转化成UPFv.2格式 3. ld1.x QE 的 atomic 模块中的 ld1.x 支持生成赝势。其不仅可以生成模守恒赝势、还支持超软赝势、PAW 方法,支持全相对论、标量(非)相对论赝势(rel, non-rel/sca-rel),其径向波函数支持 TM(更稳定)与 RRKJ 两种方法,支持交换关联近似 7 类 LDA( pz),GGA(pbe, pbesol, revpbe, bp, wc, pw91。 下载好 QE 软件后,可以直接安装: ./configure make ld1 3.1 pslibrary 赝势库 推荐 ld1.x 生成其自带的 pslibrary 赝势库,下载好 pslibrary.1.0.0.tar.gz,解压,进入文件夹,修改 QE_path 文件,指定 QE 的路径。然后打开 make_ps 文件,解锁相应赝势: # These two files generate PAW and US PPs for all elements. These are # high accuracy - high kinetic energy cut-off PPs. # . ../paw_ps_high.job #默认打开的 . ../us_ps_high.job # # These two files generate additional PAW and US PPs for some elements. # These are less accurate PP than the previous one but require # lower kinetic energy cut-off or have less projectors or less semicore # states. # . ../paw_ps_low.job . ../us_ps_low.job # Uncomment the following line to generate the old pslibrary 0.3.1 PPs. # 打开下面的注释,可以解锁其余赝势 # #. ../paw_ps_collection.job #可以打开注释 #. ../us_ps_collection.job #可以打开注释 # Uncomment the following line to generate the NC-PPs. Be very careful # these PPs are completely untested. # 虽然可以生成,但其也提示该赝势的准确性并不能保证 # #. ../nc_ps_collection.job #可以打开注释 下面运行 ./make_all_ps 就能看到在一个个生成赝势库里的赝势: Making Ac.pz-spfn-kjpaw_psl.1.0.0.in ... Done Making Ac.pz-spfn-rrkjus_psl.1.0.0.in ... Done Making Ag.pz-n-kjpaw_psl.1.0.0.in ... Done Making Ag.pz-n-rrkjus_psl.1.0.0.in ... Done Making Ag.pz-spn-kjpaw_psl.1.0.0.in ... Done Making Ag.pz-spn-rrkjus_psl.1.0.0.in ... Done Making Al.pz-n-kjpaw_psl.1.0.0.in ... Done Making Al.pz-n-rrkjus_psl.1.0.0.in ... Done Making Al.pz-nl-kjpaw_psl.1.0.0.in ... Done Making Al.pz-nl-rrkjus_psl.1.0.0.in ... Done 如果不想生成所有的元素的赝势,则可以修改 make_ps 的 element,例如: element='C Si Ge' 3.2 生成自己的赝势 参数的详细解释见 PATH_TO_QE/atomic/Doc/INPUT_LD1.html 或线上的文档(不是最新的,建议前者),输入文件可以参考 pslibrary 赝势库的例子。 这里就简单给个 Al(铝)的例子,准备输入文件 al.in: &input title='Al', zed=13.0, rel=1, config='[Ne] 3s2 3p1 3d-2.0 4f-2.0', iswitch=3, dft='PBE' / &inputp pseudotype=2, file_pseudopw='Al.pbe-n-nc.UPF', #输入赝势 lloc=2, nlcc=.true., tm=.true. / 3 3S 1 0 2.00 0.00 2.60 2.60 0.0 3P 2 1 1.00 0.00 2.60 2.60 0.0 3D 3 2 0.00 0.10 2.60 2.60 0.0 运行 ld1.x 即可生成 Al.pbe-n-nc.UPF 模守恒赝势。 四、结尾 ABACUS 使用的是模守恒赝势,基于模守恒赝势还可以产生数值原子轨道,进行基于数值原子轨道的高效率密度泛函理论计算。有些情况下,网上提供的赝势不能满足需求,这个时候赝势的生成需要对赝势理论有比较深入的了解之后,才能调整好相关参数,生成质量较好的赝势。此外,生成之后,应该经过较为充分的测试,才能保证赝势的可移植性和正确性。如果大家有任何问题,欢迎发 email 至文档开头的邮箱。 "},"abacus-nac1.html":{"url":"abacus-nac1.html","title":"数值原子轨道(一):ABACUS 中的数值原子轨道命名和使用方法","keywords":"","body":"数值原子轨道(一):ABACUS 中的数值原子轨道命名和使用方法 作者:梁馨元,邮箱:2201111875@stu.pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/07/18 一、数值原子轨道的背景知识 1. 数值原子轨道 对电子结构的求解可以在不同的表象下进行,电子的波函数以及势函数也可以在不同基矢量下表示,常用的有平面波和局域轨道等。LCAO(Linear Combination of Atomic Orbitals)方法就是通过局域的原子轨道来求解量子力学问题。其中局域轨道的选取方式有多种,例如高斯轨道(Gaussian type Orbitals,GTOs 或 Gaussians)、数值原子轨道(Numerical Atomic Orbitals)、万尼尔函数(Wannier Functions)等。 2. 数值原子轨道作为基矢量的优点 数值原子轨道作为基矢量有几个优点:第一,基矢量个数相比于一些常用的基矢量(例如平面波和实空间网格)大幅度降低;第二,数值原子轨道是局域的,空间上可以严格截断,采用数值原子轨道来构建体系的哈密顿量的效率可以达到线性标度的时间复杂度。 3. 构造数值原子轨道基组的几种方案 构造精度高、可系统提升数量、可移植性好的原子轨道基组颇有挑战,因此也有多种方案被提出。例如,Junquera 等人提出在一维薛定谔方程中加入不同形式的约束势场,从而求解出具有严格截断的数值原子轨道[1]。Ozaki 在 OpenMX 软件中采用变分的方法来优化局域轨道的形状,从而得出一组最优的数值原子轨道[2]。Volker 等人提出在一个大的局域轨道基组中挑选最合适的局域轨道组成不同等级的基组轨道,该方案用于全电子密度泛函理论软件 FHI-aims 中[3]。Chen 等人提出利用前人提出的溢出函数(Spillage function)[4-5]来构造可系统提高数量的数值原子轨道,其中每个轨道都由一组球贝塞尔函数作为基矢量展开,该轨道被用在 ABACUS(原子算筹)软件中[6]。 二、数值原子轨道的命名方法 1. 数值原子轨道的组成 数值原子轨道(Numerical Atomic Orbitals,简称 NAO)是目前在 ABACUS 程序中支持的一种基矢量。从数学形式上来看,数值原子轨道可以分解为径向函数 flζ 和球谐函数 Ylm 的乘积。 \\phi_{l m \\zeta}(\\mathbf{r})=f_{l \\zeta}(r) Y_{l m}(\\hat{r}), 其中 l 是角量子数,m 是磁量子数,ζ 代表了每个角量子数上对应的多个径向轨道,实际计算中通常采用多于 1 个轨道来增加基矢量的完备性。 2. 数值原子轨道的命名方法 数值原子轨道有一套常用的命名方案用来表示选取的基组大小,早期该命名方案在 SIESTA 软件中被采用[7][8][9][10],后来在 OpenMX、FHI-aims 和 ABACUS 中也采取这套命名方案。具体来说是,对于每个被电子占据的角量子数 l,若采用 1 条径向轨道,则称该基组为 Single-ζ 轨道,简称 SZ 轨道基组。若采用 2 条径向轨道,则称该基组为 Double-ζ 轨道,简称 DZ 轨道基组。 目前,在许多赝势结合数值原子轨道的程序里,通常会在 DZ 轨道的基础上引入 1 条极化(polar)的径向轨道,即角量子数更高的轨道,来组成 DZP(Double-ζ valence orbitals plus SZ polarization) 轨道基组。此外,还有基组数量更大的 TZDP(Triple-ζ valence orbitals plus DZ polarization) 轨道等。 3. 数值原子轨道基组的个数 数值原子轨道基组的具体个数除了取决于轨道类别(比如 SZ、DZP、TZDP)外,也取决于元素种类、所选取的赝势。 轨道类别:比如对于 O 元素的赝势而言,一般将两个 1s 电子作为核内电子,在构造赝势的时候只考虑它的外层 6 个价电子部分 2s、2p 轨道,则该 O 赝势下的电子的极化轨道为 d 轨道。故它的 SZ(Single-ζ)轨道包含 1 组 s 轨道、1 组 p 轨道,共 1*1+1*3=4 个轨道;DZP 轨道包含 2 组 s 轨道、2 组 p 轨道、1 组 d 轨道,共包含 2*1+2*3+1*5=13 个轨道;TZDP 轨道包含 3 组 s 轨道、3 组 p 轨道、2 组 d 轨道,共包含 3*1+3*3+2*5=22 个轨道。 元素种类:比如同为 DZP 轨道,对于 H 元素(1 个价电子)即为 2 组 s 轨道、1 组 p 轨道(p 轨道也是 H 的极化轨道),共包含 2*1+1*3=5 个轨道。对于 O 元素即为 2 组 s 轨道、2 组 p 轨道、1 组 d 轨道,共包含 2*1+2*3+1*5=13 个轨道。 赝势:比如对于 Fe 元素而言,同为 DZP 轨道。若选取的赝势为,[Ne]3s^23p^64s^23d^6,即[Ne]=1s^22s^22p^6部分为芯电子,3s^23p^64s^23d^6部分为 16 个价电子,则 DZP 轨道包含 2*2 套 s 轨道(3s 和 4s)、2 套 p 轨道(3p)、2 套 d 轨道(3d)、1 套 f 轨道(极化轨道),即每个原子的 DZP 数值原子轨道个数为 2*2*1+2*3+2*5+1*7=27 个轨道。若选取的赝势为[Ar]4s^23d^6,则 DZP 轨道包含 2 套 s 轨道、2 套 d 轨道、1 套 p 轨道,共 2*1+2*5+1*3=15 个轨道。 三、ABACUS 中数值原子轨道的使用方法 1. ABACUS 中的数值原子轨道文件 ABACUS 提供了已经生成好的数值原子轨道库打包文件供下载(官网下载链接),对于绝大多数计算任务,这些数值原子轨道是经过精度和可靠性验证,可以直接使用的。这些轨道文件的开头提供了关于该轨道的重要信息。以 O_gga_7au_100Ry_2s2p1d.orb 轨道文件为例,首先文件名包含的信息有:氧元素(o),GGA 泛函(gga),数值原子轨道截断半径(7au,即 7 Bohr),推荐能量截断值(100 Ry),数值原子轨道个数(2s2p1d,2 个 s 的径向轨道,2 个 p 的径向轨道,1 个 d 的径向轨道)。值得注意的三个点是: ABACUS 里用到的模守恒赝势和轨道是需要匹配的。因为不同的赝势可能有不同的价电子,而数值原子轨道是用来描述这些价电子的,如果赝势的价电子多,则相应的默认数值原子轨道基组数量也会增多。 推荐用户直接使用轨道文件包含的能量截断值做计算。ABACUS 里的数值原子轨道在生成时,是尽量的去匹配平面波输出的波函数,从而优化得到的。而平面波计算是有一个能量截断值的,因此为了尽可能的保证 LCAO 的精度,我们建议直接使用推荐的能量截断值,而不需要真正做计算的时候做体系能量随着能量截断值变化的收敛性测试。当你在 LCAO 计算时改变能量截断值时候,其实只是改变了平面波的个数,这些平面波是用来做一些数值计算的,本质上并没有改变基矢量的个数,而基矢量的个数增加是靠改变基组大小,例如 DZP 到 TZDP 来实现的。 特殊情况可以自己生成数值原子轨道。如果用户有自己特殊的赝势,或者对目前提供的原子轨道的参数或者个数感觉不满意,例如对于导带的描述能力较差,也可以自己生成数值原子轨道,具体生成的方法可以参考这个系列文档的第二和第三篇。 打开以上提到的氧的数值原子轨道文件,文件的开头如下: --------------------------------------------------------------------------- Element O Energy Cutoff(Ry) 100 Radius Cutoff(a.u.) 7 Lmax 2 Number of Sorbital--> 2 Number of Porbital--> 2 Number of Dorbital--> 1 --------------------------------------------------------------------------- SUMMARY END 这里包括元素种类(Element),生成轨道时指定的截断能量值(Energy Cutoff)、截断半径(Radius Cutoff),最大角量子数(Lmax)及各角量子数轨道的个数(Number of * orbital,*为 S、P、D 等轨道角动量)。根据这些信息可以知道该轨道的类别,比如该举例文件即包含 O 的 DZP 轨道。 上述 ABACUS 提供的数值原子轨道文件中,在取名中即包含文件开头的重要信息,包括各角量子数的轨道个数。由这些轨道的文件名即可判断轨道类型。 轨道文件中包含的后续内容为不同类型、不同角量子数(L)的多个径向数值原子轨道(即不同 N)的具体数据,目前轨道是存在均匀格点上的,之后有可能也会支持非均匀格点。 2. 如何选择数值原子轨道文件 用户需要根据精度要求,选择数值原子轨道合适的截断能量值、截断半径及轨道类型。截断能量值、截断半径越大,轨道类型提升(SZ、DZP、TZDP),精度越高,结果更接近平面波。注意对于不同元素,要达到同样的精度,以上数值设置并不一定相同。 3. 如何修改数值原子轨道文件的设置,获得低精度轨道类型文件 在 ABACUS 中生成数值原子轨道文件时,可以设置同时生成多种精度的轨道文件,即设置 SIAB_INPUT 文件中的参数 Save Orbitals,详见篇目(三)。 如果已有一份数值原子轨道文件,但希望直接用此文件进行低精度计算,比如希望使用 DZP 轨道文件进行 SZ 计算。可以修改文件开头的信息实现,具体是 Lmax 及各角量子数轨道个数,将这些参数调整到低精度计算对应的数值。文件的后续内容不需要做更改。 比如对于 O 元素而言,DZP 轨道文件参数如 3.1 所示,若要进行 SZ 基矢量的计算,则将 Lmax 设置为 1,Number of Sorbital/Porbital/Dorbital=1/1/0 即可。 四、参考文献 [1] J. Junquera, Ó. Paz, D. Sánchez-Portal, and E. Artacho, Numerical Atomic Orbitals for Linear-Scaling Calculations, Phys. Rev. B, 64, 235111 (2001). [2] T. Ozaki, Variationally Optimized Atomic Orbitals for Large-Scale Electronic Structures, Phys. Rev. B, 67, 155108 (2003). [3] V. Blum, R. Gehrke, F. Hanke, P. Havu, V. Havu, X. Ren, K. Reuter, and M. Scheffler, Ab Initio Molecular Simulations with Numeric Atom-Centered Orbitals, Comput. Phys. Commun., 180, 2175 (2009). [4] M. Chen, G.-C. Guo, and L. He, Systematically Improvable Optimized Atomic Basis Sets for Ab Initio Calculations, J. Phys.: Condens. Matter, 22, 445501 (2010). [5] M. Chen, G.-C. Guo, and L. He, Electronic Structure Interpolation via Atomic Orbitals, J. Phys.: Condens. Matter, 23, 325501 (2011). [6] Liu Xiao-Hui et al., Introduction to first-principles simulation package ABACUS based on systematically improvable atomic orbitals, Acta Phys. Sin., 64, 187104 (2015). [7] Sánchez‐Portal D, Ordejon P, Artacho E, et al. Density‐functional method for very large systems with LCAO basis sets, J. International Journal of Quantum Chemistry, 65, 453-461 (1997). [8] Artacho E, Sánchez‐Portal D, Ordejón P, et al. Linear‐scaling ab‐initio calculations for large and complex systems, J. Physica Status Solidi (b), 215, 809-817 (1999). [9] Junquera J, Paz Ó, Sánchez-Portal D, et al. Numerical atomic orbitals for linear-scaling calculations, J. Physical Review B, 64, 235111 (2001). [10] Soler J M, Artacho E, Gale J D, et al. The SIESTA method for ab initio order-N materials simulation, J. Phys.: Condens. Matter, 14, 2475 (2002). "},"abacus-nac2.html":{"url":"abacus-nac2.html","title":"数值原子轨道(二):生成给定模守恒赝势的数值原子轨道","keywords":"","body":"数值原子轨道(二):生成给定模守恒赝势的数值原子轨道 作者:刘裕,邮箱:liuyu@stu.pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/06/15 一、ABACUS 中的数值原子轨道背景知识 1. 数值原子轨道 ABACUS 中的三维数值原子轨道[1]:可以分解为径向部分与角向球谐函数的乘积,即 \\phi_\\mu(\\mathbf{r})=f_{\\mu, l}(\\mathbf{r}) Y_{l m}(\\hat{r}), 其中 \\mu=\\{\\alpha,i,\\xi,l,m\\},\\alpha是原子种类的指标,i是每个原子种类对应的原子个数的指标,\\xi是角动量l对应的径向函数的个数,m是磁量子数。 径向部分函数:第 \\mu个轨道的径向部分函数可以写为球贝塞尔函数的线性组合(可参考文献[1]) f_{\\mu l}(\\mathbf{r})= \\begin{cases}\\sum_q c_{\\mu q} j_l(q r), & r 其中 j_l(q r)是波矢为q的球贝塞尔函数,r_c是径向部分的截断半径,满足关系j_l(q r_c)=0。q的个数由能量截断值决定(以下会介绍)。在实际计算里,通过用户指定每种元素的数值原子轨道截断半径和能量截断值来确定需要用到多少个球贝塞尔函数。组合系数 c_{\\mu q}是可优化的量,决定了数值原子轨道的形状。 2. 参考体系 参考系统:在ABACUS中构造某个元素对应的数值原子轨道的最普遍方式是为每个元素选取一组参考体系做平面波计算(可以是单k点也可以是多k点),得到这些参考体系的电子波函数,然后通过最小化自定义的一个溢出函数(下面会介绍)来优化c_{\\mu q}系数。换句话说,我们需要选定一组参考系统,生成数值原子轨道基组,并期望它们有良好的迁移性,以便可以在更一般的情况下使用。 Dimer(二聚体):我们发现二聚体是较为合适的参考系统。具体来说,推荐选择的是若干个不同键长的二聚体(dimer),有时也可选择三聚体(trimer)或四聚体。对同一个元素,我们通常选择几个键长不同的二聚体(例如5-6个),这些键长覆盖二聚体稳定键长附近能量区间,通常可以取与最稳定能量差别为1-2个eV的能量曲线上的点。 周期性体系:数值原子轨道还有一些特殊用途,例如能带插值。面对这种场景,可以选择一系列带多个k点的周期性体系,此时参考态中的每个原子构型就对应了不同k点指标和不同能带指标的波函数,这些波函数会被用于最小化溢出函数来生成数值原子轨道,可以参考文献[2]。 3. 溢出函数 溢出函数(英文为spillage):由给定参考体系的多个电子波函数与生成的数值原子轨道之间的差别来定义。换个角度理解,溢出函数的大小反映的是由一组“精确”波函数所张成的希尔伯特空间与局域轨道所张成的空间的差别。溢出函数定义如下: \\mathcal{S}=\\frac{1}{N_n} \\sum_{n=1}^{N_n}\\left\\langle\\Psi_n|1-\\hat{P}| \\Psi_n\\right\\rangle, 其中\\Psi_n表示平面波基组下的本征态,N_n是选定的参考电子态的个数,\\hat{P}是由所有原子轨道张成的投影子 \\hat{P}=\\sum_{\\mu v}\\left|\\phi_\\mu\\right\\rangle S_{\\mu v}^{-1}\\left\\langle\\phi_v\\right| \\text, 其中S_{\\mu v}=\\left\\langle\\phi_\\mu \\mid \\phi_v\\right\\rangle是局域轨道\\phi_\\mu与\\phi_v之间的重叠矩阵,投影子用到了重叠矩阵的逆。 轨道正交:事实上,如果我们有了给定的数值原子轨道,我们可以在此基础上再次定义新的溢出函数来得到一组新的数值原子轨道,这也是为什么该算法可以系统性的增加数值原子轨道的原因。定义的方式也比较直接,可以将|\\Psi_n\\rangle和已有原子轨道形成的投影子\\hat{P}正交,公式为 |\\Psi_n^{new}\\rangle=(1-\\hat{P})|\\Psi_n\\rangle, 这个公式里,左边的波函数经过正交已经不包含原子轨道的成分,这样可以再次作为新的参考体系波函数生成新的数值原子轨道,以上算法已经被实现在SIAB这个程序里。 最小化溢出函数:优化原子轨道时,最终溢出函数值定义为选定的几个二聚体的平均溢出函数值。溢出函数可以用来评估获得的原子轨道基组的质量,溢出函数越小,则原子轨道所张成的空间越接近于参考态波函数。在ABACUS中,通过最小化溢出函数的方式来优化c_{\\mu q},该系数决定了原子轨道的径向函数的形状。这种方法的好处在于 轨道形状可调:可以由球贝塞尔函数基组的线性组合自动生成,而不需要任何先决条件,因此原则上可获得完全优化的原子轨道。 基组数量可调:可以用统一的方式系统的增加轨道数量,包括增加径向轨道的数量(multi-ζ)和增加更高角动量的轨道(极化轨道)两种方式。为此,我们可以首先生成具有给定角动量的轨道,然后更高级的轨道可以使用相同的程序生成,但是此时只需最小化剩余的希尔伯特空间中的溢出函数,该空间与所有先前生成的原子轨道所张成的空间正交。 参考系统可调:通过选择参考系统及对应能级,可以提高原子轨道基组在不同环境的可迁移性。例如,对于涉及到激发态能级的计算,往往需要在生成数值原子轨道的时候,考虑这组轨道对于非占据态能级的拟合能力,这个时候可以在生成参考体系的时候加入一定数量的非占据能级。 4. 模拟退火算法SA(Simulated Annealing) 我们首先介绍模拟退火法Simulated Annealing(SA)来最小化溢出函数[1],从而优化球贝塞尔函数的系数c_{\\mu q}。在模拟退火算法中我们用的是Metropolis的算法,需要设置一个初始温度,并且指定温度下降的方式。代码部分我们之后会介绍,这里先简要介绍一下算法。 初始系数:如果没有特别指定,一开始的系数c_{\\mu q}是随机产生的, 每一步SA会更新其中一个系数,当溢出函数被改变的数值在允许接收的范围内时,参数c_{\\mu q}会被更新。 优化过程:当要优化的所有轨道的所有参数c_{\\mu q}都被更新过一次之后,我们称为一步优化。 我们发现大约在每个温度行走500 ~ 1000步就已经足够产生好的原子轨道。最开始的温度我们一般取为1.0e-5,事实上我们发现即便初始温度取得更小,最后的结果也是不错的。 在每一步优化之后,我们将温度乘上一个比率,来达到降温的目的从而得到新的温度,这个参数我们一般取为0.5~0.8,最后的温度一般降到1.0e-9~1.0e-12。接收的概率可以控制在0.2~0.4范围内。 能量截断值:这里的能量截断值实际上是能量截断值,我们知道每个平面波 e^{i\\mathbf{q}\\cdot\\mathbf{r}}都对应一个二阶求导后的动能q^2/2。同样的,每个球贝塞尔函数 j_l(q r)也有一个对应的动能是 q^2/2。在平面波计算里我们通过能量截断值来控制平面波的数量,从而控制计算精度。在生成数值原子轨道的时候,我们也通过能量截断值来控制球贝塞尔函数的个数,从而控制生成的数值原子轨道的精度。 对于ABACUS的平面波计算和产生球贝塞尔函数 j_l(q r)个数的计算,我们建议采用同样的能量截断值,该截断值取得越高,基矢量个数越多同时基组也越完备。对于采用赝势的平面波计算,15~30个球贝塞尔函数已经足够得到质量比较高的数值原子轨道。 数值原子轨道的二阶可导:除了以上操作之外,还有一个需要注意到的地方。为了使数值原子轨道的动能积分是良定义的,需要使原子轨道的二阶导数连续。这可以通过将原子轨道的径向部分乘以一个平滑函数g(r)来实现 g(r)=1-\\exp \\left[-\\frac{\\left(r-r_{\\mathrm{c}}\\right)^2}{2 \\sigma^2}\\right], 该径向轨道会在数值原子轨道的截断值以内起作用,使其在截断值处2阶连续,超过阶段半径之后就严格截断。在我们的测试中,我们发现参数\\sigma对轨道的质量影响不大,所以我们一般固定\\sigma为常数0.1。 数值原子轨道动能和再次使用模拟退火算法:如果仅仅最小化溢出函数值,原子轨道的径向部分经常会出现震荡,原因是震荡有时候有利于溢出函数的值尽可能的低,但震荡厉害的函数往往动能高,可移植性较差。因此,为了去除这些实际上非物理的震荡,在算法中我们还定义了原子轨道的动能: T_{\\mu}=\\sum_{q} c_{\\mu q}^{2} q^{2} / 2+\\kappa, 并再次通过模拟退火算法最小化原子轨道的动能,其中\\kappa则是模拟退火的一个惩罚函数: \\kappa=\\left\\{\\begin{array}{ll} 0, & \\mathcal{S} / \\mathcal{S}_{0}-1\\Delta \\end{array}\\right., 这里\\mathcal{S}\\_{0}是在优化动能之前所得到的数值原子轨道算出来的溢出函数的值,而\\mathcal{S}则是当前在参数c_{\\mu q}下面的溢出函数的值。我们发现参数取\\Delta=0.002~0.005足够使得原子轨道平滑了。轨道动能也是通过同样的模拟退火算法得到,经过动能优化之后,轨道的形状会变平滑,同时溢出函数的值也会相比没有动能优化的轨道会有一点点增加,但是对精度的影响是很小的。 优化动能用的模拟退火算法几乎和优化溢出函数一样,除了一点点参数的区别。 目标函数选择的是所有轨道中最大的动能,而不是像溢出函数一样取平均值。对于每个轨道来说,温度是不一样的,因为每个轨道会有一个不同的动能,在这步动能优化中,我们发现结果对初始的温度不敏感,但最终达到的温度必须取得足够小。实际中我们发现只需要100~200步,动能就可以下降得很快。 所以一般来说优化动能的步数就取得比优化溢出函数要少。 二、ABACUS中产生数值原子轨道的具体流程 注:本文档介绍的是模拟退火算法SA,不适用于基于Pytorch的PyTorch-Gradient方法,关于这两个算法,可以参考本数值原子轨道中文文档系列的第三篇文档。 1. 平面波计算 简化计算量:前文我们提到的溢出函数公式,如果把投影子\\hat{P}带进公式,则可以发现我们不需要在计算溢出函数的时候显示的包含任何基矢量(例如平面波)的操作。实际上,我们只需要先算好数值原子轨道|\\phi_\\mu\\rangle和电子波函数|\\Psi_i\\rangle的重叠矩阵(Overlap Matrix)\\langle \\Psi_i|\\phi_\\mu\\rangle并存下来,以及数值原子轨道之间的重叠矩阵\\langle \\phi_\\mu|\\phi_\\nu\\rangle存下来就可以算溢出函数了。更进一步,我们意识到数值原子轨道|\\phi_\\mu\\rangle的径向部分在程序里是写成了球贝塞尔函数的线性组合,根据线性叠加的原理,我们只需要计算球贝塞尔函数和电子波函数的内积,以及球贝塞尔函数之间的内积,并把这些结果存下来,就可以优化系数c_{\\mu q}了!注意这里指标i遍历体系的所有电子态,包括所有的k点以及能带对应的电子波函数。 换句话说,只需要存储线性代数里的内积结果而不是每个波函数在基矢量下的展开系数就可以优化我们想要的系数,因此数值原子轨道的优化过程可以极大提速! 采用ABACUS做平面波计算: 因此,第一步我们先调用ABACUS主程序,计算出以上overlap矩阵,首先需要准备INPUT文件如下: INPUT_PARAMETERS suffix H pseudo_dir /home/liuyu/github/abacus-develop/tests/PP_ORB wannier_card INPUTw calculation scf ks_solver dav nspin 1 lmaxmax 1 symmetry 0 nbands 10 ecutwfc 100 scf_thr 1.0e-7 scf_nmax 1000 smearing_method gauss smearing_sigma 0.01 mixing_type pulay mixing_beta 0.4 mixing_ndim 8 printe 1 bessel_nao_ecut 100 // same as ecutwfc bessel_nao_rcut 6 // rcut 如上所示,该INPUT与平常的平面波计算相比,只有3个参数(已标红)需要注意: wannier_card:指定wannier相关参数的输入文件名INPUTw bessel_nao_ecut:球贝塞尔函数的截断能,根据公式\\sqrt{E_{cut}} \\times r_{cut} / \\pi来决定求贝塞尔函数的数量 bessel_nao_rcut:数值原子轨道的截断半径r_{cut} 此外,我们还需要准备输入文件 INPUTw 如下(将来计划会把 INPUTw 文件去掉,把参数加入 INPUT 里): WANNIER_PARAMETERS out_spillage 2 // output overlap spillage_outdir OUT.H // could be the same as OUT.${suffix} 通过 ABACUS 做平面波基矢量计算可以计算出: 1)电子波函数|\\Psi_i\\rangle和球贝塞尔函数 j_l(q r)之间的 overlap\\langle \\Psi_i|j_l(q r)\\rangle; 2)球贝塞尔函数之间的 overlap\\langle j_{l_2}(q_2 r)|j_{l_1}(q_1 r)\\rangle; 3)电子波函数|\\Psi_i\\rangle之间的 overlap\\langle \\Psi_i|\\Psi_i\\rangle。 这些输出将存在文件 OUT.${suffix}/orb_matrix.0.dat 中,而这个文件将被读入进行数值原子轨道的生成。 2. 编译 SIAB SIAB 的全称是 Systematically Improvable Atomic orbital Basis generator based on spillage formula,目前是包含在 ABACUS 软件里的一个独立程序,可用来读入以上 ABACUS 产生的数据文件并且生成数值原子轨道,具体编译方法如下: 拉取 deepmodeling/abacus-develop 仓库(github 和 gitee 二选一即可,国内建议用 gitee) # github仓库 $ git clone -b develop https://github.com/deepmodeling/abacus-develop.git # gitee仓库 $ git clone -b develop https://gitee.com/deepmodeling/abacus-develop.git 编译 SIAB 模拟退火(SA)方法生成数值原子轨道的代码在 SIAB 文件夹里,采用 C++ 编写,目前 Makefile 仅支持 intel 编译器。 SIAB 程序有串行(make s)和并行(make p)两种版本,一般情况下串行版本即可满足使用需求。 $ cd abacus-develop/tools/SIAB/SimulatedAnnealing/source $ make clean $ make s 编译成功后,在目录 abacus-develop/tools/SIAB/SimulatedAnnealing/source 下可以看到生成数值原子轨道的可执行程序 SIA_s.exe,这里 s 代表编译串行版(serial)。此外,对于并行版本,SIAB 还可以结合 MPI 编译并行版,通过命令 make p 指令得到 SIA_p.exe 可执行程序,这里 p 代表 parallel,但注意并行版只对某些特定算法进行并行,之后对代码进行一个更好整理之后我们会给出并行版的教程。 3. 运行例子 进入 tests_s 目录,可以看到 H-6-0.6.15.dat 文件,这是用来生成数值原子轨道所需要准备的输入文件,从 ABACUS 的平面波自洽迭代计算后获得,现在该文件已经改名为 OUT.${suffix}/orb_matrix.0.dat。 此外,还有一个输入文件 INPUT 如下: 1 // bool: calculate the spillage. 1/0 0 // bool: restart or not. 1/0 1 // bool: output the file. 1/0 1 // integer: number of structures. H-6-0.6.15.dat // Each structure's file name occupies one line 1 // integer: number of k points (for parallel version) 1 // integer: number of pools (for parallel version) 15 // can be ignored now 2 // The way to calculate spillage, 2 means averaged spillage 1.0e-8 // real: start temperature for minimizing spillage 0.5 // real: cooling rate for the temperature in minimizing spillage 2 // integer: number of temperatures (spillage) 500 // integer: number of steps per temperature (spillage) 1.0e-2 // real: starting temperature for the kinetic energy 0.8 // real: cooling rate for temperature in minimizing kinetic energy 1 // integer: number of temperatures (kinetic) 100 // integer: number of steps per temperature (kinetic) 0.05 // real: delta kappa for kinetic energy 49 // integer: selectly output information every n steps 100 // integer: change accept rate every n steps, can be ignored now 0.4 // real: acceptance rate (high), can be ignored now 0.2 // real: acceptance rate (low), can be ignored now 50 // real: max allowed kinetic energy (Rydberg) 0.01 // real: 'dr' for the 1d r grid to compute kinetic energy 1 // integer: 1: Kin 2: Ecut, can be ignored now 1 // bool: to control the number of bands 1 // int, the start band index(>0). 1 // int, the end band index( 2 // Number of levels. # label / na / skip / lmax / each L / 01 2 new 1 1 1 01 2 new 1 1 1 01 2 new 1 1 1 0.01 //dr(a.u.) of uniform mesh. Attention!!dr will affect kinetic energy minmized largely. -6 //xmin 1 //zed, chosen as valence charge. 0.01 //dx 6.0 //xmax 0 // print out the C4, this section can be ignored now 2 ./FILE/Si-S.ORBITAL 0 ./FILE/Si-P.ORBITAL 1 0 // for tests, can be ignored now 14.0 // rcut, only useful for test program 0.01 // dr, for simpson integral 2 // test eigenvalue index 2 // lmax C4:代表 4 个重要参数:\\alpha,\\xi,l,nq,\\alpha是原子种类的指标,\\xi是角动量l对应的径向函数的个数,nq 是对应的球贝塞尔函数的个数。 该输入文件包含 SIAB 程序需要读取的一系列参数,基本上重要参数的说明都有列上去,一些可忽略的参数可以先不用设置,之后我们会推出更详细的关于此输入文件的说明文档。 准备好该输入文件后,可以通过如下命令执行 SIAB 程序: $ ~/abacus-develop/tools/SIAB/SimulatedAnnealing/source/SIA_s.exe 运行完毕后,可以得到一系列输出文件,其中 ORBITAL_1U.dat 则是我们需要的数值原子轨道文件。我们可以通过文件的前几行获取关键信息:这是 H 原子的轨道文件,平面波截断能为 100 Ry,截断半径为 6 Bohr,最大角动量为 1,角动量 s 和 p 的径向函数的个数都为 2,即 2 条 s 轨道和 6 条 p 轨道,共 8 条轨道。为了体现这些关键信息,在使用轨道的时候我们建议重命名该文件为 H_gga_100Ry_6au_2s2p.orb。 --------------------------------------------------------------------------- Element H Energy Cutoff(Ry) 100 Radius Cutoff(a.u.) 6 Lmax 1 Number of Sorbital--> 2 Number of Porbital--> 2 --------------------------------------------------------------------------- SUMMARY END 三、ABACUS 中数值原子轨道的生成脚本 我们需要采用平面波计算不同键长的二聚体,并且存在不同层级的轨道,因此也可以通过一个脚本来实现自动化整个流程:abacus-develop/tools/SIAB/Generate_Orbital_AllInOne.sh。该脚本需要读入一个输入文件 ORBITAL_INPUT 如下: #1.exe_dir #-------------------------------------------------------------------------------- EXE_mpi mpirun -np 4 EXE_pw /home/liuyu/github/abacus-develop/build/abacus EXE_orbital /home/liuyu/github/abacus-develop/tools/SIAB/SimulatedAnnealing/source/SIA_s.exe #-------------------------------------------------------------------------------- #( In this part, the direction of the two used exe is provided ) #2.electronic calculatation #-------------------------------------------------------------------------------- targets 14_Si_60 # element ref_bands 4 6 # reference bands nbands 8 12 # num of bands for calculate Ecut 60 # cutoff energy (in Ry) Rcut 6 7 # cutoff radius (in a.u.) Pseudo_dir /home/liuyu/github/abacus-develop/tests/PP_ORB Pseudo Si_ONCV_PBE-1.0.upf smearing_sigma 0.01 # energy range for gauss smearing (in Ry) #-------------------------------------------------------------------------------- #( In this part , some parameters of calculating are given ) #3.structure information #-------------------------------------------------------------------------------- #the Bond Length list for each STRU BLSTRU1 1.8 2.0 BLSTRU2 2.4 # if skip the orbital optimization for each STRU (1:skip, 0:not skip). SkipSTRU 0 0 # set the objective structure list to fit for orbital optimization ListSTRU dimer trimer #-------------------------------------------------------------------------------- #(In this part, it gives us the bond length of the reference system(in angstrom) ) #4.orbital calculatation #-------------------------------------------------------------------------------- maxL 2 # the max angular momentum Level 2 3 # num of levels to generate orbitals( 该输入文件主要分为 5 个部分: 1. exe_dir EXE_mpi:MPI 并行计算命令,这里我们采用的是 4 核 MPI 并行进行 dimer(或者 trimer)的平面波计算。 EXE_pw:ABACUS 可执行程序的绝对路径。 EXE_orbital:数值原子轨道生成程序 SIA_s.exe 的绝对路径。 2. electronic calculatation targets:可以任取,一般格式是${原子序数}_${元素名}_${截断能}。 ref_bands:参考体系的能带数,取值为电子总数的一半。注意这里有多个取值,原因是我们选择了多组参考构型,既有 dimer,也有 trimer。 nbands:平面波计算中的实际能带数,必须大于 ref_bands,以保证包含非占据态。同理,由于多组参考构型,nbands 也有多个取值。 Ecut:平面波截断能,单位为 Ry。 Rcut:数值原子轨道的截断半径,单位为 Bohr。这里的多个取值表明,采用相同的一套参数,生成多个不同截断半径的数值原子轨道文件,根据第一部分的基础知识,截断半径会极大地影响数值原子轨道的质量,因此该参数可以帮助我们一次性生成多个不同截断半径的数值原子轨道文件。 Pseudo_dir:平面波计算采用的赝势文件所在文件夹的绝对路径。 Pseudo:平面波计算采用的赝势文件名。 smearing_sigma:平面波计算采用 Gaussian smearing 的展宽,单位为 Ry,一般取 0.01 即可。 3. structure information BLSTRU1:第一组参考构型的键长,单位为埃。如上所示,第一组参考构型包含两个构型,键长分别为 1.8 和 2.0 埃。 BLSTRU2:第二组参考构型的键长,单位为埃。如上所示,第二组参考构型包含一个构型,键长为 2.4 埃。 以此类推,可以存在 BLSTRU3、BLSTRU4 等等。 SkipSTRU:是否跳过该组参考构型的优化,一般而言,都取为 0 即可。 ListSTRU:指定 BLSTRU1、BLSTRU2 等等参考体系的具体构型,这里说明 BLSTRU1 是 dimer,BLSTRU2 是 trimer。如果取值缺省(第一个不可缺省),则默认为 dimer。 4. orbital calculatation maxL:最大角动量。 Level1:根据上文可知,轨道可以分为多个层级,这里 level1 是 SZ 层级,最大角动量为 1,角动量 s 和 p 的径向函数的个数为 1 和 1,即 1 条 s 轨道和 3 条 p 轨道。 Level2:同上,这里 level2 的最大角动量为 2,角动量 s,p 和 d 的径向函数的个数为 1,1 和 1,即 1 条 s 轨道,3 条 p 轨道和 5 条 d 轨道。level1 和 level2 合在一起,是 DZP 层级。 Level3:同 Level2。 Level:BLSTRU1 和 BLSTRU2 分别负责一部分轨道的生成,Level 的 2 个取值对应的是 BLSTRU1 和 BLSTRU2 的 endlevel,即 BLSTRU1 用于 level1 和 level2 轨道的生成,BLSTRU2 用于 level3 轨道的生成。 5. Metropolis parameters 如注释所说,这部分参数实际上大多数情况下不需要改变。 Start_tem_S:优化 Spillage 的初始温度,更高的初始温度可以搜索更大的温度范围。 Start_tem_K:优化动能的初始温度,更高的初始温度可以搜索更大的温度范围。 Step_S:优化 Spillage 的步数。 Step_K:优化动能的步数。 Delta_kappa:模拟退火的惩罚函数\\kappa所用的参数\\Delta。 准备好以上输入文件后,通过以下命令即可开始生成轨道: $ ~/abacus-develop/tools/SIAB/Generate_Orbital_AllInOne.sh ORBITAL_INPUT 四、ABACUS 中数值原子轨道的测试流程 在生成轨道之后,为了保证基于数值原子轨道基组的第一性原理计算拥有与平面波基组相当的精度,我们需要针对该元素的一些常见的晶体结构做一些验证性计算。 以 Al 元素为例,我们可以选择 simple cubic(sc),body center cubic(bcc),face center cubic(fcc)和 hexagonal close-packed(hcp)这 4 种常见的晶体结构,采用平面波(Plane wave)基组和数值原子轨道基组计算这些晶体结构的平衡晶格常数、体弹性模量等基态性质,评估两种基组之间的误差随着截断半径、最大角动量以及轨道数量的收敛趋势,选择合适的数值原子轨道文件。例如以下就是用 ABACUS 的平面波和数值原子轨道 DZP 计算的铝的四种体相材料的体积-能量曲线,来自文献[1]。从图中可以看到,DZP 轨道描述不同体相的铝的相对能量还是精度较高的。细心的读者会发现纵坐标给出的是绝对能量,因为两种基矢量采用了相同的赝势,但左图给出的能量更低,这是因为平面波更加完备,所以根据 Honhenberg-Kohn 定理,体系总能量的密度泛函可以在更完备的基矢量下得到更好的收敛,即总能量更低。一般来说,平面波得到的总能量比 DZP 轨道小一些,大概在 0.1-0.2 eV/atom,是比较合理的。如果采用了同样的赝势,但两种基矢量给出的能量差别远远大于这个数值,则要检查一下是不是数值原子轨道产生出了问题。最后,大家有任何问题,欢迎写邮件到文档开头邮箱。 五、参考文献 [1] M. Chen, G.-C. Guo, and L. He, Systematically Improvable Optimized Atomic Basis Sets for Ab Initio Calculations, J. Phys.: Condens. Matter 22, 445501 (2010). [2] M. Chen, G.-C. Guo, and L. He, Electronic Structure Interpolation via Atomic Orbitals, J. Phys.: Condens. Matter 23, 325501 (2011). "},"abacus-nac3.html":{"url":"abacus-nac3.html","title":"数值原子轨道(三):产生高精度数值原子轨道","keywords":"","body":"数值原子轨道(三):产生高精度数值原子轨道 作者:刘裕,邮箱:liuyu@stu.pku.edu.cn 审核:林霈泽,邮箱:linpeize@sslab.org.cn 最后更新时间:2023/06/20 一、PTG(PyTorch Gradient)方法 这篇文档是数值原子轨道系列的第三篇文档,除了第二篇文档提到的模拟退火算法之外,还可以使用 Pytorch 中的自动微分算法来最小化溢出函数。首先定义损失函数如下,并可以证明它与溢出函数是等价的: \\Delta \\mathrm{PSI} \\stackrel{\\text { def }}{=} \\frac{1}{N_n} \\sum_{n=1}^{N_m} \\|\\left|\\Psi_n\\right\\rangle-\\left|\\tilde{\\Psi}_n\\right\\rangle \\|^2, 其中 \\left|\\tilde{\\Psi}_n\\right\\rangle \\stackrel{\\text { def }}{=} \\hat{P}\\left|\\Psi_n\\right\\rangle, 且\\hat{P}是由所有原子轨道张成的投影子,即\\hat{P}=\\sum_{\\mu v}\\left|\\phi_\\mu\\right\\rangle S_{\\mu v}^{-1}\\left\\langle\\phi_v\\right| \\text {}。由 \\hat{P}^2=\\hat{P}及 \\left\\langle\\Psi_n|\\Psi_n\\right\\rangle=\\delta_{mn}可知,此处的损失函数\\Delta \\mathrm{PSI}与溢出函数是等价的。 二、PTG_dpsi(PyTorch Gradient with dpsi)方法 为了增加局域轨道做电子结构计算时的精度,损失函数的定义还可以被拓展,即在其中加入波函数的梯度,将总的损失函数定义为: \\Delta \\mathrm{PSI} \\stackrel{\\text { def }}{=} \\frac{1}{N_n} \\sum_{n=1}^{N_m} [\\|\\left|\\Psi_n\\right\\rangle-\\left|\\tilde{\\Psi}_n\\right\\rangle \\|^2+\\|\\left|\\nabla\\Psi_n\\right\\rangle-\\left|\\nabla\\tilde{\\Psi}_n\\right\\rangle \\|^2]. 由于投影波函数\\left|\\tilde{\\Psi}_{n}\\right\\rangle是数值原子轨道的线性组合: \\left|\\tilde{\\Psi}_{n}\\right\\rangle=\\sum_{\\mu} a_{\\mu n}\\left|\\phi_{\\mu}\\right\\rangle, 其中系数的表达式为 a_{\\mu n}=\\sum_{\\nu} S_{\\mu \\nu}^{-1}\\left\\langle\\phi_{\\nu} \\mid \\Psi_{n}\\right\\rangle. 那么投影波函数的梯度可以表示为数值原子轨道梯度的线性组合: \\left|\\nabla \\tilde{\\Psi}_{n}\\right\\rangle=\\sum_{\\mu} a_{\\mu n}\\left|\\nabla \\phi_{\\mu}\\right\\rangle. 因此,损失函数的梯度项可以转化为: \\begin{array}{l} \\|\\left|\\nabla \\Psi_{n}\\right\\rangle-\\left|\\nabla \\tilde{\\Psi}_{n}\\right\\rangle \\|^{2} \\\\ =\\left\\langle\\nabla \\Psi_{n} \\mid \\nabla \\Psi_{n}\\right\\rangle-\\sum_{\\mu} a_{\\mu n}\\left\\langle\\nabla \\Psi_{n} \\mid \\nabla \\phi_{\\mu}\\right\\rangle \\\\ -\\sum_{\\nu} a_{v n}^{*}\\left\\langle\\nabla \\phi_{v} \\mid \\nabla \\Psi_{n}\\right\\rangle+\\sum_{\\mu \\nu} a_{\\mu n} a_{v n}^{*}\\left\\langle\\nabla \\phi_{v} \\mid \\nabla \\phi_{\\mu}\\right\\rangle. \\end{array} 根据经验,使用这个算法生成的双重-ζ + 极化(DZP)基组,精度与模拟退火法或 PTG 法生成的三重-ζ + 双极化(TZDP)甚至四倍-ζ + 三重极化(QZTP)基组相当。 在平面波计算中,除了数值原子轨道(二):生成给定模守恒赝势的数值原子轨道 提到的 overlap 输出文件 OUT.${suffix}/orb_matrix.0.dat 之外,overlap 输出文件 OUT.${suffix}/orb_matrix.1.dat 同样会作为生成轨道的输入文件之一,该文件保存与波函数梯度相关的如下 overlap 项: 1)电子波函数梯度|\\nabla \\Psi_i\\rangle和局域轨道梯度|\\nabla \\phi_\\mu\\rangle的 overlap,也就是电子波函数梯度|\\nabla \\Psi_i\\rangle以及球贝塞尔函数梯度\\nabla j_l(q r)之间的 overlap\\langle \\nabla \\Psi_i|\\nabla j_l(q r)\\rangle; 2)球贝塞尔函数梯度\\nabla j_l(q r)之间的 overlap\\langle \\nabla j_{l_2}(q_2 r)|\\nabla j_{l_1}(q_1 r)\\rangle; 3)电子波函数梯度|\\nabla \\Psi_i\\rangle之间的 overlap\\langle \\nabla \\Psi_i|\\nabla \\Psi_i\\rangle。 三、安装 Pytorch PTG 和 PTG_dpsi 方法采用 python 语言,无需编译,但是依赖 pytorch 包,下面介绍利用 conda 安装 pytorch 的方法: # 确定conda版本 $ conda -V conda 4.8.3 # 确定python3版本 $ python3 -V Python 3.5.2 # 创建python环境 $ conda create -n pytorch python=3.5 # 激活环境(每次使用pytorch需要激活该环境) $ source activate pytorch # 安装pytorch $ conda install pytorch torchvision torchaudio cpuonly -c pytorch # 安装依赖库 $ pip3 install --user scipy numpy $ pip3 install --user torch_optimizer # 退出python环境(使用完毕后) $ source deactivate 四、产生高精度数值原子轨道流程 首先下载 PTG_dpsi 仓库 # github仓库 git clone -b main https://github.com/abacusmodeling/ABACUS-orbitals 接着准备输入文件 SIAB_INPUT #-------------------------------------------------------------------------------- #1. CMD & ENV EXE_mpi mpirun -np 4 EXE_pw /home/liuyu/github/abacus-develop/build/abacus EXE_opt /home/liuyu/github/ABACUS-orbitals/SIAB/opt_orb_pytorch_dpsi/main.py #-------------------------------------------------------------------------------- #2. Electronic calculatation element Si # Element Name Ecut 100 # in Ry Rcut 6 7 # in Bohr Pseudo_dir /home/liuyu/github/abacus-develop/tests/PP_ORB Pseudo_name Si_ONCV_PBE-1.0.upf sigma 0.01 # energy range for gauss smearing (in Ry) #-------------------------------------------------------------------------------- #3. Reference structure related parameters for PW calculation #For the built-in structure types (including 'dimer', 'trimer' and 'tetramer'): #STRU Name #STRU Type #nbands #MaxL #nspin #Bond Length list STRU1 dimer 8 2 1 1.8 2.0 2.3 2.8 3.8 STRU2 trimer 10 2 1 1.9 2.1 2.6 #-------------------------------------------------------------------------------- #4. SIAB calculatation max_steps 200 # Orbital configure and reference target for each level #LevelIndex #Ref STRU Name #Ref Bands #InputOrb #OrbitalConf Level1 STRU1 4 none 1s1p Level2 STRU1 4 fix 2s2p1d Level3 STRU2 6 fix 3s3p2d #-------------------------------------------------------------------------------- #5. Save Orbitals #Index #LevelNum #OrbitalType Save1 Level1 SZ Save2 Level2 DZP Save3 Level3 TZDP 该输入文件同样包含 5 个部分: 1. CMD & ENV EXE_mpi:MPI 并行计算命令,这里我们采用的是 4 核 MPI 并行进行 dimer(或者 trimer)的平面波计算。 EXE_pw:ABACUS 可执行程序的绝对路径。 EXE_opt:数值原子轨道生成程序 PTG_dpsi 的绝对路径。 2. Electronic calculatation element:元素名。 Ecut:平面波截断能,单位为 Ry。 Rcut:数值原子轨道的截断半径,单位为 Bohr。这里的多个取值表明,采用相同的一套参数,生成多个不同截断半径的数值原子轨道文件,根据第一部分的基础知识,截断半径会极大地影响数值原子轨道的质量,因此该参数可以帮助我们一次性生成多个不同截断半径的数值原子轨道文件。 Pseudo_dir:平面波计算采用的赝势文件所在文件夹的绝对路径。 Pseudo:平面波计算采用的赝势文件名。 sigma:平面波计算采用 Gaussian smearing 的展宽,单位为 Ry,一般取 0.01 即可。 3. Reference structure related parameters for PW calculation STRU Name:参考构型组别 STRU1、STRU2、STRU3...... STRU Type:参考体系构型,一般可取 dimer,trimer,tetramer。 nbands:平面波计算中的实际能带数,必须保证包含非占据态。 MaxL:最大角动量。 nspin:自旋量子数。 Bond Length list:键长取值列表,单位为埃。以 STRU1 为例,这一组共有 5 个不同键长的 dimer 作为生成轨道的参考构型。 4. SIAB calculatation max_steps:优化步数 LevelIndex:轨道分层的 index,取 Level1、Level2、Level3...... Ref STRU Name:该层级的轨道采用哪一组参考构型生成。以上面的输入参数为例,Level1 和 Level2 的轨道采用 STRU1 组别的 dimer 参考构型生成,Level3 的轨道采用 STRU2 组别的 trimerr 参考构型生成。 Ref Bands:拟合参考体系的能带数,若输入“auto”则自动拟合所有基态。 InputOrb:是否在已有的轨道基础上生成新轨道,一般 Level1 设为 none,即没有旧轨道;Level2 一般以 Level1 生成的轨道为基础继续生成轨道,Level3 往后同理。 OrbitalConf:轨道的具体配置,这里 Level1 是 SZ 层级,Level2 是 DZP 层级,Level3 是 TZDP 层级,实际上还可以继续设置更高层级的轨道。 5. Save Orbitals Index:取值 Save1、Save2、Save3...... LevelNum:将特定 Level 的轨道保存到一个轨道文件中。以上面的输入参数为例,分别将 Level1、Level2、Level3 对应的轨道保存到单独的轨道文件中。 OrbitalType:即保存的轨道文件中,该轨道基组所属的层级。以上面的输入参数为例,分别为 SZ、DZP、TDZP。 准备好输入参数文件 SIAB_INPUT 后,运行如下命令即可开始生成轨道: $ python3 ~/github/ABACUS-orbitals/SIAB/SIAB.py SIAB_INPUT 程序正常结束后,轨道会分别保存在 Orbital_Si_SZ、Orbital_Si_DZP、Orbital_Si_TZDP 中,并自动命名成标准格式(如 Si_gga_6au_100Ry_2s2p1d.orb)。 五、参考文献 [1] Peize Lin, Xinguo Ren and Lixin He, Strategy for constructing compact numerical atomic orbital basis sets by incorporating the gradients of reference wavefunctions, Phys. Rev. B 103, 235131 (2021). "},"abacus-md.html":{"url":"abacus-md.html","title":"ABACUS 分子动力学使用教程","keywords":"","body":"ABACUS 分子动力学使用教程 作者:刘裕,邮箱:liuyu@stu.pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/07/20 一、分子动力学方法简介 分子动力学(Molecular Dynamics,简称 MD):一种模拟原子体系随时间运动的方法,被广泛的用来研究与原子运动路径相关的一些基本过程,如相变、扩散、化学反应等等。本教程旨在介绍 ABACUS 中的分子动力学功能,分子动力学模拟重要的一件事情是如何选取精度和效率的平衡,其中精度高低主要取决于势函数的准确程度,而效率主要受限于求出每个原子的能量和受力的计算量。 经典分子动力学(Classical MD,简称 CMD):通过构建描述原子间相互作用的势函数,获得每个原子的受力(受力等于能量对原子位置的导数),再通过积分运动方程来获得每个原子的下一时刻位置,从而获得随时间演化的粒子位置和速度。当系统处在一定的密度、温度和压强等物理条件限制下,可以结合统计物理的方法计算物质的性质。具体来说,采取某个系综后,对粒子位置和速度采样,之后统计出体系的热力学宏观性质。 从头算分子动力学(ab initio molecular dynamics,简称 AIMD):也称为第一性原理的分子动力学方法(first-principles molecular dynamics,简称 FPMD),该方法采用的是第一性原理方法(例如密度泛函理论)来计算体系的势能面,因此计算量相比于经典分子动力学方法要昂贵很多。 ABACUS 的分子动力学功能:支持第一性原理分子动力学 FPMD 方法,也支持经典的 Lennard-Jones(LJ 对势)的分子动力学模拟。此外,ABACUS 还支持深度势能分子动力学(Deep Potential Molecular Dynamics,简称 DPMD)方法,此时需要编译 DeePMD-kit 软件包并在编译原子算筹软件时进行动态库的链接。 二、文档和算例下载地址 ABACUS 里关于分子动力学方法的线上文档地址为:http://abacus.deepmodeling.com/en/latest/advanced/md.html ABACUS 里关于分子动力学参数的线上文档地址为: http://abacus.deepmodeling.com/en/latest/advanced/input_files/input-main.html#molecular-dynamics ABACUS 的 MD 算例下载地址为(国内 gitee): https://gitee.com/mcresearch/abacus-user-guide/tree/master/examples/md 可以采用的下载命令是: git clone https://gitee.com/mcresearch/abacus-user-guide.git 之后进入 /abacus-user-guide/examples/md 目录 或者采用 Github 仓库地址: https://github.com/MCresearch/abacus-user-guide/tree/master/examples/md 注:算例仓库里面包含 1_AIMD,2_LJMD(采用 Lennard-Jones 经典势做 MD)和 3_DPMD(采用深度势能方法做 MD)三个目录。 注:以上算例要在 ABACUS v3.2.1 版本及以上可以运行成功,并且我们强烈建议下载使用 ABACUS 最新版本! 1. 第一性原理分子动力学(AIMD) 进入 1_AIMD 目录,该目录提供了 8 个输入文件,使用的时候将 INPUT_* 复制为 INPUT 即可(INPUT_* 代表从 INPUT_0 到 INPUT_7 共 8 个不同的 INPUT 文件,对应 8 种不同的 MD 算法)。该算例采用 8 原子的金刚石结构 Si,晶格结构放在 STRU 文件里,布里渊区的 k 点采样放在 KPT 文件里。 8 个 INPUT 文件对应的 MD 方法如下: INPUT_0:采用 NVE 微正则系综 INPUT_1:采用 NVT 正则系综 INPUT_2:采用 Langevin 热库 INPUT_3:采用 Anderson 热库,NVT 系综 INPUT_4:采用 MSST 方法 INPUT_5:采用 Berendsen 热库,NVT 系综 INPUT_6:采用 rescaling 方法,NVT 系综 INPUT_7:采用 rescale_v 方法,NVT 系综 以 INPUT_0 为例: INPUT_PARAMETERS #Parameters (1.General) suffix Si_nve calculation md nbands 20 symmetry 0 pseudo_dir ../../../tests/PP_ORB orbital_dir ../../../tests/PP_ORB #Parameters (2.Iteration) ecutwfc 30 scf_thr 1e-5 scf_nmax 100 #Parameters (3.Basis) basis_type lcao ks_solver genelpa gamma_only 1 #Parameters (4.Smearing) smearing_method gaussian smearing_sigma 0.001 #Parameters (5.Mixing) mixing_type pulay mixing_beta 0.3 chg_extrap second-order #Parameters (6.MD) md_type nve md_nstep 10 md_dt 1 md_tfirst 300 这些参数在 ABACUS 线上文档中均有说明,在这里再进行简单概述: calculation:设置 ABACUS 计算类型,做分子动力学模拟请设置为 md。 esolver_type:给定原子位置进行系统能量的计算,默认 Kohn-Sham 密度泛函理论(ksdft),还可以设置 LJ 势(lj)或者深度势能(dp)。理论上来说,所有的 esolver_type 都可以用于 MD 计算。 chg_extrap:电荷外插法,在 relax 和 md 计算中可用于优化电荷密度初始化,加速电子迭代收敛,MD 中可以设置为 second-order。 md_type:MD 算法种类,默认是正则系统 nvt,这里的例子选择的是 nve,即 NVE 微正则系综。 md_nstep:MD 模拟的总步数。 md_dt:MD 计算每一步的时间步长(单位是 fs),与 md_nstep 共同决定 MD 总时长。 md_tfirst:MD 系统的初始温度(单位是 K)。 2. Lennard-Jones 势函数 进入 2_LJMD 目录,ABACUS 软件包中提供了一个采用 Lennard-Jones(LJ)经典势函数进行 MD 模拟的算例,该算例采用 LJ 对势作为能量求解器来做经典分子动力学,初始结构是边长 20 埃的正方体盒子中的 256 个无序 He 原子。 2.1 LJ 对势 LJ 对势的解析形式如下:u^{ij}表示原子 i 与原子 j 之间的相互作用能,r^{ij}表示这两个原子之间的距离,\\epsilon,\\sigma和r_{cut}则是 LJ 势需要的 3 个参数。LJ 势只考虑截断半径r_{cut}内的近邻原子 j 对中心原子 i 的能量贡献。 \\begin{array}{c} u^{i j}=4 \\varepsilon\\left[\\left(\\frac{\\sigma}{r_{i j}}\\right)^{12}-\\left(\\frac{\\sigma}{r_{i j}}\\right)^{6}\\right] \\\\ \\boldsymbol{F}_{i}=-\\nabla_{i} U=\\sum_{j} 4 \\varepsilon\\left[12\\left(\\frac{\\sigma}{r_{i j}}\\right)^{12}-6\\left(\\frac{\\sigma}{r_{i j}}\\right)^{6}\\right] \\frac{\\boldsymbol{r}_{i}-\\boldsymbol{r}_{j}}{r_{i j}^{2}} H\\left(r_{c u t}-r_{i j}\\right) \\end{array} \\\\ H(x)=\\left\\{\\begin{array}{l} 0\\ \\ \\ \\ (x0) \\end{array}\\right.\\\\ 2.2 STRU LJMD 是经典分子动力学,不需要提供 KPT,赝势和轨道文件,STRU 的前面几部分如下: ATOMIC_SPECIES He 4.0026 LATTICE_CONSTANT 1.889727 LATTICE_VECTORS 20 0 0 0 20 0 0 0 20 ATOMIC_POSITIONS Cartesian He #label 0 #magnetism 256 #number of atoms ATOMIC_SPECIES:不需要提供赝势信息 NUMERICAL_ORBITAL:不需要添加轨道信息 2.3 INPUT INPUT 文件中的参数也需要做少量修改: INPUT_PARAMETERS #Parameters (General) suffix autotest calculation md pseudo_dir ../../PP_ORB #Parameters (esolver) esolver_type lj lj_rcut 8.5 lj_epsilon 0.01032 lj_sigma 3.405 cal_force 1 cal_stress 1 #Parameters (MD) md_nstep 5 md_type nve md_dt 1 md_tfirst 300 init_vel 1 esolver_type:指定为 lj 就可以做 Lennard-Jones 经典势函数。 lj_rcut:LJ 对势的参数,即截断半径r_{cut}。 lj_epsilon:LJ 对势的参数,即\\epsilon。 lj_sigma:LJ 对势的参数,即\\sigma。 init_vel:读取 STRU 中的原子速度信息,原子单位制。 3. 深度势能(Deep Potential) ABACUS 软件包中提供了一个 DPMD 的算例,进入 3_DPMD 目录。该算例采用 DP 模型(DeePMD-kit 产生的深度势能模型)作为能量求解器来做基于机器学习的分子动力学,初始结构是 864 个无序铝原子。 3.1 DP 模型 DeePMD-kit 是一种基于机器学习的分子动力学模拟方法,该方法是通过使用第一性原理计算数据对深度神经网络模型进行训练,从而得到通用的多体势能模型(DP 模型)。 3.2 编译方式 ABACUS 采用 DP 模型做 MD 计算需要编译与 DeePMD-kit 的接口,cmake 以及 makefile 编译方式可以参考 ABACUS 线上文档。 3.3 INPUT 文件设置 DPMD 是经典分子动力学,不需要提供 KPT,赝势和轨道文件 INPUT 文件中的参数需要做少量修改: INPUT_PARAMETERS #Parameters (General) suffix autotest calculation md esolver_type dp pot_file ../../PP_ORB/Al-SCAN.pb cal_force 1 cal_stress 1 md_nstep 3 md_type msst md_dt 1 md_tfirst 200 md_dumpfreq 1 md_restartfreq 1 msst_qmass 200 msst_vel 0.028 msst_vis 0.3 init_vel 1 esolver_type:设置为 dp pot_file:DP 模型文件路径 md_dumpfreq:MD 输出文件 MD_dump 中原子以及晶胞信息的输出频率 md_restartfreq:结构文件 STRU_MD_${istep} 的输出频率,MD 续算文件 Restart_md.dat 的更新频率 3.4 STRU 文件的设置 首先,我们可以通过如下命令确定 DP 势文件中是否存在关键字“type_map”: $ strings Al-SCAN.pb | grep type_map {\"model\": {\"type_map\": [\"Al\"], \"descriptor\": {\"type\": \"se_e2_a\", \"sel\": [150], \"rcut_smth\": 0.5, \"rcut\": 6.0, \"neuron\": [25, 50, 100], \"resnet_dt\": false, \"axis_neuron\": 16, \"seed\": 1, \"activation_function\": \"tanh\", \"type_one_side\": false, \"precision\": \"default\", \"trainable\": true, \"exclude_types\": [], \"set_davg_zero\": false}, \"fitting_net\": {\"neuron\": [240, 240, 240], \"resnet_dt\": true, \"seed\": 1, \"type\": \"ener\", \"numb_fparam\": 0, \"numb_aparam\": 0, \"activation_function\": \"tanh\", \"precision\": \"default\", \"trainable\": true, \"rcond\": 0.001, \"atom_ener\": []}, \"data_stat_nbatch\": 10, \"data_stat_protect\": 0.01}, \"learning_rate\": {\"type\": \"exp\", \"decay_steps\": 5000, \"start_lr\": 0.001, \"stop_lr\": 3.51e-08, \"scale_by_worker\": \"linear\"}, \"loss\": {\"type\": \"ener\", \"start_pref_e\": 0.02, \"limit_pref_e\": 1, \"start_pref_f\": 1000, \"limit_pref_f\": 1, \"start_pref_v\": 0, \"limit_pref_v\": 0, \"start_pref_ae\": 0.0, \"limit_pref_ae\": 0.0, \"start_pref_pf\": 0.0, \"limit_pref_pf\": 0.0, \"enable_atom_ener_coeff\": false}, \"training\": {\"training_data\": {\"systems\": [\"../deepmd_data/\"], \"batch_size\": \"auto\", \"set_prefix\": \"set\", \"auto_prob\": \"prob_sys_size\", \"sys_probs\": null}, \"validation_data\": {\"systems\": [\"../deepmd_validation\"], \"batch_size\": 1, \"numb_btch\": 3, \"set_prefix\": \"set\", \"auto_prob\": \"prob_sys_size\", \"sys_probs\": null}, \"numb_steps\": 1000000, \"seed\": 10, \"disp_file\": \"lcurve.out\", \"disp_freq\": 100, \"save_freq\": 1000, \"save_ckpt\": \"model.ckpt\", \"disp_training\": true, \"time_training\": true, \"profiling\": false, \"profiling_file\": \"timeline.json\", \"enable_profiler\": false, \"tensorboard\": false, \"tensorboard_log_dir\": \"log\", \"tensorboard_freq\": 1}} 如果存在关键字 type_map,那么 ABACUS 会自动匹配 STRU 和 DP 势文件中的原子种类顺序。 否则,STRU 中的原子种类以及顺序必须与 DP 势文件中的原子种类以及顺序一致。 例如,如果我们用 Al-Cu-Mg 三元合金的 DP 势文件来跑 Al-Mg 二元合金的 MD,那么 STRU 应该如下所示: ATOMIC_SPECIES Al 26.982 Cu 63.546 Mg 24.305 LATTICE_CONSTANT 1.889727000000 LATTICE_VECTORS 4.0 0.0 0.0 0.0 4.0 0.0 0.0 0.0 4.0 ATOMIC_POSITIONS Cartesian Al 0 2 0.0 0.0 0.0 0.5 0.5 0.0 Cu 0 0 Mg 0 2 0.5 0.0 0.5 0.0 0.5 0.5 注:在这个例子中,即使 Cu 原子的数量为 0,也必须在 STRU 中给出 Cu 原子相关信息。 三、MD 输出和续算功能 1. MD 输出文件 ABACUS 的 MD 模拟会产生 3 类输出文件:结构文件 STRU_MD_${istep},续算文件 Restart_md.dat,信息文件 MD_dump。 1.1 结构文件 STRU_MD_${istep} 参数 md_restartfreq 控制 OUT.${suffix}/STRU/文件夹中结构文件STRU_MD_${istep}的输出频率,该文件格式与输入结构文件 STRU 相同,主要用于 MD 续算。这里 istep 代表离子步,从 0 开始计数。 1.2 续算文件 Restart_md.dat 参数 md_restartfreq 控制 OUT.${suffix}/Restart_md.dat 的更新频率,用于 MD 续算。 1.3 信息文件 MD_dump 参数 md_dumpfreq 控制 OUT.${suffix}/MD_dump 文件的追加输出频率,该文件输出每 md_dumpfreq 步的 MD 信息,包括 MD 步数,晶格常数,晶格矢量,晶格维里,原子编号,原子位置,原子受力,原子速度。其中,晶格维里,原子受力,原子速度可以通过输入参数 dump_virial,dump_force,dump_vel 控制是否输出。 MDSTEP: 0 LATTICE_CONSTANT: 5.397605400000 Angstrom LATTICE_VECTORS 0.500000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.500000000000 VIRIAL (kbar) 123.045275146001 -3.807535058112 -13.541439282961 -3.807535058112 124.421300186299 24.047959743672 -13.541439282961 24.047959743672 125.016024430342 INDEX LABEL POSITION (Angstrom) FORCE (eV/Angstrom) VELOCITY (Angstrom/fs) 0 Si 0.000000000000 0.000000000000 0.000000000000 -0.885362725233 0.500467424348 0.150239620206 -0.003506076235 0.000412570794 0.000094403053 1 Si 1.300822817264 1.376389287977 1.354798867769 0.885362725233 -0.500467424348 -0.150239620206 0.003506076235 -0.000412570794 -0.000094403053 MDSTEP: 1 LATTICE_CONSTANT: 5.397605400000 Angstrom LATTICE_VECTORS 0.500000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.500000000000 VIRIAL (kbar) 123.051574098220 -2.465332696362 -10.608474638302 -2.465332696362 123.587154919736 16.307187552709 -10.608474638302 16.307187552709 123.960669810770 INDEX LABEL POSITION (Angstrom) FORCE (eV/Angstrom) VELOCITY (Angstrom/fs) 0 Si 5.389827754452 2.701629481339 2.699621723525 -0.602062173578 0.391990779819 0.096323485153 -0.010548689866 0.004659227844 0.001267888485 1 Si 1.308600113700 1.373562332082 1.353979669688 0.602062173578 -0.391990779819 -0.096323485153 0.010548689866 -0.004659227844 -0.001267888485 MDSTEP: 2 LATTICE_CONSTANT: 5.397605400000 Angstrom LATTICE_VECTORS 0.500000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.500000000000 VIRIAL (kbar) 122.953007762375 -0.240072876170 -4.211946086929 -0.240072876170 122.930693852071 3.378536464243 -4.211946086929 3.378536464243 122.992607262385 INDEX LABEL POSITION (Angstrom) FORCE (eV/Angstrom) VELOCITY (Angstrom/fs) 0 Si 5.376757913710 2.708010452044 2.701308224779 -0.124946902346 0.155367961328 0.009378252255 -0.012739769308 0.006644009927 0.001613591879 1 Si 1.321669954442 1.367181361377 1.352293168434 0.124946902346 -0.155367961328 -0.009378252255 0.012739769308 -0.006644009927 -0.001613591879 MDSTEP: 3 LATTICE_CONSTANT: 5.397605400000 Angstrom LATTICE_VECTORS 0.500000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.000000000000 0.500000000000 0.500000000000 VIRIAL (kbar) 122.881221914392 1.206247195689 2.345023988024 1.206247195689 123.110079832453 -8.436042066928 2.345023988024 -8.436042066928 123.123976300784 INDEX LABEL POSITION (Angstrom) FORCE (eV/Angstrom) VELOCITY (Angstrom/fs) 0 Si 5.364727401370 2.714719749381 2.702800880457 0.310711926370 -0.086233730382 -0.043760493686 -0.009222308089 0.005510922784 0.001122226311 1 Si 1.333700466782 1.360472064040 1.350800512757 -0.310711926370 0.086233730382 0.043760493686 0.009222308089 -0.005510922784 -0.001122226311 2 MD 续算功能 如果 ABACUS 运行达到指定的 MD 步数,或者计算中断,可以通过 MD 续算功能继续之前的 MD 计算。 以上一个 INPUT 文件为例: INPUT_PARAMETERS #Parameters (General) suffix autotest calculation md pseudo_dir ../../PP_ORB esolver_type dp pot_file ../../PP_ORB/Al-SCAN.pb cal_force 1 cal_stress 1 md_nstep 3 md_type msst md_dt 1 md_tfirst 200 md_dumpfreq 1 md_restartfreq 1 md_restart 1 msst_qmass 200 msst_vel 0.028 msst_vis 0.3 init_vel 1 md_restart:控制续算的开关,在 MD 续算时将这个参数设为 1,其他参数不变。当 md_restart 设为 1,ABACUS 会读取${read_file_dir}/Restart_md.dat文件,从中获取当前MD步数istep以及续算所需的其他参数如恒温器以及恒压器的信息,根据istep从OUT.${suffix}/STRU/ 文件夹中读取相应的结构文件 STRU_MD_${istep},之后就可以进行 MD 续算了。 四、MD 后处理 目前主流的可视化软件如 VESTA、VMD、OVITO 并不支持 ABACUS 的文件格式,因此我们需要通过一些后处理软件实现 ABACUS 的 STRU、MD_dump 文件与常用文件格式的转化。我们比较推荐的后处理软件有: 1 ASE 官网:https://wiki.fysik.dtu.dk/ase/ 用法参考 ABACUS 线上文档:http://abacus.deepmodeling.com/en/latest/advanced/interface/ase.html 2 dpdata github 网址:https://github.com/deepmodeling/dpdata gitee 网址:https://gitee.com/deepmodeling/dpdata 3 案例 现在我们用 LJMD 算例来演示如何采用dpdata+OVITO的方式在 MD 计算完成后制作分子动力学轨迹动画。 3.1 MD 计算 下载案例文件 $ git clone https://gitee.com/mcresearch/abacus-user-guide 进入 LJMD 文件夹 $ cd abacus-user-guide/examples/md/2_LJMD 修改 INPUT 参数,把 md_nstep 改为 100 INPUT_PARAMETERS #Parameters (General) suffix autotest calculation md pseudo_dir ../../PP_ORB #Parameters (esolver) esolver_type lj lj_rcut 8.5 lj_epsilon 0.01032 lj_sigma 3.405 cal_force 1 cal_stress 1 #Parameters (MD) md_nstep 100 md_type nve md_dt 1 md_tfirst 300 init_vel 1 运行 abacus $ abacus 3.2 dpdata 转化格式 安装 dpdata $ git clone https://github.com/deepmodeling/dpdata.git dpdata $ cd dpdata $ pip install . 运行 dpdata,将 MD_dump 文件转化为 GROMACS 的 gro 格式的文件 data.gro $ python3 >>> import dpdata >>> data = dpdata.LabeledSystem(\"./\", fmt=\"abacus/md\") >>> data.to_gro(\"data.gro\") 3.3 OVITO 制作动画 打开 OVITO,点击左上角 load file,选择上一步的 data.gro 文件 右上角 rendering settings 点击 Render active viewport 即可保存动画文件 "},"abacus-sdft.html":{"url":"abacus-sdft.html","title":"ABACUS 随机波函数DFT方法使用教程","keywords":"","body":"ABACUS 随机波函数 DFT 方法使用教程 作者:陈涛,邮箱:chentao@stu.pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/07/11 一、介绍 本教程旨在介绍 ABACUS 中随机波函数密度泛函理论(Stochastic Density Functional Theory,以下简称 SDFT)计算功能。目前 ABACUS 使用 SDFT 主要聚焦在高温高压物质的模拟,特别是温稠密物质(Warm Dense Matter,简称 WDM)。在进行温稠密物质计算时(温度高达数十到上千 eV, 1 eV=11604.5 K),传统的 Kohn-Sham 密度泛函理论(KSDFT)需要用到极大数量的占据态电子波函数导致计算困难,而 SDFT 使用随机波函数轨道,可以有效地避开对角化哈密顿矩阵这个问题,应用于高温计算。关于 ABACUS 中实现 SDFT 算法的细节可以参考 Qianrui Liu and Mohan Chen*, \"Plane-wave-based stochastic-deterministic density functional theory for extended systems,\" Phys. Rev. B, 106, 125132 (2022)。本教程中将会展示如何在 ABACUS 计算中使用 SDFT 功能,此外还会介绍混合随机波函数密度泛函理论方法使用(mixed stochastic-deterministic DFT,简称 MDFT),即在 SDFT 计算中,混入一部分的低能 Kohn-Sham 轨道,从而加速结果收敛。 二、软件和算例准备 ABACUS 的软件包(3.2.0 版本)中提供了一个 SDFT 的算例,可以从 Gitee 上下载。可以在网页右侧点击克隆/下载-> 下载 ZIP 得到算例,或者在 linux 终端执行如下命令得到算例: git clone https://gitee.com/mcresearch/abacus-user-guide.git 下载后解压,之后进入/abacus-user-guide/examples/stochastic 文件夹。算例中有三个文件夹,pw_Si2、pw_md_Al 和 186_PW_SDOS_10D10S。 三、采用 SDFT 进行电子自洽迭代计算 pw_Si2文件夹:这是一个电子温度为 0.6 Ry(约 8.16 eV)的 2 个原子的金刚石结构硅(Si)的电子自洽迭代(Self Consistent Field,简称 SCF)算例,包含布里渊区 K 点的 KPT 文件和包含原子位置的 STRU 文件与传统的 KSDFT 计算并无区别,主要的不同在于输入文件 INPUT,注意目前 SDFT 仅支持 smearing_method 为 fd。INPUT 文件如下: INPUT_PARAMETERS #Parameters (General) calculation scf esolver_type sdft pseudo_dir ../../PP_ORB nbands 4 nbands_sto 64 nche_sto 100 method_sto 1 #Parameters (Accuracy) ecutwfc 50 scf_nmax 20 symmetry 1 #Parameters (Smearing) smearing_method fd smearing_sigma 0.6 以上参数在 ABACUS 的线上文档中均有详细说明,这里再进行简单概述: calculation设置为 scf,代表进行电子自洽迭代计算(self-consistent field)。 esolver_type是选择系统总能量求解方法的,默认为 ksdft(Kohn-Sham density functiona theory),这里需要设置为 sdft 才会使用 SDFT 或者 MDFT 进行计算。 nbands是使用的 Kohn-Sham 轨道的数目(也叫 determinstic orbitals,是通过严格对角化矩阵计算出来的)。如果 nbands 设置为 0,且 nbands_sto(随机轨道数目,这里设成 64)不为 0,则会进行 SDFT 计算;如果 nbands>0,且 nbands_sto>0,则会进行混合 KS 电子轨道和随机轨道(stochastic orbitals)的 MDFT 计算。注意:一般 nbands 设置为能量低于费米能级对应的能带数,计算效率会比较高。 nbands_sto是使用随机波函数(stochastic orbitals)轨道数目,原则上取得越大则随机误差越小,但计算效率也会相应降低。 判断随机波函数个数是否足够的一个经验法则是:测试能量误差。实际计算中,一般可以采用10 个左右不同的随机数种子(可以参考 seed_sto 参数设置随机数种子,下面有介绍)生成的相同数目的随机波函数轨道进行 SDFT 计算,得到系统能量并求得相应误差,增加随机波函数轨道数目直到控制能量误差小于万分之一即可。 当 nbands_sto 设为 0 时, 程序会自动转成 KSDFT 进行计算(ABACUS 3.2.2 版本以后)。 nche_sto是将电子体系的哈密顿量进行切比雪夫展开的阶数,这个数取得越大则用到的切比雪夫展开阶数越多,相应的计算精度也会越高但效率会降低。大致关系为与温度成反比,温度越高,阶数可以取得越小;ecut(正比关系)越大,阶数越大;推荐使用的 nche_sto 的大小是使得输出文件 running_scf.log 中的 Chebyshev Precision 小于 1e-8。 method_sto是进行 SDFT 计算使用的方法:1 代表消耗内存较少但稍慢的方法,2 代表更快但需要更大内存的方法,默认是 2。 此外还有如下参数可能会用到: seed_sto:生成随机轨道的随机种子。默认是 0,代表随时间随机生成;若要控制使用相同的随机种子,可以设置一个大于 1 的整数。 bndpar:将所有并行的进程分成 bndpar 个组,计算所用随机轨道将平均分布在每个组中,可以提高并行效率,默认为 1。值得注意的是,这个参数并不是越大越好,并且不如 K 点并行(kpar参数)有效,实际计算中应该优先使用 K 点并行,然后测试不同大小的 bndpar,确定最佳的 bndpar。 平面波能量截断值 ecut 的测试:由于随机误差的出现,SDFT 的 ecut 的测试与传统的 KSDFT 稍有区别,但是原理是类似的。在确定好 nbands_sto 后,就可以测试 ecut 了。与测试 nbands_sto 类似,在不同的 ecut,需要采用 10 个左右不同的随机种子生成的相同数目的随机波函数轨道进行 SDFT 计算,然后取平均能量。由于温稠密物质能量一般都比较高,因此只要控制相邻二个 ecut(相差为 10 Ry)对应的平均能量差小于一定标准即可(例如万分之一)。 注 1:在这个例子里我们提供的赝势是 Si.pz-vbc.UPF 文件,这个文件包含 4 个硅的价电子。事实上,当温度特别高的时候,一般的赝势可能会面临可移植性差的问题,例如高温会使得内壳层电离。这个时候,要选择合理的赝势进行计算,甚至可能需要自己造一个新的赝势,目前 ABACUS 3.2.0 支持的是模守恒的赝势。 注 2:ABACUS 的 SDFT 和 MDFT 支持多个 k 点采样,因此可以在 KPT 文件里设置不同的 k 点个数,在某些性质的计算里,要注意计算性质随着 k 点的收敛。 四、采用 SDFT 进行分子动力学模拟 pw_md_Al 文件夹:这是一个电子温度为 7.35 Ry(约 100 eV)、包含 16 个铝(Al)原子的结构,我们对其进行分子动力学(Molecular Dynamics,简称 MD)的模拟。INPUT 文件如下: INPUT_PARAMETERS #Parameters (General) calculation md esolver_type sdft pseudo_dir ../../PP_ORB nbands 0 nbands_sto 64 nche_sto 20 method_sto 2 #Parameters (Accuracy) ecutwfc 50 scf_nmax 20 scf_thr 1e-6 symmetry 1 #Parameters (Smearing) smearing_method fd smearing_sigma 7.34986072 #Parameters (MD) md_tfirst 1160400 md_dt 0.2 md_nstep 10 注意要进行分子动力学模拟,calculation 参数需设置为 md。esolver_type 需设置为 sdft,才能进行 SDFT 的计算。这里 nbands 设置为 0,nbands_sto 设置为 64,代表仅仅使用随机轨道而没有 KS 轨道的 SDFT 计算。 五、采用 SDFT 计算态密度 186_PW_SDOS_10D10S 文件夹:采用 SDFT 还可以计算给定体系的态密度(Density of States,简称 DOS)。例如,186_PW_SDOS_10D10S 是一个 1 个 Si 原子的算例,电子温度约为0.6 Ry(约 8.16 eV)。如下所示: INPUT_PARAMETERS #Parameters (1.General) suffix autotest calculation scf esolver_type sdft method_sto 2 nbands 10 nbands_sto 10 nche_sto 120 emax_sto 0 emin_sto 0 seed_sto 20000 pseudo_dir ../../PP_ORB symmetry 1 kpar 1 bndpar 2 #Parameters (2.Iteration) ecutwfc 20 scf_thr 1e-6 scf_nmax 20 #Parameters (3.Basis) basis_type pw #Parameters (4.Smearing) smearing_method fd smearing_sigma 0.6 #Parameters (5.Mixing) mixing_type broyden mixing_beta 0.4 out_dos 1 dos_emin_ev -20 dos_emax_ev 100 dos_edelta_ev 0.1 dos_sigma 4 dos_nche 240 npart_sto 2 以上参数在 ABACUS 的线上文档中均有说明,这里再进行简单概述: out_dos:需要设置为 1,才能输出能态密度。 dos_emin_ev:能态密度的能量最小范围,单位 eV。 dos_emax_ev:能态密度的能量最大范围,单位 eV。 dos_edelta_ev:控制输出DOS时的能量间隔,单位 eV。 dos_sigma:能态密度的高斯展宽的因子,单位 eV。 dos_nche:计算能态密度时切比雪夫展开阶数,默认为 100。 npart_sto:当使用 method_sto=2 运行例如 DOS 的 SDFT 后处理时,将控制使用内存大小为正常的 1/npart_sto,防止内存不够导致无法计算,默认为 1。 注:态密度的输出文件是 OUT 文件夹下的 DOS1_smearing.dat。 六、结尾 总体来讲,随机波函数密度泛函理论方法(SDFT 或者 MDFT)的使用与 KSDFT 并无太大的区别,直接运行 ABACUS 程序即可,但是对一些关键参数的选取会影响精度和效率(例如 nbands, nbands_sto, nche_sto, method_sto, kpar, bnd_par)。对于极端高温计算(>10 eV),使用 SDFT 可以大大提高计算速度,是比普通的 KSDFT 更好的选择。如果大家使用有问题,欢迎写信联系(见上)。 "},"abacus-ofdft.html":{"url":"abacus-ofdft.html","title":"ABACUS 无轨道密度泛函理论方法使用教程","keywords":"","body":"ABACUS 无轨道密度泛函理论方法使用教程 作者:孙亮,邮箱:l.sun@pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/07/19 一、无轨道密度泛函理论背景知识 无轨道密度泛函理论(Orbital free density functional theory, OFDFT)是一种第一性原理模拟方法,相比于 Kohn Sham DFT (KSDFT),它的优势之一在于O(N\\ln N)的算法复杂度,这使得 OFDFT 可以用于上万原子甚至更大体系的电子基态计算,或者大体系、长时间的第一性原理分子动力学等。 目前,OFDFT 已被应用于简单金属、合金、半导体、小分子、温稠密物质等体系。 1. 无轨道密度泛函理论 在 OFDFT 的框架下,体系的总能量泛函可以写为 E_{\\rm{OF}}[\\rho] = T_{\\rm{s}}[\\rho] + E_{\\rm{ext}}[\\rho] + E_{\\rm{H}}[\\rho] + E_{\\rm{xc}}[\\rho] + E_{\\rm{II}}. 依次为无相互作用动能T_{\\rm{s}}[\\rho],电子-离子相互作用能E_{\\rm{ext}}[\\rho],电子-电子相互作用能E_{\\rm{H}}[\\rho],交换关联能E_{\\rm{xc}}[\\rho],离子-离子相互作用能E_{\\rm{II}},其中\\rho为电荷密度。 为了在粒子数守恒的条件下求解其极小值,利用拉格朗日乘子法,定义 L=E_{OF}[\\rho]-\\mu(\\int{\\rho(r)dr}-N), 可以证明,这里的乘子\\mu就是无相互作用体系中最高占据态的能量,即化学势。为了保证密度处处为正,一般对\\sqrt\\rho进行优化,因此求L对\\sqrt\\rho的导数,为了方便,定义\\phi(r) = \\sqrt {\\rho(r)},则有 \\frac{\\delta L}{\\delta \\phi}=\\frac{ \\delta E_{OF}[ \\rho ] }{ \\delta \\phi }-2\\mu\\phi=0 \\rightarrow V(r)\\phi(r)=\\mu\\phi(r). \\ \\ \\ \\ \\ \\ \\ \\ (*) 其中V(r)=\\frac{ \\delta E_{OF}[ \\rho ] }{ \\delta \\rho(r) }为势能。这就是 OFDFT 求解的方程,一般用共轭梯度(CG)法、截断牛顿(TN)法或 L-BFGS 等优化算法求解。目前 ABACUS 中实现了 TN 法和两种 CG 法(Polak-Ribire 形式和 Hager-Zhang 形式),默认采用 TN 法。 ABACUS 基于平面波基矢量,实现了上述流程,可以进行基于 OFDFT 的自洽计算,分子动力学计算,以及结构弛豫。 2. 动能泛函 OFDFT 的精度高度依赖于动能泛函(kinetic energy density functional, 简称 KEDF)的精度,目前 ABACUS 中实现了 Thomas-Fermi (TF) [1], von Weizsäcker (vW) [2], TFλvW [3], Wang-Teter (WT) [4], Luo-Karasiev-Trickey (LKT) [5]共五种动能泛函。 下面我们对这些泛函做简单介绍,并且介绍在 ABACUS 的 INPUT 文件中如何设置相关的参数。 2.1 Thomas-Fermi KEDF 设置 INPUT 文件中的 of_kinetic tf 参数 T_{\\rm{TF}}=\\frac{3}{10}(3\\pi^2)^{2/3}\\int{\\rho^{5/3}(r)dr}, 对均匀电子气精确成立,可用于极高温体系,比如处于温稠密状态的金属。 可通过 of_tf_weight 调整其权重,默认为 1。 2.2 von Weizsäcker KEDF 设置 of_kinetic vw T_{\\rm{vW}}=-\\frac{1}{2}\\int{\\sqrt{\\rho(r)} \\nabla^2 \\sqrt{\\rho(r)}dr}, 对单电子、双电子体系(只有一条轨道)严格成立,一般不单独使用。 可通过 of_vw_weight 调整其权重,默认为 1。 2.3 TFλvW KEDF 设置 of_kinetic tf+ T=T_\\text{TF}+\\lambda T_\\text{vW}, 当\\lambda=\\frac{1}{9}时就是TF KEDF的二阶梯度展开,一般\\lambda=\\frac{1}{5}时表现最好。 参数\\lambda可通过of_vw_weight设置,默认为1。 2.4 Wang-Teter KEDF 设置of_kinetic wt T_{\\rm{WT}} = \\frac{3}{10}(3\\pi^2)^{2/3} \\iint{\\rho ^{\\alpha}(r)W(r - r'){\\rho ^{\\beta}}(r') drdr'} + T_{\\rm{vW}} + T_{\\rm{TF}}, 基于 Lindhard 响应函数推导,在简单金属 Li、Mg、Al 中有着不错的表现。是 ABACUS 默认采用的 KEDF。 参数\\alpha,\\beta可通过 of_wt_alpha 和 of_wt_beta 设置,默认值均为\\frac{5}{6}。 2.5 Luo-Karasiev-Trickey KEDF 设置 of_kinetic lkt T_{\\rm{LKT}}= \\int{\\tau_{\\rm{TF}}\\frac{1}{\\cosh as}dr} + T_{\\rm{vW}}, s=\\frac{1}{2(3\\pi^2)^{1/3}}\\frac{|\\nabla\\rho|}{\\rho^{4/3}}. 可用于简单金属和半导体,计算效率较高,但在简单金属中精度低于 WT KEDF。 参数 a 可通过 of_lkt_a 设置,默认值为 1.3。 3. 局域赝势 由于 OFDFT 中舍弃了单电子轨道,无法采用常用的非局域赝势,如模守恒赝势,而必须采用局域赝势。 目前 ABACUS 支持 BLPS (bulk-derived local pseudopotential)。 下载地址: https://github.com/EACcodes/local-pseudopotentials实空间赝势:ABINIT, ABACUS; 倒空间赝势:PROFESS。赝势生成(需要和 ABINIT 7.0.5 结合):https://github.com/EACcodes/BLPSGenerator覆盖 Li, Mg, Al, Si, P, Ga, As, In, Sb 九种元素 使用 BLPS 时,需要在 ABACUS 里调整的参数有: INPUT 中:pseudo_rcut 16 STRU 中:赝势种类设置为 blps,比如 Al 26.98 al.lda.lps blps 二、ABACUS 中进行 OFDFT 计算的具体流程 1. 自洽计算 1.1 示例 下面是输入文件的示例: INPUT 文件记录 OFDFT 计算所需主要参数 INPUT_PARAMETERS #Parameters (1.General) suffix example calculation scf esolver_type ofdft symmetry 1 pseudo_dir ../../PP_ORB/ pseudo_rcut 16 nspin 1 #Parameters (2.Iteration) ecutwfc 60 scf_nmax 50 #Parameters (3.Basis) basis_type pw #OFDFT of_kinetic wt of_method tn STRU 文件记录元素种类、质量、赝势,晶格矢量,原子坐标等信息 ATOMIC_SPECIES Al 26.98 al.lda.lps blps LATTICE_CONSTANT 7.50241114482312 // add lattice constant LATTICE_VECTORS 0.000000000000 0.500000000000 0.500000000000 0.500000000000 0.000000000000 0.500000000000 0.500000000000 0.500000000000 0.000000000000 ATOMIC_POSITIONS Direct Al 0 1 0.000000000000 0.000000000000 0.000000000000 1 1 1 KPT 文件(因为 OFDFT 没有电子波函数,所以不需要布里渊区的多个 k 点,Gamma 点就可以) K_POINTS 0 Gamma 1 1 1 0 0 0 如上所示,与 KSDFT 的自洽计算相比,OFDFT 自洽计算的输入文件有以下几个区别: INPUT 不需要设置 smearing 和 charge mixing 相关参数,如果设置了也没有关系,这些参数不会影响 OFDFT 计算; 将 esolver_type 设置为 ofdft; 将 pseudo_rcut 设置为 16,以适配 BLPS 赝势。 STRU 将赝势种类设置为 blps。 做完以上调整后,即可使用默认参数进行 OFDFT 的自洽计算。 下面列举一些其它的重要参数: of_kinetic:用于选择动能泛函,可选项有 tf, vw, tf+, wt, lkt,默认值为 wt,具体介绍见 1.2 节; of_method:用于选择优化方法,可选项有 tn, cg1, cg2,分别对应截断牛顿法和两种 CG 法(Polak-Ribire 形式和 Hager-Zhang 形式),默认为 tn。一般而言,效率上 tn > cg2 > cg1; of_full_pw:做快速傅里叶变换(FFT)时,是否使用全部的平面波,默认为 True。建议打开,可以保证计算的稳定性和精度; of_full_pw_dim:控制 FFT 维数的奇偶性,可选项有 0, 1, 2,分别表示可奇可偶,保证为奇数,保证为偶数,默认为 0。FFT 维数为偶数时,可能导致微小的误差,但一般来说可以忽略。需要注意的是,如果打开了 nbspline,则需要设置 of_full_pw_dim 1,否则会导致计算不稳定。 1.2 注意事项 目前 ABACUS 的 OFDFT 模块并不是十分完善,使用时请注意以下几个注意事项: 目前 OFDFT 不支持 gamma only,因此使用 OFDFT 功能时请关闭 gamma_only; 目前 OFDFT 只支持自旋简并,即 nspin 1 的计算; 如果使用 PBE 泛函,建议用 dft_functional XC_GGA_X_PBE+XC_GGA_C_PBE 调用 Libxc 中的 PBE,否则可能导致计算不稳定。 2. 分子动力学与结构弛豫 ABACUS 中支持使用 OFDFT 作为能量、力和应力的求解器,进行分子动力学模拟与结构弛豫。 与使用 KSDFT 进行分子动力学或结构弛豫相比,使用 OFDFT 时,不需要对 MD,relax,或 cell-relax 相关参数进行修改,只需要按照 2.1 中的方式,将能量、力和应力的求解器替换为 OFDFT。 下面是几个实际的 INPUT 例子: 2.1 分子动力学(MD) INPUT_PARAMETERS #Parameters (1.General) suffix test calculation md esolver_type ofdft pseudo_dir ../../PP_ORB pseudo_rcut 16 #Parameters (2.Iteration) ecutwfc 60 scf_nmax 100 #OFDFT of_kinetic wt of_method tn of_full_pw_dim 1 #Parameters (3.Basis) basis_type pw md_restart 0 md_type nvt md_nstep 2 md_dt 0.25 md_tfirst 58022.52706 md_dumpfreq 10 md_tfreq 1.08 md_tchain 1 nbspline 10 2.2 原子结构弛豫(relax) INPUT_PARAMETERS #Parameters (1.General) suffix test calculation relax esolver_type ofdft pseudo_dir ../../PP_ORB pseudo_rcut 16 #Parameters (2.Iteration) ecutwfc 60 scf_nmax 100 #OFDFT of_kinetic wt of_method tn #Parameters (3.Basis) basis_type pw relax_nmax 50 2.3 晶格弛豫(cell-relax) INPUT_PARAMETERS #Parameters (1.General) suffix test calculation cell-relax esolver_type ofdft pseudo_dir ../../PP_ORB pseudo_rcut 16 #Parameters (2.Iteration) ecutwfc 60 scf_nmax 100 #OFDFT of_kinetic wt of_method tn #Parameters (3.Basis) basis_type pw relax_nmax 50 三、参考文献 [1] Fermi E. Statistical method to determine some properties of atoms[J]. Rend. Accad. Naz. Lincei, 1927, 6(602-607): 5. [2] Weizsäcker C F. Zur theorie der kernmassen[J]. Zeitschrift für Physik, 1935, 96(7-8): 431-458. [3] Berk A. Lower-bound energy functionals and their application to diatomic systems[J]. Physical Review A, 1983, 28(4): 1908. [4] Wang L W, Teter M P. Kinetic-energy functional of the electron density[J]. Physical Review B, 1992, 45(23): 13196. [5] Luo K, Karasiev V V, Trickey S B. A simple generalized gradient approximation for the noninteracting kinetic energy density functional[J]. Physical Review B, 2018, 98(4): 041111. "},"abacus-phonopy.html":{"url":"abacus-phonopy.html","title":"ABACUS+Phonopy 计算声子谱","keywords":"","body":"ABACUS+Phonopy 计算声子谱 作者:赵天琦,邮箱:zhaotq13@tsinghua.org.cn;陈涛,邮箱:chentao@stu.pku.edu.cn 审核:刘建川,邮箱:liujianchuan2013@163.com 最后更新时间:2023/08/14 一、介绍 本教程旨在介绍采用 ABACUS(基于 ABACUS 3.2.2 版本)做密度泛函理论计算,并且结合 Phonopy 软件计算声子谱的流程。此外,本教程还用到 gnuplot 来绘图。 首先推荐大家阅读以下文档中的详细说明: ABACUS 官方文档:Phonopy - ABACUS documentation Phonopy 相关文档:ABACUS & phonopy calculation — Phonopy v.2.19.1 Gnuplot 主页:gnuplot homepage 二、准备 我们以 FCC Al 这个简单例子来演示使用 有限位移方法 来结合 ABACUS 和 Phonopy 计算声子谱。 1. 下载并安装 Phonopy git clone https://github.com/phonopy/phonopy.git cd phonopy python3 setup.py install 2. 下载 FCC Al 例子 可以从 Gitee 上下载。可以在网页右侧点击克隆/下载-> 下载 ZIP 得到算例,或者在 linux 终端执行如下命令得到算例: git clone https://gitee.com/mcresearch/abacus-user-guide.git 下载后解压,之后进入 abacus-user-guide/examples/interface_Phonopy 文件夹 三、流程 1. 使用 ABACUS 优化结构 这里我们已经给出一个已经优化好的 FCC Al 结构 ABACUS 中的结构文件名为 STRU: ATOMIC_SPECIES Al 26.982 Al_ONCV_PBE-1.0.upf upf201 NUMERICAL_ORBITAL Al_gga_7au_100Ry_4s4p1d.orb LATTICE_CONSTANT 1.88972612546 LATTICE_VECTORS 4.03459549706 0 0 #latvec1 0 4.03459549706 0 #latvec2 0 0 4.03459549706 #latvec3 ATOMIC_POSITIONS Direct Al #label 0 #magnetism 4 #number of atoms 0 0 0 m 0 0 0 0.5 0.5 0 m 0 0 0 0.5 0 0.5 m 0 0 0 0 0.5 0.5 m 0 0 0 2. 用 Phonopy 产生需要计算的超胞及相应微扰构型 这里我们使用 有限位移方法 计算声子谱,因此需要对晶格进行扩胞并对原子位置进行微扰。执行如下命令即可生成 222 的扩胞并产生微扰结构: phonopy -d --dim=\"2 2 2\" --abacus 这一步 phonopy 会根据晶格对称性自动产生相应个数的微扰结构。由于 FCC 的晶格对称性较强,因此这个例子只产生一个微扰结构:STRU-001。这里类似 K 点的对称性分析,晶体结构对称性越强,所需的微扰结构就越少,对称性稍差的体系一般会产生多个微扰结构。 经验性设置:1)扩胞越大,计算结果越精确,但是计算量也会上升,一般来说扩胞三个方向的 cell 长度均在 10-20 Å 是比较合适的;2)对于优化后的晶胞(复杂体系),原子位置可能不处于高对称点上,phonopy 可能计算存在一定的误差,可以使用 Matertial Studio 等软件把对称性加回去之后,再做上述步骤,这样能够得到准确的声子谱数据(保证计算出来的声子谱满足体系的对称性特征)。 3. 产生 FORCE_SET 文件 接着用 ABACUS 计算原子受力,其中需要注意的是 calculation 需要设置为 scf,并且设置 cal_force 为 1,因为这一步目的是输出原子受力。 小技巧:即为了计算不同的微扰结构的受力,可以在 INPUT 里添加关键字 stru_file 来指定 STRU 文件的路径和文件名:stru_file ./STRU-001 INPUT 内容如下: INPUT_PARAMETERS #Parameters (1.General) suffix Al-fcc calculation scf esolver_type ksdft symmetry 1 pseudo_dir ./psp orbital_dir ./psp cal_stress 1 cal_force 1 stru_file STRU-001 #Parameters (2.Iteration) ecutwfc 100 scf_thr 1e-7 scf_nmax 50 #Parameters (3.Basis) basis_type lcao gamma_only 0 #Parameters (4.Smearing) smearing_method mp smearing_sigma 0.015 #Parameters (5.Mixing) mixing_type pulay mixing_beta 0.7 mixing_gg0 1.5 算完之后用以下命令产生 FORCE_SET 文件: phonopy -f ./disp-001/OUT/running_scf.log ./disp-002/OUT/running_scf.log ... 即要指定所有微扰构型算完之后的 running_scf.log 文件位置。如果运行有错,需要首先检查是否所有构型都已正常结束,且其中有力输出(可以找“FORCE”来确认)。 4. 设置 band.conf 文件计算得到声子谱 执行如下命令: phonopy -p band.conf --abacus band.conf 内容如下: ATOM_NAME = Al DIM = 2 2 2 MESH = 8 8 8 PRIMITIVE_AXES = 0 1/2 1/2 1/2 0 1/2 1/2 1/2 0 BAND = 1 1 1 1/2 1/2 1 3/8 3/8 3/4 0 0 0 1/2 1/2 1/2 BAND_POINTS = 101 BAND_CONNECTION = .TRUE. 这一步结束之后会有 band.yaml 文件输出 以上参数在 Phonopy 的线上文档中均有详细说明,这里再进行简单概述: ATOM_NAME:指定结构文件中的元素种类。 DIM:扩胞的大小,需要跟 3.2 用Phonopy产生需要计算的超胞及相应微扰构型 中的“dim”一致。 MESH:q 点的采样网格。‘8 8 8’意味着采用 888 的 q 点网格,默认以(0,0,0)为中心。 PRIMITIVE_AXES:输入晶胞到目标原胞的转换矩阵,并将根据原胞基矢量作为声子计算的坐标系。这里是 FCC 的原胞转换矩阵。 BAND:采样能带的 q 点路径。不同晶格的高对称点不同,具体可以使用 SeeK-path,自动生成 q 点路径。 BAND_POINTS:给出了包括能带路径末端的采样点的数量。 BAND_CONNECTION:在能带交叉处辅助连接能带。 5. 绘制声子谱 本教程使用 gnuplot 绘制声子谱,在 Ubuntu 上 gnuplot 的安装如下: sudo apt-get install gnuplot 用如下命令输出 gnuplot 格式的声子谱,并使用 gnuplot 绘制声子谱并存为 Al-FCC_plot.png: phonopy-bandplot --gnuplot > pho.dat gnuplot plot_pho.gp plot_pho.gp 内容如下: set terminal pngcairo size 1920, 1080 font 'Arial, 36' ## 格式,大小和字体 set output \"Al-FCC_plot.png\" ###输出的文件名 set ylabel 'Frequency (THz)' set ytics 2 unset key x1 = 0.13115990 x2 = 0.17753200 x3 = 0.31664810 xmax = 0.43023590 ymin = 0 ymax = 12 set xrange [0:xmax] set yrange [ymin:ymax] set xtics (\"{/Symbol G}\" 0, \"X\" x1, \"K\" x2, \"{/Symbol G}\" x3, \"L\" xmax) set arrow 1 nohead from x1,ymin to x1,ymax lt 2 set arrow 2 nohead from x2,ymin to x2,ymax lt 2 set arrow 3 nohead from x3,ymin to x3,ymax lt 2 plot 'pho.dat' using 1:($2) w l lw 3 FCC Al 的声子谱: 也可使用 Origin 绘图,pho.dat 的第一列就是上图的横轴(K 点路径),其中高对称 K 点位置见 pho.dat 的第二行,第二列就是上图的纵轴(声子频率,单位 THz)。 "},"abacus-shengbte.html":{"url":"abacus-shengbte.html","title":"ABACUS+ShengBTE 计算晶格热导率","keywords":"","body":"ABACUS+ShengBTE 计算晶格热导率 作者:陈涛,邮箱:chentao@stu.pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/06/15 一、介绍 本教程旨在介绍采用 ABACUS(基于 ABACUS 3.2.0 版本)做密度泛函理论计算,并且结合 ShengBTE 软件计算晶格的热导率的流程。其中,整个计算过程中还用到了:1)采用 Phonopy 程序来计算二阶力常数,2)采用 ASE 程序进行原子结构的转换,3)采用 ShengBTE 的 thirdorder 程序计算三阶力常数,4)最后使用 ShengBTE 来计算材料的晶格热导率。 上述提到了一些需要结合的外部软件,这里推荐大家阅读这些软件的相关文档和说明: ShengBTE:https://bitbucket.org/sousaw/shengbte/src/master/ phonopy:http://abacus.deepmodeling.com/en/latest/advanced/interface/phonopy.html ASE:http://abacus.deepmodeling.com/en/latest/advanced/interface/ase.html thirdorder: https://bitbucket.org/sousaw/thirdorder/src/master/ 二、准备 ABACUS 的软件包中提供了一个 ABACUS+ShengBTE 计算晶格热导率的算例,可以从 Gitee 上下载。算例中包含采用数值原子轨道的 LCAO(Linear Combination of Atomic Orbitals)和采用平面波基矢量的 PW(Plane Wave,平面波)两个文件夹。每个文件夹下分别又包含了 2nd、3rd 和 shengbte 这三个文件夹,分别保存了使用 phonopy 计算二阶力常数(2nd)、thirdorder 计算三阶力常数(3rd)和 ShengBTE 计算晶格热导率(shengbte)的相关文件。 三、流程 以 LCAO 文件夹为例,我们这里提供的测试案例是包含 2 个原子的金刚石结构 Si 结构,采用的模守恒赝势是 Si_ONCV_PBE-1.0.upf,以及原子轨道文件采用的是 Si_gga_7au_100Ry_2s2p1d.orb(GGA 泛函,7 au 截断半径,100 Ry 能量截断,以及包含 2s2p1d 的 DZP 轨道)。 1. 计算二阶力常数 要计算二阶力常数,除了 ABACUS 之外,还需要结合 Phonopy 和 ASE。首先,进入 2nd 文件夹。 1.1 结构优化 做晶格热导率计算之前要先对模拟的材料体系的进行原子构型的优化。下面是采用 ABACUS 做结构优化(relax)后得到的原子构型文件 STRU。在这个例子里,为了简单起见,结构优化过程采用的是 2*2*2 的布里渊区 k 点采样,平面波的能量截断值 ecut(LCAO 里面也用到了平面波基矢量)为 100 Ry,注意实际计算中应该要采用更收敛的 k 点采样。 ATOMIC_SPECIES Si 28.0855 Si_ONCV_PBE-1.0.upf NUMERICAL_ORBITAL Si_gga_7au_100Ry_2s2p1d.orb LATTICE_CONSTANT 1.88972612546 LATTICE_VECTORS 0 2.81594778072 2.81594778072 #latvec1 2.81594778072 0 2.81594778072 #latvec2 2.81594778072 2.81594778072 0 #latvec3 ATOMIC_POSITIONS Direct # direct coordinate Si #label 0 #magnetism 2 #number of atoms 0.875 0.875 0.875 m 0 0 0 0.125 0.125 0.125 m 0 0 0 注意:第一行 Si 的质量 28.0855 在计算中不起作用。 1.2 计算二阶力常数 调用 Phonopy 软件产生需要计算的超胞及相应微扰的多个原子构型,命令如下: phonopy setting.conf --abacus -d 其中 setting.conf 文件的内容为: DIM = 2 2 2 ATOM_NAME = Si 这里我们采用的 Si 的例子只需要产生 1 个微扰构型 STRU-001 即可,对所有微扰构型(这里 Si 的例子只有 1 个)进行 SCF 计算(SCF 代表 Self-consistent field,这里代表进行密度泛函理论的电子迭代自洽计算)获得原子受力,算完之后用以下命令产生 FORCE_SET 文件: phonopy -f OUT.DIA-50/running_scf.log 小技巧:在 ABACUS 的输入文件 INPUT 中可以设置变量 stru_file,该变量对应的原子构型文件为 STRU-001 则 ABACUS 可以直接读取该结构文件。 下一步,设置 band.conf 文件计算得到声子谱以及二阶力常数: phonopy -p band.conf --abacus 这里出现的 band.conf 文件,其内容如下(具体参数含义可以查看 Phonopy 说明文档): ATOM_NAME = Si DIM = 2 2 2 MESH = 8 8 8 PRIMITIVE_AXES = 1 0 0 0 1 0 0 0 1 BAND = 0.0 0.0 0.0 0.5 0.0 0.5 0.625 0.25 0.625, 0.375 0.375 0.75 00 0.0 0.0 0.5 0.5 0.5 BAND_POINTS = 101 BAND_CONNECTION = .TRUE. FORCE_CONSTANTS = WRITE FULL_FORCE_CONSTANTS = .TRUE. 这一步结束之后,Phonopy 软件会产生 band.yaml(用于绘制声子谱)和 FORCE_CONSTANTS 文件。其中,FORCE_CONSTANTS 文件包含的数据即为二阶力常数,注意这里务必设置 FULL_FORCE_CONSTANTS = .TRUE.,输出全部的二阶力常数,否则 ShengBTE 读取数据会报错。 此外,可以使用如下命令输出 gnuplot 格式的声子谱,用于绘制声子谱: phonopy-bandplot --gnuplot > pho.dat 1.3 后处理 注意 ShengBTE 软件要求 FORCE_CONSTANTS_2ND 文件里数据的单位为 eV/Å^2,但是 ABACUS 结合 phonopy 计算的 FORCE_CONSTANTS 单位为 eV/(Å*au),其中 au 是原子单位制,1 au=0.52918 Å。可以使用 2nd 目录下提供的 au2si.py 脚本进行单位转换,生成 FORCE_CONSTANTS_2ND 文件,命令如下: python au2si.py 在 shengbte 文件夹中提供了 FORCE_CONSTANTS_2ND 文件供参考计算结果。 2. 计算三阶力常数 要计算三阶力常数,需要结合 thirdorder 程序,计算后输出三阶力常数文件 FORCE_CONSTANTS_3RD。但是,thirdorder 目前只支持读取 VASP 和 QE 的输入输出文件。因此,这里我们是通过将 ABACUS 的结构文件和输出受力分别转换为 POSCAR 和 vasprun.xml 来使用 thirdorder,请先进入 3rd 文件夹,具体步骤将在以下叙述。 2.1 获得微扰构型 首先将 ABACUS 软件进行结构优化(relax)后的 STRU 文件转化为 POSCAR(目录下已给出转化过的 POSCAR,或者需要自己动手进行这个转换)。 之后,运行 thirdorder_vasp 程序,产生微扰过后的一系列原子构型文件 3RD.POSCAR.*,例如这个例子一共产生了 40 个构型: thirdorder_vasp.py sow 2 2 2 -2 运行 pos2stru.py,将上述 POSCAR 转化为 STRU 文件,注意该脚本里调用了 ASE 软件包的函数(需提前安装好 ASE): python pos2stru.py 注意:这里不能调用 dpdata 软件进行转化。因为 dpdata 会强制将晶格改为下三角矩阵,相当于旋转了晶格,会导致原子间受力方向也相应旋转,从而发生错误。 2.2 计算微扰构型的原子受力 可以参考目录下 run_stru.sh 使用脚本批量产生 SCF-* 文件夹并提交计算,这里需要采用 ABACUS 对 40 个原子构型分别进行 SCF 计算,会有些耗时。建议每个 SCF 单独在 SCF-* 文件夹内运行,这里的 INPUT 中的scf_thr 需要至少小到1e-8才能得到收敛的结果。 计算完成后,运行 aba2vasp.py,将 ABACUS 计算的原子受力包装成 vasprun.xml 格式,放置在每个 SCF-* 文件夹中,命令如下: python aba2vasp.py vasprun.xml 格式示意: 1.865e-05 -0.04644196 -0.00153852 -1.77e-05 -0.00037715 -0.00149635 1.973e-05 0.002213 -0.00149461 -1.976e-05 0.00065303 -0.0014804 8.31e-06 -0.0003306 -0.00024288 -8.25e-06 -0.00038306 -0.00025385 1.071e-05 0.00060621 -0.00025797 -1.05e-05 -0.00014553 -0.00027532 0.00668053 0.00645634 -0.04642593 -0.00668085 0.00645595 -0.00040122 -0.00650454 0.00628877 -0.00025123 0.00650504 0.00628892 -0.00028948 -0.00039591 2.479e-05 0.00223371 0.00039608 2.426e-05 0.0006732 0.0003264 3.122e-05 0.00052874 -0.00032589 3.415e-05 -0.00023577 -2.908e-05 -0.00832477 0.00635709 3.737e-05 -0.00125057 -7.444e-05 -2.582e-05 0.00656076 0.00636285 2.566e-05 -0.00049974 -6.661e-05 -5.431e-05 0.00502637 0.00639077 4.553e-05 -0.00180978 0.0001325 -3.609e-05 -0.00676473 0.00638092 3.806e-05 5.503e-05 0.00012759 -0.00670704 0.00646596 0.01310437 0.00670119 3.673e-05 0.00602948 0.00036366 0.00627899 -0.00657272 -0.00036508 2.288e-05 0.00026009 0.00648649 0.0064463 -0.00036521 -0.00648098 1.594e-05 0.00671469 -0.00034493 0.00630074 0.00662932 0.00034331 4.157e-05 -0.0002028 最后执行如下命令: find SCF-* -name vasprun.xml|sort -n|thirdorder_vasp.py reap 2 2 2 -2 即可得到三阶力常数文件 FORCE_CONSTANTS_3RD。在 shengbte 文件夹中提供了 FORCE_CONSTANTS_3rd 文件供参考计算结果。 3. 运行 ShengBTE 得到晶格热导率 进入 shengbte 文件夹,里面已经准备好 CONTROL(ShengBTE 的参数文件)、FORCE_CONSTANTS_2ND(二阶力常数文件)、FORCE_CONSTANTS_3RD(三阶力常数文件)这三个文件,使用如下命令运行 ShengBTE 即可得到晶格热导率,其中 Ref 文件夹中给出了计算结果供参考: mpirun -n 10 ShengBTE 四、结尾 对于 ABACUS 中使用平面波(PW)来做 ShengBTE 的计算也是采用以上类似的流程,但要注意使用平面波时,计算三阶力常数的 INPUT 中scf_thr 需要至少小到1e-12。通过计算结果可以发现,PW 和 LCAO 基组计算出的 Si 的晶格热导率是接近的,300 K 下均在 100 W/(m K) 左右,而实验中 Si 在 300 K 的热导率在 150 W/(m K) 附近。这是因为作为教学例子,这里使用的是 2*2*2 的扩胞以及 2*2*2 的 K 点,导致计算结果偏小,实际科研中需要测试扩胞的大小以及 K 点的采样方案来达到收敛的结果。以上就是 ABACUS(3.2.0)+ShengBTE 计算晶格热导率的全部流程,如果有什么问题,欢迎通过邮件联系。 "},"abacus-dpgen.html":{"url":"abacus-dpgen.html","title":"ABACUS+DPGEN 使用教程","keywords":"","body":"ABACUS+DPGEN 使用教程 作者:刘建川,邮箱:liujianchuan2013@163.com 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/06/15 一、介绍 本教程旨在介绍结合 ABACUS(中文名原子算筹,这里基于 ABACUS 3.2.0 版本)和 DPGEN 软件结合生成机器学习 DP 势,这里 ABACUS 扮演了提供第一性原理训练数据的作用。本教程以碳化硅(SiC)材料为案例,并且教大家使用 DPGEN autotest 功能,计算 SiC 的 Equation of State (EOS)和弹性常数等性质。先介绍主要软件和计算平台: DPGEN软件:是一个结合第一性原理软件来自动产生训练数据标签的软件,如果不熟悉 DPGEN 的读者,这里可以推荐大家先阅读 DPGEN 的相关原理文档和说明,熟悉这部分的读者可以跳过: https://docs.deepmodeling.com/projects/dpgen/en/latest/ https://bohrium-doc.dp.tech/docs/software/DP-GEN https://bohrium-doc.dp.tech/docs/software/DP-GEN_init https://bohrium-doc.dp.tech/docs/software/DP-GEN_autotest https://www.sciencedirect.com/science/article/pii/S001046552030045X?via%3Dihub 计算平台:由于本案例通过 Bohrium 平台教学,所以所用到的 machine.json 文件仅限于 Bohrium 平台使用,如需在其他平台上使用,可参考下面网址,修改 machine.json 文件: https://docs.deepmodeling.com/projects/dpgen/en/latest/run/example-of-machine.html 二、准备 1. 案例下载地址 本教程用到的所有输入文件,均可点击这里下载。 (https://gitee.com/mcresearch/abacus-user-guide/tree/master/examples/abacus-dpgen) 此外,在 Linux 下可以采用的下载命令是: git clone https://gitee.com/mcresearch/abacus-user-guide.git 之后进入 /abacus-user-guide/examples/md 目录 或者采用 Github 仓库地址: https://github.com/MCresearch/abacus-user-guide/tree/master/examples/md 下载完之后,应该可以看到三个文件夹: init,run,以及 auto-test init 文件夹:包含用于 dpgen init_bulk 步骤所需的输入文件,用户可参考其设置自己的体系参数。 run 文件夹:包含用于 dpgen run 步骤所需的输入文件,用户可参考其设置自己的体系参数。 auto-test 文件夹:包含用于计算弹性常数等性质的输入文件,用户可参考其设置自己的体系参数。 2. 安装相关软件 这里默认读者已经安装好了 ABACUS 软件,本算例中 ABACUS 计算采用的是数值原子轨道的 LCAO(Linear Combination of Atomic Orbitals)方法,因为一般来说 LCAO 会比平面波效率更高,此外读者也可以把密度泛函理论计算部分改成平面波基矢量(后续会讲到)。 开始之前,请务必安装/更新 dpgen 和 dpdata(用来转换数据)到最新版本: 1. 安装/更新 dpdata pip install --user git+``https://gitee.com/deepmodeling/dpdata.git@devel 2. 安装/更新 dpgen pip install --user git+``https://gitee.com/deepmodeling/dpgen.git@devel 三、结合 DPGEN 生成 DP 数据的流程 DPGEN 使用流程如下,接下来我们将一一展开介绍: 1. 准备赝势和数值原子轨道文件 本例子所需文件有: 模守恒赝势文件,格式为*.upf,也可以使用其他 ABACUS 支持的赝势格式,注意 ABACUS 目前不支持 PAW 方法或者超软赝势。 数值原子轨道文件,格式为*.orb,注意这里的数值原子轨道文件要和赝势文件匹配,也就是数值原子轨道是由指定赝势产生的,关于如何生成数值原子轨道,我们会提供中文教程。 注:在 ABACUS 官网上可以下载到赝势和数值原子轨道文件: http://abacus.ustc.edu.cn/pseudo/list.htm 本例采用的赝势和轨道是: C 的 PBE 模守恒 ONCV 模守恒赝势:C_ONCV_PBE-1.0.upf Si 的 PBE 模守恒 ONCV 模守恒赝势:Si_ONCV_PBE-1.0.upf C 的 PBE 模守恒 ONCV 赝势对应的数值原子轨道:C_gga_9au_100Ry_3s3p2d.orb Si 的 PBE 模守恒 ONCV 赝势对应的数值原子轨道:Si_gga_9au_100Ry_3s3p2d.orb 注:如果是使用平面波基矢量来做密度泛函理论计算,则不需要提供数值原子轨道文件,结合 DPGEN 使用的流程是一致的(仅需要删除调用轨道文件的输入参数即可)。如果采用其他 ABACUS 支持的赝势文件,可自行生成轨道文件(请参考本教程系列的其它相关中文教程). 注:这里 C_gga_9au_100Ry_3s3p2d.orb 的意思是 C 元素、采用 GGA 泛函、轨道截断半径是 9 a.u.(轨道截断半径越大,则 ABACUS 所需求解 Kohn-Sham 方程的时间会越长,而且这个时间对于轨道半径极其敏感,推荐可以测试不同轨道半径,选取合适的、截断半径小的轨道可以加速计算),100 Ry 是推荐的平面波截断值(哪怕用了数值原子轨道,程序里还是会用平面波来做某些物理量的计算,比如模守恒赝势的局域赝势部分),3s3p2d 表示 3 个 s 径向轨道、3 个 p 轨道、2 个 d 轨道。 2. 准备原子体系的结构文件 本步骤所需的描述原子结构的文件有: *.cif 可以从多个渠道下载所需体系的结构文件,本案例主要从 materials project 网站下载 cif 文件,使用的 SiC 对应多个原子构型,主要有 3C、2H、4H、6H 四个构型,采用哪些构型取决于用户所研究的体系和性质,一般可选取所关心的物质温度和压强区间内可能出现的结构。本案例主要采用3C 和 2H构型来演示。 3C-SiC:https://materialsproject.org/materials/mp-8062?formula=SiC 2H-SiC: https://materialsproject.org/materials/mp-7140?_skip=15&formula=SiC 4H-SiC: https://materialsproject.org/materials/mp-11714?formula=SiC 6H-SiC: https://materialsproject.org/materials/mp-7631?formula=SiC 得到了 cif 之后,可以使用下列方法把 cif 转换成 STRU 文件: 1. 安装 ASE-ABACUS 接口: git clone https://gitlab.com/1041176461/ase-abacus.git cd ase-abacus python3 setup.py install 2. 设置环境变量(可选) ABACUS 支持两种基组:平面波(PW)和数值原子轨道(LCAO)。赝势和轨道文件的存放路径可以通过环境变量设置,分别为:ABACUS_PP_PATH 和 ABACUS_ORBITAL_PATH,设置方法如下: PP=${HOME}/pseudopotentials ORB=${HOME}/orbitals export ABACUS_PP_PATH=${PP} export ABACUS_ORBITAL_PATH=${ORB} PW 计算只需要设置 ABACUS_PP_PATH 。 LCAO 需要两个都设置:ABACUS_PP_PATH and ABACUS_ORBITAL_PATH 。 3. CIF 转 STRU from ase.io import read, write from pathlib import Path cs_dir = './' cs_vasp = Path(cs_dir, 'SiC.cif') # 修改为自己的cif文件名 cs_atoms = read(cs_vasp, format='cif') cs_stru = Path(cs_dir, 'STRU') pp = {'Si':'Si_ONCV_PBE-1.0.upf','C':'C_ONCV_PBE-1.0.upf'} # 修改为所对应的赝势文件名 basis = {'Si':'Si_gga_9au_100Ry_3s3p2d.orb','C':'C_gga_9au_100Ry_3s3p2d.orb'} # 修改为所对应的轨道文件名 write(cs_stru, cs_atoms, format='abacus', pp=pp, basis=basis) 运行上述 python 脚本,把 cif 转成 ABACUS 所需的 STRU 文件。 3. 产生初始训练数据 本步骤所需文件有: 原子结构文件:STRU 数值原子轨道文件:*.orb 赝势文件:*.upf 布里渊区 k 点采样:KPT 提交任务的文件:machine.json DPGEN 的输入参数文件:param.json 为每一个构型新建一个名为 init 的文件夹。进入该文件夹后,为每个构型都新建一个单独的文件夹,之后单独运行 dpgen init_bulk 命令,用于产生接下来的 dpgen run 步骤的初始数据集。本案例所提供的初始原子构型为 3C 和 2H 结构,并把赝势文件、轨道文件、STRU 文件放入对应的文件夹里。按照下面链接的案例准备适合自己机器的 machine.json 文件,并分别放入 3C 和 2H 文件夹。 https://docs.deepmodeling.com/projects/dpgen/en/latest/run/example-of-machine.html 本教程所用到的文件可以从 Gitee 下载,修改为符合自己的配置即可。 接下来准备 param.jsion 文件,本步骤最关键的设置也是 param.json 文件设置,案例如下: { \"init_fp_style\": \"ABACUS\", \"stages\": [1,2,3,4], \"cell_type\": \"diamond\", \"super_cell\": [1, 1, 1], \"elements\": [\"Si\",\"C\"], \"from_poscar\": true, \"from_poscar_path\": \"./STRU\", \"potcars\": [\"Si_ONCV_PBE-1.0.upf\",\"C_ONCV_PBE-1.0.upf\"], \"orb_files\": [\"Si_gga_9au_100Ry_3s3p2d.orb\",\"C_gga_9au_100Ry_3s3p2d.orb\"], \"relax_incar\": \"./INPUT_rlx\", \"md_incar\" : \"./INPUT_md\", \"relax_kpt\": \"./KPT\", \"md_kpt\": \"./KPT\", \"md_nstep\": 10, \"scale\": [0.99,1.00,1.01], \"skip_relax\": false, \"pert_numb\": 10, \"pert_box\": 0.03, \"pert_atom\": 0.01, \"deepgen_templ\": \"../generator/template/\", \"coll_ndata\": 5000, \"_comment\": \"that's all\" } init_fp_style 关键字需设置为 ABACUS,如果 from_poscar 为 true,则会读取 from_poscar_path 指定的 STRU 文件,且 cell_type 关键字失效。super_cell 用于括胞,推荐直接使用括胞之后的 STRU 文件,则 super_cell 设置为[1, 1, 1]。括胞一般根据需求而定,使得三个方向的 cell 长度约为 6 埃以上(经验性的)。其中还用到了 *.``upf 和 *.``orb 文件,修改为自己所计算的体系即可。 init_bulk 的基本操作流程分为以下 4 个顺序步骤: 生成初始(平衡)结构:输出文件存储在 00.place_ele。 产生 MD 起始构象:放缩扰动 00.place_ele 中的结构,输出文件存储在 01.scale_pert。 执行 AIMD:取 01.scale_pert 起始构象调用 vasp 执行少步数 AIMD,输出文件存储在 02.md。 整理初始数据:调用 dpdata 提取 02.md 中 AIMD 各 snapshots 的数据作为初始数据,输出文件存储在 02.md。 param.json 中将使用 stages 关键词的取值 1~4 控制以上 4 步的执行,操作中,各步骤(2, 3, 4 在所需前一步输出文件存在的前提下)可独立执行。 其他具体参数含义可参考 dpgen 官网: https://docs.deepmodeling.com/projects/dpgen/en/latest/init/init-bulk-jdata.html 另外,还需准备两个 ABACUS 输入文件 INPUT_rlx 和 INPUT_md。 INPUT_rlx 主要用于优化所下载的结构,如下: INPUT_PARAMETERS #Parameters (1.General) suffix ABACUS calculation cell-relax #Parameters (2.Iteration) ecutwfc 100 scf_thr 1e-6 scf_nmax 100 #Parameters (3.Basis) basis_type lcao #Parameters (4.Smearing) smearing_method gauss smearing_sigma 0.002 #Parameters (5.Mixing) mixing_type pulay mixing_beta 0.3 cal_stress 1 INPUT_md 主要用于产生一定数量的 AIMD 轨迹,用于 DPGEN 迭代的输出数据,如下: INPUT_PARAMETERS #Parameters (1.General) suffix ABACUS calculation md #Parameters (2.Iteration) ecutwfc 100 scf_thr 1e-6 scf_nmax 100 #Parameters (3.Basis) basis_type lcao #Parameters (4.Smearing) smearing_method gauss smearing_sigma 0.002 #Parameters (5.Mixing) mixing_type pulay mixing_beta 0.3 cal_stress 1 #MD chg_extrap second-order md_type 2 md_tfirst 300 md_tlast 300 md_nstep 10 md_tfirst 10 md_tfreq 0.5 注:ABACUS 的 MD 关键字在此 3.2.0新版本有所更改,如果是使用的最新版本,请严格参考手册设置关键字,如md_type在新版本里改为了nvt、npt等形式,而不再用数字(如:2)等: 此外,还需准备一个存放布里渊区 k 点的文件,名为 KPT: K_POINTS 0 Gamma 4 4 4 0 0 0 也可在 INPUT 文件里直接指定 kspacing 参数(注意该参数可选 1 维或者 3 维,如果是表面系统可选 3 维因为真空方向不需要太多 k 点)。 用户可自行根据所研究体系,设置、更改上述参数。 所有以上输入文件准备完毕后,采用如下命令分别对 3C 和 2H 结构运行 dpgen: nohup dpgen init_bulk param.json machine.json 1>log 2>err& 上述命令采用后台提交 dpgen,等所有计算完成之后,dpgen 会自动收集训练 DP 势所需的数据,且转换为 DeePMD-kit 的数据格式,保存在 ./STRU.01x01x01/02.md/sys-0036-0036/deepmd 目录里。 4. 进行数据采样的迭代 run主流程包含一系列迭代,各迭代会根据所选系综在给定的温度、压力或体积等条件下进行 DPMD 采样与筛选,实现同步学习,所有迭代希望能够有效覆盖训练可靠模型所需的势能面上样本空间。每个迭代依次:基于init 准备的初始训练数据与之前迭代积累的训练数据|训练多个新的模型->使用当前的模型进行DPMD采样,根据模型间预测偏差(model-deviation)|挑选候选 snapshot 构象->将本轮候选 snapshot 构象进行第一性原理标定并加入数据集|扩展数据集 。 以上每个迭代中包含的 3 个步骤分别被命名为 00.train,01.model_devi,02.fp,细节如下: 00.train: 使用 init 准备的初始训练数据与之前迭代积累的训练数据,调用 DeepMD-kit 训练多个 (默认 4 个) 模型。模型间的唯一区别来自于初始化神经网络时使用不同的随机数种子。 01.model_devi: 指代 model-deviation。 调用 LAMMPS 使用 00.train 的 1 个模型进行 MD 模拟。对于任一 MD 中 snapshot,模型间预测偏差越大意味着当前模型系综对该 snapshot 构象的精度越低,通过引入模型偏差作为误差判据并设定上下限, 挑选出有希望有效改进模型对 PES 整体预测精度的 snapshot 构象,作为准备加入训练数据集的候选构象。 02.fp: 调用 ABACUS 对 01.model_devi 选取的候选构象进行第一性原理定标(单点计算),并调用 dpdata 收集整理所得数据加入到训练数据集中。 run 执行后,相关文件即存储在....../iter.*(迭代序号)/步骤文件夹内。以上每个迭代中的每个步骤在实现中被分解为 3 个阶段。以 00.train 为例,3 阶段分别对应: 0:make_train ,为训练任务准备脚本;1: run_train,依据机器配置上传文件并执行训练任务;2:post_train,收集整理分析训练任务的结果。01.model_devi 与 02.fp 的实现步骤与之类似,分别使用 3,4,5 及 6,7,8 来标记其阶段。 用输出文件record.dpgen来记录进程已经执行过及当前正在执行的阶段。如进程中断后需要续算,DP-GEN将根据此文件的记录来自动恢复run主进程。用户也可根据需求手动修改record.dpgen中的记录,来控制接下来将执行哪一阶段的任务:例如,删除最后一阶段(可能未执行完成即中断)的记录,并从前一个已完成阶段后恢复任务。可以通过查看record.dpgen文件监控当前任务的执行阶段。 本步骤所需文件有: STRU *.orb *.upf machine.json (可以直接用 dpgen init bulk 里的) param.json dpgen init bulk 产生的初始训练数据 主要步骤如下: 1. 新建一个文件夹,命名为:run,并进入此目录里 2. 在 run 文件夹里面新建 init_conf 和 init_data 文件夹,用于存放 dpgen init bulk 产生的构型和初始训练数据 3. 为了区分不同构型和初始训练数据,在 init_conf 和 init_data 文件夹里新建名为 3C 和 2H 的两个文件夹 4. 拷贝 dpgen init bulk 产生的构型和初始训练数据至 init_conf 和 init_data 文件夹里,如: cp -rf yourPath/init/3C/STRU.01x01x01/02.md/sys-0032-0032 yourPath/run/init_conf/3C cp -rf yourPath/init/2H/STRU.01x01x01/02.md/sys-0036-0036 yourPath/run/init_conf/2H cp -rf yourPath/init/3C/STRU.01x01x01/02.md/sys-0032-0032/deepmd/* yourPath/run/init_data/3C cp -rf yourPath/init/2H/STRU.01x01x01/02.md/sys-0036-0036/deepmd/* yourPath/run/init_data/2H 5. 拷贝 machine.json、*.orb 和 *.upf 文件到 run 文件夹 6. 新建一个 param.json 文件,如下案例: { \"type_map\": [\"Si\",\"C\"], \"mass_map\": [28.085,12.011], \"init_data_prefix\": \"./init_data\", \"init_data_sys\": [ \"3C\", \"2H\" ], \"sys_format\":\"abacus/stru\", \"sys_configs_prefix\": \"./init_conf\", \"sys_configs\": [ [\"3C/sys-0032-0032/scale-1.000/00****/STRU\"], [\"2H/sys-0036-0036/scale-1.000/00****/STRU\"] ], \"_comment\": \" that's all \", \"numb_models\": 4, \"default_training_param\": { \"model\": { \"type_map\": [\"Si\",\"C\"], \"descriptor\": { \"type\": \"se_e2_a\", \"sel\": \"auto\", \"rcut_smth\": 0.5, \"rcut\": 6.0, \"neuron\": [25, 50, 100], \"resnet_dt\": true, \"axis_neuron\": 12, \"seed\": 1 }, \"fitting_net\": { \"neuron\": [240, 240, 240], \"resnet_dt\": false, \"seed\": 1 } }, \"learning_rate\": { \"type\": \"exp\", \"start_lr\": 0.001, \"stop_lr\": 3.5e-8, \"decay_steps\": 2000 }, \"loss\": { \"start_pref_e\": 0.02, \"limit_pref_e\": 2, \"start_pref_f\": 1000, \"limit_pref_f\": 1, \"start_pref_v\": 0.0, \"limit_pref_v\": 0.0 }, \"training\": { \"stop_batch\": 400000, \"disp_file\": \"lcurve.out\", \"disp_freq\": 100, \"numb_test\": 10, \"save_freq\": 1000, \"save_ckpt\": \"model.ckpt\", \"disp_training\": true, \"time_training\": true, \"profiling\": false, \"profiling_file\": \"timeline.json\", \"_comment\": \"that's all\" } }, \"model_devi_dt\": 0.002, \"model_devi_skip\": 1000, \"model_devi_f_trust_lo\": 0.05, \"model_devi_f_trust_hi\": 0.10, \"model_devi_clean_traj\": true, \"model_devi_merge_traj\": true, \"model_devi_jobs\": [ {\"sys_idx\": [0,1], \"temps\":[50, 250, 450, 650], \"press\": [0, 100, 1000, 5000, 10000, 20000, 50000], \"trj_freq\": 10, \"nsteps\": 3000, \"ensemble\": \"npt-tri\", \"_idx\": \"01\"}, {\"sys_idx\": [0,1], \"temps\":[50, 250, 450, 650], \"press\": [0, 100, 1000, 5000, 10000, 20000, 50000], \"trj_freq\": 10, \"nsteps\": 3000, \"ensemble\": \"npt-tri\", \"_idx\": \"02\"} ], \"fp_style\": \"abacus\", \"shuffle_poscar\": false, \"fp_task_max\": 100, \"fp_task_min\": 5, \"fp_accurate_threshold\": 0.999, \"fp_accurate_soft_threshold\": 0.998, \"fp_pp_path\": \"./\", \"fp_pp_files\": [\"Si_ONCV_PBE-1.0.upf\",\"C_ONCV_PBE-1.0.upf\"], \"fp_orb_files\": [\"Si_gga_9au_100Ry_3s3p2d.orb\",\"C_gga_9au_100Ry_3s3p2d.orb\"], \"user_fp_params\":{ \"ntype\": 2, \"symmetry\": 0, \"basis_type\": \"lcao\", \"ecutwfc\": 100, \"scf_thr\": 1e-6, \"scf_nmax\": 100, \"smearing_method\": \"gauss\", \"smearing_sigma\": 0.002, \"mixing_type\": \"pulay\", \"mixing_beta\": 0.3, \"cal_force\": 1, \"cal_stress\": 1, \"kspacing\": 0.08 } } type_map: 用列表方式设置了体系元素,注意顺序要和 STRU 结构文件里一致 mass_map: 记录了对应的原子质量,和 type_map 对应 init_data_prefix:指定初始训练集的位置所在目录,如:./init_data init_data_sys:定位到初始训练集的具体目录,用列表调用多个,即:./init_data/2H sys_format:指定为 ABACUS 计算的结构,即:abacus/stru sys_configs_prefix:指定探索步所需调用的结构目录,如:./init_conf sys_configs:指定具体的某个构型的目录,用列表调用多个,即:./init_conf/3C/sys-0032-0032/scale-1.000/00****/STRU。其中 00为通配符,dpgen 会遍历 00所有文件夹的 STRU 文件 model_devi_f_trust_lo 和 model_devi_f_trust_hi:可由“init 数据” 中力绝对值的平均值,然后取该值的 20%-50%,设置成 trust level 的上下限。可通过以下 python 脚本计算:(注意指定初始数据位置) import dpdata import numpy as np do06=dpdata.Labeledsystem(\"./\",\"deepmd/raw\") forces = np.absolute(d006[\"forces\"]) af = np.average(forces) f_trust_lo = af*0.2 f_trust_hi = af*0.5 print(f_trust_lo,f_trust_hi) 如果体系温度升高后力的幅度变大,trust level 也要增大设置 model_devi_jobs 里面每一行代表一轮,每轮设置参数为 LAMMPS 进行 MD 模拟的参数 fp_style 指定,使用 ABACUS 进行 SCF 计算 user_fp_params 里面记录 ABACUS 做 SCF 所需的参数 其他参数含义见:https://docs.deepmodeling.com/projects/dpgen/en/latest/run/index.html 1. 准备好所有输入文件之后,运行命令: nohup dpgen run param.json machine.json 1>log 2>err& 为后台提交,等待迭代计算完成即可。 2. 实时监测每轮的 accurate 数据,在 dpgen.log 文件里有记录 1)模型精度是判断每个迭代中的训练是否收敛的重要指标。 2)掌握训练策略有利于快速迭代和收敛。 3)经验性:一般体系在 5-8 轮迭代内会上升到 80% 以上,若没有提升,如下方法排查: a. 检查是否是探索步已经崩溃了,收集了许多不合理的结构 b. 检查train的loss是否是收敛 c. dp test查看fp数据是否偏差很大,或者有不合理的情况 d. 检查是否是温度设置过高而导致的结构变形严重 e. 及时调整trust level,体系温度升高后力的幅度变大,trust level也要增大设置 3. 一些经验 探索步已经崩溃的解决方案 原因:DPMD 跑崩的情况一般发生在 训练温度 高于 熔点,而这个温区的结构是从“有序”到“无序态”的 ,其构型易变,采样空间增大,导致训练难度增加。DPMD 跑崩表明当前势函数对这类构型描述较差,大概率是因为前期数据集中这类构型采集的较少;特别是无序态结构的原子距离变小。 策略:在熔点附近的 参数设置需要平滑缓慢对待,增加“MD 轨迹保存频率”;缩短“MD 模拟步数”或降低“MD 步长”,增加迭代次数,其 DP 训练势函数稳定后再延长 MD 模拟步数。 ABACUS 收敛性测试 对每种体系一定要先做各个参数的收敛性测试,特别是:K 点、能量截断,也可测试 scf_thr 降低计算量。另外,对于赝势文件也一定要做性质测试,看是否能够正确描述目标体系的性质 每隔几轮做一次 dp test 初始数据得到后,第一轮生成了 dp 势之后,一定要检查 trian 步骤收敛情况和做 dp test。dp test 用如下命令: dp test -m frozen_model.pb -s ./collect_data -n 2000 -d out.out frozen_model.pb 为生成的 4 个模型中的某一个,2000 为 collect_data 里面单个结构的总数。out.out 会生成 out.e.out out.f.out out.f.out 三个偏差数据文件,用于作图判断模型优劣屏幕会输出每个构型力、能量等误差平均值,也可用*.out 文件做出 DP 和 DFT 偏差图,如: 经验性的,力的精度在 1e-2 量级,能量精度在 5e-3 量级,说明模型比较好。 四、计算材料 EOS 和弹性常数的流程 本例子里提供了一个 auto-test 文件夹,进入之后可以结合 DPGEN 的 auto-test 命令计算材料 EOS、弹性常数的流程 auto-test 的详细流程,可以从如下网页教程查阅: https://bohrium-doc.dp.tech/docs/software/DP-GEN_autotest 这里贴上如何使用 ABACUS 来计算材料 EOS、弹性常数的相关输入文件 relaxation.json: { \"structures\": [\"conf\"], \"interaction\": { \"type\": \"abacus\", \"incar\": \"./INPUT\", \"potcar_prefix\":\"./\", \"potcars\": {\"Si\": \"Si_ONCV_PBE-1.0.upf\",\"C\": \"C_ONCV_PBE-1.0.upf\"}, \"orb_files\": {\"Si\":\"Si_gga_9au_100Ry_3s3p2d.orb\",\"C\":\"C_gga_9au_100Ry_3s3p2d.orb\"} }, \"relaxation\": { \"cal_type\": \"relaxation\", \"cal_setting\":{ \"input_prop\": \"./INPUT\" } } } property.json: { \"structures\": [\"conf\"], \"interaction\": { \"type\": \"abacus\", \"incar\": \"./INPUT\", \"potcar_prefix\":\"./\", \"potcars\": {\"Si\": \"Si_ONCV_PBE-1.0.upf\",\"C\": \"C_ONCV_PBE-1.0.upf\"}, \"orb_files\": {\"Si\":\"Si_gga_9au_100Ry_3s3p2d.orb\",\"C\":\"C_gga_9au_100Ry_3s3p2d.orb\"} }, \"properties\": [ { \"type\": \"eos\", \"vol_start\": 0.9, \"vol_end\": 1.1, \"vol_step\": 0.02 }, { \"type\": \"elastic\", \"norm_deform\": 1e-2, \"shear_deform\": 1e-2 } ] } INPUT: INPUT_PARAMETERS calculation cell-relax symmetry 0 basis_type lcao ecutwfc 100.0 scf_thr 1.0e-06 scf_nmax 100 smearing_method gauss smearing_sigma 0.002 mixing_type pulay mixing_beta 0.3 cal_force 1 cal_stress 1 kspacing 0.10 在当前目录建立一个 conf 文件夹,把 STRU 文件放进去,依次运行下面命令: dpgen autotest make relaxation.json nohup dpgen autotest run relaxation.json machine.json & dpgen autotest post relaxation.json dpgen autotest make property.json nohup dpgen autotest run property.json machine.json & dpgen autotest post property.json 计算完成之后,会在 conf/elastic_00/result.out 文件里记录弹性常数、模量等信息,conf/eos_00/result.out 里记录 EOS 等数据。 以上即为采用 ABACUS 3.2.0 和 DPGEN 软件结合的介绍,若有任何问题,欢迎给我们反馈。 "},"abacus-libri.html":{"url":"abacus-libri.html","title":"ABACUS+LibRI 做杂化泛函计算教程","keywords":"","body":"ABACUS+LibRI 做杂化泛函计算教程 作者:梁馨元,邮箱:2201111875@stu.pku.edu.cn 审核:林霈泽,邮箱:linpeize@sslab.org.cn 最后更新时间:2023/08/21 一、介绍 杂化泛函(Hybrid Functional)是指在密度泛函理论框架中的交换关联项里面加入一部分的 Hartree Fock (简称 HF)的精确交换能。开源密度泛函理论软件 ABACUS 可以结合另一款国产开源软件 LibRI 软件进行杂化密度泛函计算,目前仅支持在数值原子轨道基组下使用该功能。可以通过 dft_functional 参数指定所使用的杂化泛函类型,如可以选择 hf (Hartree-Fock), pbe0(PBE0), hse(HSE06)以及 scan0 杂化泛函。本教程以 HSE 杂化泛函为例,介绍如何在 ABACUS 里调用 LibRI 做杂化泛函自洽迭代、求力和应力以及结构优化。 注 1:使用 ABACUS+LibRI 做杂化泛函计算时,最大并行核数是N_a^4N_K^3,其中N_a是原子个数,N_k是 k 点个数。计算资源超出时可以运行,但会造成浪费。 注 2:使用 ABACUS+LibRI 做杂化泛函计算时,因为内存消耗比较大,推荐给定计算资源的前提下,先尽量使用 OpenMP 多线程并行,再考虑使用 MPI 多进程并行。 二、杂化泛函的使用 1. ABACUS 编译准备 如果要在 ABACUS 中使用杂化泛函进行计算,需要在编译 ABACUS 的时候也编译 Libxc、LibRI 和 LibComm 三个软件包,具体请见线上文档 Advanced Installation Options ‒ ABACUS documentation。 注意在链接 LibRI、LibComm 时如果报错未定义的引用等,可以先注意检查 ABACUS 源代码下 deps 文件夹下是否包含 LibRI、LibComm 两个文件夹。如果未包含这两个文件夹,或文件夹中无内容,在本地Github仓库中可以尝试如下两条语句,以获取这两个子仓库内容: git submodule init git submodule update --remote --recursive 2. 采用杂化泛函进行电子自洽迭代计算 本教程在 Gitee 上准备了一个硅晶体使用杂化泛函做自洽计算(SCF)的例子(Gitee 的下载链接),以下是 INPUT 文件及相关的参数。由 dft_functional 设置为 hse 可知,该例子使用的杂化泛函为 HSE 泛函。KPT 文件取的是 444 的布里渊区 k 点。 INPUT_PARAMETERS calculation scf basis_type lcao ntype 1 nbands 8 ecutwfc 60.0 scf_nmax 100 dft_functional hse scf_thr 1e-7 杂化泛函相关的完整参数列表及解释见 Full List of INPUT Keywords / exact-exchange ‒ ABACUS documentation。这里再进行简单概述: 泛函相关参数: exx_hybrid_alpha:杂化泛函中加入的 HF 精确交换能(Fock 交换能)的比例α,即有E_x=αE_{x}^{HF}+(1-α)E_{x}^{LDA/GGA}。如果 dft_functional 设置为 hf,则默认值为1。目前其他杂化泛函的默认值是0.25。但是,如果是 SCAN0 泛函,有的文献取的是 0.1,所以需要根据你想取的值进行设定[1]。 exx_hse_omega:为 HSE 泛函中的区间分割参数(range-separation parameter)\\omega,即有\\frac{1}{r}=\\frac{erfc({\\omega}r)}{r}+\\frac{erf({\\omega}r)}{r}。默认值为0.11(bohr^{-1}),此时为 HSE06 泛函[2]。 exx_lambda:在 basis_type 设置为 lcao_in_pw 的情况下,用于补偿使用 lcao_in_pw 方法评估精确交换能时 G=0 处的发散点。默认值为0.3。 exx_real_number:该参数设定为 True 时,强制 LibRI 使用 double 数据类型,当设定为 False 时,强制 LibRI 使用 complex 数据类型。当gamma_only=1 时,默认为 True,gamma_only=0 时默认为 False。 循环相关参数: exx_separate_loop:ABACUS 提供了两种迭代方法来评估精确交换能E_{exx}。当 exx_separate_loop 设置为False时:采用单层循环,即先进行 GGA 循环,然后进行 Hybrid 循环,在该过程中,使用电子迭代来更新E_{exx}对应的哈密顿量H_{exx}。当 exx_separate_loop 设置为True时:采用双层循环,在内层循环中,进行自洽迭代并更新密度矩阵,在外层循环中,根据在内层循环中收敛的密度矩阵来计算H_{exx}。默认值为 True,即采用双层循环计算。单层循环有利于难以自洽收敛的体系达到收敛,但会显著增加内存消耗。 exx_hybrid_step:在 exx_separate_loop 设置为 True 的情况下,外层循环的最大迭代步数。默认值为100。 exx_mixing_beta:在 exx_separate_loop 设置为 True 的情况下,内层循环每次迭代时,密度矩阵混合的 mixing_beta 取值,默认为1.0。 exx_pca_threshold:为了加速四中心积分\\langle ik\\vert\\ jl\\rangle的计算,ABACUS 采用 LRI 方法,将原子轨道的乘积在辅助基函数(ABF)的基础上展开,即\\Phi_i\\Phi_j \\approx \\sum_aC_{ij}^aP_a,并利用 PCA 减小辅助基函数(ABF)的大小(即P_a个数)。阈值越大,ABF 的数目越少,计算速度越快,计算精度越低。一个相对安全的值是1e-4,也是默认值。 exx_ccp_rmesh_times:此参数决定计算 Columb 势所需的截断半径比原子轨道的截断半径大多少倍。对于 HSE 泛函,设置为 1 就足够了。但是对于 PBE0,必须使用一个大得多的数字。当使用 HSE 泛函时,默认值为1.5,其他情况下默认值为5。 张量筛选相关参数: 针对杂化泛函计算过程中的物理量进行筛选可以加速计算。具体来说,exx_c_threshold、exx_v_threshold、exx_dm_threshold、exx_c_grad_threshold、exx_v_grad_threshold 分别是针对C_{ij}^a、V_{ab}=\\langle P_a\\vert\\ P_b\\rangle、密度矩阵、\\nabla C_{ij}^a、\\nabla V_{ab}。阈值越大,筛掉的张量越多,计算速度越快,计算精度越低。具体请查看完整 INPUT 参数文档。 Cauchy-Schwartz 不等式相关参数: exx_cauchy_threshold:在实际中,Fock 交换矩阵是稀疏的,利用 Cauchy-Schwartz 不等式,我们可以在进行显式求值之前找到每个矩阵元素的上界。小于 exx_cauchy_threshold 的值将被截断。阈值越大,筛掉的张量越多,计算速度越快,精度越低。一个相对安全的值是1e-7,也是默认值。不等式算法参见参考文献[3]。 exx_cauchy_force_threshold、exx_cauchy_stress_threshold与exx_cauchy_threshold类似,区别在于它们分别针对的是求力、应力计算中的 Fock 交换矩阵元。 opt_orb 相关参数:当dft_functional设置为 opt_orb 时使用,opt_orb 参考文献[4]。本功能仅用于生成 opt 辅助基组,不进行杂化泛函计算。 exx_opt_orb_lmax:球贝塞尔函数的最大角动量 L 值,opt-ABF 的径向部分用球贝塞尔函数的线性组合生成。 exx_opt_orb_ecut:球贝塞尔函数展开的截断,在优化 opt-ABF 的时候采用的是球贝塞尔函数基组。 exx_opt_orb_tolerence:解球贝塞尔函数零点时的阈值。 3. 杂化泛函计算代价 杂化泛函的计算精度高,与此同时它的计算代价也比较高。在 ABACUS 的输入参数文件 INPUT 中,若 exx_separate_loop 参数设为 True(默认),仅在 SCF 步骤中就涉及两层循环。每次内层循环完成,外层循环往前推进一步时,屏幕输出 Updating EXX and rerun SCF。 一次 SCF 需要的时间至少是以上两个循环涉及的单次电子迭代时间之和。对于单次电子迭代所需时间,在此提出一些已有的经验。以一步电子迭代的时间为衡量尺标,使用 DZP 基组,CPU 型号为 Intel(R) Xeon(R) Gold 6132 CPU @ 2.60GHz,使用 4 核计算一个水分子为 0.6s 左右,使用 14 个核计算 32 个水分子为 0.8s 左右,使用 14 个核计算 64 个水需要 1.9s 左右。 若将 exx_separate_loop 参数设为 False,即使用单层循环时,首先会进行 GGA 迭代直到自洽收敛,然后屏幕输出 Entering 2nd SCF, where EXX is updated,进行 Hybrid 迭代,此时每进行一次电子步得到新的密度后,都会更新一次精确交换能。以一步电子迭代 + 更新精确交换能的时间为衡量尺标,使用 DZP 基组,CPU 型号为 Intel(R) Xeon(R) Gold 6132 CPU @ 2.60GHz,使用 4 核计算一个水分子为 0.7s 左右,使用 14 个核计算 32 个水分子为 115s 左右,使用 14 个核计算 64 个水需要 330s 左右。对于更大的体系,如 2048 个 Si 原子的晶体,使用 DZP 基组,CPU 型号为 Intel(R) Xeon(R) Silver 4310 CPU @ 2.10GHz,用一个节点(56 核)算时,PBE 下一步电子迭代大概需要 380s,而 HSE 一步电子迭代 + 更新精确交换能大概需要 1680s。 在进行杂化泛函计算时推荐尽量使用多线程计算(OpenMP),此时内存开销相对较小,计算速度相对较快。 三、使用杂化泛函做结构优化 1. 数据准备 在 Gitee 上我们准备了一个简单的使用杂化泛函做结构优化的例子。该例子是在 LCAO 基组下,使用 HSE 泛函,优化单个水分子的结构。文件夹中 log.ref 是使用 3.2.1 版本的 ABACUS 软件包,v0.1.0 版本的 LibRI 和 LibComm 计算所得的屏幕输出。 2. 输入文件 准备计算所需的 INPUT 文件、STRU 文件、KPT 文件,以及 H、O 原子对应的数值原子轨道文件。其中 INPUT 文件如下。注意该文件中指明了计算类型为 relax,即不对晶胞做优化(cell relax),只对原子位置做优化(relax)。更多结构优化类型请看文档 Geometry Optimization ‒ ABACUS documentation。 INPUT_PARAMETERS calculation relax basis_type lcao ntype 2 ecutwfc 60.000000 scf_nmax 100 gamma_only 1 dft_functional hse relax_nmax 100 scf_thr 1e-6 force_thr_ev 1e-2 在该例子中,结构优化包括多个离子步,每个离子步中都要做一次 SCF。由 INPUT 文件可知,SCF 收敛的标准由 scf_thr=1e-6 指定,或达到 SCF 的最大步数 scf_nmax=100,并计算受力。根据上一个离子步计算得到的受力,计算下一个离子步的原子位置,计算收敛的标准此时为 force_thr_ev=1e-2,或达到离子步的最大步数 relax_nmax=100。STRU 文件如下,可见在结构弛豫步骤中,三个原子都可以移动。 ATOMIC_SPECIES O 16.00 O_ONCV_PBE-1.0.upf H 1.00 H_ONCV_PBE-1.0.upf LATTICE_CONSTANT 1 LATTICE_VECTORS 28 0 0 0 28 0 0 0 28 ATOMIC_POSITIONS Direct O #label 0 #magnetism 1 #number of atoms 0.677639488918 0.5227809096584 0.232500040128 m 1 1 1 H #label 0 #magnetism 2 #number of atoms 0.641808457616 0.5785821615863 0.228644198512 m 1 1 1 0.708889637644 0.5204300746076 0.175087721492 m 1 1 1 NUMERICAL_ORBITAL O_gga_6au_60Ry_2s2p1d.orb H_gga_6au_60Ry_2s1p.orb 3. 结果 结构弛豫(relax)后的原子结构可见 OUT.ABACUS/STRU_ION_D。由输出文件可知,即使该例子中采用了相对稳定的构型,且 scf_thr 仅设为 1e-6,使用 HSE 做结构弛豫的计算代价仍然很高,使用 6 个核(Intel(R) Xeon(R) Gold 6132 CPU @ 2.60GHz)计算需要 5 分钟左右。 四、参考文献 [1] Staroverov V N, Scuseria G E, Tao J, et al. Comparative assessment of a new nonempirical density functional: Molecules and hydrogen-bonded complexes[J]. The Journal of chemical physics, 2003, 119(23): 12129-12137. [2] Aliaksandr V. Krukau, Oleg A. Vydrov, Artur F. Izmaylov, Gustavo E. Scuseria; Influence of the exchange screening parameter on the performance of screened hybrid functionals. J. Chem. Phys. 14 December 2006; 125 (22): 224106. [3] Lin P, Ren X, He L. Efficient hybrid density functional calculations for large periodic systems using numerical atomic orbitals. Journal of Chemical Theory and Computation, 2021, 17(1): 222–239. [4] Lin P, Ren X, He L. Accuracy of localized resolution of the identity in periodic hybrid functional calculations with numerical atomic orbitals[J]. The Journal of Physical Chemistry Letters, 2020, 11(8): 3082-3088. "},"abacus-candela.html":{"url":"abacus-candela.html","title":"ABACUS+Candela 使用教程","keywords":"","body":"ABACUS+Candela 使用教程 作者:陈涛,邮箱:chentao@stu.pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/08/23 一、介绍 本教程旨在介绍采用 Candela 分析 ABACUS(基于 3.2.4 版本)分子动力学轨迹,计算径向分布函数(Radial Distribution Function,简称 RDF),静态结构因子(Static Structure Factor,简称 SSF),离子-离子动态结构因子(Ion-ion Dynamic Structure Factor,简称 DSF)以及均方差位移(Mean Square Displacement,简称 MSD)流程。 上述性质的具体描述可以参考:Qianrui Liu et al 2020 J. Phys.: Condens. Matter 32 144002,径向分布函数(RDF)见文中公式(12),静态结构因子(SSF)见公式(13),离子-离子动态结构因子(DSF)见公式(15,16,17)以及均方差位移(MSD)见公式(18)。 Candela 全称 Collection of ANalysis DEsigned for Large-scale Atomic simulations,目前支持分析 QE、ABACUS、LAMMPS 和 VASP 的分子动力学轨迹,Github 主页:https://github.com/MCresearch/Candela 二、准备 1. 下载并安装 Candela git clone https://github.com/MCresearch/Candela.git cd Candela make -j4 #使用intel oneapi编译器 若使用 Intel Oneapi 编译器,按照上述流程操作,在编译完成后即可在 bin 目录下看到 candela 可执行文件 若使用其他编译器,需要按照 Candela 目录下 Makefile.vars 修改相应的 CXX 2 下载例子 可以从 Gitee 上下载。在网页右侧点击克隆/下载-> 下载 ZIP 得到算例,或者在 linux 终端执行如下命令得到算例: git clone https://gitee.com/mcresearch/abacus-user-guide.git 下载完成后解压,之后进入 abacus-user-guide/examples/candela 文件夹 算例中包含 RDF、SSF、DSF、MSD 四个文件夹和 MD_dump 文件。其中 MD_dump 是 32 原子的铝的 MD 轨迹 三、流程 1 计算径向分布函数 进入 RDF 文件夹,INPUT 文件即为 Candela 的输入文件,具体如下: calculation pdf geo_in_type ABACUS geo_directory ../MD_dump geo_1 0 geo_2 100 geo_interval 2 geo_ignore 50 geo_out Al_rdf.txt ntype 1 natom 32 rcut 2.3 dr 0.01 以上参数在 Candela 的线上文档中均有详细说明,这里再进行简单概述: calculation:设置为 pdf(Pair Distribution Function)即计算径向分布函数 geo_in_type:读取的 MD 轨迹的格式,目前支持分析 pw.x(QE2),cp.x(QE),ABACUS(ABACUS)、LAMMPS(LAMMPS)和 VASP(VASP) geo_directory:MD 轨迹的位置 geo_1:MD 轨迹起始的索引 geo_2:MD 轨迹结束的索引 geo_interval:Candela 读取 MD 轨迹的间隔 geo_ignore:需要跳过的 MD 轨迹帧数 geo_out:输出的文件名,默认为 result.dat ntype:原子种类 natom:原子数 rcut:计算 RDF 的截断半径,一般取晶格的一半,单位为 Angstrom dr:计算 RDF 的 r 的间隔,单位为 Angstrom 执行如下命令: mpirun -n 2 candela 即可得到 RDF,输出到 Al_rdf.txt,其中第一列为 r,单位为 Angstrom,第二列即为对应的 RDF,第三列为对第二列积分的结果。 2 静态结构因子 进入 SSF 文件夹,INPUT 文件具体如下: calculation ssf geo_in_type ABACUS geo_directory ../MD_dump geo_1 0 geo_2 100 geo_interval 2 geo_ignore 50 ssf_out Al_ssf.txt ntype 1 natom 32 struf_dgx 1.32656 struf_dgy 1.32656 struf_dgz 1.32656 struf_ng 6 以上参数在 Candela 的线上文档中均有详细说明,这里再进行简单概述: calculation:设置为 ssf,即计算静态结构因子 ssf_out:输出的文件名 struf_dgx:倒空间中的间隔,一般取 2\\pi/a,其中a为x方向的晶格长度,单位为\\mathrm{Angstrom^{-1}} struf_dgy:一般取 2\\pi/b,其中b为y方向的晶格长度,单位为\\mathrm{Angstrom^{-1}} struf_dgz:一般取 2\\pi/c,其中c为z方向的晶格长度,单位为\\mathrm{Angstrom^{-1}} struf_ng:上述倒空间中的间隔的数量 执行如下命令: mpirun -n 2 candela 即可得到 SSF,输出到 Al_ssf.txt(原始的计算结果)以及 sm-Al_ssf.txt(平滑的计算结果),其中第一列为 q,单位为\\mathrm{Angstrom^{-1}},第二列即为对应的 SSF。 3 离子-离子动态结构因子 进入 DSF 文件夹,离子-离子动态结构因子需要对中间散射函数(Intermediate Scattering Function)进行傅里叶变换得到,因此需要先计算中间散射函数,INPUT 文件具体如下: calculation isf2 geo_in_type ABACUS geo_directory ../MD_dump geo_1 50 geo_2 100 geo_interval 1 isf_outfile isf.txt ntype 1 natom 32 isf_nt1 11 isf_nt2 40 dt_snapshots 0.00006 isf_target_q 2.65 isf_dgx 1.32656 isf_dgy 1.32656 isf_dgz 1.32656 isf_ngx 6 isf_ngy 6 isf_ngz 6 以上参数在 Candela 的线上文档中均有详细说明,这里再进行简单概述: calculation:设置为 isf2,即计算中间散射函数 isf_outfile:输出的文件名 isf_nt1:中间散射函数的时间长度 isf_nt2:用于平均中间散射函数的时间长度,注意需要控制 interval*(nt1+nt2) dt_snapshots:MD 轨迹每一帧之间的时间步长,单位为 ps isf_target_q:中间散射函数计算的目标 q,单位为\\mathrm{Angstrom^{-1}} isf_dgx:倒空间中的间隔,一般取 2\\pi/a,其中a为x方向的晶格长度,单位为\\mathrm{Angstrom^{-1}} isf_dgy:一般取 2\\pi/b,其中b为y方向的晶格长度,单位为\\mathrm{Angstrom^{-1}} isf_dgz:一般取 2\\pi/c,其中c为z方向的晶格长度,单位为\\mathrm{Angstrom^{-1}} isf_ngx:上述倒空间中 x 方向的间隔的数量 isf_ngy:上述倒空间中 y 方向的间隔的数量 isf_ngz:上述倒空间中 z 方向的间隔的数量 执行如下命令: mpirun -n 2 candela 即可得到 ISF,输出到 isf.txt,其中第一列为时间,单位为 ps,第二列即为对应的 ISF。 接着执行如下命令得到离子-离子动态结构因子,其中PathtoCandela指的是Candela的下载目录: python PathtoCandela/examples/e3_dsf/onedsf.py 0.00006 0.0006 其中第一个参数 0.00006 = dt_snapshots * geo_interval,为 ISF 的时间步长,单位为 ps;第二个参数 0.0006,为对 ISF 做傅里叶变换的总时长,单位为 ps。这里 onedsf.py 默认读取 isf.txt,并输出到 dsf.txt,其中第一列为\\hbar \\omega,单位为 meV,第二列即为对应的 DSF。 4 均方差位移 进入 MSD 文件夹,INPUT 文件具体如下: calculation msd_multiple geo_in_type ABACUS geo_directory ../MD_dump geo_1 0 geo_2 100 geo_interval 1 geo_ignore 50 ntype 1 natom 32 msd_n 2 msd_t0 0.003 msd_t 0.0015 msd_dt0 0.0015 msd_dt 0.00006 msd_natom 32 以上参数在 Candela 的线上文档中均有详细说明,这里再进行简单概述: calculation:设置为 msd_multiple,即计算均方差位移 msd_n:计算均方差位移的段数,目的是将 MD 轨迹分成若干段,分别计算均方差位移 msd_t0:计算均方差位移的起始时间,单位为 ps msd_t:每段均方差位移的时长,单位为 ps msd_dt0:两段均方差位移起始位置的间隔,单位为 ps。若设置等于 msd_t,则每段均方差位移之间的时间距离为 0 msd_dt:获取的 MD 轨迹每一帧之间的时间步长(等于geo_interval * dt,其中 dt 为 MD 轨迹每一帧之间的时间步长),单位为 ps msd_natom:需要设置为计算的原子数 执行如下命令: mpirun -n 2 candela 即可得到 MSD,输出到 MSD_each.txt 和 MSD_total.txt。其中 MSD_each.txt 第一列为时间,单位为 ps,第二列到最后一列即为对应的每段的 MSD,单位为\\mathrm{Angstrom^{2}};MSD_total.txt 第一列为时间,单位为 ps,第二列为平均的每段的 MSD,单位为\\mathrm{Angstrom^{2}}。 "},"abacus-news.html":{"url":"abacus-news.html","title":"ABACUS 新闻稿整理","keywords":"","body":"ABACUS 新闻稿整理 整理人:陈涛,邮箱:chentao@stu.pku.edu.cn 审核:陈默涵,邮箱:mohanchen@pku.edu.cn 最后更新时间:2023/08/01 标题 链接 日期 ABACUS开发者大会 \\ 聚焦国产密度泛函理论开源软件的进步与挑战 https://mp.weixin.qq.com/s/EX5WcKtVucRbY8DIvj3PyQ 2023/08/01 ABACUS 3.3 发布:自动化测试工作流赋能高效研发,为代码质量保驾护航 https://mp.weixin.qq.com/s/IelmHC-Ck4-Stsagu_7HUA 2023/07/13 国产开源软件专题研讨会——第三届 ABACUS 开发者会议第三轮通知 https://mp.weixin.qq.com/s/z9_NrGlciHwKSHwLPZrGvA 2023/07/11 LibRI:携手 DeepModeling 社区,助力超越常规 DFT 方法的高阶方法计算 https://mp.weixin.qq.com/s/xblxgWlGMdy7OcI1qMZ4Uw 2023/05/26 ABACUS 3.2 发布:支持 Hefei-NAMD 接口,全面提升代码稳定性和易用性 https://mp.weixin.qq.com/s/lB9Q3JiSuMmipkhd2-_ylA 2023/04/01 ABACUS 还能干这个?探索准一维材料碳纳米管中的无序超均匀性 https://mp.weixin.qq.com/s/VTf67VFAW0pVBMMnAKjBUg 2023/03/07 ABACUS 3.1 发布,支持平面波基组下的 GPU 高效计算,发布固液界面计算新功能 https://mp.weixin.qq.com/s/D8gcQb0bikMdgizLsbvCfQ 2023/01/01 探索 AI+DFT 最前线,「原子算筹」ABACUS 3.0 重磅发布! https://mp.weixin.qq.com/s/NJWbv96nF1wyjPb19NiE1Q 2022/10/02 探索 AI+DFT 最前线,「原子算筹」ABACUS 3.0 重磅发布! https://mp.weixin.qq.com/s/2YGVyNXMGL6S_MAyNhMADw 2022/10/01 ABACUS 3.0:共建 AI 辅助的新一代电子结构算法平台 https://mp.weixin.qq.com/s/qWQGGkwHMMDeTFP1kLAiCA 2022/10/01 ABACUS 新进展:用混合随机密度泛函理论方法模拟极端高温物质电子性质 https://mp.weixin.qq.com/s/oOF-Zel5ufqUx8ahZ0mpcw 2022/09/20 以合作促发展:共建国产密度泛函理论开源软件 ABACUS https://mp.weixin.qq.com/s/TyQe1JwnswHMvPIdG5bDmw 2022/09/14 ABACUS 新进展:能带反折叠(band unfolding)方法及相关应用 https://mp.weixin.qq.com/s/cPf6nxXihtprnISUXBmbYw 2022/07/22 v2.3 来了!ABACUS 小步快跑,重大升级,更快更稳更好用! https://mp.weixin.qq.com/s/WR6nszXCe_mooz8nZxfg5A 2022/07/01 ABACUS 新进展:用密度泛函理论模拟千原子以上半导体电极表面反应 https://mp.weixin.qq.com/s/M0R3WdrpcPtVV68rlsNZuQ 2022/06/21 DeePKS+ABACUS:构建高精度第一性原理计算与机器学习势函数的桥梁 https://mp.weixin.qq.com/s/DXrE5zNHtjQw813Ho0OBIQ 2022/06/13 ABACUS 2.2 版本介绍 https://mp.weixin.qq.com/s/idmkOuyAyeoLvof8ABbHwg 2022/04/08 涓流汇沧海,积篑成丘山:一位科学家与 ABACUS 的十五年 https://mp.weixin.qq.com/s/Alqgy3mkzlRTzQUjbRsZug 2021/09/28 ABACUS :携手 DeepModeling,做源自中国、开源开放的 DFT 软件 https://mp.weixin.qq.com/s/Fx5jx99g9PVjgnLAsOyQ9Q 2021/09/22 "},"abacus-contribute.html":{"url":"abacus-contribute.html","title":"如何贡献ABACUS使用教程","keywords":"","body":"如何贡献ABACUS使用教程 一、明确教程格式 第一行,写作者姓名,单位,联系方式(例如Github ID或者邮箱),如果不愿意透露作者信息,也可以不写 第一部分“介绍”:本文档教程要展示的例子、要教授的内容有哪些,相关知识可以给一些参考文献。 第二部分“准备”:介绍输入文件需要哪些,最好是能够提供输入文件的下载(例如网上github仓库),或者直接贴上输入文件 第三部分“流程”:最好通过图文结合的方式,一步步的介绍每一步的命令,能得到什么结果。 第四部分“结语”:对这个功能使用需要注意的地方,或者可以应用的场景都可以给与相关介绍 二、投稿 写好教程,检查无误后,AISI内部直接把稿件发给陈默涵老师(邮箱mohanchen@pku.edu.cn),或者向DeepModeling社区(deepmodeling@deepmodeling.com)投稿,审核通过后会加入到“ABACUS使用教程汇总” "}}
\ No newline at end of file
diff --git a/abacus-candela.md b/abacus-candela.md
index f4cb860b..207e2cf9 100644
--- a/abacus-candela.md
+++ b/abacus-candela.md
@@ -30,7 +30,7 @@ make -j4 #使用intel oneapi编译器
## 2 下载例子
-可以从 Gitee 上[下载](https://gitee.com/mcresearch/abacus-user-guide/tree/master/examples/interface_Phonopy)。在网页右侧点击克隆/下载-> 下载 ZIP 得到算例,或者在 linux 终端执行如下命令得到算例:
+可以从 Gitee 上[下载](https://gitee.com/mcresearch/abacus-user-guide/tree/master/examples/candela)。在网页右侧点击克隆/下载-> 下载 ZIP 得到算例,或者在 linux 终端执行如下命令得到算例:
```
git clone https://gitee.com/mcresearch/abacus-user-guide.git
@@ -101,9 +101,9 @@ geo_ignore 50
ssf_out Al_ssf.txt
ntype 1
natom 32
-struf_dgx 2.5133
-struf_dgy 2.5133
-struf_dgz 2.5133
+struf_dgx 1.32656
+struf_dgy 1.32656
+struf_dgz 1.32656
struf_ng 6
```
@@ -143,10 +143,10 @@ isf_nt1 11
isf_nt2 40
dt_snapshots 0.00006
-isf_target_q 2.51
-isf_dgx 2.5133
-isf_dgy 2.5133
-isf_dgz 2.5133
+isf_target_q 2.65
+isf_dgx 1.32656
+isf_dgy 1.32656
+isf_dgz 1.32656
isf_ngx 6
isf_ngy 6
isf_ngz 6
diff --git a/examples/candela/DSF/INPUT b/examples/candela/DSF/INPUT
index d55a5f0f..70f7ed69 100644
--- a/examples/candela/DSF/INPUT
+++ b/examples/candela/DSF/INPUT
@@ -12,10 +12,10 @@ isf_nt1 11
isf_nt2 40
dt_snapshots 0.00006
-isf_target_q 2.51
-isf_dgx 2.5133
-isf_dgy 2.5133
-isf_dgz 2.5133
+isf_target_q 2.65
+isf_dgx 1.32656
+isf_dgy 1.32656
+isf_dgz 1.32656
isf_ngx 6
isf_ngy 6
isf_ngz 6
\ No newline at end of file
diff --git a/examples/candela/DSF/ref_dsf.txt b/examples/candela/DSF/ref_dsf.txt
index b7928d06..354fec2e 100644
--- a/examples/candela/DSF/ref_dsf.txt
+++ b/examples/candela/DSF/ref_dsf.txt
@@ -1,14 +1,138 @@
-0.000000000000000000e+00 2.465688626500947304e-05
-2.552881461363759172e+03 2.413365530499548260e-05
-5.105762922727518344e+03 2.261005084034131799e-05
-7.658644384091277061e+03 2.021664847245482555e-05
-1.021152584545503669e+04 1.714779967445337846e-05
-1.276440730681879722e+04 1.363386360823672130e-05
-1.531728876818255412e+04 9.913350415902901595e-06
-1.787017022954631466e+04 6.210403475947112303e-06
-2.042305169091007338e+04 2.720220481048546727e-06
-2.297593315227383209e+04 -3.976629158008453670e-07
-2.552881461363759445e+04 -3.019986095749431407e-06
-2.808169607500135317e+04 -5.056615492557239131e-06
-3.063457753636510824e+04 -6.445794737116893135e-06
-3.318745899772887060e+04 -7.149423068291925601e-06
+0.000000000000000000e+00 1.813021610798463946e-04
+2.506465434793508962e+02 1.796193290115139722e-04
+5.012930869587017924e+02 1.746276249344512271e-04
+7.519396304380526317e+02 1.664951377850108966e-04
+1.002586173917403585e+03 1.554944912590266483e-04
+1.253232717396754424e+03 1.419919034225918658e-04
+1.503879260876105263e+03 1.264325465739768320e-04
+1.754525804355456103e+03 1.093228462702485880e-04
+2.005172347834807169e+03 9.121048942071875785e-05
+2.255818891314157554e+03 7.266300707008649222e-05
+2.506465434793508848e+03 5.424585368289736921e-05
+2.757111978272860142e+03 3.650091900149288551e-05
+3.007758521752210527e+03 1.992638046128723955e-05
+3.258405065231561821e+03 4.958735277011439622e-06
+3.509051608710912205e+03 -8.042254867177464341e-06
+3.759698152190263500e+03 -1.880511188127108354e-05
+4.010344695669614339e+03 -2.715425117121869904e-05
+4.260991239148965178e+03 -3.301340380846544290e-05
+4.511637782628315108e+03 -3.640479177581395240e-05
+4.762284326107666857e+03 -3.744418757743100750e-05
+5.012930869587017696e+03 -3.633217122515288198e-05
+5.263577413066368536e+03 -3.334206222918634953e-05
+5.514223956545720284e+03 -2.880514427218238251e-05
+5.764870500025070214e+03 -2.309390952054479624e-05
+6.015517043504421054e+03 -1.660412334638456457e-05
+6.266163586983771893e+03 -9.736545659247301864e-06
+6.516810130463123642e+03 -2.879141003961841352e-06
+6.767456673942473572e+03 3.609433109766702298e-06
+7.018103217421824411e+03 9.414348864353793830e-06
+7.268749760901176160e+03 1.427654133425967387e-05
+7.519396304380526999e+03 1.800158798382302028e-05
+7.770042847859877838e+03 2.046522532839878028e-05
+8.020689391339228678e+03 2.161535989400659348e-05
+8.271335934818578608e+03 2.147059987135141359e-05
+8.521982478297930356e+03 2.011549793010586202e-05
+8.772629021777280286e+03 1.769284674348329845e-05
+9.023275565256630216e+03 1.439349983767887199e-05
+9.273922108735983784e+03 1.044429548679610852e-05
+9.524568652215333714e+03 6.094735952360685515e-06
+9.775215195694685463e+03 1.603115422188351528e-06
+1.002586173917403539e+04 -2.777203761805211382e-06
+1.027650828265338532e+04 -6.810695146343833372e-06
+1.052715482613273707e+04 -1.029114144946008239e-05
+1.077780136961208882e+04 -1.305115504590505042e-05
+1.102844791309144057e+04 -1.496933617112337713e-05
+1.127909445657078868e+04 -1.597478937330965091e-05
+1.152974100005014043e+04 -1.604885936515674309e-05
+1.178038754352949218e+04 -1.522409140644692764e-05
+1.203103408700884211e+04 -1.358056140551962561e-05
+1.228168063048819386e+04 -1.123985011827172759e-05
+1.253232717396754379e+04 -8.357047883943348154e-06
+1.278297371744689553e+04 -5.111265987639229563e-06
+1.303362026092624728e+04 -1.695193934195003612e-06
+1.328426680440559903e+04 1.695723972015704258e-06
+1.353491334788494714e+04 4.873915423364005399e-06
+1.378555989136429889e+04 7.669558771773136798e-06
+1.403620643484364882e+04 9.939215626578308562e-06
+1.428685297832300057e+04 1.157279745994770680e-05
+1.453749952180235232e+04 1.249854419089990248e-05
+1.478814606528170225e+04 1.268580504507536490e-05
+1.503879260876105400e+04 1.214553263467471639e-05
+1.528943915224040211e+04 1.092852374982703632e-05
+1.554008569571975568e+04 9.121558398324818619e-06
+1.579073223919910561e+04 6.841696124897755809e-06
+1.604137878267845736e+04 4.229080191103601996e-06
+1.629202532615780729e+04 1.438671335364409644e-06
+1.654267186963715722e+04 -1.368619765081614513e-06
+1.679331841311651078e+04 -4.034910570542855072e-06
+1.704396495659586071e+04 -6.413949306517712084e-06
+1.729461150007521428e+04 -8.378886592097341881e-06
+1.754525804355456057e+04 -9.828814539270483175e-06
+1.779590458703391414e+04 -1.069374611510090649e-05
+1.804655113051326043e+04 -1.093779788568969189e-05
+1.829719767399261764e+04 -1.056044052432870953e-05
+1.854784421747196757e+04 -9.595788102923896029e-06
+1.879849076095131750e+04 -8.110003437234833044e-06
+1.904913730443066743e+04 -6.196996975404481799e-06
+1.929978384791001736e+04 -3.972685665471135903e-06
+1.955043039138937093e+04 -1.568151348931799759e-06
+1.980107693486872085e+04 8.779081484976896760e-07
+2.005172347834807078e+04 3.227010483031721166e-06
+2.030237002182742435e+04 5.348569895236596292e-06
+2.055301656530677064e+04 7.127010337238805934e-06
+2.080366310878612421e+04 8.467930635624153291e-06
+2.105430965226547414e+04 9.302999289873063095e-06
+2.130495619574482407e+04 9.593330678858157687e-06
+2.155560273922417764e+04 9.331180978645732969e-06
+2.180624928270352757e+04 8.539896150769528562e-06
+2.205689582618288114e+04 7.272140766703219538e-06
+2.230754236966223107e+04 5.606529955704002064e-06
+2.255818891314157736e+04 3.642872383395962251e-06
+2.280883545662093093e+04 1.496305356915537079e-06
+2.305948200010028086e+04 -7.093398983818425832e-07
+2.331012854357963442e+04 -2.848566924086419816e-06
+2.356077508705898435e+04 -4.801243939252652266e-06
+2.381142163053833065e+04 -6.459246994367523289e-06
+2.406206817401768421e+04 -7.732354263645520073e-06
+2.431271471749703414e+04 -8.553074730657228881e-06
+2.456336126097638771e+04 -8.880156690016049084e-06
+2.481400780445573764e+04 -8.700596904647049277e-06
+2.506465434793508757e+04 -8.030055682993426030e-06
+2.531530089141444114e+04 -6.911671884911838070e-06
+2.556594743489379107e+04 -5.413360050226739972e-06
+2.581659397837314100e+04 -3.623754666188334830e-06
+2.606724052185249457e+04 -1.647039579647232240e-06
+2.631788706533184450e+04 4.030401801493926359e-07
+2.656853360881119806e+04 2.409644489149199455e-06
+2.681918015229054436e+04 4.259419057021109147e-06
+2.706982669576989429e+04 5.848824882374916330e-06
+2.732047323924924785e+04 7.089866838759769776e-06
+2.757111978272859778e+04 7.914907995846710769e-06
+2.782176632620795135e+04 8.280309249187654363e-06
+2.807241286968729764e+04 8.168700745811890271e-06
+2.832305941316664757e+04 7.589768687645496038e-06
+2.857370595664600114e+04 6.579524075287720624e-06
+2.882435250012535107e+04 5.198104231780732331e-06
+2.907499904360470464e+04 3.526238887482431362e-06
+2.932564558708405093e+04 1.660585790196331805e-06
+2.957629213056340450e+04 -2.917977444943140561e-07
+2.982693867404275807e+04 -2.219534520019607497e-06
+3.007758521752210800e+04 -4.013216666227551234e-06
+3.032823176100145793e+04 -5.571552771103713293e-06
+3.057887830448080422e+04 -6.807030927073938633e-06
+3.082952484796016142e+04 -7.650784119361735765e-06
+3.108017139143951135e+04 -8.056390026067426034e-06
+3.133081793491886128e+04 -8.002397565105948772e-06
+3.158146447839821121e+04 -7.493444038505220412e-06
+3.183211102187756478e+04 -6.559905511757450588e-06
+3.208275756535691471e+04 -5.256104761413411551e-06
+3.233340410883626828e+04 -3.657181218510828795e-06
+3.258405065231561457e+04 -1.854801420244334570e-06
+3.283469719579496450e+04 4.804750938099420223e-08
+3.308534373927431443e+04 1.942888401151344696e-06
+3.333599028275367164e+04 3.721881558481486257e-06
+3.358663682623302157e+04 5.283906287142323527e-06
+3.383728336971236422e+04 6.540256579571632909e-06
+3.408792991319172143e+04 7.419633028858355269e-06
+3.433857645667107136e+04 7.872152571188545928e-06
diff --git a/examples/candela/DSF/ref_isf.txt b/examples/candela/DSF/ref_isf.txt
index d40a7145..702504c2 100644
--- a/examples/candela/DSF/ref_isf.txt
+++ b/examples/candela/DSF/ref_isf.txt
@@ -1,12 +1,12 @@
#time ISF
-0 0.545525
-6e-05 0.548246
-0.00012 0.54904
-0.00018 0.547915
-0.00024 0.544759
-0.0003 0.540041
-0.00036 0.533489
-0.00042 0.5254
-0.00048 0.515866
-0.00054 0.504843
-0.0006 0.492305
+0 0.606753
+6e-05 0.610541
+0.00012 0.612256
+0.00018 0.611912
+0.00024 0.609538
+0.0003 0.605178
+0.00036 0.598888
+0.00042 0.590738
+0.00048 0.580807
+0.00054 0.569183
+0.0006 0.555962
diff --git a/examples/candela/SSF/INPUT b/examples/candela/SSF/INPUT
index 86fbde83..2e1d0085 100644
--- a/examples/candela/SSF/INPUT
+++ b/examples/candela/SSF/INPUT
@@ -9,7 +9,7 @@ geo_ignore 50
ssf_out Al_ssf.txt
ntype 1
natom 32
-struf_dgx 2.5133
-struf_dgy 2.5133
-struf_dgz 2.5133
+struf_dgx 1.32656
+struf_dgy 1.32656
+struf_dgz 1.32656
struf_ng 6
\ No newline at end of file
diff --git a/examples/candela/SSF/ref_Al_ssf.txt b/examples/candela/SSF/ref_Al_ssf.txt
index f1625a44..1ecc80f0 100644
--- a/examples/candela/SSF/ref_Al_ssf.txt
+++ b/examples/candela/SSF/ref_Al_ssf.txt
@@ -1,66 +1,66 @@
-2.5133 0.345999
-3.55434 0.745128
-4.35316 0.494162
-5.0266 1.19746
-5.61991 1.2372
-6.1563 1.27521
-7.10869 1.11122
-7.5399 0.844335
-7.94775 0.832462
-8.33567 0.772972
-8.70633 0.901797
-9.06183 1.01054
-9.40391 1.06041
-10.0532 0.61635
-10.3626 1.06843
-10.663 0.982719
-10.9552 0.641951
-11.2398 0.895978
-11.5174 0.818662
-11.7884 0.889137
-12.3126 0.864581
-12.5665 1.01906
-12.8154 0.996543
-13.0595 1.2461
-13.5345 0.95306
-13.7659 0.934613
-14.2174 1.36614
-14.4378 1.08725
-14.6549 0.960906
-14.8689 0.949919
-15.0798 1.0475
-15.2878 0.911362
-15.493 1.04402
-15.8955 1.19865
-16.093 0.928915
-16.288 0.893584
-16.4808 1.06504
-16.6713 1.10534
-16.8597 0.96935
-17.046 1.12444
-17.4127 0.686601
-17.5931 1.05733
-17.7717 1.00406
-17.9486 1.19276
-18.1237 0.983091
-18.2971 0.93808
-18.4689 0.870007
-18.8078 0.819792
-18.975 1.14617
-19.305 0.903498
-19.6295 1.11241
-19.7897 0.95827
-20.2629 0.987416
-20.4181 1.01844
-20.7252 0.949082
-21.0278 1.15255
-21.3261 0.938464
-21.4736 1.0361
-21.7658 1.0149
-21.9104 1.00169
-22.0541 0.970528
-22.6197 1.24256
-23.3074 0.967219
-23.5768 0.79158
-24.7531 1.07262
-26.119 0.972749
+1.32656 0.167935
+1.87604 0.297491
+2.29767 0.409901
+2.65312 0.310341
+2.96628 0.632946
+3.2494 0.741784
+3.75208 0.653969
+3.97968 1.12947
+4.19495 0.760354
+4.3997 0.659939
+4.59534 0.388886
+4.78298 0.831378
+4.96353 1.17734
+5.30624 1.05643
+5.46955 0.942158
+5.62812 1.31937
+5.78234 1.13488
+5.93256 1.21469
+6.07906 1.15898
+6.22212 0.954795
+6.49879 1.42856
+6.6328 1.42298
+6.76416 0.739915
+6.89301 1.03439
+7.14374 0.943183
+7.26587 0.984094
+7.50416 0.954448
+7.62051 0.989969
+7.73511 1.10763
+7.84803 1.14592
+7.95936 0.831941
+8.06915 1.09111
+8.17747 1.09693
+8.3899 0.765447
+8.49413 0.932756
+8.59709 0.967282
+8.69884 0.916869
+8.7994 1.01185
+8.89884 0.893268
+8.99717 1.01255
+9.19068 0.607474
+9.28592 0.941192
+9.3802 0.955372
+9.47353 0.695223
+9.56596 0.957924
+9.6575 0.802796
+9.74819 1.2518
+9.92707 1.05179
+10.0153 1.02417
+10.1895 1.13744
+10.3608 1.085
+10.4453 0.918181
+10.6951 1.0876
+10.777 0.877025
+10.9391 0.950274
+11.0988 1.13241
+11.2562 0.664974
+11.3341 0.906562
+11.4883 0.694058
+11.5647 0.678278
+11.6405 0.866218
+11.939 0.969126
+12.302 0.88411
+12.4442 0.987857
+13.0651 0.781879
+13.786 1.12759
diff --git a/examples/candela/SSF/ref_sm-Al_ssf.txt b/examples/candela/SSF/ref_sm-Al_ssf.txt
index 4e45e458..d05afe21 100644
--- a/examples/candela/SSF/ref_sm-Al_ssf.txt
+++ b/examples/candela/SSF/ref_sm-Al_ssf.txt
@@ -1,63 +1,51 @@
-2.5133 0.345999
-3.55434 0.745128
-4.35316 0.494162
-5.0266 1.19746
-5.61991 1.2372
-6.1563 1.27521
-7.10869 1.11122
-7.5399 0.844335
-7.94775 0.832462
-8.33567 0.772972
-8.70633 0.901797
-9.06183 1.01054
-9.40391 1.06041
-10.0532 0.61635
-10.3626 1.06843
-10.663 0.982719
-10.9552 0.641951
-11.2398 0.895978
-11.5174 0.818662
-11.7884 0.889137
-12.3126 0.864581
-12.5665 1.01906
-12.8154 0.996543
-13.0595 1.2461
-13.5345 0.95306
-13.7659 0.934613
-14.2174 1.36614
-14.4378 1.08725
-14.6549 0.960906
-14.8689 0.949919
-15.0798 1.0475
-15.2878 0.911362
-15.493 1.04402
-15.8955 1.19865
-16.093 0.928915
-16.288 0.893584
-16.4808 1.06504
-16.6713 1.10534
-16.8597 0.96935
-17.046 1.12444
-17.5673 1.00437
-17.7717 1.00406
-17.9486 1.19276
-18.1237 0.983091
-18.2971 0.93808
-18.4689 0.870007
-18.8635 0.928584
-19.305 0.903498
-19.6936 1.05075
-20.2629 0.987416
-20.4181 1.01844
-20.7252 0.949082
-21.0278 1.15255
-21.3261 0.938464
-21.4736 1.0361
-21.7658 1.0149
-21.9104 1.00169
-22.0541 0.970528
-22.6197 1.24256
-23.3074 0.967219
-23.5768 0.79158
-24.7531 1.07262
-26.119 0.972749
+1.32656 0.167935
+1.87604 0.297491
+2.29767 0.409901
+2.65312 0.310341
+2.96628 0.632946
+3.2494 0.741784
+3.75208 0.653969
+3.97968 1.12947
+4.19495 0.760354
+4.3997 0.659939
+4.59534 0.388886
+4.78298 0.831378
+4.96353 1.17734
+5.30624 1.05643
+5.46955 0.942158
+5.68981 1.24557
+5.93256 1.21469
+6.07906 1.15898
+6.22212 0.954795
+6.49879 1.42856
+6.72552 0.940815
+6.89301 1.03439
+7.14374 0.943183
+7.26587 0.984094
+7.50416 0.954448
+7.67781 1.0488
+7.89085 1.02516
+8.15039 1.09548
+8.3899 0.765447
+8.52845 0.944265
+8.74912 0.964358
+8.93817 0.940981
+9.19068 0.607474
+9.3383 0.94907
+9.51975 0.826573
+9.70284 1.0273
+9.92707 1.05179
+10.1024 1.0808
+10.3608 1.085
+10.4453 0.918181
+10.7224 1.01741
+10.9391 0.950274
+11.0988 1.13241
+11.3082 0.826033
+11.5456 0.682223
+11.6405 0.866218
+11.939 0.969126
+12.302 0.88411
+12.4442 0.987857
+13.0651 0.781879
+13.786 1.12759