问题描述
我很困惑fortran代码子例程中的语法如下:
subroutine X(lr_orth_response)(mesh,st,lr,omega)
type(mesh_t),intent(in) :: mesh
type(states_t),intent(in) :: st
type(lr_t),intent(inout) :: lr
R_TYPE,intent(in) :: omega
integer :: ist,ik
PUSH_SUB(X(lr_orth_response))
do ik = st%d%kpt%start,st%d%kpt%end
do ist = 1,st%nst
call X(lr_orth_vector) (mesh,lr%X(dl_psi)(:,:,ist,ik),ik,omega)
end do
end do
POP_SUB(X(lr_orth_response))
end subroutine X(lr_orth_response)
我已经检查了所有Fortran标准,但找不到任何有用的信息!有人知道lr_orth_response
这个标签是什么吗?另外,在该行lr%X(dl_psi)(:,omega)
中,指针访问数据也有些混乱,其中lr
是用户定义的新类型lr_t
,但是没有成员函数或变量名为X(dl_psi)
。
解决方法
这不是纯Fortran。它看起来像必须由某些预处理程序(例如C预处理程序cpp
或其变体fpp
)进行预处理的源。预处理器将使用某些宏扩展R_TYPE
,PUSH_SUB
,POP_SUB
和X
。一些宏显然依赖于称为lr_orth_response
的参数。我们不能不实际看到定义就无法说出该参数在那些宏中的作用,但我们需要您提供更多的代码。它可能用于某些通用编程,但很难猜测其精确程度。