Matrix Fortran中矩阵构造问题
我有一个简单的子程序来构造紧束缚哈密顿量。它仅在对角线和最近的非对角线上构造一个包含2x2块的矩阵。它是这样的(在我的代码中定义了许多参数): 当我在主程序中调用子程序时(顺便说一下,它运行时没有问题): 我得到子例程中a,s变量的以下矩阵(本例中lda=10): 我不明白右上角0.1是从哪里来的,因为在我的子程序中,矩阵的所有条目(明确指定的条目除外)都设置为零。Matrix Fortran中矩阵构造问题,matrix,fortran,Matrix,Fortran,我有一个简单的子程序来构造紧束缚哈密顿量。它仅在对角线和最近的非对角线上构造一个包含2x2块的矩阵。它是这样的(在我的代码中定义了许多参数): 当我在主程序中调用子程序时(顺便说一下,它运行时没有问题): 我得到子例程中a,s变量的以下矩阵(本例中lda=10): 我不明白右上角0.1是从哪里来的,因为在我的子程序中,矩阵的所有条目(明确指定的条目除外)都设置为零。 我没有考虑的索引是否有任何问题???您超出了数组边界。使用错误检查(-fcheck=all或-check或其他方法(取决于编译器)
我没有考虑的索引是否有任何问题???您超出了数组边界。使用错误检查(
-fcheck=all
或-check
或其他方法(取决于编译器)进行编译,以诊断类似错误
比如说
s(i+1,i+2+1)
当
i
接近lda
时,i+1
和i+2+1
都过大,并且超过了错误界限。所有行中都存在类似问题。您超出了数组边界。使用错误检查(-fcheck=all
或-check
或其他方法(取决于编译器)进行编译,以诊断类似错误
比如说
s(i+1,i+2+1)
当
i
接近lda
时,i+1
和i+2+1
都过大,并且超过了错误界限。所有行中都存在类似的问题。lda如何在子例程中获得所需的值?您好。在这种情况下,它是一个设置为10的整数参数。lda
如何在子例程中获得所需的值?您好。在这种情况下,它是一个整数参数,设置为10。谢谢,我会检查它。另一方面,您知道如何使用“英特尔编译器”(ifort)检查错误吗?-检查,答案部分。。。这是检查边界-当你得到边界、接口和单元化的时候,检查所有是值得开始的。仅仅检查边界是不值得的。他可能有很多错误。谢谢,我会检查的。另一方面,您知道如何使用“英特尔编译器”(ifort)检查错误吗?-检查,答案部分。。。这是检查边界-当你得到边界、接口和单元化的时候,检查所有是值得开始的。仅仅检查边界是不值得的。他可能会犯很多错误。
1.000 0.000 0.100 -0.150 0.000 0.000 0.000 0.000 0.000 0.100
0.000 1.200 -0.150 0.000 0.000 0.000 0.000 0.000 0.000 0.000
0.100 0.000 1.000 0.000 0.100 -0.150 0.000 0.000 0.000 0.000
0.000 0.000 0.000 1.200 -0.150 0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.100 0.000 1.000 0.000 0.100 -0.150 0.000 0.000
0.000 0.000 0.000 0.000 0.000 1.200 -0.150 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.100 0.000 1.000 0.000 0.100 -0.150
0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.200 -0.150 0.000
0.000 0.000 0.000 0.000 0.000 0.000 0.100 0.000 1.000 0.000
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.200
s(i+1,i+2+1)