我有一個簡單的子程序來構造一個緊束縛哈密爾頓函數。它只在對角線和最近的對角線上構造一個具有2×2塊的矩陣。它是這樣的(也有在我上面的代碼定義了許多參數):Fortran中矩陣構造的問題
subroutine hlayer(s,r)
complex*16,dimension(1:lda,1:lda) :: s,r
integer :: i,j
s(:,:)=zero
r(:,:)=zero
! hamiltonian of the layer
do i=1,lda,2
s(i,i) = es
s(i,i+2) = tss
s(i,i+3) = tsp
s(i+2,i) = tss
s(i+3,i) = tsp
s(i+1,i+1) = ep
s(i+1,i+1+1) = tsp
s(i+1,i+2+1) = tpp
s(i+1+1,i+1) = tsp
s(i+1+2,i+1) = tpp
end do
! interaction between layers:
do i=1,lda,2
r(i,i) = tss
r(i,i+1) = tsp
r(i+1,i) = tsp
r(i+1,i+1) = tpp
end do
end subroutine
當我調用子程序在主程序(它的方式有沒有問題運行):
call hlayer(a,b)
我得到以下矩陣爲,在子程序變量s(在這種情況下,LDA = 10):
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
,我不明白的地方右上方0.1從何而來,因爲在我的子程序的所有條目的e矩陣(除了那些明確指定的)被設置爲零。 我沒有考慮到索引有問題嗎?
'lda'如何在子程序中獲得所需的值? – francescalus
嗨。在這種情況下,它是一個設置爲10的整數參數。 –