私は、きつい結合ハミルトニアンを構築するための簡単なサブルーチンを用意しました。これは、対角線上で最も近いオフ対角にのみ2×2ブロックの行列を構築する。Fortranでの行列構築に関する問題
call hlayer(a,b)
:私は、メインプログラム(それが途中で問題なく動作します)でサブルーチンを呼び出す場合
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
:それは、この(私のコードでは上記で定義された多くのパラメータがある)のようなものです私はのために、次の行列を取得し、サブルーチン内の変数(この場合、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は、すべてのエントリの私のサブルーチンであるため、どこから来るか私は理解していませんthのe行列(明示的に割り当てられた行列を除く)は0に設定されます。 私が考慮していないインデックスに問題はありますか?
サブルーチンであなたが望む値を 'lda'で得るにはどうしたらいいですか? – francescalus
こんにちは。この場合、整数パラメータは10に設定されています。 –