这些代码的哪个 Fortran 标准?

Yin*_*eng 2 syntax fortran subroutine

我很困惑 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, st, lr%X(dl_psi)(:,:, ist, ik), ist, ik, omega)
    end do
  end do
  
  POP_SUB(X(lr_orth_response))
end subroutine X(lr_orth_response)

Run Code Online (Sandbox Code Playgroud)

我已经检查了所有 Fortran 标准,但找不到任何有用的信息!有谁知道标签是lr_orth_response什么?另外,在这一行中lr%X(dl_psi)(:,:, ist, ik), ist, ik, omega),指针访问数据也有点混乱,其中lrlr_t用户定义的新类型,但没有名为 的成员函数或变量X(dl_psi)

Vla*_*r F 5

这不是纯粹的 Fortran。它看起来像是必须由某些预处理器(可能是 C 预处理器cpp或其变体)预处理的源fpp。预处理器将扩展R_TYPE, PUSH_SUB,POP_SUBX使用一些宏。一些宏显然依赖于一些名为lr_orth_response. 我们无法在没有实际看到定义的情况下说出该参数在这些宏中的作用,但我们需要您提供更多代码。它可能用于一些通用编程,但很难猜测究竟是如何使用的。