예제 #1
0
  totalDeltaDensity = targetDensity - startDensity
  
  density = startDensity
  deltaDensity = totalDeltaDensity
  
  decayFactor = 2.5
  deltaDensity = 0.01
  
  print "start approaching target density", targetDensity
  while density < targetDensity:
    #deltaDensity /= decayFactor
    density += deltaDensity
    print "current density", density
    solver.setVolumeDensity(density)
    solver.solve()
    g = solver.getRDF()
    solver.setStartValue(g)
   
   
  #Direct calculation
  print "Directly calculating RDF for target density", targetDensity
  solver.setStartValue(np.zeros(solver.getNumberOfRadialSamplingPoints()) )
  solver.setVolumeDensity(targetDensity)
  solver.solve()
  g_direct = solver.getRDF()
  
  #Plot results
  r = np.arange(solver.getNumberOfRadialSamplingPoints() ).astype('float') + 1.0
  r *= solver.getDelta_r()/solver.getHardSphereRadius()

  pl.plot(r, g, label = 'RDF obtained by iterating over densities' );
예제 #2
0
#plot
import matplotlib.pyplot as plt
import pylab as pl

if __name__ == '__main__':

    closureRDFdictionary = {}

    solver = ScipyAndersonOZsolver(port=0)
    solver.setPotentialByName('HardSphere')
    solver.setVolumeDensity(0.4)

    #Default is PY
    print "PY closure.."
    solver.solve()
    closureRDFdictionary['PY'] = solver.getRDF()

    print "HNC closure.."
    solver.doHNCclosure()
    solver.solve()
    closureRDFdictionary['HNC'] = solver.getRDF()

    print "RY closure, alpha -> 0.."
    solver.doRYclosure(alpha=0.0001)  #Not exactly zero...
    solver.solve()
    closureRDFdictionary['RY alpha -> 0'] = solver.getRDF()

    print "RY closure, alpha -> inf.."
    solver.doRYclosure(alpha=100000.0)
    solver.solve()
    closureRDFdictionary['RY alpha -> inf'] = solver.getRDF()
예제 #3
0
  
  #Define the density range to scan
  densityRange = np.arange(0.3, 0.4, 0.1)
  #densityRange = np.asarray([0.3])
  #densityRange = np.asarray([0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5])
  

  densityRDFdictionary = {}
  
  #Start loop over densities and measure wall clock time
  t_start = time.time()
  
  for d in densityRange:
      s.setVolumeDensity(float(d))
      s.solve()
      g = s.getRDF()
      densityRDFdictionary[d] = g

  t_stop = time.time()
  
  #Print out benchmark
  print "time used for", densityRange.size, "density parameters:", t_stop - t_start, " sec" 
  print "time used for one OZ run:", (t_stop - t_start)/float(densityRange.size), "seconds"
  
  #Plot results
  r = np.arange(s.getNumberOfRadialSamplingPoints() ).astype('float') + 1.0
  r *= s.getDelta_r()/s.getHardSphereRadius()

  for densityKey in densityRDFdictionary:
      pl.plot(r, densityRDFdictionary[densityKey], label = 'RDF for d=' + str(densityKey));
      pl.xlabel('r/sigma'); pl.ylabel('g(r)')
예제 #4
0
#plot
import matplotlib.pyplot as plt
import pylab as pl

if __name__ == '__main__':
  
  closureRDFdictionary = {}

  solver = ScipyAndersonOZsolver(port = 0)
  solver.setPotentialByName('HardSphere')
  solver.setVolumeDensity(0.4)
  
  #Default is PY
  print "PY closure.."
  solver.solve()
  closureRDFdictionary['PY'] = solver.getRDF()
  
  print "HNC closure.."
  solver.doHNCclosure()
  solver.solve()
  closureRDFdictionary['HNC'] = solver.getRDF()
  
  print "RY closure, alpha -> 0.."
  solver.doRYclosure(alpha=0.0001) #Not exactly zero...
  solver.solve()
  closureRDFdictionary['RY alpha -> 0'] = solver.getRDF()
  
  print "RY closure, alpha -> inf.."
  solver.doRYclosure(alpha=100000.0)
  solver.solve()
  closureRDFdictionary['RY alpha -> inf'] = solver.getRDF()