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

    Status: Answered => Open

onyourself is still having a problem:
hi,

1)Is there a geom module that can be used to simulate fiber? it should be 
deformable(shear force need be applied on it) and look like a fiber(cylinder 
would be fine, i used facetcylinder before then i found it cant deform… )
2)the specimen should be cylinder shape. i wonder how specimens can be 
isotropically consolidated to pressures of 50 kPa, 100 kPa, 200 kPa and 300 
kPa. ususlly the pressures are applied by wall and i think that cylinder dont 
have side ?
3)i need to observe the stress–dilatancy relationship of specimen so the 
exteral surface should be deformable too,what kind of geom module/material 
should i use?

my script is below, it's totally a mess…

##########
from yade import pack

###############
#cubic generate 
###############

def randomOrientation():
   # from the source code of Quaternion::UnitRandom()
   # https://eigen.tuxfamily.org/dox-devel/Quaternion_8h_source.html
   from random import random as r
   u1 = r()
   u2 = r() * pi
   u3 = r() * pi
   a = sqrt(1 - u1)
   b = sqrt(u1)
   return Quaternion(a*sin(u2),a*cos(u2),b*sin(u3),b*cos(u3))

# create loose spherical packing using makeCloud
sp = yade.pack.SpherePack()
mi,ma = (0,0,0),(0.2,0.2,0.2)
nCyls,nSphs = 2350,50000
sp.makeCloud(mi,ma,rMean=0.006,num=nCyls) # makeCloud for cylinders
sp.makeCloud(mi,ma,rMean=0.0011,rRelFuzz=.0005,num=nSphs) # makeCloud for 
spheres
for i,(pos,radius) in enumerate(sp):
    if i < nSphs: 
      O.bodies.append(sphere(pos,radius)) 
      for i in O.bodies:
    #if i < nSphs:
        i.shape.color=(0,0.5,0.5)
    else:
      
O.bodies.append(geom.facetCylinder(center=pos,height=0.012,radius=0.0015,orientation=randomOrientation(),segmentsNumber=10,wallMask=7))
    
    #if i < nCyls: # add cylinder
     # 
O.bodies.append(geom.facetCylinder(center=pos,height=0.012,radius=0.0015,orientation=randomOrientation(),segmentsNumber=10,wallMask=7))
      #for i in O.bodies:
    #if i < nSphs:
       # i.shape.color=(0,0,1)
   # else: # add sphere
    #  O.bodies.append(sphere(pos,radius))    

##########
#predicate
##########

#pred = pack.inCylinder((0.04,0.04,0),(0.04,0.04,0.08),0.0391) # predicate for 
a cylinder
#for (pos,radius) in sp:
#       if pred(pos,radius): O.bodies.append(sphere(pos,radius))

################
#certain content
################

#spheres = [b for b in O.bodies if isisntance(b.shape,Sphere)]
#massSpheres = sum(b.state.mass for b in spheres)
#cylinders = [b for b in O.bodies if isisntance(b.shape,Cylinder)]
#massSCylinders = sum(b.state.mass for b in cylinders)

#x = massSCylinders/massSpheres
#for i,(pos,radius) in enumerate(sp):
 #   if x < 0.35: # 35%
   
#mass = 0.0
#for b in O.bodies:
# if cyl(b.state.pos): # b is inside cyl1
#    mass += b.state.mass


##########
############################
###   DEFINING ENGINES   ###
############################

O.materials.append(FrictMat(young=15e6,poisson=.4,frictionAngle=radians(30),density=2600,label='spheres'))
O.materials.append(FrictMat(young=15e6,poisson=.4,frictionAngle=0,density=0,label='frictionless'))

walls=aabbWalls(thickness=1e-10,material='frictionless')
wallIds=O.bodies.append(walls)

triax=TriaxialCompressionEngine(
        wall_bottom_id=wallIds[2],
        wall_top_id=wallIds[3],
        wall_left_id=wallIds[0],
        wall_right_id=wallIds[1],
        wall_back_id=wallIds[4],
        wall_front_id=wallIds[5],
        internalCompaction=False,
        sigmaIsoCompaction=-50e3,
        sigmaLateralConfinement=-50e3,
        max_vel=10,
        strainRate=0.01,
        label="triax"
)

O.engines=[
        ForceResetter(),
        InsertionSortCollider([
                Bo1_Sphere_Aabb(),
                Bo1_GridConnection_Aabb()]),
        InteractionLoop([
                Ig2_Sphere_Sphere_ScGeom(),
                Ig2_GridNode_GridNode_GridNodeGeom6D(),
                Ig2_GridConnection_GridConnection_GridCoGridCoGeom(),
        ],
        [
                
Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=False),
   # internal cylinder physics
                Ip2_FrictMat_FrictMat_FrictPhys()       # physics for external 
interactions, i.e., cylinder-cylinder interaction
        ],
        [       Law2_ScGeom_FrictPhys_CundallStrack(),
                Law2_ScGeom6D_CohFrictPhys_CohesionMoment(),    # contact law 
for "internal" cylinder forces
                Law2_GridCoGridCoGeom_FrictPhys_CundallStrack() # contact law 
for cylinder-cylinder interaction
        ]
        ),
        ## We will use the global stiffness of each body to determine an 
optimal timestep (see 
https://yade-dem.org/w/images/1/1b/Chareyre&Villard2005_licensed.pdf)
        
GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
        triax,
        #TriaxialStateRecorder(iterPeriod=100,file='WallStresses'),
        NewtonIntegrator(damping=.4)
]


Gl1_Sphere.stripes=1
#if nRead==0: yade.qt.Controller(), 
yade.qt.View()

#######################################
###   APPLYING CONFINING PRESSURE   ###
#######################################

#triax.goal1=triax.goal2=triax.goal3=-10000

#while 1:
 # O.run(10, True)
  #the global unbalanced force on dynamic bodies, thus excluding boundaries, 
which are not at equilibrium
  #unb=unbalancedForce()
  #print 'unbalanced force:',unb,' mean stress: ',triax.meanStress
  #if unb<stabilityThreshold and abs(-10000-triax.meanStress)/10000<0.001:
   # break

#O.save('confinedState'+key+'.yade.gz')
#print "###      Isotropic state saved      ###"

############

thanks
xxxe

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.

_______________________________________________
Mailing list: https://launchpad.net/~yade-users
Post to     : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to