1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2! Copyright 2010. Los Alamos National Security, LLC. This material was ! 3! produced under U.S. Government contract DE-AC52-06NA25396 for Los Alamos ! 4! National Laboratory (LANL), which is operated by Los Alamos National ! 5! Security, LLC for the U.S. Department of Energy. The U.S. Government has ! 6! rights to use, reproduce, and distribute this software. NEITHER THE ! 7! GOVERNMENT NOR LOS ALAMOS NATIONAL SECURITY, LLC MAKES ANY WARRANTY, ! 8! EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY FOR THE USE OF THIS ! 9! SOFTWARE. If software is modified to produce derivative works, such ! 10! modified software should be clearly marked, so as not to confuse it ! 11! with the version available from LANL. ! 12! ! 13! Additionally, this program is free software; you can redistribute it ! 14! and/or modify it under the terms of the GNU General Public License as ! 15! published by the Free Software Foundation; version 2.0 of the License. ! 16! Accordingly, this program is distributed in the hope that it will be ! 17! useful, but WITHOUT ANY WARRANTY; without even the implied warranty of ! 18! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General ! 19! Public License for more details. ! 20!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 21 22SUBROUTINE READRESTART 23 24 USE CONSTANTS_MOD 25 USE SETUPARRAY 26 USE MDARRAY 27 USE RESTARTARRAY 28 USE KSPACEARRAY 29#ifdef MPI_ON 30 USE MPI 31#endif 32 USE MYPRECISION 33 34 IMPLICIT NONE 35 36 INTEGER :: I, J, MYINDEX 37 INTEGER :: MYID, IERR 38 REAL(LATTEPREC) :: LN(6), JUNK, TMP1, TMP2 39 CHARACTER(LEN=20) :: HEADER 40 CHARACTER(LEN=50) :: FLNM 41 IF (EXISTERROR) RETURN 42 43 44 IF (MDON .EQ. 1 .AND. PARREP .EQ. 1) THEN 45 46#ifdef MPI_ON 47 CALL MPI_COMM_RANK( MPI_COMM_WORLD, MYID, IERR ) 48#endif 49 50 51 IF (MYID .LT. 10) THEN 52 WRITE(FLNM,'(I1,"/bl/restart.dat")') MYID 53 ELSEIF (MYID .GE. 10 .AND. MYID .LT. 100) THEN 54 WRITE(FLNM,'(I2,"/bl/restart.dat")') MYID 55 ELSEIF (MYID .GE. 100 .AND. MYID .LT. 1000) THEN 56 WRITE(FLNM,'(I3,"/bl/restart.dat")') MYID 57 ENDIF 58 59 PRINT*, MYID, FLNM 60 61 OPEN(UNIT=12, STATUS="OLD", FILE=FLNM) 62 63 ELSE 64 65 ! Regular restart 66 67 OPEN(UNIT=12, STATUS="OLD", FILE="bl/restart.dat") 68 69 ENDIF 70 71 IF (MDON .EQ. 1) READ(12,*) HEADER, CONTITER 72 READ(12,*) NATS 73 74 ALLOCATE(CR(3,NATS), ATELE(NATS), F(3,NATS), FPP(3,NATS), FTOT(3,NATS)) 75 ALLOCATE(DELTAQ(NATS), MYCHARGE(NATS)) 76 ALLOCATE(ELEMPOINTER(NATS)) 77 78 IF (ELECTRO .EQ. 0) THEN 79 ALLOCATE(LCNSHIFT(NATS)) 80 LCNSHIFT = ZERO 81 ENDIF 82 83 IF (PLUSDON .EQ. 1) ALLOCATE(FPLUSD(3,NATS)) 84 85 IF (BASISTYPE .EQ. "NONORTHO") THEN 86 87 IF (ELECTRO .EQ. 0) ALLOCATE(FSLCN(3,NATS)) 88 89 IF (SPINON .EQ. 0) THEN 90 ALLOCATE(FPUL(3,NATS), FSCOUL(3,NATS)) 91 ELSE 92 ALLOCATE(FPUL(3,NATS), FSCOUL(3,NATS), FSSPIN(3,NATS)) 93 ENDIF 94 ENDIF 95 96 IF (KON .EQ. 1) ALLOCATE(KF(3,NATS)) 97 98 IF (MDON .EQ. 1) ALLOCATE(V(3,NATS)) 99 100 READ(12,*) BOX(1,1), BOX(1,2), BOX(1,3) 101 READ(12,*) BOX(2,1), BOX(2,2), BOX(2,3) 102 READ(12,*) BOX(3,1), BOX(3,2), BOX(3,3) 103 104 105 ! READ(12,*) (ATELE(I), CR(1,I), CR(2,I), CR(3,I), I = 1, NATS) 106 107 DO I = 1, NATS 108 READ(12,*) ATELE(I), CR(1,I), CR(2,I), CR(3,I) 109 ENDDO 110 111 112 ! Set up pointer to the data in TBparam/electrons.dat 113 114 DO I = 1, NATS 115 DO J = 1, NOELEM 116 IF (ATELE(I) .EQ. ELE(J)) ELEMPOINTER(I) = J 117 ENDDO 118 ENDDO 119 120 SUMMASS = ZERO 121 DO I = 1, NATS 122 SUMMASS = SUMMASS + MASS(ELEMPOINTER(I)) 123 ENDDO 124 125 ! Let's check whether we have only sp elements. If so, we can 126 ! use a much faster verison of gradH 127 128 ! SPONLY = 0: use GRADHSP 129 ! SPONLY = 1: use Josh Coe's implementation of the automatic H build 130 131 SPONLY = 0 132 DO I = 1, NATS 133 IF (BASIS(ELEMPOINTER(I)) .NE. "s" .AND. & 134 BASIS(ELEMPOINTER(I)) .NE. "sp") SPONLY = 1 135 ENDDO 136 137 IF (SCLTYPE .EQ. "TABLE") SPONLY = 1 138 139 READ(12,*) CHEMPOT 140 ! PRINT*, CHEMPOT 141 142 IF (SPINON .EQ. 0) THEN 143 144 READ(12,*) TMPHDIM 145 ALLOCATE(TMPBODIAG(TMPHDIM)) 146 147 DO I = 1, TMPHDIM 148 READ(12,*) TMP1, TMP2 149 TMPBODIAG(I) = TMP1 + TMP2 150 ENDDO 151 152 ELSEIF (SPINON .EQ. 1) THEN 153 154 READ(12,*) TMPHDIM 155 ALLOCATE(TMPRHOUP(TMPHDIM), TMPRHODOWN(TMPHDIM)) 156 READ(12,*) (TMPRHOUP(I), TMPRHODOWN(I), I = 1, TMPHDIM) 157 158 ENDIF 159 160 IF (MDON .EQ. 1) THEN 161 DO I = 1, NATS 162 READ(12,*) V(1,I), V(2,I), V(3,I) 163 ENDDO 164 ENDIF 165 166 CLOSE(12) 167 168 ! CR = ALAT * CR 169 170 IF (PBCON .EQ. 0) THEN 171 172 IF (CONTITER .LT. 10) THEN 173 WRITE(FLNM,'("animate/myXYZfile_restart.",I1,".xyz")') CONTITER 174 ELSEIF (CONTITER .GE. 10 .AND. CONTITER .LT. 100) THEN 175 WRITE(FLNM,'("animate/myXYZfile_restart.",I2,".xyz")') CONTITER 176 ELSEIF (CONTITER .GE. 100 .AND. CONTITER .LT. 1000) THEN 177 WRITE(FLNM,'("animate/myXYZfile_restart.",I3,".xyz")') CONTITER 178 ELSEIF (CONTITER .GE. 1000 .AND. CONTITER .LT. 10000) THEN 179 WRITE(FLNM,'("animate/myXYZfile_restart.",I4,".xyz")') CONTITER 180 ELSEIF (CONTITER .GE. 10000 .AND. CONTITER .LT. 100000) THEN 181 WRITE(FLNM,'("animate/myXYZfile_restart.",I5,".xyz")') CONTITER 182 ELSEIF (CONTITER .GE. 100000 .AND. CONTITER .LT. 1000000) THEN 183 WRITE(FLNM,'("animate/myXYZfile_restart.",I6,".xyz")') CONTITER 184 ELSEIF (CONTITER .GE. 1000000 .AND. CONTITER .LT. 10000000) THEN 185 WRITE(FLNM,'("animate/myXYZfile_restart.",I7,".xyz")') CONTITER 186 ENDIF 187 188 OPEN(UNIT=23, STATUS="UNKNOWN", FILE=FLNM) 189 190 ENDIF 191 192 193 RETURN 194 195END SUBROUTINE READRESTART 196