计算化学公社

 找回密码 Forget password
 注册 Register
Views: 1636|回复 Reply: 8
打印 Print 上一主题 Last thread 下一主题 Next thread

[VASP] VASP6.3.2 + vtstcode6.3编译出错

[复制链接 Copy URL]

2

帖子

0

威望

29

eV
积分
31

Level 2 能力者

想请教一下各位朋友,我在VASP6.3.2中编译vtstcode6.3出现了一下报错请问该如何解决呢,我是按照官网的教程设置的相关文件。


chain.F(179): error #6321: An unterminated block exists.
      IF (LINTERACT) THEN
^
compilation aborted for chain.f90 (code 1)
makefile:166: recipe for target 'chain.o' failed
make[2]: *** [chain.o] Error 1
make[2]: Leaving directory '/home/stephen/vasp.6.3.2/build/std'
cp: cannot stat 'vasp': No such file or directory
makefile:129: recipe for target 'all' failed
make[1]: *** [all] Error 1
make[1]: Leaving directory '/home/stephen/vasp.6.3.2/build/std'
makefile:13: recipe for target 'std' failed
make: *** [std] Error 2




2

帖子

0

威望

29

eV
积分
31

Level 2 能力者

2#
 楼主 Author| 发表于 Post on 2024-6-3 14:49:07 | 只看该作者 Only view this author
vtst是用的最新的vtstvode-199

1060

帖子

0

威望

3254

eV
积分
4314

Level 6 (一方通行)

3#
发表于 Post on 2024-6-3 16:26:31 | 只看该作者 Only view this author
本帖最后由 乐平 于 2024-6-3 16:46 编辑

大概率你是不小心删错了内容

仔细根据 VTST 官网的安装步骤,不会出错
https://theory.cm.utexas.edu/vtsttools/installation.html

首先,为了保证出错后能恢复,先将 vasp/scr 目录下的 main.F 复制一份
  1. cp main.F main.F_original
复制代码


然后,打开 main.F 编辑其中的内容
  1. vi main.F
复制代码


在 vi 编辑器界面按键盘上的 /  进入搜索模式,根据 VTST 官网上的提示搜
  1. /CALL CHAIN_FORCE
复制代码


然后按  i  进入编辑模式,将它下一行的开头添加
  1. TSIF,
复制代码


按键盘左上角 ESC 键,退出编辑模式,继续 /  搜索
  1. /IF (LCHAIN) CALL
复制代码


然后按 i  进入编辑模式,删除 IF (LCHAIN)

按键盘左上角 ESC 键,退出编辑模式,:wq  保存 main.F




类似地,把隐藏文件 .objects 复制一份
  1. cp .objects .objects_original
复制代码


然后打开 .objects
  1. vi .objects
复制代码



再按键盘上的  / 搜多  chain.o
  1. /chain.o
复制代码


