← Back to team overview

yade-users team mailing list archive

[Question #698635]: Clump inertia and orientation

 

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

Hi,

while seeking for solution to Rohit John's problem [1], I got confused by inertia and orientation of clumps. I have found a discussion [2] explaining that:
> inertia is defined in the space of principal axes
> The orientation is internally stored as a quaternion

I modified John's code [1] where he uses eccentricAxisEngine() to pin one of the clumps spheres to create a clump pendulum. The weird thing is that behavior of this pendulum depends on its orientation. To visualize this problem I create two clumps. The first one is aligned along the y axis and oscillates in y-z plane. The second one is aligned along x axis and oscillates in x-z plane. 

Two observations are odd:
1) For both clumps inertia and orientation are the same. If I understand the convention properly, the orientations should be different ( Quaternion((0,1,0),0) in case of the first clump? )
2) The two pendulums have different periods of oscillations - the one that is x axis aligned move slower (T=3.4s) while the y axis aligned pendulum has period T=2.5s.

I think that may be a potential bug, but I would like to confirm this first.

Cheers,
Karol


[1] https://answers.launchpad.net/yade/+question/698572
[2] https://answers.launchpad.net/yade/+question/274324

# ------------------------------------------------------------------------------------------------------------------------------- YADE SCRIPT
from math import *
from yade import *
from yade import utils, geom
from yade import plot
# ---------------------------------------------------------------------------------- bodies
sph1 = sphere((0, 2, 0), radius=.5)
sph2 = sphere(center=(0, 0, 0), radius=.5)

sph3 = sphere((2, 5, 0), radius=.5)
sph4 = sphere(center=(0, 5, 0), radius=.5)

sph1_id = O.bodies.append(sph1)
sph2_id = O.bodies.append(sph2)

sph3_id = O.bodies.append(sph3)
sph4_id = O.bodies.append(sph4)

g = Vector3([0,0,-10])
stiffnes = 1e7

# ---------------------------------------------------------------- clumps
clump1_id = O.bodies.clump([sph1_id, sph2_id])
clump2_id = O.bodies.clump([sph3_id, sph4_id])
# ---------------------------------------------------------------------------------- engines
O.engines = [
        ForceResetter(),
        InsertionSortCollider([Bo1_Sphere_Aabb()]),
        InteractionLoop(
                [Ig2_Sphere_Sphere_ScGeom()], # collision geometry
                [Ip2_FrictMat_FrictMat_FrictPhys()], # collision "physics"
                [Law2_ScGeom_FrictPhys_CundallStrack()] # contact law -- apply forces
        ),
        PyRunner(command = "eccentricAxisEngine()", iterPeriod = 1),
        PyRunner(command = "addPlotData()", iterPeriod = 100),
        NewtonIntegrator(gravity=g, damping=0.0),
]

# ---------------------------------------------------------------------------------- additional engines
def eccentricAxisEngine():
    pos_01 = O.bodies[sph2_id].state.pos# anchor clump 1
    pos_02 = O.bodies[sph4_id].state.pos# anchor clump 2
    force1 = -stiffnes*pos_01
    force2 = -stiffnes*(pos_02-Vector3(0,5,0))
    O.forces.addF(id = sph2_id, f = force1)
    O.forces.addF(id = sph4_id, f = force2)
    

def addPlotData():
	h1 = O.bodies[sph1_id].state.pos[2]
	h2 = O.bodies[sph3_id].state.pos[2]
	
	plot.addData(t = O.time, m1_height = h1, m2_height = h2)
	
	
# ---------------------------------------------------------------------------------- sim setup
O.dt = .5e-2 * PWaveTimeStep()
#

plot.plots={'t':('m1_height','m2_height')}
plot.plot(subPlots =False)

### print information about clumps
print("*************** ORIENTATION OF CLUMP NO 1 ***************")
print(O.bodies[clump1_id].state.se3[1])
print("*************** ORIENTATION OF CLUMP NO 2 ***************")
print(O.bodies[clump2_id].state.se3[1])

print("*************** INERTIA OF CLUMP NO 1 ***************")
print(O.bodies[clump1_id].state.inertia)
print("*************** INERTIA OF CLUMP NO 2 ***************")
print(O.bodies[clump2_id].state.inertia)




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