ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/applications/utilities/stat2dielectric
(Generate patch)

Comparing trunk/src/applications/utilities/stat2dielectric (file contents):
Revision 2007 by gezelter, Wed Jul 2 19:03:53 2014 UTC vs.
Revision 2008 by gezelter, Tue Jul 8 14:54:55 2014 UTC

# Line 7 | Line 7 | boundaries:
7   This assumes the fluctuation formula appropriate for conducting
8   boundaries:
9  
10 <                    <M^2> - <M>^2
11 <        eps = 1 + -----------------
12 <                  3 kB <T> <V> eps0
10 >                     <M^2> - <M>^2
11 >        epsA = 1 + -----------------
12 >                   3 kB <T> <V> eps0
13    
14 <        eps:  dielectric constant
14 >        epsA: dielectric constant
15          M:    total dipole moment of the box
16          <V>:  average volume of the box
17          <T>:  average temperature
# Line 20 | Line 20 | See M. Neumann, O. Steinhauser, and G. S. Pawley, Mol.
20  
21   See M. Neumann, O. Steinhauser, and G. S. Pawley, Mol. Phys. 52, 97 (1984).
22  
23 + Also, optionally applies a correction factor as follows:
24 +
25 +                ((Q + 2) (epsA - 1) + 3)
26 +          eps = ------------------------
27 +                ((Q - 1) (epsA - 1) + 3)
28 +
29 + Where Q depends on the method used to compute the electrostatic interaction.
30 + See M. Neumann and O. Steinhauser, Chem. Phys. Lett. 95, 417 (1983))
31 +
32   Usage: stat2dielectric
33  
34   Options:
35    -h, --help              show this help
36    -f, --stat-file=...     use specified stat file
37    -o, --output-file=...   use specified output (.dielectric) file
38 +  -q, --Q-value=...       use the specified Q value to correct the dielectric
39  
40   To use this, the OpenMD file for the run should specify:
41  
# Line 137 | Line 147 | def computeAverages(outFileName):
147          Vol += volume[i] * a3tom3
148          Vavg = Vol / float(1+i)
149  
150 <        dielectric1 = 1.0 + (M2avg - Mavg) / (3.0*eps0*kB*Tavg*Vavg)
151 <        dielectric2 = 1.0 + (M2avg - Mavg2*Mavg2) / (3.0*eps0*kB*Tavg*Vavg)
150 >        d1 = 1.0 + (M2avg - Mavg) / (3.0*eps0*kB*Tavg*Vavg)
151 >        d2 = 1.0 + (M2avg - Mavg2*Mavg2) / (3.0*eps0*kB*Tavg*Vavg)
152  
143        outFile.write("%lf\t%lf\t%lf\n" % (time[i], dielectric1, dielectric2))
153  
154 +        corrected1 = ((Q+2.0)*(d1 - 1.0) + 3.0)/((Q-1.0) * (d1 - 1.0) + 3.0)
155 +        corrected2 = ((Q+2.0)*(d2 - 1.0) + 3.0)/((Q-1.0) * (d2 - 1.0) + 3.0)
156 +        
157 +        outFile.write("%lf\t%lf\t%lf\t%lf\t%lf\n" % (time[i], d1, d2, corrected1, corrected2))
158 +
159      outFile.close()
160  
161  
162   def main(argv):
163      global haveStatFileName
164      global haveOutputFileName
165 +    global haveQValue
166      
167      haveStatFileName = False
168      haveOutputFileName = False
169 +    haveQValue = False
170  
171      try:                                
172 <        opts, args = getopt.getopt(argv, "hf:o:", ["help", "stat-file=", "output-file="])
172 >        opts, args = getopt.getopt(argv, "hq:f:o:", ["help", "Q-value=", "stat-file=", "output-file="])
173      except getopt.GetoptError:          
174          usage()                          
175          sys.exit(2)                    
# Line 161 | Line 177 | def main(argv):
177          if opt in ("-h", "--help"):      
178              usage()                    
179              sys.exit()
180 +        elif opt in ("-q", "--Q-value="):
181 +            Q = float(arg)
182 +            haveQValue = True
183          elif opt in ("-f", "--stat-file"):
184              statFileName = arg
185              haveStatFileName = True
# Line 175 | Line 194 | def main(argv):
194          usage()
195          print "No output file was specified"
196          sys.exit()
197 <        
197 >    
198 >    
199      readStatFile(statFileName)
200 <    computeAverages(outputFileName)
200 >    if (not haveQValue):
201 >        computeAverages(outputFileName, 1.0)
202 >    else:
203 >        computeAverages(outputFileName, Q)
204  
205  
206   if __name__ == "__main__":

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines