OpenMCTDHB v2.3

moduleallocatables.F90

Go to the documentation of this file.
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
 All Namespaces Files Functions Variables