← Back to team overview

yade-users team mailing list archive

Re: [Question #230139]: clumps generating randomly in 2D simulation

 

Question #230139 on Yade changed:
https://answers.launchpad.net/yade/+question/230139

    Status: Answered => Open

Fu zuoguang is still having a problem:
Dear Christian Jakob:
     Thanks a lot for your perfect suggestions last time. I have done some test following your 3 steps working and of course there are some questions in this in this process, which can be described as that:
    (1).Firstly, I wanna employ the "Pseudo Random Generation Method"(can be called PRGM here) to define the coordinates of the balance points of the clumps and the workflow is like this:
     1. Do mesh for the generation area. The generation area is set up as a rectangle and can be averagely divided into N copies on the X direction as well as N copies on the Y direction. So the number of all points in this generation area which can be picked out as the balance points of clumps is N*N.
     2. Determination of this points' coordinations. As you know, the generation area in YADE can be defined as "mn,mx=Vector3(,,),Vector3(,,)"(Z-direction can be assigned as the same value in my 2D simulation) and the balance points' coordinations can only sucessfully determined by this algorithm "(mx-mn)/N*random.randint(0,N)"
    (2).Secondly, generate only spheres with this points only for testing the feasibility of this method. All need to do is just only to input the number of shperes desired and,then make a "O.bodies.append". All the scripts for these first two steps working are as follow:

import random

i=int(input("i="))  # mesh numbers in one direction
N=int(input("N="))  # sphere numbers desired 

for i in range (1,i):
    mn,mx=Vector3(0,0,0),Vector3(0.07,0.07,0)
    p=(mx[0]-mn[0])/N*random.randint(0,N)
    q=(mx[1]-mn[1])/N*random.randint(0,N)
    O.bodies.append(sphere((p,q,0),radius=0.001))
      
    (3).There may be of course some overlaps occuring between the generated spheres and the next step working for me is nothing but detecting and removing the overlaps. But lack of experience in Python makes me only use the commands below:
    
    for b in O.bodies:
        if isinstance(b.shape,Sphere):
            if (abs(b.state.pos[0] - p) > radius):
                O.bodies.append(sphere((p,q,0),radius=radius))
            else:
                continue 

There must be some errors in this scripts for that YADE's core dumped without any error noticed.
What is wrong with it and how to correct it? Seeking your help!(all the scripts are that)

import random

i=int(input("i="))  # mesh numbers in one direction
N=int(input("N="))  # sphere numbers desired 
radius=0.001

for i in range (1,i):
    mn,mx=Vector3(0,0,0),Vector3(0.07,0.07,0)
    p=(mx[0]-mn[0])/N*random.randint(0,N)
    q=(mx[1]-mn[1])/N*random.randint(0,N)
    O.bodies.append(sphere((p,q,0),radius=radius))
    for b in O.bodies:
        if isinstance(b.shape,Sphere):
            if (abs(b.state.pos[0] - p) > radius):
                O.bodies.append(sphere((p,q,0),radius=radius))
            else:
                continue

-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.