targetDensity = 0.63 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()
s.setPotentialByName('Star', 20) #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));