24小时热门版块排行榜    

查看: 4240  |  回复: 18
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

fly_elephan

银虫 (小有名气)

[交流] vasp计算结果处理态密度要用到的程序 已有7人参与

在材料电学特性的研究中,能带和态密度是我们最关心的,下面的这个程序可以用于vasp计算结果的处理,可以分离出总态密度和分态密度,这个程序是我们研究所用了很久的,绝对没问题,有资源大家共享,欢迎下载。
#! /bin/ksh
# Script to break the VASP DOSCAR file into segments for
# each atomic site.
# JMS NRL 5/0/02

# Modified to also align the Fermi level from the ground state
# to E=0.0
# JMS NRL 6/19/02


# Executables reside here
BIN=~/tzyy/AlP/swnt10


if [ $# -ne 0 ]; then
        echo "Usage: split_dos"
        exit 2
fi

# Script to split the DOSCAR file into the atomic
# projections labeled by atom number
dosfile=DOSCAR
outfile=OUTCAR
infile=INCAR


# Token for splitting the files
token=$(sed -n '6 p' $dosfile | awk '{print $1}')

# Number of points
nl=$(sed -n '6 p' $dosfile | awk '{print $3}')

# Number of atoms
natom=$(sed -n '1 p' $dosfile | awk '{print $1}')


# Get the Fermi level if the OUTCAR file is present,
# else we set it to zero.
if [ -a $outfile ]; then
    echo "The" $outfile "exists, we use it to get the Fermi level,"
    echo "the RWIGS tag and the number of spins."
    efermi=$(grep "E-fermi" $outfile | tail -1 | awk '{print $3}')
    echo "Fermi level:" $efermi
    nspin=$(grep "ISPIN" $outfile | tail -1 | awk '{print $3}')
    if [ $nspin -eq 2 ]; then
        echo "Spin polarized calculation"
    else
        echo "Unpolarized calculation"
    fi

# 2.a
# JMS 2/3/03 Modified to accept specification by LORBIT token.
#
    lorbit=$(grep "LORBIT" $outfile | tail -1 | awk '{print $3}')
    if [ $lorbit -ge 10 ]; then
        echo "LORBIT > 10"
        echo "WARNING: not completely test for vasp.4.*"
        echo "Use at your own risk. Please check results for consistency."
        form=1
    else
# 2.a
        rwigs=$(grep "RWIGS" $outfile | tail -1 | awk '{print $3}' | sed 's/\.//g')
        if [ $rwigs -eq -100 ]; then
            echo "RWIGS token not set"
            form=0
        else
            echo "RWIGS token set"
            form=1
        fi
# 2.a
    fi
# 2.a

else
    echo "The" $outfile "does not exist, we set the Fermi level to 0"
    echo "assume an unpolarized calculation, and RWIGS not set"
    form=0
    nspin=1
    efermi=0.0
fi

# If the outcar file is not present and you wish to set something by hand
# you should do it here. Uncomment the tokens below and set them by hand.

#efermi=2.255
#form=
#nspin=



# Get the atomic coordinates
$BIN/vp >| tmp.dat
tail -$natom tmp.dat | awk '{printf "%s %12.8f %12.8f %12.8f \n", "#", $2, $3, $4}' >| tmp.dat2


# Total is first DOS
if [ $form -eq 0 ]; then
i=0
else
i=0
fi


start=7
end=$((start+nl-1))
#echo $start $end
#exit 0
rm -f DOS0
if [ $form -eq 1 ]; then

    while [ $i -le $natom ]; do

            #echo $i $start $end

        if [ $i -gt 0 ]; then
            sed -n ''$i' p' tmp.dat2 >| DOS$i
        fi

        if [ $i -gt 0 ]; then

# Atomic projected DOS
            if [ $nspin -eq 2 ]; then
                sed -n ''$start','$end' p' $dosfile | awk '{printf "%12.8f %12.8f %12.8f %12.8f %12.8f %12.8f %12.8f \n", $1+(-1)*'$efermi', $2, -1*$3, $4, -1*$5, $6, -1*$7}' >> DOS$i
            else
                sed -n ''$start','$end' p' $dosfile | awk '{printf "%12.8f %12.8f %12.8f %12.8f \n", $1+(-1)*'$efermi', $2, $3, $4 }' >> DOS$i
            fi               

        else

# Total DOS
            if [ $nspin -eq 2 ]; then
                sed -n ''$start','$end' p' $dosfile | awk '{printf "%12.8f %12.8f %12.8f %12.8f %12.8f \n", $1+(-1)*'$efermi', $2, -1*$3, $4, -1*$5 }' >> DOS$i
            else
                sed -n ''$start','$end' p' $dosfile | awk '{printf "%12.8f %12.8f %12.8f \n", $1+(-1)*'$efermi', $2, $3 }' >> DOS$i
            fi

        fi

        start=$((end+2))
        end=$((start+nl-1))
        i=$((i+1))
    done

else

    while [ $i -le 0 ]; do

            #echo $i $start $end

        if [ $i -gt 0 ]; then
            sed -n ''$i' p' tmp.dat2 >| DOS$i
        fi

        if [ $i -gt 0 ]; then

# Atomic projected DOS
            if [ $nspin -eq 2 ]; then
                sed -n ''$start','$end' p' $dosfile | awk '{printf "%12.8f %12.8f %12.8f %12.8f %12.8f %12.8f %12.8f \n", $1+(-1)*'$efermi', $2, -1*$3, $4, -1*$5, $6, -1*$7}' >> DOS$i
            else
                sed -n ''$start','$end' p' $dosfile | awk '{printf "%12.8f %12.8f %12.8f %12.8f \n", $1+(-1)*'$efermi', $2, $3, $4 }' >> DOS$i
            fi               

        else

# Total DOS
            if [ $nspin -eq 2 ]; then
                sed -n ''$start','$end' p' $dosfile | awk '{printf "%12.8f %12.8f %12.8f %12.8f %12.8f \n", $1+(-1)*'$efermi', $2, -1*$3, $4, -1*$5 }' >> DOS$i
            else
                sed -n ''$start','$end' p' $dosfile | awk '{printf "%12.8f %12.8f %12.8f \n", $1+(-1)*'$efermi', $2, $3 }' >> DOS$i
            fi

        fi

        start=$((end+2))
        end=$((start+nl-1))
        i=$((i+1))
    done

fi

exit 0
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

哥是传说

铁杆木虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
送鲜花一朵
引用回帖:
491923楼: Originally posted by cenwanglai at 2011-05-30 11:01:16:
这个程序vtstool code中有的。

你们组看起来是做单壁纳米管的,所以这个脚本可以一直用着。

如果含有f电子,就没有办法用了。LORBIT = 11和LORBIT = 10是有很大差异的,这个脚本需要修改才能用。

大侠,我现在想用脚本来处理态密度,之前用过论坛上的dos-procar.f,但是都是处理s,p,和 d的,这个脚本没有针对s,py,pz,px,dxy,dyz,dz2,dxz,dx2的,我对程序又一窍不通,所以请大家帮帮忙,我知道送金币很俗,但也只有金币能聊表谢意了
18楼2012-05-18 19:58:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 19 个回答

cenwanglai

荣誉版主 (知名作家)

老和山猥琐派九段

优秀版主

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
zzy870720z(金币+2): 谢谢指教 2011-05-30 15:23:30
这个程序vtstool code中有的。

你们组看起来是做单壁纳米管的,所以这个脚本可以一直用着。

如果含有f电子,就没有办法用了。LORBIT = 11和LORBIT = 10是有很大差异的,这个脚本需要修改才能用。

» 本帖已获得的红花(最新10朵)

2楼2011-05-30 11:01:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wujing110

禁虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖
本帖内容被屏蔽

3楼2011-11-14 11:21:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cenwanglai

荣誉版主 (知名作家)

老和山猥琐派九段

优秀版主


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
3楼: Originally posted by wujing110 at 2011-11-14 11:21:03:
请问区长童鞋,LORBIT = 11时候应该怎么改呀?我设置LORBIT = 11,一共有19列数据,但是我现在只想要 s+,s-,p+,p-,d+,d-,那些角动量分量要一列一列加成总的么?

是啊。第四列到九列是p的三个分量及上下旋。三个奇数列相加的p+,三个偶数列相加的p-。后面10列是d分量及自旋。上旋和下旋分别相加。

可以用excel或者origin来做列的相加。
4楼2011-11-14 13:21:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[找工作] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 EZ67DG6CvcKL 2026-08-31 3/150 2026-08-31 22:23 by o3EMxHUAQDtS
[基金申请] 投票:  有多少人是今天查系统知道结果的? +17 爱看书的可乐 2026-08-26 19/950 2026-08-31 21:30 by xiangy672
[基金申请] 基金未中,这种答复是模板吗? +6 zhaosm1982 2026-08-27 7/350 2026-08-31 21:18 by qdxxmc
[基金申请] 哪位高人中了,把查询到的截图贴出来让我看看,让我长长见识 +6 yuleib84 2026-08-26 7/350 2026-08-31 19:46 by 鱼翔浅底1
[基金申请] 面上意见出来了 +12 黄鸟于飞Chao 2026-08-29 23/1150 2026-08-31 18:57 by 黄鸟于飞Chao
[文学芳草园] 梦想 +5 myrtle 2026-08-26 5/250 2026-08-31 14:40 by hahaboy
[基金申请] 中青基了要发朋友圈吗? +7 349506619 2026-08-28 7/350 2026-08-31 13:39 by 冼亮淀粉酶
[基金申请] 29号明天会评吗 +4 笨笨唐 2026-08-28 4/200 2026-08-31 09:30 by huixian257
[基金申请] 基金不中,共勉 +12 eulota 2026-08-26 12/600 2026-08-31 08:42 by ZJTJZ
[基金申请] 为什么到现在没收到通知? +5 tannykie 2026-08-29 5/250 2026-08-30 21:05 by purplejack
[基金申请] 为什么资助数各大高校都创新高,自己申请怎么就这么难 +12 Kittylucky 2026-08-27 13/650 2026-08-29 00:04 by superceng
[基金申请] 系统查不到 +11 董八千 2026-08-26 11/550 2026-08-28 18:06 by Leogzhya
[基金申请] 基金系统什么内容也没有 30+4 winsaint 2026-08-27 9/450 2026-08-28 11:06 by maolC
[基金申请] 面上合作单位盖章 +5 ssyjh 2026-08-27 5/250 2026-08-27 20:50 by gdfollow
[基金申请] 看板上这么多中的,有点像50人群里49个人都是骗子的那种感觉…… +5 a089 2026-08-26 6/300 2026-08-27 14:05 by jonewore
[基金申请] 我不理解! +15 Edward_pc 2026-08-26 23/1150 2026-08-26 20:34 by zzuzxg
[基金申请] 出来了 +9 trojank 2026-08-26 9/450 2026-08-26 14:25 by 宝贝虫子
[基金申请] 系统进不去 +4 yanglien 2026-08-26 5/250 2026-08-26 11:10 by wenfengw83
[基金申请] 项目信息和经费信息在系统里都可以看到了 +6 wittyboy 2026-08-26 14/700 2026-08-26 10:55 by wittyboy
[基金申请] 国合可查了 +3 paperzjh 2026-08-26 3/150 2026-08-26 10:41 by LemmonTr
信息提示
请填处理意见