1 , Flang四倍精度内敛函数abs支持不完善
编译报错
原因
报错问题代码:
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支持不完善
编译报错
原因
报错问题代码:
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
修改为:
3 , Flang final终结例程函数找不到实现
编译报错
原因
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
1 , Flang四倍精度内敛函数abs支持不完善
编译报错
原因
报错问题代码:
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支持不完善
编译报错
原因
报错问题代码:
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 = R3 , Flang final终结例程函数找不到实现
编译报错
原因
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