Readme file: readme.txt Last updated: December 16, 2016 This is the readme file for the Java program Atoms.java to carry out the path-integral quantum Monte Carlo simulations of a hard-sphere boson cluster in a harmonic potential trap. File fort.15 contains a sample input. I. Methods and Functions: Atoms: The class name main: The main method initiate: Method to initialize the simulation simulate: Method to gather and analyze the data sample: Method to calculate all the physical quantities move: Method to move the system by one Monte Carlo step save: Method to save the data for continuation runs auto: Method to evaluate the autocorrelation function ranf: Function to generate a uniform random number uext: The external potential function weight: The local weight function The units used in the simulation are based on m=hbar=k=k_B=1, where m is the mass of a particle in the system, hbar is the Planck constant, k is the spring constant of the harmonic potential [note that m=k=1 also means that the angular frequency of the oscillator omega=sqrt(k/m)=1], and k_B is the Boltzmann constant. The simulation is carried out with a fixed temperature T. Parameters used in a run are read in from file fort.15. An output data file data.out is created if the run is set to be continued and must be renamed to the input data file data.in before the continuous run. II. Global Constants, Parameters, and Variables: (1) Integer Parameters and Variables: N: Maximum number of particles allowed by the program M: Maximum number of discrete time segments allowed by the program K: Max number of groups used in gathering data seed: Random number generator seed iq: Control parameter for the status of the simulation (0 for a new run without data saving; 1 for a new run with data saving; and 2 for a continuation run) ic: Control parameter for evaluating autocorrelation function if not zero step: Counter to record how many Monte Carlo steps taken l: Total number of particles on cycles with lengths greater than lmin n: Actual number of particles m: Actual number of discrete time segments lm: Minimum cyclic permutation of particles in the ground state np: Number of random permutations in each Monte Carlo step ng: Number of groups used is gathering data nf: Number of Monte Carlo steps skipped between two adjacent data points ns: Number of data points in each group of data nr: Number of Monte Carlo steps in the equilibration runs (2) Double Parameters and Variables: dx0: random walk step size along x-direction dy0: random walk step size along y-direction dz0: random walk step size along z-direction d: The the diameter of the hard spheres dd: d*d r: Roughly the radius of the the external potential trap t: Temperature tn: Temperature divided by the mean-field critical temperature of T_c=0.9405*(Math.pow(n,1.0/3)-0.7275) b: beta/m=1/(t*m) bh: 1/(2*b) u1: Kinetic energy of the system for a given configuration u2: Potential energy of the system for a given configuration usum: The average external potential energy of the system c1: First term in the heat capacity, (U1+U2)**2+T*(2*U1-3*N*BH) ac1: Number of accepted microscopic moves ac2: Number of accepted permutation moves rj1: Number of rejected microscopic moves rj2: Number of rejected permutation moves (3) Arrays: ip[N]: The permutation order of the particles x[N][M]: x-coordinates of the particles y[N][M]: x-coordinates of the particles z[N][M]: x-coordinates of the particles ec[K]: Data array for autocorrelation function evaluation III. Local Variables Used in methods and functions (1) Method initiate(): ir[N]: Temporary array for the order of all the particles t1: current second t2: current minute t3: current hour t4: current day t5: current month t6: current year tmp: 2*pi/m an3: Math.pow(n,1.0/3) an3h: an3/2 ns1: int(an3)+1 ns2: ns1*ns1 tiny: 1*e-6 counter: counter for the initial configurations tried ncmx: Maximum number of the initial configurations can be tried phi: A temporary angle variable xx: x-component of position difference between two particles yy: y-component of position difference between two particles zz: z-component of position difference between two particles rr: Distance squared between two particles Other integers used as step counters in the loops (2) Method simulate(): et: Total internal energy per particle etsm: Summation of the total energy vesm: Summation of the total energy squared ve: Standard deviation of the total energy ge: Standard deviation of the total energy by treating group averages as data points ek: Kinetic energy per particle eksm: Summation of the kinetic energy vksm: Summation of the kinetic energy squared vk: Standard deviation of the kinetic energy gk: Standard deviation of the kinetic energy by treating group averages as data points ep: Potential energy per particle epsm: Summation of the potential energy vpsm: Summation of the potential energy squared vp: Standard deviation of the potential energy gp: Standard deviation of the potential energy by treating group averages as data points c: Heat capacity per particle. vc: Standard deviation of the specific heat. gc: Standard deviation of the specific heat by treating group averages as data points dl: Fraction of condensate dlsm: Summation of the particles in the condensate vlsm: Summation of the particles in the condensate squared vl: Standard deviation of the fraction of the condensate gl: Standard deviation of the fraction of the condensate by treating group averages as data points i1: Percentage acceptance ratio of random walks i2: Percentage acceptance ratio of exchange moves Other double variables used in the summations Other integers used as step counters in the loops (3) Method sample(): iu[N]: Local array to store used particle indices xx: x-coordinate difference for a particle at adjacent time points yy: y-coordinate difference for a particle at adjacent time points zz: z-coordinate difference for a particle at adjacent time points rr: summation of distances squared for particles at adjacent time points Other integers used as step counters in the loops (4) Method move(): xold: Used for the x-coordinates before the move yold: Used for the y-coordinates before the move zold: Used for the z-coordinates before the move uold: Potential energy of the particle before the move wold1: Used for the first part of the weight function before the move wold2: Used for the second part of the weight function before the move dx: The step taken along the x-direction dy: The step taken along the y-direction dz: The step taken along the z-direction xx: The x-coordinate difference between two particles yy: The y-coordinate difference between two particles zz: The z-coordinate difference between two particles rr: Squared distance between two particles mask: Integer used to mask the moves unew: Potential energy of the particle after the move. wnew1: Used for the first part of the weight function after the move wnew2: Used for the second part of the weight function after the move wr: The ratio between the weights of the old and new configurations Other double variables used in the loops Other integers used as counters in the loops (5) Method auto: kmax: Number of points to be calculated for the autocorrelation function corr: Autocorrelation function Other double variables used temporarily in the method Other integers used as step counters in the loops (6) method ranf(): Local variables used to create a uniform random number (6) Function uext (x,y,z): x1: The x-coordinate of the particle y1: The y-coordinate of the particle z1: The z-coordinate of the particle (7) Function weight(x1,y1,z1,x2,y2,z2,uloc): ex: Exponent in the weight x1: The first x-coordinate y1: The first y-coordinate z1: The first z-coordinate x2: The second x-coordinate y2: The second y-coordinate z2: The second z-coordinate uloc: The external potential of the particle