|
利用vasp自带功能计算弹性常数时,OUTCAR文件通常非常大,这就给文件下载和弹性常数信息提取带来了很大的麻烦.鉴于这个问题本人找到了两种解决方式:
1. 通过设置NWRITE的值来减小OUTCAR的大小,如NWRITE=0时OUTCAR的最小,NWRITE的默认值是2.
2. 通过修改vasp源程序,将弹性常数那部分信息单独写到自定义的一个文件中.具体做法如下:
A. 打开vasp源程序中的finite_diff.F文件;
B. 找到641行: ! elastic moduli and internal strain tensors
在此处打开一个文件命令为: open(1000,file='ELAS'),然后将 WRITE (IU6, ) 的行复制一份,并将IU6改为1000.最后重新编译即可. 部分修改代码如下:
642 !
643
644 open(1000,file='ELAS')
645 IF (IU6>=0 .AND. NWRITE >=3) THEN
646 DO N=1,DOF
647 CALL FIND_IJ_ID(LSIF,NIONS,N,ND,J,I)
648 WRITE (IU6,'("DOF:",I4," ATOM:",I4," AXIS:",I4," DISPLACEMENT:",I4)')N,J,I
649
650 WRITE (1000,'("DOF:",I4," ATOM:",I4," AXIS:",I4," DISPLACEMENT:",I4)')N,J,I
651
652 CALL PRINT_FORCE(NIONS,SUM_FORCES(N,:,:),IU6)
653 CALL PRINT_STRESS(LSIF,SUM_SIF(N,:,:),IU6)
654 WRITE (IU6,*)
655 WRITE (1000,*)
656 END DO
657 WRITE (IU6,*) ' '
658
659 WRITE (1000,*) ' '
660 END IF
661
662 IF (LSIF .AND. IU6>=0) THEN
663 FACT=EVTOJ*1E22_q/OMEGA
664
665 WRITE(IU6,100) ' ELASTIC MODULI (kBar)', ( &
666 (SUM_SIF(J,I,I)*FACT,I=1,3), &
667 SUM_SIF(J,1,2)*FACT,SUM_SIF(J,2,3)*FACT,SUM_SIF(J,3,1)*FACT,J=1,6)
668
669
670 WRITE(1000,100) ' ELASTIC MODULI (kBar)', ( &
671 (SUM_SIF(J,I,I)*FACT,I=1,3), &
672 SUM_SIF(J,1,2)*FACT,SUM_SIF(J,2,3)*FACT,SUM_SIF(J,3,1)*FACT,J=1,6)
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-7-28 02:29
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社