← Back to team overview

yade-users team mailing list archive

[Question #696243]: Rotate cylinder

 

New question #696243 on Yade:
https://answers.launchpad.net/yade/+question/696243

Hi,

I want rotate this half cylinder 90 degrees in y-axis:

#Cylinderpunch
cyl1 =geom.facetCylinder((0,-0.15,0),8*Diameter,0.07,Quaternion((0,0,1),.5*pi),24,wallMask=4)
cyl1 = [f for f in cyl1 if f.state.pos[0] < 0] # "half-cylinder"
cyl1=O.bodies.append(cyl1)

for j in cyl1:
     body= O.bodies[j]
     body.state.rot=(0,90,0)

I tried this, but it did not move my cylinder.

Here is my code:

#!/usr/bin/env python
#encoding: ascii

# Testing of the Deformation Enginge with Luding Contact Law
# Modified Oedometric Test

from yade import utils, plot, timing
from yade import pack
import pandas as pd

o = Omega()

# Physical parameters
fr        = 0.52
rho       = 1050 #kg/m3
Diameter  = 0.0079 #79 micrometer
r1        = Diameter
r2        = Diameter
k1        = 126000.0
kp        = 12.0*k1
kc        = k1 * 0.1
ks        = k1 * 0.1
DeltaPMax = Diameter/3.0
Chi1      = 0.34

o.dt = 1.0e-5

particleMass = 4.0/3.0*math.pi*r1*r1*r1*rho

Vi1 = math.sqrt(k1/particleMass)*DeltaPMax*Chi1
PhiF1=0.999
#PhiF1 = DeltaPMax*(kp-k1)*(r1+r2)/(kp*2*r1*r2)

#*************************************

# Add material
mat1 = O.materials.append(LudingMat(frictionAngle=fr, density=rho, k1=k1, kp=kp, ks=ks, kc=kc, PhiF=PhiF1, G0 = 0.0))


# Spheres for compression
# Spheres for compression

sp=pack.SpherePack()
sp.makeCloud((-9.5*Diameter,-9.5*Diameter,-35.0*Diameter),(9.5*Diameter,9.5*Diameter,15.0*Diameter), rMean=Diameter/2.0)


#Cylinder cloud sphere pack
cyl = pack.inCylinder((0,0,0),(0,0,20*Diameter),8*Diameter-0.006)
sp = pack.filterSpherePack(cyl,sp,True,material=mat1)
sp.toSimulation(material=mat1)



##No of particles
count = 0
for b in O.bodies:
    if isinstance(b.shape, Sphere):
        count +=1
##Mass of particles
n_p=count


######################################################################
walls=O.bodies.append(yade.geom.facetCylinder((0,0,0),radius=8*Diameter,height=0.066,segmentsNumber=20,wallMask=6,material=mat1))
#height=0.067
##Top punch##
#find max Z coordinate of your cloud
max_z = aabbExtrema()[1][2]
min_z = aabbExtrema()[0][2]

#Top_punch=O.bodies.append(wall((0,0,max_z), axis=2, sense=-1, material=mat1))
#O.bodies[Top_punch].state.vel = (0, 0, -0.01) 


#Cylinderpunch
cyl1 =geom.facetCylinder((0,-0.15,0),8*Diameter,0.07,Quaternion((0,0,1),.5*pi),24,wallMask=4)
cyl1 = [f for f in cyl1 if f.state.pos[0] < 0] # "half-cylinder"
cyl1=O.bodies.append(cyl1)

for j in cyl1:
 body= O.bodies[j]
 body.state.rot=(0,180,0)


for i in cyl1:
 body= O.bodies[i]
 body.state.vel = (0,1,0)

df = pd.DataFrame(columns=['time','Porosity','Maxoverlap','Stress'])
df.to_csv('PH101_Gao_speed_5.csv')
from csv import writer
def append_list_as_row(file_name, list_of_elem):
    # Open file in append mode
    with open(file_name, 'a+', newline='') as write_obj:
        # Create a writer object from csv module
        csv_writer = writer(write_obj)
        # Add contents of list as last row in the csv file
        csv_writer.writerow(list_of_elem)


# Add engines
o.engines = [
  ForceResetter(),
  InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=1.05),
                         Bo1_Wall_Aabb(),
                         Bo1_Facet_Aabb()
                         ]),
  InteractionLoop(
    [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=1.05),
     Ig2_Facet_Sphere_ScGeom(),
     Ig2_Wall_Sphere_ScGeom()],
    [Ip2_LudingMat_LudingMat_LudingPhys()],
    [Law2_ScGeom_LudingPhys_Basic()]
  ),
  NewtonIntegrator(damping=0.1, gravity=[0, 0, -9.81]),
  #VTKRecorder(fileName='vtk-',recorders=['all'],iterPeriod=10000),
  #PyRunner(command='checkForce()', realPeriod=1, label="fCheck"),
  #PyRunner(command='print(voxelPorosity(resolution=600,start=aabbExtrema()[0],end=aabbExtrema()[1]))', realPeriod=15),
  PyRunner(command='checkdata()', realPeriod=3),
  PyRunner(command='checkForce()', realPeriod=1, label="fCheck"),
  DeformControl(label="DefControl")
]


def checkdata():
	if O.iter < 20000:
		return
	else:
		time=o.realtime
		porosity=voxelPorosity(resolution=600,start=aabbExtrema()[0],end=aabbExtrema()[1])
		Maxoverlap=utils.maxOverlapRatio()
		stress=getStress().trace()/3.
		row_contents = [time,time,porosity,Maxoverlap,stress]
		append_list_as_row('PH101_Gao_speed_5.csv', row_contents)


def checkForce():
    # at the very start, unbalanced force can be low as there is only few
    # contacts, but it does not mean the packing is stable
    if O.iter < 20000:
        return
    # the rest will be run only if unbalanced is < .1 (stabilized packing)
    timing.reset()
    if unbalancedForce() > 0.2:
        return
    # add plate at upper box side

    highSphere = 0.0
    for b in O.bodies:
        if highSphere < b.state.pos[2] and isinstance(b.shape, Sphere):
            highSphere = b.state.pos[2]
        else:
            pass

    O.bodies.append(wall(highSphere+0.5*Diameter, axis=2, sense=-1, material=mat1))
    # without this line, the plate variable would only exist inside this
    # function
    global plate
    plate = O.bodies[-1]  # the last particles is the plate
    # Wall objects are "fixed" by default, i.e. not subject to forces
    # prescribing a velocity will therefore make it move at constant velocity
    # (downwards)
    plate.state.vel = (0, 0, -0.01)
    






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