def main(): """ This test shows how the setPtclPos method works to externally set all particle positions from a list """ print "************************************************************************************" print " This test shows how the setPtclPos method works to externally set all particle " print " positions from a list" print "************************************************************************************ \n" p1 = Particle([0.2, 1.3, 33.0], "Si", 2.0, 1.23) p2 = Particle([5.0, 2.3, -22.1], "C", 1.0, 2.34) p3 = Particle([5.0, 2.3, -20.1], "C", 1.0, 2.34) p4 = Particle([0.0, 2.3, -20.1], "C", 1.0, 2.34) b1 = Bond(1, 2, 1.233, "hooke") b2 = Bond(2, 3, 0.500, "hooke") b3 = Bond(3, 4, 2.301, "hooke") b4 = Bond(1, 3, 0.828, "hooke") atoms1 = ParticleContainer() atoms1.put(p1) atoms1.put(p2) atoms1.put(p3) atoms1.put(p4) bonds = BondContainer() bonds.put(b1) bonds.put(b2) bonds.put(b3) bonds.put(b4) del p1, p2, p3, p4, b1, b2, b3, b4 polymer1 = StructureContainer(atoms1, bonds) del atoms1, bonds polymer1.setBoxLengths([[-3.0, 100], [-5, 23.0], [34.3, 100.1]]) print "Initial state of structure before reset ", polymer1 newPtclPos = [[1, 0.111, 0.222, 0.333], [2, 0.222, 0.333, 0.444], [4, 0.444, 0.555, 0.666]] print "new positions = ", newPtclPos polymer1.setPtclPositions(newPtclPos) ptclPosList = polymer1.getPtclPositions() print "new positions from structure = ", ptclPosList print " " print "After position reset/get ", polymer1
def main(): """ This test shows how to save/dump/restore state of structureContainers using pickle """ print "************************************************************************************" print " This test shows how to save/dump/restore state of structureContainers using pickle" print "************************************************************************************ \n" p1 = Particle([0.2, 1.3, 33.0], "Si", 2.0, 1.23) p2 = Particle([5.0, 2.3, -22.1], "C", 1.0, 2.34) p3 = Particle([5.0, 2.3, -20.1], "C", 1.0, 2.34) p4 = Particle([0.0, 2.3, -20.1], "C", 1.0, 2.34) b1 = Bond(1, 2, 1.233, "hooke") b2 = Bond(2, 3, 0.500, "hooke") b3 = Bond(3, 4, 2.301, "hooke") b4 = Bond(1, 3, 0.828, "hooke") atoms1 = ParticleContainer() atoms1.put(p1) atoms1.put(p2) atoms1.put(p3) atoms1.put(p4) bonds = BondContainer() bonds.put(b1) bonds.put(b2) bonds.put(b3) bonds.put(b4) del p1, p2, p3, p4, b1, b2, b3, b4 polymer1 = StructureContainer(atoms1, bonds) del atoms1, bonds polymer1.setBoxLengths([[-3.0, 100], [-5, 23.0], [34.3, 100.1]]) print "Initial state of structure before dump ", polymer1 print "-------------------------------------------------------------------------------- \n" polymer1.dump('polymer1') polymerNew = StructureContainer() polymerNew.restore('polymer1.pkl') print "After load from pickle \n" print polymerNew print "-------------------------------------------------------------------------------- \n"
def main(): """ Tests a specifc workflow for LAMMPS that uses the simulationLAMMPS1 derived class """ global g global p # Get useful methods g=Geometry() # Get comm object p = mpiBase.getMPISerialObject() rank = p.getRank() size = p.getCommSize() # Sync random stream for tests random.seed(0) ############################################################################################# # # Generate list of [gid, x,y,z] points ---> allPoints list # copied on all processors. # Global pt index included # UNITS distance --> A [0.1 nm] # ############################################################################################# rad_avg = 15.0 # Moving to use this to make rad_sig = 0.025 # initial cubic grid thats used to pass to MD ptcl_dist = 10.0 # # NOTE: this is an arbitrary choice cutoff_dist = math.sqrt(2)*((2.00 * rad_avg) + ptcl_dist) nQD_spacing = (2.00 * rad_avg) + ptcl_dist # Makes number of points along side grid nQDs = [5, 5, 5] sysLs = setSystemSizes(nQDs, nQD_spacing) # Set boundary condition list (used in PBC calc) xL = sysLs[0] yL = sysLs[1] zL = sysLs[2] bcLs = [0.0, yL[1]-yL[0], zL[1]-zL[0] ] # x is NOT PB # Status info if rank == 0: print "rad_avg = ", rad_avg print "rad_sig = ", rad_sig print "cutoff_dist = ", cutoff_dist print " " print "bcLs = ", bcLs print "sysLs = ", sysLs print " " ############################################################################################# # Generate initial points p.barrier() tmpPoints = setRandomGridPoints(nQDs, rad_avg, ptcl_dist) # Generate global pts lst allPoints = p.bcast(tmpPoints) # ensures rand pts same across procs numpoints = len(allPoints) # Total number of points (for diag) if numpoints == 0: print "Number of points generated == 0" sys.exit(3) myPoints = p.splitListOnProcs(allPoints) # Split elements on across processors p.barrier() ############################################################################################# ################################################################### # Store particles in struc and find neighbors/bonds # ptPos includes index eg. [1, 3.4, 1.2, -2.0] nanoPtcls = ParticleContainer() nanoBonds = BondContainer() for ptPos in allPoints: axisLoc = [bcLs[1]/2.0, bcLs[2]/2.0] cylinderRadius = 120.0 inside = isPtInCylinder(ptPos[1:], axisLoc, "yz", cylinderRadius) if inside: pt = Particle(ptPos[1:], type="QDbig", mass=2.0) tagsD = {"molnum":1, "QDSizeAvg":20.0} else: pt = Particle(ptPos[1:], type="QDsmall", mass=1.0) tagsD = {"molnum":1, "QDSizeAvg":15.0} pt.setTagsDict(tagsD) nanoPtcls.put(pt) p.barrier() # Get bond info allDist, allNeighbors, numTotalNeighbors, allBonds = \ setQDNeighbors(myPoints, allPoints, cutoff_dist, bcLs, rank, size) if rank == 0: print "Begin building bond container" # Put bonds into container for bond in allBonds: if not nanoBonds.hasBond(bond): # Check if bond is unique bnd = Bond(bond[0], bond[1], type="normBond") # Put into STREAMM object nanoBonds.put(bnd) # add if not in container p.barrier() if rank == 0: print "length of bond container = ", len(nanoBonds) ############################################################################### ############################################################################ # Write LAMMPS file with atoms/bonds strucQD = StructureContainer(nanoPtcls, nanoBonds) simObjQD = SimulationLAMMPS1("LammpsAug14", verbose=False) simObjQD.setStructureContainer(strucQD) if isinstance(simObjQD, SimulationLAMMPS1): print "strucQD is a SimulationLAMMPS1" else: print "strucQD is NOT a SimulationLAMMPS1" boxSizes = sysLs strucQD.setBoxLengths(boxSizes) small_rad_avg = 15.0 big_bond_min = (2.0* rad_avg) + ptcl_dist small_sigma_min = ((2.0*small_rad_avg) + ptcl_dist) / pow(2, 1/6.) big_sigma_min = ((2.0* rad_avg) + ptcl_dist) / pow(2, 1/6.) ptclParamMap = {("QDsmall", "epsilon"):1.0, ("QDsmall", "sigma"):small_sigma_min, ("QDbig", "epsilon"):1.0, ("QDbig", "sigma"):big_sigma_min} # Just one bond type for now bondParamMap = {("normBond", "Kenergy"):1.0, ("normBond", "r0"):big_bond_min} if rank == 0: # nanoPtcls.scatterPlot() # strucQD.dumpLammpsInputFile("qd.data", ptclParamMap, bondParamMap) # strucQD.writeInput("qd.data", ptclParamMap, bondParamMap) # simObjQD.writeInput("qd.data", ptclParamMap, bondParamMap) simObjQD.setCoeffs(ptclParamMap, bondParamMap) simObjQD.writeInput("qd.data") # For format of test check os.system("cat qd.data")