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 PANIC
23
24  USE CONSTANTS_MOD
25  USE SETUPARRAY
26  USE MDARRAY
27  USE PPOTARRAY
28  USE PUREARRAY
29  USE SPARSEARRAY
30  USE COULOMBARRAY
31  USE SPINARRAY
32  USE MYPRECISION
33  USE DIAGARRAY
34
35  IMPLICIT NONE
36
37  INTEGER :: I
38  IF (EXISTERROR) RETURN
39
40
41  IF (MDON .EQ. 1) THEN
42
43     !
44     ! Write a .cfg file with our problematic configuration
45     !
46
47     CALL WRTCFGS(-1)
48
49  ELSE
50
51     CALL WRTCFGS(-999)
52
53  ENDIF
54
55  OPEN(UNIT=24, STATUS="UNKNOWN", FILE="myPANICfile.dat")
56
57  WRITE(6,'("# PANIC: SOMETHING BAD HAS HAPPENED! Check myPANICfile.dat")')
58  WRITE(24,'("PANIC: SOMETHING BAD HAS HAPPENED! SOME CLUES TO DIAGNOSE THE PROBLEM FOLLOW")')
59
60  IF (MDON .EQ. 1) THEN
61     WRITE(24,'("Molecular dynamics calculation")')
62  ENDIF
63
64
65  IF (ELECTRO .EQ. 1) THEN
66     WRITE(24,'("Self-consistent charge transfer: on")')
67     WRITE(24,'("SCF tolerance = ", G8.3)') ELEC_QTOL
68     IF (ELECMETH .EQ. 0) THEN
69        WRITE(24,'("Using Ewald summation")')
70        WRITE(24,'("Coulomb accuracy = ",G8.3)') COULACC
71        WRITE(24,'("Real space cut-off for Ewald sum = ", F6.2)') COULCUT
72     ELSEIF (ELECMETH .EQ. 1) THEN
73        WRITE(24,'("Real space electrostatics")')
74        WRITE(24,'("Cut-off tail applied between ", F6.2, F6.2)') &
75             COULR1, COULCUT
76     ENDIF
77  ENDIF
78
79  IF (SPINON .EQ. 1) THEN
80     WRITE(24,'("Spin-polarized calculation")')
81  ENDIF
82
83  IF (SPARSEON .EQ. 1) THEN
84     WRITE(24,'("Sparse matrix calculation")')
85     WRITE(24,'("Numerical threshold = ",G8.3)') NUMTHRESH
86  ENDIF
87
88
89
90  IF (CONTROL .EQ. 1) THEN
91     WRITE(24,'("Diagonalization")')
92  ELSEIF (CONTROL .EQ. 2) THEN
93     WRITE(24,'("SP2 purification at zero temperature")')
94  ELSEIF (CONTROL .EQ. 3) THEN
95     WRITE(24,'("Recursive expansion of the Fermi operator")')
96  ELSEIF (CONTROL .EQ. 4) THEN
97     WRITE(24,'("SP2 purification at finite temperature")')
98  ELSEIF (CONTROL .EQ. 5) THEN
99     WRITE(24,'("SP2/Fermi method at finite temperature")')
100  ENDIF
101
102  IF (CONTROL .NE. 2) THEN
103     WRITE(24,'("KBT (in eV) = ", F16.8)') KBT
104  ENDIF
105
106  IF (CONTROL .EQ. 5) THEN
107     WRITE(24,'("Gershgorin: MAXEVAL, MINEVAL = ", 2F16.8)') MAXEVAL, MINEVAL
108  ENDIF
109
110  IF (LATTEPREC .EQ. KIND(0.0D0)) THEN
111     WRITE(24,'("Double precision arithmetic")')
112  ELSEIF (LATTEPREC .EQ. KIND(0.0)) THEN
113     WRITE(24,'("Single precision arithmetic")')
114  ENDIF
115
116  IF (ENTROPYKIND .EQ. 0) THEN
117     WRITE(24,'("Entropy set = 0")')
118  ELSEIF (ENTROPYKIND .EQ. 1) THEN
119     WRITE(24,'("Using exact ln form for entropy")')
120  ELSEIF (ENTROPYKIND .EQ. 2) THEN
121     WRITE(24,'("Using the close-to-exact expansion of exact entropy (2)")')
122  ELSEIF (ENTROPYKIND .EQ. 3) THEN
123     WRITE(24,'("Using 4th order approximation for entropy")')
124  ELSEIF (ENTROPYKIND .EQ. 4) THEN
125     WRITE(24,'("Using 8th order approximation for entropy")')
126  ENDIF
127
128  WRITE(24,'("Tr[ rho*H ] = ", F16.8)') TRRHOH
129  WRITE(24,'("Pairwise energy = ", F16.8)') EREP
130
131  IF (ELECTRO .EQ. 1) THEN
132     WRITE(24,'("Coulombic + onsite E = ", F16.8)') ECOUL
133  ENDIF
134
135  IF (CONTROL .NE. 2) THEN
136     WRITE(24,'("Electron entropy TS = ", F16.8)') ENTE
137  ENDIF
138
139  IF (CONTROL .EQ. 1 .OR. CONTROL .EQ. 3 .OR. CONTROL .EQ. 5) THEN
140     WRITE(24,'("Chemical potential = ", F16.8)') CHEMPOT
141  ENDIF
142
143  IF (SPINON .EQ. 1) THEN
144     WRITE(24,'("Self-consistent spin energy = ", F16.8)') ESPIN
145     WRITE(24,'("Free atom spin energy = ", F16.8)') ESPIN_ZERO
146  ENDIF
147
148  IF (SPINON .EQ. 0) THEN
149     WRITE(24,'("Total energy (zero K) = ", F16.8)') TRRHOH + EREP - ECOUL
150     WRITE(24,'("")')
151     WRITE(24,'("FREE ENERGY = ", F16.8)') TRRHOH + EREP - ECOUL - ENTE
152     WRITE(24,'("")')
153  ELSEIF (SPINON .EQ. 1) THEN
154     WRITE(24,'("Total energy (zero K) = ", F16.8)') TRRHOH + EREP - ECOUL + &
155          ESPIN - ESPIN_ZERO
156     WRITE(24,'("")')
157     WRITE(24,'("FREE ENERGY = ", F16.8)') TRRHOH + EREP - ECOUL - ENTE + &
158          ESPIN - ESPIN_ZERO
159     WRITE(24,'("")')
160  ENDIF
161
162  IF (ELECTRO .EQ. 1) THEN
163
164     WRITE(24,'("Partial charges")')
165     WRITE(24,'("  Atom         Charge")')
166     DO I = 1, NATS
167        WRITE(24,50) I, DELTAQ(I)
168     ENDDO
169
17050   FORMAT(I6, 9X, F11.8)
171
172  ENDIF
173
174  IF (SPINON .EQ. 1) THEN
175
176     WRITE(24,'("")')
177     WRITE(24,'("Orbital spin densitites")')
178     WRITE(24,'("Orbital index         Spin density")')
179     DO I = 1, DELTADIM
180        WRITE(24,51) I, DELTASPIN(I)
181     ENDDO
182
18351   FORMAT(I6, 16X,F14.8)
184
185     IF (CONTROL .NE. 1) THEN
186        CALL ALLOCATEDIAG
187     ENDIF
188
189     CALL DIAGMYH
190
191     WRITE(24,'("")')
192     WRITE(24,'("Eigenvalues")')
193     WRITE(24,'("        Up            :           Down")')
194     DO I = 1, HDIM
195        WRITE(24, 52) I, UPEVALS(I), DOWNEVALS(I)
196     ENDDO
197
19852   FORMAT(I6, 2X, F14.8, 4X, F14.8)
199
200     CALL DEALLOCATEDIAG
201
202  ENDIF
203
204
205  WRITE(24,'("")')
206  WRITE(24,'("Coordinates (in .xyz format!)")')
207  DO I = 1, NATS
208     WRITE(24,54) ATELE(I), CR(1,I), CR(2,I), CR(3,I)
209  ENDDO
210
21153 FORMAT(I6, 1X, 3F18.9, 1X, A2)
21254 FORMAT(A2, 1X, 3G18.9)
213
214  IF (MDON .EQ. 1) THEN
215
216     WRITE(24,'("")')
217     WRITE(24,'("Velocities")')
218     DO I = 1, NATS
219        WRITE(24,53) I, V(1,I), V(2,I), V(3,I), ATELE(I)
220     ENDDO
221
222  ENDIF
223
224  WRITE(24,'("")')
225  WRITE(24,'("Forces")')
226  DO I = 1, NATS
227     WRITE(24,53) I, FTOT(1,I), FTOT(2,I), FTOT(3,I), ATELE(I)
228  ENDDO
229
230  WRITE(24,'("")')
231  WRITE(24,'("Band structure force")')
232  DO I = 1, NATS
233     WRITE(24,53) I, TWO*F(1,I), TWO*F(2,I), TWO*F(3,I), ATELE(I)
234  ENDDO
235
236  WRITE(24,'("")')
237  WRITE(24,'("Pair potential force")')
238  DO I = 1, NATS
239     WRITE(24,53) I, FPP(1,I), FPP(2,I), FPP(3,I), ATELE(I)
240  ENDDO
241
242  IF (ELECTRO .EQ. 1) THEN
243
244     WRITE(24,'("")')
245     WRITE(24,'("Coulomb force")')
246     DO I = 1, NATS
247        WRITE(24,53) I, FCOUL(1,I), FCOUL(2,I), FCOUL(3,I), ATELE(I)
248     ENDDO
249
250  ENDIF
251
252  CLOSE(24)
253
254  RETURN
255
256END SUBROUTINE PANIC
257