开发者
资源
VASP6.2.1版本毕昇2.1.0编译问题解决
VASP6.2.1版本毕昇2.1.0编译问题解决
发表于2023/08/07
5113

1 , Flang四倍精度内敛函数abs支持不完善

编译报错

mpif90 -ffree-form -ffree-line-length-none -w -O1 -I/software/libs/fftw3.3.8-bisheng2.1.0/include  -c pade_fit.f90
Lowering Error: unexpected result type for intrinsic function [ast=5785,asttype=10,datatype=0]
F90-F-0000-Internal compiler error. Errors in Lowering       1  (pade_fit.f90: 2147)
F90/aarch64 Linux Flang - 1.5 2017-05-01: compilation aborted

原因

报错问题代码: 

COMPLEX(qd), ALLOCATABLE :: A(:,:),B(:) 

INTEGER, PARAMETER :: qd=SELECTED_REAL_KIND(30) 

WEIGHT=WEIGHT+ABS(A(I,J)) , 

A被定义为四倍精度的复数类型complex(16),目前毕昇编译器的fortran 4倍精度的内建函数支持不完善。将会在下个版本解决。 

修改

执行 vim src/pade_fit.F 

WEIGHT=WEIGHT+ABS(A(I,J)) 

修改为: 

WEIGHT=WEIGHT+sqrt(real(A(I,J)) * real(A(I,J)) + aimag(A(I,J)) * aimag(A(I,J))) 

2 ,Flang四倍精度内敛函数MATMUL支持不完善

编译报错

mpif90 -ffree-form -ffree-line-length-none -w -O1 -I/software/libs/fftw3.3.8-bisheng2.1.0/include -c pade_fit.f90
F90-S-0456-Unimplemented for data type for MATMUL (pade_fit.f90: 2646)
0 inform, 0 warnings, 1 severes, 0 fatal for matmul_qdc
F90-S-0456-Unimplemented for data type for MATMUL (pade_fit.f90: 2673)
0 inform, 0 warnings, 1 severes, 0 fatal for matmulx_qdc
make[2]: *** [makefile:185: pade_fit.o] Error 1

原因

报错问题代码: 

COMPLEX(qd), ALLOCATABLE :: A(:,:),B(:) 

INTEGER, PARAMETER :: qd=SELECTED_REAL_KIND(30) 

WEIGHT=WEIGHT+ABS(A(I,J)) , 

A被定义为四倍精度的复数类型complex(16),目前毕昇编译器的fortran 4倍精度的内建函数支持不完善。将会在下个版本解决

修改

vim src/pade_fit.F 

源码实现MATMUL函数(vasp中打开qd_emulate编译宏走源码实现流程): 

#ifndef qd_emulate 

修改为:

#ifdef qd_emulate

#ifndef qd_emulate
       MATMUL_QDC = MATMUL( A, B ) 
       RETURN
#endif
       IF ( SIZE( A,2 ) /= SIZE( B, 1 ) ) THEN
          WRITE(*,*)'ERROR, MATMUL_QDC has wrong shape',SIZE(A,2),SIZE(B,1)
       ENDIF
       
       R = 0 
       DO I = 1, SIZE( A, 1 )      
          DO J = 1, SIZE( B, 2 )      
             DO K = 1, SIZE( B, 1 )      
                R(I,J) = R(I,J) + A(I,K)*B(K,J)
             ENDDO
          ENDDO
       ENDDO
       MATMUL_QDC = R

3 , Flang final终结例程函数找不到实现

编译报错

-L/software/libs/fftw3.3.8-bisheng2.1.0/lib -lfftw3 -Lparser -lparser -lstdc++
/usr/bin/ld: embed.o:(.data+0x0): undefined reference to `elphon_epi_finalize_'
/usr/bin/ld: embed.o:(.data+0x90): undefined reference to `elphon_destructor_'
/usr/bin/ld: main.o:(.data+0x9450): undefined reference to `elphon_epi_finalize_'
/usr/bin/ld: main.o:(.data+0x94e0): undefined reference to `elphon_destructor_'

原因

 

FINAL定义: 

Fortran 2003中引入的面向对象的Fortran特性。和C++中的析构函数类似,Fortran中的类型绑定过程中也包含一类特殊的过程 – 终结例程(Final subroutines)。终结例程主要用在对象被终结时完成相应的资源释放和清理操作,其定义方式为: 

FINAL [ :: ] sub1 [, sub2]... 

 

问题代码: 

MODULE elphon 

   IMPLICIT NONE 

 

   PRIVATE 

   …… 

    FINAL                :: EPI_FINALIZE 

 

毕昇编译器对fortran函数的FINAL接口作为private定义了,其他模块找不到实现。后续版本修复。 

修改

注释全局PRIVATE定义:

vim src/ elphon.F

28   PRIVATE

修改为:

        !PRIVATE

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