我有下面給出的兩個子程序:調試子程序的變量Defintions
SUBROUTINE DENSITYMATRIXNEW(X,C,A,B,RHONEW)
IMPLICIT NONE
COMPLEX*16, DIMENSION(DIMMAT,1),INTENT(IN)::X
COMPLEX(KIND = DBL), DIMENSION(DIMSYS,DIMSYS) :: RHO
COMPLEX(KIND = DBL), DIMENSION(DIMSYS,DIMSYS), INTENT(OUT) :: RHONEW
REAL(KIND = DBL) :: ENERGYGAP, DELTA
REAL(KIND = DBL) :: ALPHA = SQRT(ENERGYGAP**2.0D0 + DELTA**2.0D0)
COMPLEX(KIND = DBL), DIMENSION(2,2), INTENT(IN) :: A, B
REAL(KIND=DBL), DIMENSION(2,2), INTENT(IN) :: C
REAL(KIND=DBL), DIMENSION(2,2) :: TEMP1
COMPLEX(KIND = DBL), DIMENSION(2,2) :: TEMP2
COMPLEX(KIND = DBL), DIMENSION(2,2) :: UNITARY, UNITARTCONJ
REAL(KIND = DBL) :: T
TEMP1 = COS((ALPHA*T)/2) * C
TEMP2 = ((ENERGYGAP/ALPHA)*A + (DELTA/ALPHA)*B)*SIN((ALPHA*T)/2)
UNITARY = TEMP1 - IMU * TEMP2
UNITARTCONJ = TEMP1 + IMU * TEMP2
CALL DENSITYMATRIX(X,RHO)
RHONEW = UNITARTCONJ*RHO*UNITARY
END SUBROUTINE DENSITYMATRIXNEW
SUBROUTINE EXPECTATION(X,C,A,B,D,ANS)
IMPLICIT NONE
COMPLEX*16, DIMENSION(DIMMAT,1),INTENT(IN) :: X
REAL(KIND = DBL), DIMENSION(2,2),INTENT(IN) :: C
COMPLEX(KIND = DBL), DIMENSION(2,2), INTENT(IN) :: A, B
COMPLEX(KIND = DBL),DIMENSION(DIMSYS,DIMSYS),INTENT(IN)::D
REAL(KIND = DBL), INTENT(OUT) :: ANS
COMPLEX(KIND = DBL), DIMENSION(DIMSYS, DIMSYS):: RHONEW
COMPLEX*16, DIMENSION(DIMSYS, DIMSYS) :: TEMP
INTEGER :: J
REAL(KIND = DBL)::SUMM
SUMM = 0.0D0
!CALL DENSITYMATRIX(X,RHO)
CALL DENSITYMATRIXNEW(X,C,A,B,D,RHONEW)
TEMP = MATMUL(D,RHONEW)
DO J = 1, DIMSYS
SUMM = SUMM + DREAL(TEMP(J,J))
END DO
ANS = SUMM
END SUBROUTINE EXPECTATION
當我運行它們作爲一個更大計劃的一部分,我得到的錯誤:
有什麼事情是問題嗎?我想我已經定義了所有變量。我似乎無法調試代碼。
我能問關於點1個問題嗎?是否有可能使用另一個局部變量(而不是命名常量)在聲明行中初始化局部變量?我用gfortran試過但沒有成功(用上面的錯誤信息)。另外,由於初始化意味着自動保存SAVE屬性,所以我猜想在局部變量的所有聲明完成後分配值會更安全。 – roygvib
@roygvib是的,除非你真的想添加保存屬性(但是我個人明確地添加了這個),否則在聲明後初始化肯定會更好。我認爲'energygap'等將不得不被聲明爲這個工作的參數(爲了使這個更清晰,我會進行編輯)。 –
謝謝,我感覺上面gfortran的錯誤信息有點令人困惑......(如果有任何「變量」不允許用於初始化) – roygvib