← Back to team overview

yade-users team mailing list archive

Re: [Question #695558]: Dynamics of pfacet object does not appear to be correct

 

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

Rohit John gave more information on the question:
Dear Klaus Thoeni,

I was playing around with the pfacet and I found a discrepancy in mass
of the nodes in a pfacet. I calculated the mass of the nodes using the
pfacet radius, the density of the material. The mass observed
(O.bodies[id].state.mass) and mass I calculated is not equal. Moreover,
changing the size of the pfacet changed the mass and the mass is not
equally distributed to the nodes. [1] says that "The mass of the PFacet
is equally lumped into the 3 nodes." so I thought the mass should be
equal for all nodes.

[1]  Effeindzourou, A., Thoeni, K., Chareyre, B., & Giacomini, A.
(2015). A general method for modelling deformable structures in DEM.
Proceedings of the 4th International Conference on Particle-Based
Methods - Fundamentals and Applications, PARTICLES 2015, October 2018,
744–754.

Kind regards,
Rohit John

Please find the code for this 
# -----------------------------------------------------------------------------------------------------------
# encoding: utf-8
from yade import qt
from yade.gridpfacet import *


###########################
#####   ENGINES       #####
###########################

O.engines=[
	ForceResetter(),
	InsertionSortCollider([
		Bo1_Sphere_Aabb(),
		Bo1_Wall_Aabb(),
		Bo1_PFacet_Aabb(),
	],sortThenCollide=True),
	InteractionLoop(
	[
        Ig2_GridNode_GridNode_GridNodeGeom6D(),
		Ig2_Sphere_PFacet_ScGridCoGeom(),
		Ig2_Wall_PFacet_ScGeom(),
        Ig2_Wall_Sphere_ScGeom()
	],
	[
        Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=False),
		Ip2_FrictMat_FrictMat_FrictPhys()],
	[
        Law2_ScGeom6D_CohFrictPhys_CohesionMoment(),
		Law2_ScGeom_FrictPhys_CundallStrack(),
		Law2_ScGridCoGeom_FrictPhys_CundallStrack(),
		Law2_GridCoGridCoGeom_FrictPhys_CundallStrack()
	]),
    GlobalStiffnessTimeStepper(timestepSafetyCoefficient=0.8,label='ts'), 
	NewtonIntegrator(gravity=(0,-9.81,0),damping=0.1,label='newton')
]

young   = 1e9
density = 1e3
poisson = 0.3
friction= 30

O.materials.append(
    CohFrictMat(
        young=young,
        poisson=poisson,
        density=density,
        frictionAngle=radians(friction),
        normalCohesion=3e7,
        shearCohesion=3e7,
        momentRotationLaw=True,
        label='gridNodeMat'
        ))
O.materials.append(
    FrictMat(
        young=young,
        poisson=poisson,
        density=density,
        frictionAngle=radians(friction),
        label='gridConnectionMat'
        ))


###################################
#####   PFacet creators       #####
###################################

fixed = False
color=[255./255.,102./255.,0./255.]

nodesIds = []
cylIds   = []
pfIds    = []

#position of the node in the middle
r = 0.05

## Option 2: pfacetCreator1(vertices) -> based on 3 vertices
scale = 2

v1=Vector3(2,   0, 0) * scale
v2=Vector3(3,   0, 0) * scale
v3=Vector3(2.5, 2, 0) * scale
vertices=[v1,v2,v3]

pfacetCreator1(
    vertices,
    r,
    nodesIds=nodesIds,
    cylIds=cylIds,
    pfIds=pfIds,
    wire=False,
    color=color,
    fixed=fixed,
    materialNodes='gridNodeMat',
    material='gridConnectionMat')

print('Mass of node 0: ', O.bodies[nodesIds[0]].state.mass)
print('Mass of node 1: ', O.bodies[nodesIds[1]].state.mass)
print('Mass of node 2: ', O.bodies[nodesIds[2]].state.mass)
print('Calculated Mass: ', 4.0/3.0 * pi * r**3 * density)
#####################
#####   Wall      ###
#####################

O.bodies.append(utils.wall(position=-1,sense=0,
axis=1,color=Vector3(1,0,0),material='gridConnectionMat'))


qt.View()
O.saveTmp()

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