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' );
#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()
#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)')
#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()