예제 #1
0
      solver.setPotentialByName('LennardJones', 0.1) #epsilon/kT = 0.1 is default in SASfit
      print "Energy scale of Lennard Jones Potential in kT units:", solver.getEpsilonInkTUnits()
      #Initialize HMSA with some (random) start alpha
      solver.doHMSAclosure(1.0)
  
  else:
      #Yukawa possible with RY: With negative K (attractive besides HS) convergence may be reached for exp shift only (real HS-Yukawa)
      #positive (repulsive as HS) K converges for fully shifted potential (1/r included)
      solver.setPotentialByName('Yukawa', 1.0, -1.0, True) #lamda in SASfit is different; K = 0.1 is default in SASfit
      print "Energy scale of Yukawa HS Potential in kT units:", solver.getInteractionStrengthInKTunits()
      print "Length scale of Yukawa HS Potential in sigma units:", solver.getShieldingConstantInSigmaUnits()
      #Initialize RY with some (random) start alpha
      solver.doRYclosure(1.0)

  
  solver.setVolumeDensity(0.3)
  print "Volume density of liquid:", solver.getVolumeDensity()
  
  print "start solving for optimal closure alpha...."
  
  #Should we minimize cost functional or find a root?
  doUseMinimizer = False
  doSearchIndependentPlot = False
  #Save iterated points in alpha space as dict to plot later
  finderFunctionGraph = {}
  
  if doUseMinimizer:
      #Ein Minimum macht noch keine Nullstelle, minimierungs algorithmen
      #kommen aber (auch) mit doppelten (mehrfachen) Nullstellen klar. *Falls* eine Nullstelle vorliegt,
      #ist sie in jedem Fall auch ein Minimum der quadrierten funktion (bei mehreren Nullstellen kein globales Minimum)
      alpha_opt = optimize.minimize(finderFunctionForAlpha, alpha_initial, args=(solver, finderFunctionGraph, doUseMinimizer,))
예제 #2
0
 startDensity = 0.58
 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()
예제 #3
0
  #s.setPotentialByName('LennardJones', 0.2)
  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:
예제 #4
0
'''

import numpy as np
from scipyAndersonOZsolver import ScipyAndersonOZsolver

#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()
예제 #5
0
The script calculates the OZ solution
of the HS + PY system with and without
the S_c(0) result.
'''
import numpy as np
from scipyAndersonOZsolver import ScipyAndersonOZsolver


#plot
import matplotlib.pyplot as plt

if __name__ == '__main__':
  solver = ScipyAndersonOZsolver(port = 0)
  solver.setPotentialByName('HardSphere')
  volumeDensity = 0.5
  solver.setVolumeDensity(volumeDensity)
  solver.setConvergenceCriterion(1.0e-4*solver.getConvergenceCriterion())
  #PY is default, so no explicit settings are needed in this regard
  #so solver is in desired state.
  solver.solve()
  #Get reference structure factor
  Sq_default = solver.getSq()
  #now GCE limit version
  solver.doEnforceGrandCanonicalZeroQlimit()
  #solver is in desired state.
  solver.solve()
  #Get GCE structure factor
  Sq_GCE = solver.getSq()
  print "reference Sq(0)", Sq_default[0]
  print "GCE Sq(0)", Sq_GCE[0]
  print "Analytical Sq(0)", (1.0 - volumeDensity)**4/(1.0 + 2.0*volumeDensity)**2
예제 #6
0
So far for the naming)
The script calculates the OZ solution
of the HS + PY system with and without
the S_c(0) result.
'''
import numpy as np
from scipyAndersonOZsolver import ScipyAndersonOZsolver

#plot
import matplotlib.pyplot as plt

if __name__ == '__main__':
    solver = ScipyAndersonOZsolver(port=0)
    solver.setPotentialByName('HardSphere')
    volumeDensity = 0.5
    solver.setVolumeDensity(volumeDensity)
    solver.setConvergenceCriterion(1.0e-4 * solver.getConvergenceCriterion())
    #PY is default, so no explicit settings are needed in this regard
    #so solver is in desired state.
    solver.solve()
    #Get reference structure factor
    Sq_default = solver.getSq()
    #now GCE limit version
    solver.doEnforceGrandCanonicalZeroQlimit()
    #solver is in desired state.
    solver.solve()
    #Get GCE structure factor
    Sq_GCE = solver.getSq()
    print "reference Sq(0)", Sq_default[0]
    print "GCE Sq(0)", Sq_GCE[0]
    print "Analytical Sq(0)", (1.0 - volumeDensity)**4 / (