开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
develop
分支 (8)
标签 (98)
develop
dashboard
copilot/fix-test-github-actions-job
feature/openmp-hsolver
LTS
feat/tests-17-ds-dftu
ZhouXY-KML
feat/dftu-pw-port-v2
v3.11.0-beta5
v3.11.0-beta4
v3.11.0-beta.3
v3.11.0-beta.2
3.11.0-beta.1
v3.9.0.27
v3.9.0.26
v3.9.0.25
v3.9.0.24
v3.9.0.23
v3.9.0.22
v3.9.0.21
v3.9.0.20
v3.9.0.19
v3.10.1
v3.9.0.18
v3.9.0.17
v3.9.0.16
v3.9.0.15
v3.9.0.14
develop
分支 (8)
标签 (98)
develop
dashboard
copilot/fix-test-github-actions-job
feature/openmp-hsolver
LTS
feat/tests-17-ds-dftu
ZhouXY-KML
feat/dftu-pw-port-v2
v3.11.0-beta5
v3.11.0-beta4
v3.11.0-beta.3
v3.11.0-beta.2
3.11.0-beta.1
v3.9.0.27
v3.9.0.26
v3.9.0.25
v3.9.0.24
v3.9.0.23
v3.9.0.22
v3.9.0.21
v3.9.0.20
v3.9.0.19
v3.10.1
v3.9.0.18
v3.9.0.17
v3.9.0.16
v3.9.0.15
v3.9.0.14
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
develop
分支 (8)
标签 (98)
develop
dashboard
copilot/fix-test-github-actions-job
feature/openmp-hsolver
LTS
feat/tests-17-ds-dftu
ZhouXY-KML
feat/dftu-pw-port-v2
v3.11.0-beta5
v3.11.0-beta4
v3.11.0-beta.3
v3.11.0-beta.2
3.11.0-beta.1
v3.9.0.27
v3.9.0.26
v3.9.0.25
v3.9.0.24
v3.9.0.23
v3.9.0.22
v3.9.0.21
v3.9.0.20
v3.9.0.19
v3.10.1
v3.9.0.18
v3.9.0.17
v3.9.0.16
v3.9.0.15
v3.9.0.14
indexmap.py 3.56 KB
一键复制 编辑 原始数据 按行查看 历史
Civilization 提交于 2025年06月19日 17:47 +08:00 . [Refactor] Rename module_base to source_base (#6311)
def _index_map(ntype, natom, lmax, nzeta=None):
'''
Bijective map between the composite index (itype, iatom, l, zeta, m)
and linearized orbital index mu.
An atomic orbital is labeled by its type & atomic index, its angular
momentum quantum numbers l & m, and possibly a zeta number. Suppose
there's a total of N orbitals, each orbital can also be assigned a
unique index mu \in [0, N-1].
This function returns a pair of bijective maps between the composite
index (itype, iatom, l, zeta, m) and the linearized orbital index mu.
The composite index is linearized in C-style (lexicographic order).
Parameters
----------
ntype : int
Number of atom types.
natom : list of int
Number of atoms for each type.
lmax : list of int
lmax[i] specifies the maximum angular momentum of type i.
nzeta : list of list of int
nzeta[i][l] specifies the number of zeta orbitals of the
angular momentum l of type i.
If None, nzeta is assumed to be 1 for all.
Returns
-------
comp2mu : dict
A dict that maps a composite index (itype, iatom, l, zeta, m)
to its linearized index.
mu2comp : dict
A dict that maps a linearized index to its composite index.
Notes
-----
The linearized index arranges m in accordance with ABACUS:
0, 1, -1, 2, -2, 3, -3, ..., l, -l
'''
if nzeta is None:
nzeta = [[1]*(lmax[itype]+1) for itype in range(ntype)]
assert len(natom) == ntype
assert len(lmax) == ntype
assert lmax == [len(nzeta[itype])-1 for itype in range(ntype)]
comp2mu = {}
mu2comp = {}
mu = 0
for itype in range(ntype):
for iatom in range(natom[itype]):
for l in range(lmax[itype]+1):
for zeta in range(nzeta[itype][l]):
'''
In ABACUS, real spherical harmonics Ylm arranges its m
in the following order:
0, 1, -1, 2, -2, 3, -3, ..., l, -l
(see source_base/ylm.cpp and source_base/math_ylmreal.cpp
for details)
'''
for mm in range(0, 2*l+1):
m = -mm // 2 if mm % 2 == 0 else (mm + 1) // 2
comp2mu[(itype, iatom, l, zeta, m)] = mu
mu2comp[mu] = (itype, iatom, l, zeta, m)
mu += 1
return comp2mu, mu2comp
############################################################
# Test
############################################################
import unittest
class _TestIndexMap(unittest.TestCase):
def test_index_map(self):
ntype = 3
natom = [2, 1, 3]
lmax = [1, 2, 4]
nzeta = [[2,3], [1,0,1], [1, 2, 2, 1, 3]]
comp2mu, mu2comp = _index_map(ntype, natom, lmax, nzeta)
# check the total number of orbitals
nao = sum(sum( (2*l+1) * nzeta[itype][l] for l in range(lmax[itype]+1) ) \
* natom[itype] for itype in range(ntype))
self.assertEqual( len(mu2comp.items()), nao )
# check bijectivity
for mu in range(nao):
self.assertEqual( comp2mu[mu2comp[mu]], mu )
# check the first and the last
self.assertEqual( mu2comp[0], (0, 0, 0, 0, 0) )
self.assertEqual( mu2comp[nao-1], \
(ntype-1, natom[-1]-1, lmax[-1], nzeta[-1][-1]-1, -lmax[-1]) )
if __name__ == '__main__':
unittest.main()
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

An electronic structure software based on either plane wave basis or numerical atomic orbitals. (https://github.com/deepmodeling/abacus-develop)
取消

发行版 (40)

全部

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/deepmodeling/abacus-develop.git
git@gitee.com:deepmodeling/abacus-develop.git
deepmodeling
abacus-develop
abacus-develop
develop
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /