OpenMCTDHB v2.3
|
00001 ! vim:fdm=marker: 00002 00008 MODULE moduleallocatables 00009 IMPLICIT NONE 00010 00011 !------------------- FIRST AND SECOND ORDER DENSITY MATRICES AT DIFFERENT TIMES 00012 COMPLEX*16,ALLOCATABLE,DIMENSION(:,:) :: rho_jk_zero,rho_jk_tauhalf,rho_jk_tau 00013 COMPLEX*16,ALLOCATABLE,DIMENSION(:,:,:,:) :: rho_ijkl_zero,rho_ijkl_tauhalf,rho_ijkl_tau 00014 00015 00016 00017 !------------------- THE ABM WORKARRAY, ORBITALS, ETC. ---------------------------------------------- 00018 COMPLEX*16,ALLOCATABLE,DIMENSION(:,:) :: AuxPsi ! at least (totalNoGridPts,ABMIntOrder+1) 00019 COMPLEX*16, ALLOCATABLE, DIMENSION(:) :: Psi_WORK,DtPsi_WORK 00020 COMPLEX*16, ALLOCATABLE, DIMENSION(:,:) :: Psi_zero,Psi_tauhalf, 00021 Psi_tildetauhalf,Psi_tau,DtPsiCheck,DtPsi, 00022 FTPsi,norbs,Delta_Psi,diffPsi, 00023 Chi,projectedChi 00024 REAL*8, ALLOCATABLE,DIMENSION(:) :: noccs 00025 00026 00027 !------------------- SIL VECTORS, HAMILTONIAN MATRIX, ETC.------------------------------------------ 00028 complex*16,ALLOCATABLE,DIMENSION(:) :: DtCVec,CVec_zero,CVec_tauhalf,CVec_tau, 00029 CVec_tildezero,Delta_CVec 00030 complex*16,ALLOCATABLE,DIMENSION(:,:) :: BandMat,Krylov 00031 00032 COMPLEX*16,ALLOCATABLE, DIMENSION(:,:) :: mu_kj 00033 00034 00035 !------------------- DATA ARRAY THAT IS PASSED TO THE INTEGRATORS -------------------------------- 00036 COMPLEX*16,ALLOCATABLE,DIMENSION(:,:,:,:,:) :: CData 00037 00038 00039 !------------------- EXTERNAL POTENTIAL 00040 REAL*8, ALLOCATABLE,DIMENSION(:) :: V_ext,p2over2m 00041 REAL*8, ALLOCATABLE,DIMENSION(:) :: gridx,gridy,gridz 00042 00043 !------------------- INTERACTION POTENTIAL 00044 COMPLEX*16, ALLOCATABLE,DIMENSION(:) :: vtilde 00045 00046 00047 CONTAINS 00048 00049 00050 !--------------------------------------------------------------------------------------------------- 00058 SUBROUTINE allocate_systemArrays(NDX,NDY,NDZ,MOrb,nConf,nSuperDiags) 00059 USE moduleparameters,ONLY:ABMIntOrder,SILmaxIntOrder,ZERO 00060 !---{{{ 00061 IMPLICIT NONE 00062 00063 INTEGER,INTENT(IN) :: NDX,NDY,NDZ,MOrb,nConf,nSuperDiags 00064 INTEGER :: status=0 00065 00066 WRITE(*,100)'--> Allocating system size dependent arrays' 00067 ALLOCATE(Psi_WORK(NDX*NDY*NDZ*MOrb),DtPsi_WORK(NDX*NDY*NDZ*MOrb),STAT=status) 00068 00069 IF (status == 0) THEN 00070 Psi_WORK = ZERO 00071 DtPsi_WORK = ZERO 00072 ELSE 00073 WRITE(*,100)'ARRAY ALLOCATION FAILURE 1' 00074 STOP 00075 END IF 00076 00077 00078 ALLOCATE(Psi_zero(NDX*NDY*NDZ,MOrb),& 00079 Psi_tauhalf(NDX*NDY*NDZ,MOrb),Psi_tildetauhalf(NDX*NDY*NDZ,MOrb),Psi_tau(NDX*NDY*NDZ,MOrb),& 00080 DtPsiCheck(NDX*NDY*NDZ,MOrb),DtPsi(NDX*NDY*NDZ,MOrb),FTPsi(NDX*NDY*NDZ,MOrb),& 00081 norbs(NDX*NDY*NDZ,MOrb),noccs(MOrb),Delta_Psi(NDX*NDY*NDZ,MOrb),diffPsi(NDX*NDY*NDZ,MOrb),& 00082 Chi(NDX*NDY*NDZ,MOrb),projectedChi(NDX*NDY*NDZ,MOrb), AuxPsi(NDX*NDY*NDZ*MOrb,ABMIntOrder+1),& 00083 STAT=status) 00084 00085 IF (status == 0) THEN 00086 Psi_zero = ZERO 00087 Psi_tauhalf = ZERO 00088 Psi_tildetauhalf = ZERO 00089 Psi_tau = ZERO 00090 DtPsiCheck = ZERO 00091 DtPsi = ZERO 00092 FTPsi = ZERO 00093 norbs = ZERO 00094 noccs = 0.0d0 00095 Delta_Psi = ZERO 00096 diffPsi = ZERO 00097 Chi = ZERO 00098 projectedChi = ZERO 00099 AuxPsi = ZERO 00100 ELSE 00101 WRITE(*,100)'ARRAY ALLOCATION FAILURE 2' 00102 STOP 00103 END IF 00104 00105 00106 ALLOCATE(CData(MOrb,MOrb,MOrb,MOrb,2),rho_jk_zero(MOrb,MOrb),rho_ijkl_zero(MOrb,MOrb,MOrb,MOrb),& 00107 rho_jk_tauhalf(MOrb,MOrb),rho_ijkl_tauhalf(MOrb,MOrb,MOrb,MOrb),& 00108 rho_jk_tau(MOrb,MOrb),rho_ijkl_tau(MOrb,MOrb,MOrb,MOrb), STAT=status) 00109 00110 IF (status == 0) THEN 00111 CData = ZERO 00112 rho_jk_zero = ZERO 00113 rho_ijkl_zero = ZERO 00114 rho_jk_tauhalf = ZERO 00115 rho_ijkl_tauhalf = ZERO 00116 rho_jk_tau = ZERO 00117 rho_ijkl_tau = ZERO 00118 ELSE 00119 WRITE(*,100)'ARRAY ALLOCATION FAILURE 3' 00120 STOP 00121 END IF 00122 00123 00124 ALLOCATE(DtCVec(nConf),CVec_zero(nConf),CVec_tauhalf(nConf),CVec_tau(nConf), & 00125 CVec_tildezero(nConf),Delta_CVec(nConf),BandMat(nSuperDiags+1,nConf),& 00126 Krylov(nConf,2:SILmaxIntOrder),mu_kj(MOrb,MOrb),STAT=status) 00127 00128 IF (status == 0) THEN 00129 DtCVec = ZERO 00130 CVec_zero = ZERO 00131 CVec_tauhalf = ZERO 00132 CVec_tau = ZERO 00133 CVec_tildezero = ZERO 00134 Delta_CVec = ZERO 00135 BandMat = ZERO 00136 Krylov = ZERO 00137 mu_kj = ZERO 00138 ELSE 00139 WRITE(*,100)'ARRAY ALLOCATION FAILURE 4' 00140 STOP 00141 END IF 00142 00143 ALLOCATE(V_ext(NDX*NDY*NDZ),p2over2m(NDX*NDY*NDZ),vtilde(NDX*NDY*NDZ),& 00144 gridx(NDX),gridy(NDY),gridz(NDZ),STAT=status) 00145 00146 00147 IF (status == 0) THEN 00148 V_ext = 0.0d0 00149 p2over2m = 0.0d0 00150 vtilde = (0.0d0,0.d0) 00151 gridx = 0.0d0 00152 gridy = 0.0d0 00153 gridz = 0.0d0 00154 ELSE 00155 WRITE(*,100)'ARRAY ALLOCATION FAILURE 5' 00156 STOP 00157 END IF 00158 00159 !WRITE(*,100)'<-- Allocation successful' 00160 00161 100 FORMAT (5X,A) 00162 !---}}} 00163 END SUBROUTINE allocate_systemArrays 00164 00165 !--------------------------------------------------------------------------------------------------- 00170 SUBROUTINE deallocate_systemArrays 00171 !---{{{ 00172 IMPLICIT NONE 00173 00174 INTEGER :: status 00175 00176 WRITE(*,100)'--> Deallocating system size dependent arrays' 00177 DEALLOCATE(Psi_WORK,DtPsi_WORK,STAT=status) 00178 00179 IF (status /= 0) THEN 00180 WRITE(*,100)'ARRAY DEALLOCATION FAILURE 1' 00181 STOP 00182 END IF 00183 00184 DEALLOCATE(Psi_zero, Psi_tauhalf,Psi_tildetauhalf,Psi_tau,& 00185 DtPsiCheck,DtPsi,FTPsi,norbs,noccs,Delta_Psi,diffPsi,& 00186 Chi,projectedChi, STAT=status) 00187 00188 IF (status /= 0) THEN 00189 WRITE(*,100)'ARRAY DEALLOCATION FAILURE 2' 00190 STOP 00191 END IF 00192 00193 DEALLOCATE(rho_jk_zero,rho_jk_tauhalf,rho_jk_tau, & 00194 rho_ijkl_zero,rho_ijkl_tauhalf,rho_ijkl_tau,& 00195 CData, STAT=status) 00196 00197 00198 IF (status /= 0) THEN 00199 WRITE(*,100)'ARRAY DEALLOCATION FAILURE 3' 00200 STOP 00201 END IF 00202 00203 DEALLOCATE(DtCVec,CVec_zero,CVec_tauhalf,CVec_tau, & 00204 CVec_tildezero,Delta_CVec,BandMat,& 00205 Krylov,STAT=status) 00206 00207 00208 IF (status /= 0) THEN 00209 WRITE(*,100)'ARRAY DEALLOCATION FAILURE 4' 00210 STOP 00211 END IF 00212 00213 DEALLOCATE(V_ext,p2over2m,vtilde,gridx,gridy,gridz,STAT=status) 00214 00215 00216 IF (status /= 0) THEN 00217 WRITE(*,100)'ARRAY DEALLOCATION FAILURE 5' 00218 STOP 00219 END IF 00220 00221 !WRITE(*,100)'<-- Deallocation successful' 00222 00223 100 FORMAT (5X,A) 00224 !---}}} 00225 END SUBROUTINE deallocate_systemArrays 00226 00227 00228 END MODULE moduleallocatables