if scale == None: if "OUTCAR" in inputFile: scale = 5E-15 #5fs (potim=5) else: scale = 0.001E-12 #0.001ps (default for units = metal) if logtEnable: header = "#Generated by %s using file %s\n log(t) ISF \n"%(sys.argv[0].split("/")[-1],inputFile) else: header = "#Generated by %s using file %s\n t(ps) ISF \n"%(sys.argv[0].split("/")[-1],inputFile) if "OUTCAR" in inputFile: ocarFile = inputFile atomByteNums = outcarIO.atomBytes(ocarFile) nAtom = outcarIO.nAtoms(ocarFile) basis = outcarIO.basis(ocarFile) configIterator = parserGens.parseOutcarAtoms(atomByteNums,ocarFile,nAtom) atomsTime = [array(atoms) for atoms in configIterator] atomsTime = unwrap(atomsTime,basis) else: lmpFile = inputFile atomByteNums = lammpsIO.atomsBytes(lmpFile) nAtom = lammpsIO.nAtoms(lmpFile) basis = lammpsIO.basis(lmpFile) bounds=[[0,basis[0][0]],[0,basis[1][1]],[0,basis[2][2]]] configIterator = parserGens.parseLammpsAtoms(atomByteNums,lmpFile,nAtom) atomsTime = [array(atoms) for atoms in configIterator] bounds=[[0,basis[0][0]],[0,basis[1][1]],[0,basis[2][2]]]
filename = sys.argv[1] header=["TimeStep AverageRMSD\n"] rmsddata = header outcarFlag=False lammpsFlag=False if "OUTCAR" in filename: outcarFlag=True lammpsFlag=False else: outcarFlag=False lammpsFlag=True atoms=list() if outcarFlag: nAtoms = outcarIO.nAtoms(filename) basis = array(map(array,outcarIO.basis(filename))) #Find the starting locations of atomic data in outcarfile grepResults = subprocess.check_output("grep -b POSITION %s"%filename,shell=True).split("\n") bytenums=[int(i.split(":")[0]) for i in grepResults if len(i)>2] outcar = open(filename,"r") for i,b in enumerate(bytenums): outcar.seek(b) outcar.readline() outcar.readline() atoms.append([map(float,outcar.readline().split()[:3]) for a in range(nAtoms)]) scale = 5E-15 if lammpsFlag:
possibleSuffix = [".rmsd",".cn",".tetra",".rmsd50",".rmsd100",".rmsd1000",".rmsd5000",".rmsd10000",".2shelltetra",".2shellcn",".2shellrmsd100",".tetra.avg1000",".tetra.avg5000",".tetra.avg100",".tetra.avg500"] utils.usage(["<outcar,lamps dump>"],1,1,"Note: Automatically looks for <OUTCAR/dump.suffix> for per atom ensembles. to include in the dump") fname = sys.argv[1] dumpFilename = fname+"lmp.dump" possibleSuffix = [i for i in possibleSuffix if os.path.isfile(fname+i)] print possibleSuffix ensembleHead = " ".join([i.strip(".") for i in possibleSuffix]) ensembles = None if len(possibleSuffix)>0: ensembles = [parserGens.parseEnsemble(fname+i) for i in possibleSuffix] if "OUTCAR" in fname: nAtoms = outcarIO.nAtoms(fname) basis = array(map(array,outcarIO.basis(fname))) bounds = [[0,basis[0][0]],[0,basis[1][1]],[0,basis[2][2]]] types = outcarIO.types(fname) #Find the starting locations of atomic data in outcarfile grepResults = subprocess.check_output("grep -b POSITION %s"%fname,shell=True).split("\n") bytenums=[int(i.split(":")[0]) for i in grepResults if len(i)>2] outcarParsed = parserGens.parseOutcarAtoms(bytenums,fname,nAtoms) lammpsIO.writeDump(dumpFilename,basis,types,outcarParsed,ensembles,ensembleHead) else: nAtoms = lammpsIO.nAtoms(fname) basis = lammpsIO.basis(fname) bounds = [[0,basis[0][0]],[0,basis[1][1]],[0,basis[2][2]]]