def run0(): # Switch to data directory print(os.getcwd()) data_dir = 'data' if not os.path.exists(data_dir): os.makedirs(data_dir) os.chdir(data_dir) print(os.getcwd()) print(dir(md)) # set delta t for time evolution dt = 0.002 # number of cell ucells = 2 # size of particles sigma = 1 # total number of elastormes 4, in this case N = ucells*ucells # set the density and packing fraction, will be modified later # density dens = 0.1 # packing fraction nu = 0.5 # size of the box L = math.sqrt(N / dens) print(L) # temperature and initial average velocity T = 2.0 v0 = math.sqrt(2.0 * T ) # potetial parameters eps=np.array([1.0]) rc = sigma*math.pow(2,1.0/6.0) rcut=np.array([rc]) shift=np.array([1.0]) # young's modulus E=200 # set the box size and initialize the system box = np.array([L,L]) md.system_init(box) # The elastomers and structure as a mesh with nodes and cells (triangle) # you can read the nodes and triangles from a file or you can # use the function mdmesh to produce the shape, in this example we # use mdmesh, it returs the nodes and cells as an array of vector positions and # another array of index of vertices for triangles, the .3 controls how # fine we want the mesh, lower numbers will give you more triangles # in this case the mesh is a disk of diameter 1 #nodes = np.loadtxt("diskR1Vertices1.txt"); #cells = np.loadtxt("diskR1Triangles1.txt") - 1; nodes, cells = mdmesh.uniform_mesh_on_unit_circle(.3) # Now that we have the basic mesh for one elastomer we will replicate it 4 times # in the box, we will also rescale the size of of the box and meshes so that ieach # vertices contains a particle of diameter 1. Refore to function in add cluster # to see how it is done L,R = fm.add_clusters(md,nodes,cells,1.0,ucells,nu,'sc') # get the new size of the box box = md.system_get_box() print("box",box) # set boundary conditions, 0 for hard walls in all directions md.system_set_boundary_conditions(0) # set initial velocities md.system_set_velocities(v0) # substract center of mass md.system_set_zero_center_of_mass_vel() # set delta t for the sytem md.system_set_dt(dt) # set average steps md.system_set_avg_steps(100) # set the potential, interaction between particles md.system_set_potential(eps,rcut,shift) # set the youngs modulus for elactic interaction md.system_set_youngs_modulus(E) # if we wnat to initially swell the particles , uncomment this line #md.system_set_swelling_energy_constants(100,50,0) # if we want to get rid of thermal fluctiation, uncomment this line #md.system_set_friction(.1) #if we want to simulate a system with spring interactions instead, we use # the line below, but we would need to set k, and set E = 0 #md.system_set_bond_spring_constant(k) # initialize neighbor list md.system_init_neighbor_list() # get pointers to positions, velocities and unfolded positions # also get a pointer ot the array of triangles pos = md.system_get_positions() vel = md.system_get_velocities() upos = md.system_get_unfolded_positions() tet = md.system_get_tetras() # get pointers to arrays fo initial area (refVol), and # current area, (currVol) of triangles # also, array with the invariants of the triangles refVol, currVol = md.system_get_elements_volumes() I1,I2 = md.system_get_elements_invariants() print("Volume check: ",refVol.shape[0], currVol.shape[0], np.sum(refVol), np.sum(currVol)) #pdb.set_trace() # we rescale the particles at the vertices sigmas = md.system_get_particle_sizes() sigmas *= sigma R = R - 0.5 + sigma/2 #if we want to save the configuration, we can use the formats below #xyzfile = fm.Saver(0,"test_test",pos) #vtkfile = fm.Saver(1,"test_test",upos,vel=vel,cells=tet) #vtffile = fm.Saver(2,"test_test",upos,bonds=bonds,box=[box[0],box[1]]) #vtffile.append(0) # lets create a plot for animation plot = Plotter.Plotter(pos,vel,tet,box[0],box[1],'tri',I1,sigma) # 2 is the radius plot.update(0) # run the simulation for i in range(1000): md.system_run(100); avgs = md.system_get_avgs() print(avgs) #xyzfile.append(avgs[0]) #vtkfile.append(avgs[0]) #vtffile.append(avgs[0]) #md.system_unfold_positions() if i % 1 == 0: plot.update(avgs[0]) print("finished") plt.show()
def run2(): print(os.getcwd()) os.chdir('data') print(os.getcwd()) print(dir(md)) dt = 0.002 ucells = 2 sigma = 1 N = ucells * ucells dens = 0.1 nu = 0.5 L = math.sqrt(N / dens) print(L) T = 2.0 v0 = math.sqrt(2.0 * T) eps = np.array([1.0]) rc = sigma * math.pow(2, 1.0 / 6.0) rcut = np.array([rc]) shift = np.array([1.0]) E = 200 k = 50 pdb.set_trace() box = np.array([L, L]) md.system_init(box) #nodes = np.loadtxt("diskR1Vertices1.txt"); #cells = np.loadtxt("diskR1Triangles1.txt") - 1; nodes, cells = mdmesh.uniform_mesh_on_unit_circle(.3) L, R = fm.add_clusters(md, nodes, cells, 1.0, ucells, nu, 'sc') box = md.system_get_box() print("box", box) md.system_set_boundary_conditions(0) md.system_set_velocities(v0) md.system_set_zero_center_of_mass_vel() md.system_set_dt(dt) md.system_set_avg_steps(100) md.system_set_potential(eps, rcut, shift) md.system_set_youngs_modulus(E) #md.system_set_swelling_energy_constants(100,50,0) #md.system_set_friction(.1) #md.system_set_bond_spring_constant(k) md.system_init_neighbor_list() pos = md.system_get_positions() vel = md.system_get_velocities() upos = md.system_get_unfolded_positions() tet = md.system_get_tetras() bonds = md.system_get_bonds() #plt.scatter(pos[:,0],pos[:,1]) #plt.show() #plt.triplot(pos[:,0], pos[:,1], tet, 'go-', lw=1.0) bonds = md.system_get_bonds() refVol, currVol = md.system_get_elements_volumes() I1, I2 = md.system_get_elements_invariants() print("Volume check: ", refVol.shape[0], currVol.shape[0], np.sum(refVol), np.sum(currVol)) pdb.set_trace() sigmas = md.system_get_particle_sizes() sigmas *= sigma R = R - 0.5 + sigma / 2 #xyzfile = fm.Saver(0,"test_test",pos) #vtkfile = fm.Saver(1,"test_test",upos,vel=vel,cells=tet) #vtffile = fm.Saver(2,"test_test",upos,bonds=bonds,box=[box[0],box[1]]) #vtffile.append(0); plot = Plotter.Plotter(pos, vel, tet, box[0], box[1], 'tri', I1, sigma) # 2 is the radius plot.update(0) #plt.show() for i in range(1000): md.system_run(100) avgs = md.system_get_avgs() print(avgs) #xyzfile.append(avgs[0]) #vtkfile.append(avgs[0]) #vtffile.append(avgs[0]) #md.system_unfold_positions() if i % 1 == 0: plot.update(avgs[0]) print("finished") plt.show()
def run1(): print(os.getcwd()) os.chdir('c:\\tmp\\test1') print(os.getcwd()) print(dir(md)) dt = 0.002 ucells = 2 sigma = 2 N = ucells * ucells dens = 0.2 #nu = 0.5 nu = 0.3 dens = nu / np.pi L = math.sqrt(N / dens) print(L) T = 1 #v0 = math.sqrt(2.0 * T * (1.0-1.0/N)) v0 = math.sqrt(2.0 * T) eps = np.array([1.0]) rc = sigma * math.pow(2, 1.0 / 6.0) rcut = np.array([rc]) shift = np.array([1.0]) E = 200 k = 200 pdb.set_trace() box = np.array([L, L]) md.system_init(box) #nodes = np.loadtxt("diskR1Vertices1.txt"); #cells = np.loadtxt("diskR1Triangles1.txt") - 1; nodes, cells = mdmesh.uniform_mesh_on_unit_circle(.15) #L,R = fm.add_clusters(md,nodes,cells,1.0,ucells,nu,'sc1') L, R = fm.add_binary_clusters(md, nodes, cells, 1.0, 1.0, .15, ucells, nu, 'sc') box = md.system_get_box() md.system_set_boundary_conditions(0) md.system_set_moving_walls(0) md.system_set_velocities(v0) md.system_set_zero_center_of_mass_vel() md.system_set_dt(dt) md.system_set_avg_steps(100) md.system_set_potential(eps, rcut, shift) md.system_set_youngs_modulus(E) #md.system_set_swelling_energy_constants(100,250,0.0) md.system_set_friction(.1) #md.system_set_bond_spring_constant(k) md.system_init_neighbor_list() pos = md.system_get_positions() vel = md.system_get_velocities() upos = md.system_get_unfolded_positions() tet = md.system_get_tetras() #plt.scatter(pos[:,0],pos[:,1]) #plt.show() #plt.triplot(pos[:,0], pos[:,1], tet, 'go-', lw=1.0) bonds = md.system_get_bonds() refVol, currVol = md.system_get_elements_volumes() I1, I2 = md.system_get_elements_invariants() print("Volume check: ", refVol.shape[0], currVol.shape[0], np.sum(refVol), np.sum(currVol)) sigmas = md.system_get_particle_sizes() sigmas *= sigma R = R - 0.5 + sigma / 2 n1 = 0.79 L1 = np.sqrt(ucells**2 * np.pi * R**2 / n1) nf = 0.95 Lf = np.sqrt(ucells**2 * np.pi * R**2 / nf) print(L, Lf, R) pdb.set_trace() #xyzfile = fm.Saver(0,"test_test",pos) vtkfile = fm.Saver(1, "test_test", pos, vel=vel, cells=tet, I2=I2) #vtffile = fm.Saver(2,"test_test",upos,bonds=bonds,box=[Lx,Lx]) vtkfile.append(0) walls = md.system_get_walls_pos() print("walls", walls) walls = [walls[0][0], walls[1][0], walls[0][1], walls[1][1]] print("walls", walls) plot = Plotter.Plotter(pos, vel, tet, box[0], box[1], 'tripts1', I1, sigma) # 2 is the radius plot.update(0, walls, "") #plt.show() r = Lf / 800 r00 = np.array([1.01 * r, r]) r10 = np.array([-1.01 * r, r]) r0 = np.array([r, r]) r1 = np.array([-r, -r]) r02 = np.array([-r, r]) r12 = np.array([r, -r]) r_stop = np.array([0, 0]) data = [] totRefVol = np.sum(refVol) totCurrVol = np.sum(currVol) md.system_set_moving_walls(0) md.system_set_walls_moving_rate(r0, r1) pdb.set_trace() shear = 0 Ws = 0 for Ws in np.arange(0, 0, 100): md.system_run(100) avgs = md.system_get_avgs() print("\nstep %d" % avgs[0]) print(avgs) title = "steps = %d" % (avgs[0]) #if Ws % 10 == 0: #Ws += 10 md.system_set_swelling_energy_constants(100, Ws, 0.0) plot.update(avgs[0], walls, title) #vtkfile.append(avgs[0]) md.system_set_friction(1) md.system_set_moving_walls(1) md.system_set_walls_moving_rate(r0, r1) for i in range(10000): md.system_run(100) avgs = md.system_get_avgs() walls = md.system_get_walls_pos() walls = [walls[0][0], walls[1][0], walls[0][1], walls[1][1]] print("\nstep %d" % avgs[0]) print("walls", walls) Lx = walls[1] - walls[0] Ly = walls[3] - walls[2] print("Box Vol = ", Lx * Ly) if i == 20: md.system_set_walls_moving_rate(r00, r10) if Ly / Lx > 1.1 and shear == 0: md.system_set_walls_moving_rate(r0, r1) if totCurrVol / totRefVol < 1.5 and i > 20: shear = 1 if shear == 1: c = Lx / Ly r02 = np.array([-c * r, r]) r12 = np.array([c * r, -r]) md.system_set_walls_moving_rate(r02, r12) #md.system_set_walls_shear(1) if Lx > L: md.system_set_walls_moving_rate(r_stop, r_stop) md.system_unfold_positions() #xyzfile.append(avgs[0]) vtkfile.append(avgs[0]) #vtffile.append(avgs[0]) #if i % 1 == 0: print(avgs) wf = md.system_get_walls_forces() #return Py_BuildValue("((dd)(dd))", f[0][0], f[0][1], f[1][0], f[1][1]); wf = [wf[0][0], wf[0][1], wf[1][0], wf[1][1]] print("force on walls :", wf) totCurrVol = np.sum(currVol) data.append([ dt * avgs[0], wf[0], wf[1], wf[2], wf[3], totCurrVol / totRefVol, avgs[5] ]) print("Volumes: ", totRefVol, totCurrVol, totCurrVol / totRefVol * 100) print("I1 max", I1.max()) title = "steps = %d Lini = %f Lx = %f Ly = %f nu = %f V/Vref= %f" % ( avgs[0], L, Lx, Ly, ucells**2 * np.pi * R**2 / (Lx * Ly), totCurrVol / totRefVol) if i % 10 == 0: plot.update(avgs[0], walls, title) wf = np.array(data) np.savetxt("data.dat", wf) vtkfile.append(avgs[0]) wf = np.array(data) np.savetxt("data.dat", wf) print("finished") plt.show()