schuangfeng的个人博客分享 http://blog.sciencenet.cn/u/schuangfeng

博文

将vasp的计算结果输出到指定文件中

已有 7727 次阅读 2015-3-2 09:04 |系统分类:科研笔记

  利用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)







https://blog.sciencenet.cn/blog-1865285-871178.html

上一篇:ubuntu终端光标存在空格
下一篇:vim 删除#字符号前的空格
收藏 IP: 61.190.88.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-7-28 00:42

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部