Syntax 这些代码采用哪种Fortran标准?

Syntax 这些代码采用哪种Fortran标准?,syntax,fortran,subroutine,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 intege

我感到困惑的是,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)


我检查了所有Fortran标准,但找不到任何有用的信息!有人知道标签是什么吗?此外,在这一行中,通过指针访问数据也有点混乱,
lr%X(dl_psi)(:,ist,ik),ist,ik,omega)
,其中
lr
是用户定义的一种新类型
lr_t
,但没有名为
X(dl_psi)
的成员函数或变量,这不是纯粹的Fortran。它看起来像是必须由某个预处理器进行预处理的源代码,可能是C预处理器
cpp
或其变体
fpp
。预处理器将使用一些宏来扩展
R\u TYPE
PUSH\u SUB
POP\u SUB
X
。某些宏显然依赖于名为
lr\u或
的参数。在没有看到定义的情况下,我们无法说出该参数在这些宏中的作用,但我们需要您提供更多的代码。它可能用于一些泛型编程,但很难猜到确切的用法。

欢迎,请拿起并阅读。嗨,弗拉基米尔,谢谢!你的猜测是合理的,这些代码来自计算量子化学软件包Octopus9.2。更详细地说,它们来自文件states/linear\u response\u inc.F90,请参阅。@YingxingCheng扩展名中的大写字母F使其由
cpp
fpp
自动预处理。然而,代码是不完整的。最有可能的情况是,该文件使用
#include
指令包含在其他地方。然后在包含
#include
的文件中定义相关宏。软管包括可以嵌套。文件名中的
\u inc
明确表示它是要包含的文件。您是对的。该文件包含在线性响应中,其中F90包含了一些C++宏来区分这个子程序中使用的实数和复数。再次感谢!