按 i 进入编辑模式,在  chain.o 前面一行回车,将 [size=1.1em]bfgs.o dynmat.o instanton.o lbfgs.o sd.o cg.o dimer.o bbm.o [size=1.1em]\ [size=1.1em]fire.o lanczos.o neb.o qm.o [size=1.1em]\  [size=1.1em]pyamff_fortran/*.o ml_pyamff.o [size=1.1em]\ [size=1.1em]opt.o
复制粘贴到 chain.o 前面
注意!粘贴之后还需要再调整一下。注意!原文件里每行前面是 Tab ,不是空格!注意!原文件里每行前面是 Tab ,不是空格!注意!原文件里每行前面是 Tab ,不是空格!

所以,你需要将粘贴之后的每个关键词前面用 Tab 来填充,而不是按空格键填充
  1.          hamil_rot.o \     <-----------这一行下面
  2.          bfgs.o \
  3.          dynmat.o \
  4.          instanton.o \
  5.          lbfgs.o \
  6.          sd.o \
  7.          cg.o \
  8.          dimer.o \
  9.          bbm.o \
  10.          fire.o \
  11.          lanczos.o \
  12.          neb.o \
  13.          qm.o \
  14.          pyamff_fortran/*.o \
  15.          ml_pyamff.o \
  16.          opt.o \
  17.          chain.o \         <--------- 粘贴到这一行前面
复制代码

再把 vtstcode-199/vtstcode6.3 目录下所有的文件都复制到 vasp/src 目录下
  1. cp -r YOUR_PATH/vtstcode-199/vtstcode6.3/* vasp/src/
复制代码




评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
love_yy + 5 谢谢

查看全部评分 View all ratings

2

帖子

0

威望

183

eV
积分
185

Level 3 能力者

4#
发表于 Post on 2024-6-5 14:29:19 | 只看该作者 Only view this author
不知道是不是这这里的代码有问题,加入END IF  作为结尾就不会有这个报错了
!IF (LINTERACT .AND. IU6>0) THEN
      IF (LINTERACT) THEN
        IF (IU6>0) THEN
          ! Write the force-energy file.
          WRITE(*,*) 'LINTERACT: Writing FU file.'
          OPEN(UNIT = 1, FILE = "FU")
          WRITE(1, *) toten
          DO ni=1,nions
            WRITE(1, *) force(1, ni), force(2, ni), force(3, ni)
          ENDDO
          CLOSE(1)
          ! Wait for the NEWCAR or STOPCAR.
          WRITE(*,*) 'LINTERACT: Waiting for NEWCAR.'
        ENDIF
      END IF
        DO
          INQUIRE(FILE = "STOPCAR", EXIST = stopcar_exists)
          INQUIRE(FILE = "NEWCAR", EXIST = newcar_exists)
          IF (stopcar_exists .OR. newcar_exists) exit
          CALL Sleep(1)
        ENDDO

202406051426455676..png (48.81 KB, 下载次数 Times of downloads: 33)

202406051426455676..png

2

帖子

0

威望

15

eV
积分
17

Level 1 能力者

5#
发表于 Post on 2024-6-22 01:41:06 | 只看该作者 Only view this author
本帖最后由 Tosykie 于 2024-6-22 01:43 编辑

我在编译VASP6.3.2+VTST199的时候也出现一模一样的报错。
@addmvp 说的是对的,在"chain.F"这个源码文件里的第179行之后的一个代码块确实少了一个ENDIF语句,但是不是在第191行之后:
189           ! Wait for the NEWCAR or STOPCAR.
190           WRITE(*,*) 'LINTERACT: Waiting for NEWCAR.'
191         ENDIF
而是在第202行之后添加:
199         IF (newcar_exists) THEN
200           CALL RD_POSCAR_HEAD(LATT_CUR, T_I, NIOND, NIONPD, NTYPD, NTYPPD, IO%IU0, IO%IU6)
201           CALL RD_POSCAR(LATT_CUR, T_I, DYN, NIOND, NIONPD, NTYPD, NTYPPD, IO%IU0, IO%IU6)
202           posion = DYN%POSION
203         ENDIF !这是新加的ENDIF与IF (newcar_exists)配对
204 #if defined(MPI) || defined(MPI_CHAIN)
205         CALLMPI(MPI_Barrier(comm_chain%mpi_comm, ierr))
206 #endif

如果在
190           WRITE(*,*) 'LINTERACT: Waiting for NEWCAR.'
191         ENDIF
之后再加一个ENDIF的话就会直接把
179       IF (LINTERACT) THEN
这个条件语句给结束了,这可能会造成本该有的功能没有编译进来或者条件出错,比如那个STOPCAR。


           posion = DYN%POSION之后
#if defined(MPI) || defined(MPI_CHAIN)之前补充条件语句退出才符合。
更改之后就可以顺利编译通过了。
这可能是VTST开发组写源码的时候忘记加了这这个IF结束语句了。
仅供参考~
;)

2

帖子

0

威望

183

eV
积分
185

Level 3 能力者

6#
发表于 Post on 2024-6-26 13:05:13 | 只看该作者 Only view this author
Tosykie 发表于 2024-6-22 01:41
我在编译VASP6.3.2+VTST199的时候也出现一模一样的报错。
@addmvp 说的是对的,在"chain.F"这个源码文件里 ...

感谢,我编译出来的确实有问题

7

帖子

0

威望

190

eV
积分
197

Level 3 能力者

7#
发表于 Post on 2024-7-27 11:41:13 | 只看该作者 Only view this author
Tosykie 发表于 2024-6-22 01:41
我在编译VASP6.3.2+VTST199的时候也出现一模一样的报错。
@addmvp 说的是对的,在"chain.F"这个源码文件里 ...

感谢老师一语点醒梦中人,找了好几天没找到问题在哪,加入后确实编译成功了。

2

帖子

0

威望

139

eV
积分
141

Level 2 能力者

8#
发表于 Post on 2024-9-11 01:44:33 | 只看该作者 Only view this author
本帖最后由 rudin-jiang 于 2024-10-23 23:53 编辑
乐平 发表于 2024-6-3 16:26
大概率你是不小心删错了内容

仔细根据 VTST 官网的安装步骤,不会出错

请管理员删除

1060

帖子

0

威望

3254

eV
积分
4314

Level 6 (一方通行)

9#
发表于 Post on 2024-9-11 09:39:45 | 只看该作者 Only view this author
本帖最后由 乐平 于 2024-9-11 09:41 编辑
rudin-jiang 发表于 2024-9-11 01:44
建议你换一个能显示空格和tab的编辑器再打开.object看看,你把一个错的事情强调这么多次。

建议您用 vim 打开 .objects 文件,把光标移动到关键词前面,再按一下左右键。
看看是一个字符移动的?还是像 tab 那样一大格移动的?

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-23 10:53 , Processed in 0.227579 second(s), 31 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list