def makeLens(this, r0, d, h, direction = [1, 0, 0], invert = False, simulation = -1): length = this.stateNumbers[simulation]; lastSim = this.simulations[simulation]; splitted = this.splitted[simulation]; path = this.path; simNumber = len(this.splitted) - 1; if(splitted): mdf.combine(lastSim, length, states = "last"); #end loadfile = lastSim + "/%05d/combined.xyz"%length; newPath = path + "/" + str(simNumber + 1) + "_lens"; #Creating new directories and data if(not os.path.exists(newPath + "/init")): os.makedirs(newPath + "/init"); #end datafilename = newPath + "/init/data.dat" datafile = open(datafilename, 'w'); datafile.write(str(this.p[0]) + " " + str(this.p[1]) + " " + str(this.p[2]) + "\n"); datafile.write(str(this.s[0]) + " " + str(this.s[1]) + " " + str(this.s[2]) + "\n"); datafile.write("0\n0\n"); #Creating directory to hold xyz files directory = newPath + "/00000"; this.resetRun(directory); os.makedirs(directory); savefile = directory + "/combined.xyz"; N = mdm.makeLens(loadfile, savefile, r0, h, d, this.s, direction, invert); datafile.write(str(N) + "\n"); datafile.close(); mdf.split(newPath, this.p, this.s, source = newPath + "/00000/combined.xyz"); this.simulations.append(newPath); this.stateNumbers.append(0); this.splitted.append(True); return simNumber + 1;
def combine(this, simulation1, simulation2): path = this.path; simNumber = len(this.splitted) - 1; length1 = this.stateNumbers[simulation1]; lastSim1 = this.simulations[simulation1]; splitted1 = this.splitted[simulation1]; length2 = this.stateNumbers[simulation2]; lastSim2 = this.simulations[simulation2]; splitted2 = this.splitted[simulation2]; if(splitted1): mdf.combine(lastSim1, length1, states = "last"); #end if(splitted2): mdf.combine(lastSim2, length2, states = "last"); #end loadfile1 = lastSim1 + "/%05d/combined.xyz"%length1; loadfile2 = lastSim2 + "/%05d/combined.xyz"%length2; newPath = path + "/" + str(simNumber + 1) + "_combined"; #Creating new directories and data if(not os.path.exists(newPath + "/init")): os.makedirs(newPath + "/init"); #end datafilename = newPath + "/init/data.dat" datafile = open(datafilename, 'w'); datafile.write(str(this.p[0]) + " " + str(this.p[1]) + " " + str(this.p[2]) + "\n"); datafile.write(str(this.s[0]) + " " + str(this.s[1]) + " " + str(this.s[2]) + "\n"); datafile.write("0\n0\n"); #Number of particles lastDatafile = open(lastSim1 + "/init/data.dat"); lines = [l for l in lastDatafile]; N1 = int(lines[4]); lastDatafile.close(); lastDatafile = open(lastSim2 + "/init/data.dat"); lines = [l for l in lastDatafile]; N2 = int(lines[4]); lastDatafile.close(); datafile.write(str(N1 + N2) + "\n"); datafile.close(); #Creating directory to hold xyz files directory = newPath + "/00000"; this.resetRun(directory); os.makedirs(directory); savefile = directory + "/combined.xyz"; markFile1 = lastSim1 + "/init/mark.dat"; markFile2 = lastSim2 + "/init/mark.dat"; markFileSave = newPath + "/init/mark.dat"; mdm.combine(loadfile1, loadfile2, savefile, markFile1, markFile2, markFileSave); mdf.split(newPath, this.p, this.s, source = newPath + "/00000/combined.xyz"); this.simulations.append(newPath); this.stateNumbers.append(0); this.splitted.append(True); return simNumber + 1;
def makeInitState(this, path, state, dest): mdf.combine(path, state, states = "last"); splitDir = path + "/%05d"%state; #Removes all files in directory before recreating shutil.rmtree(dest); os.makedirs(dest); mdf.split(path, this.p, this.s, dest, splitDir + "/combined.xyz"); #Get number of particles from datafile datafile = open(path + "/init/data.dat"); lines = [l for l in datafile]; N = int(lines[4]); return N;
def combine(this, simulation1, simulation2): path = this.path; simNumber = len(this.splitted) - 1; length1 = this.stateNumbers[simulation1]; lastSim1 = this.simulations[simulation1]; splitted1 = this.splitted[simulation1]; length2 = this.stateNumbers[simulation2]; lastSim2 = this.simulations[simulation2]; splitted2 = this.splitted[simulation2]; if(splitted1): mdf.combine(lastSim1, length1, states = "last"); #end if(splitted2): mdf.combine(lastSim2, length2, states = "last"); #end newPath = path + "/" + str(simNumber + 1) + "_combined"; #Creating new directories and data this.resetRun(newPath); os.makedirs(newPath + "/init"); #Creating datafile datafilename = newPath + "/init/data.dat" datafile = open(datafilename, 'w'); datafile.write(str(this.p[0]) + " " + str(this.p[1]) + " " + str(this.p[2]) + "\n"); datafile.write(str(this.s[0]) + " " + str(this.s[1]) + " " + str(this.s[2]) + "\n"); datafile.write("0\n0\n"); #Number of particles lastDatafile = open(lastSim1 + "/init/data.dat"); lines = [l for l in lastDatafile]; N1 = int(lines[4]); lastDatafile.close(); lastDatafile = open(lastSim2 + "/init/data.dat"); lines = [l for l in lastDatafile]; N2 = int(lines[4]); lastDatafile.close(); datafile.write(str(N1 + N2) + "\n"); datafile.close(); #Combining files and splitting xyz file mdm.combine(lastSim1, lastSim2, newPath); mdf.split(newPath, this.p, this.s, source = newPath + "/00000/combined.xyz"); this.simulations.append(newPath); this.stateNumbers.append(0); this.splitted.append(True); return simNumber + 1;
def moveParticles(this, dr, simulation = -1): length = this.stateNumbers[simulation]; lastSim = this.simulations[simulation]; splitted = this.splitted[simulation]; path = this.path; simNumber = len(this.splitted) - 1; if(splitted): mdf.combine(lastSim, length, states = "last"); #end loadfile = lastSim + "/%05d/combined.xyz"%length; newPath = path + "/" + str(simNumber + 1) + "_displaced"; #Creating new directories and data if(not os.path.exists(newPath + "/init")): os.makedirs(newPath + "/init"); #end datafilename = newPath + "/init/data.dat" datafile = open(datafilename, 'w'); datafile.write(str(this.p[0]) + " " + str(this.p[1]) + " " + str(this.p[2]) + "\n"); datafile.write(str(this.s[0]) + " " + str(this.s[1]) + " " + str(this.s[2]) + "\n"); datafile.write("0\n0\n"); #Number of particles lastDatafile = open(lastSim + "/init/data.dat"); lines = [l for l in lastDatafile]; N = int(lines[4]); datafile.write(str(N) + "\n"); lastDatafile.close(); datafile.close(); #Copying mark files initfiles = os.listdir(lastSim + "/init"); for f in initfiles: if(f != "data.dat"): shutil.copyfile(lastSimPath + "/init/" + f, newSimPath + "/init/" + f); #end #end #Creating directory to hold xyz files directory = newPath + "/00000"; this.resetRun(directory); os.makedirs(directory); savefile = directory + "/combined.xyz"; mdm.moveParticles(loadfile, savefile, dr, this.s); mdf.split(newPath, this.p, this.s, source = newPath + "/00000/combined.xyz"); this.simulations.append(newPath); this.stateNumbers.append(0); this.splitted.append(True); return simNumber + 1;
def displaceCylindrical(this, R, direction, simulation = -1): length = this.stateNumbers[simulation]; lastSim = this.simulations[simulation]; splitted = this.splitted[simulation]; path = this.path; simNumber = len(this.splitted) - 1; if(splitted): mdf.combine(lastSim, length, states = "last"); #end loadfile = lastSim + "/%05d/combined.xyz"%length; newPath = path + "/" + str(simNumber + 1) + "_cylindricallyDisplaced"; #Creating new directories and data this.resetRun(newPath); os.makedirs(newPath + "/00000"); os.makedirs(newPath + "/init"); #Creatign data file datafilename = newPath + "/init/data.dat" datafile = open(datafilename, 'w'); datafile.write(str(this.p[0]) + " " + str(this.p[1]) + " " + str(this.p[2]) + "\n"); datafile.write(str(this.s[0]) + " " + str(this.s[1]) + " " + str(this.s[2]) + "\n"); datafile.write("0\n0\n"); lastDatafile = open(lastSim + "/init/data.dat"); lines = [l for l in lastDatafile]; N = int(lines[4]); datafile.write(str(N) + "\n"); lastDatafile.close(); datafile.close(); #Copying mark files initfiles = os.listdir(lastSim + "/init"); for i in range(len(initfiles)): if(initfiles[i][0:4] == "mark"): shutil.copyfile(lastSim + "/init/" + initfiles[i], newPath + "/init/" + initfiles[i]); #end #end #Displacing particles mdm.displaceCylindrical(lastSim, newPath, R, direction) mdf.split(newPath, this.p, this.s, source = newPath + "/00000/combined.xyz"); this.simulations.append(newPath); this.stateNumbers.append(0); this.splitted.append(True); return simNumber + 1;