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' ); pl.plot(r, g_direct, label = 'RDF obtained directly' );