Re: [Yade-users] [Question #707885]: Create arbitrary ellipsoid using level set

2023-09-15 Thread Ruidong LI
Question #707885 on Yade changed:
https://answers.launchpad.net/yade/+question/707885

Status: Answered => Solved

Ruidong LI confirmed that the question is solved:
Thank you, Karol. Your answer solved my problem.

-- 
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


[Yade-users] [Question #707885]: Create arbitrary ellipsoid using level set

2023-09-11 Thread Ruidong LI
New question #707885 on Yade:
https://answers.launchpad.net/yade/+question/707885

Hi! I'd like to ask how to set the 'orientation' keyword in the levelSetBody. 
It seems that we need to input a quaternion. But the problem is that what's the 
format of this input?Can someone help me with this? Many thanks.

Cheers,
Kyle

-- 
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


[Yade-users] [Question #707882]: Cylindrical triaxial test using walls

2023-09-10 Thread Ruidong LI
New question #707882 on Yade:
https://answers.launchpad.net/yade/+question/707882

Hi! I am going to model the interaction between the level-set body and walls. 
What I want to create is a cylindrical wall. But it seems that wall can not be 
used to create a cylindrical wall? I am not sure. Can someone help me with this?

Cheer,
Kyle

-- 
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


Re: [Yade-users] [Question #707875]: Servo control of cylindrical triaxial test

2023-09-10 Thread Ruidong LI
Question #707875 on Yade changed:
https://answers.launchpad.net/yade/+question/707875

Status: Answered => Solved

Ruidong LI confirmed that the question is solved:
Thank you so much, Karol. That solved my problem.

-- 
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


[Yade-users] [Question #707875]: Servo control of cylindrical triaxial test

2023-09-08 Thread Ruidong LI
New question #707875 on Yade:
https://answers.launchpad.net/yade/+question/707875

Hi! I want to simulate the cylindrical triaxial test but can't achieve the 
target confining pressure. Can someone help me with this?
The MWE is presented as below:
# import essential modules 
from __future__ import print_function
from yade import pack, ymport, qt, plot, geom
from yade.gridpfacet import *
import gts, os.path, locale, random, math
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')

###
###1. DEFINE VARIABLES AND MATERIALS###
###
# 1.1). define variables
young=550e6 # normal contact stiffness
compFricDegree = 1.8 # initial contact friction during the confining phase
finalFricDegree = 38 # contact friction during the deviatoric loading 
poisson = 0.3   # shear-to-normal stiffness ratio
width = 1.4e-1  # sample width
height = 2.8e-1 # target sample height(after consolidation) 
height_0 = 3.2e-1# initial sample height 
num_spheres=500  # number of spheres
R_p = 0.0084# mean particle radius
rCoff = 10  # thickness of top and bot sphere cap (based on rParticle) 
rParticle = 0.02e-1 # membrane grid seed size
alpha = 8
rate = 0.1  # loading rate (strain rate)
damp = 0.3  # damping coefficient 
targetPorosity = 0.43   # target porosity
thresholdvalue = 0.05# threshold unbalance force
final_rate = 0.1# strain rate for deviator loading 
thresholdstrain = 0.06   # threshold axial strain for terminate 
enlargefactor = 1.00
tszz = 5
tsrr = 5

# 1.2). create materials for sand spheres and plates 
Sand = 
O.materials.append(FrictMat(young=young,poisson=poisson,frictionAngle=radians(compFricDegree),density=2650,label='spheres'))

# 1.3). create membrane materials
GridMat = O.materials.append(CohFrictMat( 
young=100e6,poisson=0.3,density=2650,frictionAngle=radians(0), 
alphaKr=0,alphaKtw=0,etaRoll=0,etaTwist=0, 
normalCohesion=1e9,shearCohesion=1e9, 
momentRotationLaw=True,label='gridNodeMat'))
pFacetMat = O.materials.append(FrictMat( 
young=100e6,poisson=0.3,density=2650,frictionAngle=radians(0),label='pFacetMat'))

# 1.4). create TOP & BOT plate materials 
frictMat = 
O.materials.append(FrictMat(young=100e6,poisson=0.3,density=2650,frictionAngle=radians(0),label='frictMat'))

###
###   2. SAMPLE GENERATION  ###
###
# 2.1). generate random dense sphere pack
pred = pack.inCylinder((0,0,0),(0,0,height_0),.5*width) 
sp = 
pack.randomDensePack(pred,spheresInCell=num_spheres,radius=R_p,rRelFuzz=0.3, 
returnSpherePack=True,memoDbg=True,memoizeDb='/tmp/loosePackings11.sqlite')
sand=sp.toSimulation(color=(0,1,1),material=Sand)

# 2.2). create facet wall around particle packing 
facets = []
nw = 45
nh = 1
rCyl2 = 0.5*width / cos(pi/float(nw)) 
for r in range(nw):
for h in range(nh):
v1 = Vector3( rCyl2*cos(2*pi*(r+0)/float(nw)), 
rCyl2*sin(2*pi*(r+0)/float(nw)), height_0*(h+0)/float(nh) )
v2 = Vector3( rCyl2*cos(2*pi*(r+1)/float(nw)), 
rCyl2*sin(2*pi*(r+1)/float(nw)), height_0*(h+0)/float(nh) )
v3 = Vector3( rCyl2*cos(2*pi*(r+1)/float(nw)), 
rCyl2*sin(2*pi*(r+1)/float(nw)), height_0*(h+1)/float(nh) )
v4 = Vector3( rCyl2*cos(2*pi*(r+0)/float(nw)), 
rCyl2*sin(2*pi*(r+0)/float(nw)), height_0*(h+1)/float(nh) )
f1 = facet((v1,v2,v3),color=(0,0,1),material=frictMat) 
f2 = facet((v1,v3,v4),color=(0,0,1),material=frictMat) 
facets.extend((f1,f2))
wall = O.bodies.append(facets)
for b in wall:
O.bodies[b].state.blockedDOFs = 'xyzXYZ' 
O.bodies[b].state.vel = (0,0,0)

# 2.3). create bot facet plate 
facets3 = []
nw=45
rCyl2 = (0.75*width+2*rParticle) / cos(pi/float(nw))
for r in range(nw):
if r%2==0:
v1 = Vector3( rCyl2*cos(2*pi*(r+0)/float(nw)), 
rCyl2*sin(2*pi*(r+0)/float(nw)), 0 ) 
v2 = Vector3( rCyl2*cos(2*pi*(r+1)/float(nw)), 
rCyl2*sin(2*pi*(r+1)/float(nw)), 0 )
v3 = Vector3( rCyl2*cos(2*pi*(r+2)/float(nw)), 
rCyl2*sin(2*pi*(r+2)/float(nw)), 0 )
v4 = Vector3( 0, 0, 0 )
f1 = facet((v1,v2,v4),color=(0,0,0),material=frictMat) 
f2 = facet((v2,v3,v4),color=(0,0,0),material=frictMat) 
facets3.extend((f1,f2))
botcap = O.bodies.append(facets3)
bot_id = 0
for s in botcap:
bot_id = s

# 2.4). create top facet plate 
facets3 = []
nw=45
rCyl2 = (0.75*width+2*rParticle) / cos(pi/float(nw))
for r in range(nw):
if r%2==0:
v1 = Vector3( rCyl2*cos(2*pi*(r+0)/float(nw)), 
rCyl2*sin(2*pi*(r+0)/float(nw)), height_0 )
v2 = Vector3( rCyl2*cos(2*pi*(r+1)/float(nw)), 
rCyl2*sin(2*pi*(r+1)/float(nw)), 

[Yade-users] [Question #707870]: Interaction between sphere and facet with specific ID

2023-09-08 Thread Ruidong LI
New question #707870 on Yade:
https://answers.launchpad.net/yade/+question/707870

Hi! 

If I want to get interaction between the bottom plate and spheres, how can I 
achieve this? For example, if we focus on the gravity deposition code, can we 
know which interactions happened between spheres and bottom plates?
The code for gravity deposition is presented here: 
https://yade-dem.org/doc/tutorial-examples.html#gravity-deposition

Cheer,
Kyle

-- 
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


Re: [Yade-users] [Question #707390]: segmentation fault (PFacet)

2023-07-26 Thread Ruidong LI
Question #707390 on Yade changed:
https://answers.launchpad.net/yade/+question/707390

Description changed to:
Hi! I am trying to replicate the work using PFacet as the flexible
membrane for the cylindrical triaxial test. I don't why this code always
crashes (segmentation fault) at the stabilization stage. Can someone
help me with this issue? Many thanks.

The MWE is presented below:

-- 
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


Re: [Yade-users] [Question #707390]: segmentation fault (PFacet)

2023-07-26 Thread Ruidong LI
Question #707390 on Yade changed:
https://answers.launchpad.net/yade/+question/707390

Status: Open => Solved

Ruidong LI confirmed that the question is solved:
Thanks for your reply! Jan
Maybe I should test this code on another pc.

-- 
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


Re: [Yade-users] [Question #707390]: segmentation fault (PFacet)

2023-07-26 Thread Ruidong LI
Question #707390 on Yade changed:
https://answers.launchpad.net/yade/+question/707390

Status: Needs information => Open

Ruidong LI gave more information on the question:
Hi! Jan, Thanks for your reply.

- what is the "stabilization stage"?
> The "stabilization stage" refers to removing confining pressure for particles 
> to cycle. The corresponding code can be found from:
# E.c.7). stablize 
#**#

- what time / iterations should we expect it to crash
> Once the code was executed at the "stabilization stage", the program crashed.

- what version of Yade are you using?
> I used Yade 2022.01a in the Ubuntu 22.04 system.

-I have tested the script (Ubuntu 22.04, Yade 2022.01a) until "start triaxial 
simulation" without any problem.
> Does the "start triaxial simulation" means the beginning confining?

-well, M here means Minimal, which is at least doubtful for the provided code..
> Actually, this is the MWE. It is a whole code containing creating the sample, 
> generating the flexible membrane, applying confining pressure until the 
> target value, stabilization, and applying deviator loading.

-- 
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


[Yade-users] [Question #707390]: segmentation fault (PFacet)

2023-07-25 Thread Ruidong LI
New question #707390 on Yade:
https://answers.launchpad.net/yade/+question/707390

Hi! I am trying to replicate the work using PFacet as the flexible membrane for 
the cylindrical triaxial test. I don't why this code always crashes 
(segmentation fault) at the stabilization stage. Can someone help me with this 
issue? Many thanks.

The MWE is presented below:
# import essential modules 
from __future__ import print_function
from yade import pack, ymport, qt, plot, geom
from yade.gridpfacet import *
import gts, os.path, locale, random, math
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')

###
###1. DEFINE VARIABLES AND MATERIALS###
###

# 1.a). define variables
key = 'Triaxial_Undrained'  # file name to be saved 
young=550e6 # normal contact stiffness
compFricDegree = 1.8 # initial contact friction during the confining phase
finalFricDegree = 43 # contact friction during the deviatoric loading 
poisson = 0.3   # shear-to-normal stiffness ratio
isoStress = 11  # confining stress
conStress = 10   # confining stress for deviatoric loading stage 
width = 1.4e-1  # sample width
height = 2.8e-1 # target sample height(after consolidation) 
height_0 = 3.2e-1# initial sample height 
num_spheres=1000 # number of spheres
R_p = 0.0084# mean particle radius
rCoff = 10  # thickness of top and bot sphere cap (based on rParticle) 
rParticle = 0.02e-1 # membrane grid seed size
alpha = 8
rate = 0.1  # loading rate (strain rate)
damp = 0.3  # damping coefficient 
targetPorosity = 0.43   # target porosity 
thresholdvalue = 0.05# threshold unbalance force
final_rate = 0.1# strain rate for deviator loading 
thresholdstrain = 0.06   # threshold axial strain for terminate 
enlargefactor = 1.00

# A.b). create materials for sand spheres and plates 
Sand = O.materials.append(CohFrictMat(
young=young,poisson=poisson,frictionAngle=radians(compFricDegree), 
alphaKr=0.25,alphaKtw=0,etaRoll=0.005,etaTwist=0, 
normalCohesion=5e6,shearCohesion=5e6, 
momentRotationLaw=True,density=2650,label='spheres'
))

# A.c). create membrane materials
 
GridMat = O.materials.append(CohFrictMat( 
young=100e6,poisson=0.3,density=2650,frictionAngle=radians(0), 
alphaKr=0,alphaKtw=0,etaRoll=0,etaTwist=0, 
normalCohesion=1e9,shearCohesion=1e9, momentRotationLaw=True,label='gridNodeMat'
))
pFacetMat = O.materials.append(FrictMat( 
young=100e6,poisson=0.3,density=2650,frictionAngle=radians(0),label='pFacetMat'
))

# A.d). create TOP & BOT plate materials 
frictMat = O.materials.append(FrictMat(
young=100e6,poisson=0.3,density=2650,frictionAngle=radians(0),label='frictMat'
))

###
### 3. DEFINE GLOBAL ENGINES###
###

#**# 
O.engines=[
ForceResetter(), 
InsertionSortCollider([
Bo1_Sphere_Aabb(), 
Bo1_Facet_Aabb(), 
Bo1_PFacet_Aabb(), 
Bo1_GridConnection_Aabb()
]),
InteractionLoop(
[
Ig2_Sphere_Sphere_ScGeom6D(), 
Ig2_GridNode_GridNode_GridNodeGeom6D(), 
Ig2_GridConnection_GridConnection_GridCoGridCoGeom(), 
Ig2_Sphere_PFacet_ScGridCoGeom(), 
Ig2_Facet_Sphere_ScGeom6D()
], 
[
Ip2_FrictMat_FrictMat_FrictPhys(), 
Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(label="cohesiveIp")
],
[
Law2_ScGeom_FrictPhys_CundallStrack(), 

Law2_ScGeom6D_CohFrictPhys_CohesionMoment(useIncrementalForm=True,always_use_moment_law=False,label='cohesiveLaw'),
Law2_GridCoGridCoGeom_FrictPhys_CundallStrack(), 
Law2_ScGridCoGeom_FrictPhys_CundallStrack(),
],
label="iloop"
),

GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=25,timestepSafetyCoefficient=0.8),
NewtonIntegrator(gravity=(0,0,0),damping=0.1,label='newton')
]
#**# 
O.engines[2].lawDispatcher.functors[1].always_use_moment_law=False 
O.engines[2].physDispatcher.functors[1].setCohesionOnNewContacts=False

###
###2. IMPORT CT-BASED PACKING   ###
###
# C.a). generate random dense sphere pack
pred = pack.inCylinder((0,0,0),(0,0,height_0),.5*width) 
sp = 
pack.randomDensePack(pred,spheresInCell=num_spheres,radius=R_p,rRelFuzz=0.3, 
returnSpherePack=True,memoDbg=True,memoizeDb='/tmp/loosePackings11.sqlite')

Re: [Yade-users] [Question #707278]: Servo control of flexible membrane using ServoPIDController

2023-07-19 Thread Ruidong LI
Question #707278 on Yade changed:
https://answers.launchpad.net/yade/+question/707278

Status: Open => Solved

Ruidong LI confirmed that the question is solved:


-- 
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


Re: [Yade-users] [Question #707278]: Servo control of flexible membrane using ServoPIDController

2023-07-19 Thread Ruidong LI
Question #707278 on Yade changed:
https://answers.launchpad.net/yade/+question/707278

Ruidong LI gave more information on the question:
Thanks for your reply, Jan!

I'd also like to ask whether the function for calculating the stress on
the loading plate and confining stress is correct or not:

def addPlotData():
 # axial stress
 global wAz
 global wAc
 global x_cyl
 global y_cyl
 fwt = Vector3(0, 0, 0)
 for i in idTplate:
  fwt += O.forces.f(i)
 fwb = Vector3(0, 0, 0)
 for j in idBplate:
  fwb += O.forces.f(j)
 # cylindrical stress
 fcyl = 0
 for n in nodes:
  fnode = O.forces.f(n.id)
  x,y,z = n.state.pos
  dirV = Vector3(x-x_cyl,y-y_cyl,0).normalized()
  fnodeMagn = fnode.dot(dirV)
  fcyl += fnodeMagn
 plot.addData(z=O.iter, swt=fwt[2]/wAz, swb=fwb[2]/wAz, swc = fcyl/wAc)

Many thanks
Kyle

-- 
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


Re: [Yade-users] [Question #707278]: Servo control of flexible membrane using ServoPIDController

2023-07-19 Thread Ruidong LI
Question #707278 on Yade changed:
https://answers.launchpad.net/yade/+question/707278

Ruidong LI posted a new comment:
Thanks for your reply, Jan!

> probably it should be opposite, Vector3(x_cyl-x, y_cyl-y, 0) to point inside 
> the cylinder (not outside)?
Currently the membrane is stretched rather then compressed (tested with 
maxVelocity=100,iterPeriod=1)
> That's true. We have to reverse the direction vector.

>And maybe different parameters kP, kI, kD then default 1.0?
> Yes. But the difficulty is that it's hard to determine proper proportional 
> parameters for kP, kI,  and kD.

> I don't know, then the behavior is also strange, the membrane is pulled 
> inward once there is node-sphere interaction...
> Yes. I also encounter this problem. I try to reduce the maximum velocity of 
> servo control but still failed, only delaying the time of membrane 
> destruction.

Actually, the PFacet is demonstrated to be effective in modelling
flexible membranes successfully [1]. The problem is that there are some
critical parameters such as velocity are not mentioned in this paper,
which increases the difficulty for descendants to replicate the work.

[1] https://doi.org/10.1061/(ASCE)GM.1943-5622.000134

-- 
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


Re: [Yade-users] [Question #707278]: Servo control of flexible membrane using ServoPIDController

2023-07-18 Thread Ruidong LI
Question #707278 on Yade changed:
https://answers.launchpad.net/yade/+question/707278

Status: Answered => Open

Ruidong LI is still having a problem:
Thanks for your reply, Jan!

Your answer solved my problem. I rewrote the code for generating the
flexible membrane. Moreover, I used your suggested servo-control mode
for the top, bottom, and cylindrical walls. I tried to measure whether
the confining stress was reached or not. The result indicated that the
confining stress in the top and bottom direction reached the target
value while that in the cylindrical direction ly reached the half of
target value. I don't know where the problem is. The assignment of
cylindrical stress or measure?

The updated MWE is presented below:

from __future__ import print_function
from yade import pack, ymport, qt
import gts, os.path, locale, plot, random
import numpy as np
from yade.gridpfacet import *
import math

locale.setlocale(
locale.LC_ALL, 'en_US.UTF-8'
) #gts is locale-dependend. If, for example, german locale is used, 
gts.read()-function does not import floats normally


###  1   ###
### DEFINING VARIABLES AND MATERIALS ###


# The following lines are used parameter definitions
readParamsFromTable(

# material parameters
young_w = 5e9, # Young's modulus of plates and walls
young_g = 1.8e6, # Young's modulus of grains [1]
den_w = 7874, # density of plates and walls
den_g = 980, # density of grains
poi_w = 0.3, # possion's ratio of plates and walls
poi_g = 0.25, # possion's ratio of grains
friAngle_w = 0.5,#radians(15), # friction angle of plates and walls
friAngle_g = 0.5,#radians(29), # friction angle of grains

# Parameters of cylindrical walls
x_cyl = 0.0547, # x-coordinate of center of cylindrical walls
y_cyl = 0.0535, # y-coordinate of center of cylindrical walls
z_cyl = 0, # z-coordinate of center of cylindrical walls
r_cyl = 0.0358, # radius of the cylinder
h_cyl = 0.14, # height of the cylinder

)
from yade.params.table import *

# create materials for spheres and walls
wallMat = O.materials.append(FrictMat(young = young_w, poisson = poi_w, 
frictionAngle = friAngle_w, density = den_w, label = 'walls'))
sphereMat = O.materials.append(FrictMat(young = young_g, poisson = poi_g, 
frictionAngle = friAngle_g, density = den_g, label = 'spheres'))

###
###2###
###   IMPORTING GRAINS AND CREATING CLUMPS  ###
###

# spheres
pred = pack.inCylinder((x_cyl, y_cyl, z_cyl), (x_cyl, y_cyl, h_cyl), r_cyl)
sp = SpherePack()
sp = pack.randomDensePack(pred, spheresInCell=2000, radius=0.005, 
returnSpherePack=True)
spheres = sp.toSimulation(color=(0, 1, 1), material=sphereMat)

# assign unique color for each sphere
currentSphereId = O.bodies[0].id
color = randomColor()
for b in O.bodies:
if b.id != currentSphereId:#change color each time clumpId changes
currentSphereId = b.id
color = randomColor()
if isinstance(b.shape,Sphere):#colorize spheres
b.shape.color = color

# create top and bottom plates
h_cyl = max([b.state.pos[2] + b.shape.radius for b in O.bodies if 
isinstance(b.shape, Sphere)])
h0_cyl = min([b.state.pos[2] - b.shape.radius for b in O.bodies if 
isinstance(b.shape, Sphere)])
idTplate = 
O.bodies.append(yade.geom.facetCylinder((x_cyl,y_cyl,h_cyl),radius=r_cyl*1.2,material=wallMat,height=0,segmentsNumber=40,color=(1,1,1),wire=True))
idBplate = 
O.bodies.append(yade.geom.facetCylinder((x_cyl,y_cyl,h0_cyl),radius=r_cyl*1.2,material=wallMat,height=0,segmentsNumber=40,color=(1,1,1)))

#
###  3###
###   DEFINE ENGINES  ###
#

#target confining stress
confiningStress = 5e4
global wAz
wAz = pi * (1.2*r_cyl) * (1.2*r_cyl)
axialforce = confiningStress * wAz

# Define engine
O.engines = [
  ForceResetter(),
  InsertionSortCollider([Bo1_Sphere_Aabb(),
 Bo1_PFacet_Aabb(),
 Bo1_Facet_Aabb()],
 sortThenCollide=True),
  InteractionLoop(
   [
Ig2_GridNode_GridNode_GridNodeGeom6D(),
Ig2_GridConnection_GridConnection_GridCoGridCoGeom(),
Ig2_Sphere_Sphere_ScGeom6D(),
Ig2_Sphere_PFacet_ScGridCoGeom(),
Ig2_Facet_Sphere_ScGeom(),
   ],
   [
  
Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=True),
 Ip2_FrictMat_FrictMat_FrictPhys()
],
   [
  Law2_ScGeom6D_CohFrictPhys_CohesionMoment(),
 Law2_ScGeom_FrictPhys_CundallStrack(),
 Law2_ScGridCoGeom_FrictPhys_CundallStrack(),
 Law2_GridCoGridCoGeom_FrictPhys_CundallStrack(),
   ]
  ),
  NewtonIntegrator(gravity=(0,0,0),damping=0.7,label='newton'),
  ServoPIDController(axis=[0, 0, 1], maxVelocity=10, iterPeriod=

Re: [Yade-users] [Question #707278]: Servo control of flexible membrane using ServoPIDController

2023-07-14 Thread Ruidong LI
Question #707278 on Yade changed:
https://answers.launchpad.net/yade/+question/707278

Status: Answered => Open

Ruidong LI is still having a problem:
Hi! Jan

Thanks for your reply. Your answer is rigorous and helpful.

> area = 2* pi*r_cyl*h_cyl/len(nodes) # cylinder surface / number of
nodes ? The question mark in my comment is meant seriously. For regular
grid it is probably OK. Also consider that the "boundary" nodes (bottom
and top) maybe should have half force then "inner" nodes?

Yes. That's a really critical problem that needed to be clarified. What 
confused me currently is that I found the number of nodes is not consistent 
with what I expected. For example, in the beginning, we defined the number of 
facets by the following code [1]:
nw=40 # number of facets along the perimeter
nh=25 # number of facets along the height
nodes = [b for b in O.bodies if isinstance(b.shape, GridNode)]
print(len(nodes))

If we print the number of nodes, we will get 8000 where my initial
suppose is 40*26 = 1040. That indicates that the ID of nodes forming
Pfacet are independent of each other. In other words, more than one node
can be created at the same position. So, I am wondering if maybe it is
correct to use ' confining Stress * cylinder surface / number of nodes'
to represent the average force applied on each node? We don't need to
classify the top and bottom nodes anymore as the force applied on nodes
is the same. It is identical to obtaining the node force by calculating
the force applied on each Pfacet and distributing it into three nodes.

[1] https://answers.launchpad.net/yade/+question/681410

-- 
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


Re: [Yade-users] [Question #707278]: Servo control of flexible membrane using ServoPIDController

2023-07-13 Thread Ruidong LI
Question #707278 on Yade changed:
https://answers.launchpad.net/yade/+question/707278

Status: Answered => Open

Ruidong LI is still having a problem:
Hi! Jan,

Thanks for your reply. It is really helpful. But I still have two
questions about this function:

1)  return 
ServoPIDController(ids=[node.id],axis=axis,iterPeriod=...,target=f,...)
for the 'axis' mentioned in PIDController, should it be defined individually 
for each node like this?

confiningStress=5e4
cen_x = x_cyl # x coordinate of the centre of the crosssection
cen_y = y_cyl # y coordinate of the centre of the crosssection
def node2servo(node):
x,y,z = node.state.pos
area = 2* pi*r_cyl*h_cyl/len(nodes) # cylinder surface / number of nodes ?
f = confiningStress * area
axis = vector(x-cen_x, y-cen_y, z)
return ServoPIDController(ids=[node.id],axis=axis,iterPeriod=100,target=f)

2) If I want to monitor the average stress on the flexible membrane,
what should I do? My idea is that iterate all nodes and sum up the force
in the direction of the connection line between the centre of the
crosssection and the node, and then divide it by the area of the
flexible membrane. If so, how to get the force in the direction of the
connection line between the centre of the crosssection and the node for
an individual node?

Cheer,
Kyle

-- 
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


[Yade-users] [Question #707278]: Servo control of flexible membrane using ServoPIDController

2023-07-13 Thread Ruidong LI
New question #707278 on Yade:
https://answers.launchpad.net/yade/+question/707278

Hi! I am trying to model a cylindrical triaxial test based on Pfacet and 
ServoPIDController. I would like to model a triaxial compression test with 
confining pressure equal to 50kPa. The bottom and top loading plates are 
created using the 'facet' element. The top one is assumed to move slowly in the 
vertical direction while the bottom one is fixed. The cylindrical walls are 
generated using 'Pfacet' elements. Referring to [1], I wrote the current MWE 
but don't know how to use the ServoPIDController to achieve servo control of 
the flexible membrane with confining pressure.

The MWE is presented below:

from __future__ import print_function
from yade import pack, ymport, qt
import gts, os.path, locale, plot, random
import numpy as np
from yade.gridpfacet import *
import math

locale.setlocale(
locale.LC_ALL, 'en_US.UTF-8'
)  #gts is locale-dependend.  If, for example, german locale is used, 
gts.read()-function does not import floats normally



###  1   ###
###   DEFINING VARIABLES AND MATERIALS   ###


# The following lines are used parameter definitions
readParamsFromTable(

# material parameters
young_w = 5e9, # Young's modulus of plates and walls
young_g = 1.8e6, # Young's modulus of grains [1]
den_w = 7874, # density of plates and walls
den_g = 980, # density of grains 
poi_w = 0.3, # possion's ratio of plates and walls
poi_g = 0.25, # possion's ratio of grains
friAngle_w = 0.5,#radians(15), # friction angle of plates and walls 
friAngle_g = 0.5,#radians(29), # friction angle of grains

# Parameters of cylindrical walls
x_cyl = 0.0547, # x-coordinate of center of cylindrical walls
y_cyl = 0.0535, # y-coordinate of center of cylindrical walls
z_cyl = 0, # z-coordinate of center of cylindrical walls
r_cyl = 0.0358, # radius of the cylinder
h_cyl = 0.14, # height of the cylinder

)
from yade.params.table import *

# create materials for spheres and walls
wallMat = O.materials.append(FrictMat(young = young_w, poisson = poi_w, 
frictionAngle = friAngle_w, density = den_w, label = 'walls'))
sphereMat = O.materials.append(FrictMat(young = young_g, poisson = poi_g, 
frictionAngle = friAngle_g, density = den_g, label = 'spheres'))

###
###2###
###   IMPORTING GRAINS AND CREATING CLUMPS  ###
###

# spheres
pred = pack.inCylinder((x_cyl, y_cyl, z_cyl), (x_cyl, y_cyl, h_cyl), r_cyl) 
sp = SpherePack()
sp = pack.randomDensePack(pred, spheresInCell=2000, radius=0.005, 
returnSpherePack=True)
spheres = sp.toSimulation(color=(0, 1, 1), material=sphereMat)

# assign unique color for each sphere
currentSphereId = O.bodies[0].id
color = randomColor()
for b in O.bodies:
if b.id != currentSphereId:#change color each time clumpId changes
currentSphereId = b.id
color = randomColor()
if isinstance(b.shape,Sphere):#colorize spheres
b.shape.color = color

# create top and bottom plates
h_cyl = max([b.state.pos[2] + b.shape.radius for b in O.bodies if 
isinstance(b.shape, Sphere)])
top_plate = 
O.bodies.append(yade.geom.facetCylinder((x_cyl,y_cyl,h_cyl),radius=r_cyl*1.2,material=wallMat,height=0,segmentsNumber=10,color=(1,1,1),wire=True))
bottom_plate = 
O.bodies.append(yade.geom.facetCylinder((x_cyl,y_cyl,0),radius=r_cyl*1.2,material=wallMat,height=0,segmentsNumber=40,color=(1,1,1)))
#O.bodies[top_plate].state.vel = (0, 0, -0.01)
#O.bodies[bottom_plate].state.vel = (0, 0, 0)
#O.bodies[bottom_plate].state.blockedDOFs = 'xyzXYZ'

# Define engine
O.engines = [
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(),
Bo1_PFacet_Aabb(),
Bo1_Facet_Aabb()], 
sortThenCollide=True),
InteractionLoop(
[
Ig2_GridNode_GridNode_GridNodeGeom6D(),
Ig2_GridConnection_GridConnection_GridCoGridCoGeom(),
Ig2_Sphere_Sphere_ScGeom6D(),
Ig2_Sphere_PFacet_ScGridCoGeom(),
Ig2_Facet_Sphere_ScGeom(),
],
[

Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=True),
Ip2_FrictMat_FrictMat_FrictPhys()
],
[
Law2_ScGeom6D_CohFrictPhys_CohesionMoment(),
Law2_ScGeom_FrictPhys_CundallStrack(),
Law2_ScGridCoGeom_FrictPhys_CundallStrack(),

Re: [Yade-users] [Question #707268]: Use of ServoPIDController for simulating cylindrical triaxial test

2023-07-13 Thread Ruidong LI
Question #707268 on Yade changed:
https://answers.launchpad.net/yade/+question/707268

Status: Answered => Solved

Ruidong LI confirmed that the question is solved:
Hi, Jan

Thanks for your reply. 
>  It actually does move
> Yes, I can capture the movement After adding the 'Bo1_Facet_Aabb()' in the 
> 'InsertionSortCollider' part of the engine.

>  In the example it is combined with rotation, but for linear motion, you can 
> use just ServoPIDController
OK. Thx.

> please focus on one problem per one question ([2], point 5).
> OK. I will open one new question and close this one. Many thanks.

Best,
Kyle

-- 
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


[Yade-users] [Question #707268]: Use of ServoPIDController for simulating cylindrical triaxial test

2023-07-12 Thread Ruidong LI
New question #707268 on Yade:
https://answers.launchpad.net/yade/+question/707268

Hi! I am trying to model a cylindrical triaxial test based on Pfacet and 
ServoPIDController. I would like to model a triaxial compression test with 
confining pressure equal to 50kPa. The bottom and top loading plates are 
created using the 'facet' element. The top one is assumed to move slowly in the 
vertical direction while the bottom one is fixed. The cylindrical walls are 
generated using 'Pfacet' elements. Referring to [1], I wrote the current MWE 
but encountered with some problems. They are summarized as follows:

1) When implementing the MWE, the top plate is supposed to move, but actually 
does not. And the cylindrical walls are going to be destroyed. What causes this 
to happen and how to solve this?
2) I would like to apply confining pressure on cylindrical walls. How to 
achieve this? 
3) For the ServoPIDController, do 'TranslationEngine', 
'CombinedKinematicEngine' and 'ServoPIDController' need to be used together?

Many thanks.

The MWE is presented below:

from __future__ import print_function
from yade import pack, ymport, qt
import gts, os.path, locale, plot, random
import numpy as np
from yade.gridpfacet import *
import math

locale.setlocale(
locale.LC_ALL, 'en_US.UTF-8'
)  #gts is locale-dependend.  If, for example, german locale is used, 
gts.read()-function does not import floats normally



###  1   ###
###   DEFINING VARIABLES AND MATERIALS   ###


# The following lines are used parameter definitions
readParamsFromTable(

# material parameters
young_w = 5e9, # Young's modulus of plates and walls
young_g = 1.8e6, # Young's modulus of grains [1]
den_w = 7874, # density of plates and walls
den_g = 980, # density of grains 
poi_w = 0.3, # possion's ratio of plates and walls
poi_g = 0.25, # possion's ratio of grains
friAngle_w = 0.5,#radians(15), # friction angle of plates and walls 
friAngle_g = 0.5,#radians(29), # friction angle of grains

# Parameters of cylindrical walls
x_cyl = 0.0547, # x-coordinate of center of cylindrical walls
y_cyl = 0.0535, # y-coordinate of center of cylindrical walls
z_cyl = 0, # z-coordinate of center of cylindrical walls
r_cyl = 0.0358, # radius of the cylinder
h_cyl = 0.14, # height of the cylinder

)
from yade.params.table import *

# create materials for spheres and walls
wallMat = O.materials.append(FrictMat(young = young_w, poisson = poi_w, 
frictionAngle = friAngle_w, density = den_w, label = 'walls'))
sphereMat = O.materials.append(FrictMat(young = young_g, poisson = poi_g, 
frictionAngle = friAngle_g, density = den_g, label = 'spheres'))

###
###2###
###   IMPORTING GRAINS AND CREATING CLUMPS  ###
###

# spheres
pred = pack.inCylinder((x_cyl, y_cyl, z_cyl), (x_cyl, y_cyl, h_cyl), r_cyl) 
sp = SpherePack()
sp = pack.randomDensePack(pred, spheresInCell=2000, radius=0.005, 
returnSpherePack=True)
spheres = sp.toSimulation(color=(0, 1, 1), material=sphereMat)

# assign unique color for each sphere
currentSphereId = O.bodies[0].id
color = randomColor()
for b in O.bodies:
if b.id != currentSphereId:#change color each time clumpId changes
currentSphereId = b.id
color = randomColor()
if isinstance(b.shape,Sphere):#colorize spheres
b.shape.color = color

# create top and bottom plates
h_cyl = max([b.state.pos[2] + b.shape.radius for b in O.bodies if 
isinstance(b.shape, Sphere)])
top_plate = 
O.bodies.append(yade.geom.facetCylinder((x_cyl,y_cyl,h_cyl),radius=r_cyl*1.2,height=0,segmentsNumber=40,color=(1,1,1)))
bottom_plate = 
O.bodies.append(yade.geom.facetCylinder((x_cyl,y_cyl,0),radius=r_cyl*1.2,height=0,segmentsNumber=40,color=(1,1,1)))

# Define engine
O.engines = [
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(),
Bo1_PFacet_Aabb(),], 
sortThenCollide=True),
InteractionLoop(
[
Ig2_GridNode_GridNode_GridNodeGeom6D(),
Ig2_GridConnection_GridConnection_GridCoGridCoGeom(),
Ig2_Sphere_Sphere_ScGeom6D(),
Ig2_Sphere_PFacet_ScGridCoGeom(),
],
[

Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=True),
Ip2_FrictMat_FrictMat_FrictPhys()
],
[
Law2_ScGeom6D_CohFrictPhys_CohesionMoment(),
Law2_ScGeom_FrictPhys_CundallStrack(),

[Yade-users] [Question #707251]: deploy Yade on the HPC

2023-07-10 Thread Ruidong LI
New question #707251 on Yade:
https://answers.launchpad.net/yade/+question/707251

Hi! I'd like to deploy Yade on the HPC. Is there any tutorials? Many thanks.

Kyle

-- 
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


Re: [Yade-users] [Question #707148]: Cylindrical triaxial test using Pfacet

2023-07-09 Thread Ruidong LI
Question #707148 on Yade changed:
https://answers.launchpad.net/yade/+question/707148

Status: Answered => Open

Ruidong LI is still having a problem:
Hi, Jan.

>yes, it looks pretty similar [4]
Could you please provide an example of using ServoPIDController? Because there 
is no tutorial about how to use it. I am inclined to think that this command's 
explanation is not easy to understand without an example. Many thanks.

Looking forward to your reply.
Kyle

-- 
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


Re: [Yade-users] [Question #707148]: Cylindrical triaxial test using Pfacet

2023-07-09 Thread Ruidong LI
Question #707148 on Yade changed:
https://answers.launchpad.net/yade/+question/707148

Status: Needs information => Open

Ruidong LI gave more information on the question:
Hi, Jan.

>Have you tried ServoPIDController?
I try to use it but can't find any tutorials. In PFC [1], the velocity value of 
the wall is determined by multiplying a factor by the stress difference (target 
stress minus current stress). This value is updated regularly. I am not sure 
whether the principle of the ServoPIDController is the same as that in PFC.

Looking forward to your reply.
Kyle

[1]https://docs.itascacg.com/pfc700/pfc/pfcmodule/doc/manual/wall_manual/wall_commands/cmd_wall_servo.html?highlight=servo#command:wall.servo

-- 
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


Re: [Yade-users] [Question #707148]: Cylindrical triaxial test using Pfacet

2023-07-09 Thread Ruidong LI
Question #707148 on Yade changed:
https://answers.launchpad.net/yade/+question/707148

Ruidong LI gave more information on the question:
Can someone help me with servo-control part? Many thanks.

-- 
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


Re: [Yade-users] [Question #707183]: High unbalanced force ratio

2023-07-04 Thread Ruidong LI
Question #707183 on Yade changed:
https://answers.launchpad.net/yade/+question/707183

Status: Answered => Open

Ruidong LI is still having a problem:
Hi! Bruno

Thanks for your reply.

>The initial state is simply out of equilibrium apparently.
Before adding gravity, the whole simulation is in equilibrium. But after that, 
it became unstable. The unbalanced force ratio (UFR) increased sharply and then 
decreased to 0.11. After more than 2,000,000 iterations, the UFR still 
maintains a value of around 0.11. I am so confused.

>I suppose there is a trend toward reduction (hence settlement) but maybe to 
>slow for you to realize - that's more a question about computation time.
But it seems it's not possible to wait for the result for a long period, such 
as one month, right? Any suggestions for avoiding this?

Cheers,
Ruidong

-- 
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


Re: [Yade-users] [Question #707148]: Cylindrical triaxial test using Pfacet

2023-07-03 Thread Ruidong LI
Question #707148 on Yade changed:
https://answers.launchpad.net/yade/+question/707148

Status: Answered => Open

Ruidong LI is still having a problem:
Hi! Jan

Thanks for your reply. 
>the same, what does "will break" mean? That they do not touch each other?
The particles went out of the cylinder and flew all around [1]. 

[1]https://answers.launchpad.net/yade/+question/404479

Cheers,
Kyle

-- 
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


Re: [Yade-users] [Question #707183]: High unbalanced force ratio

2023-07-03 Thread Ruidong LI
Question #707183 on Yade changed:
https://answers.launchpad.net/yade/+question/707183

Status: Answered => Open

Ruidong LI is still having a problem:
Hi, Jérôme

Thanks for your reply.

>Was your initial geometry supposed to be at rest under gravity ? If
not, I would say it is normal you observe some settlement (=> sample
height decreases), through a YADE-DEM dynamic process (=> high
unbalanced force ratio)

It's hard to say, actually. The particles represented by GTS files are
supposed to be at rest under gravity. But for the corresponding clumps,
I think it's not. I understand the existence of a settlement. But I
don't know why the high unbalanced force ratio happened and exists
without any trend toward reduction. And I want to know how to deal with
this problem.

Looking forward to your reply. Many thanks.
Kyle

-- 
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


Re: [Yade-users] [Question #707182]: level-set-based simulation with Pfacet

2023-07-03 Thread Ruidong LI
Question #707182 on Yade changed:
https://answers.launchpad.net/yade/+question/707182

Status: Answered => Solved

Ruidong LI confirmed that the question is solved:
Thanks Jérôme Duriez, that solved my question.

-- 
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


Re: [Yade-users] [Question #707148]: Cylindrical triaxial test using Pfacet

2023-07-03 Thread Ruidong LI
Question #707148 on Yade changed:
https://answers.launchpad.net/yade/+question/707148

Status: Needs information => Open

Ruidong LI gave more information on the question:
Hi! Jan
Thanks for your reply.

> The loading is simply such that a constant velocity is prescribed 
> (s.state.vel = ...)
But which velocity value should I define to achieve quasi-equilibrium 
compression? Can you show me the code? I am sorry for my stupidity.

>Therefore I ask for a MWE and better description of "are destroyed" (anyway 
>useful even with the code).
Actually, what I mean is that when you run the 'triax' py without any change, 
the triangle facets will break. And my current problem is not with the 'triax' 
py.
My problem is that I just finished the part about generating flexible membranes 
using Pfacet and don't know what to do next. What I want to achieve is 
isotropic compression with a confining pressure equal to 50 kPa. And then, 
maintain the confining pressure in the x and y directions and apply a 
displacement-controlled movement of the top wall. 

my MWE is presented as below




###1 ###
###   LOAD INITIAL PACKING   ###

dir_inipacking = '/home/kyle/Yade/install/bin/lentils/xml/iniPacking.xml'
O.load(dir_inipacking)

# Define engine
O.engines = [
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(),
Bo1_PFacet_Aabb(),], 
sortThenCollide=True),
InteractionLoop(
[
Ig2_GridNode_GridNode_GridNodeGeom6D(),
Ig2_GridConnection_GridConnection_GridCoGridCoGeom(),
Ig2_Sphere_Sphere_ScGeom6D(),
Ig2_Sphere_PFacet_ScGridCoGeom(),
],
[

Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=True),
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')
]

# encoding: utf-8
from yade import qt
from yade.gridpfacet import *
import math


###  2   ###
###   DEFINING VARIABLES AND MATERIALS   ###


# The following lines are used parameter definitions
readParamsFromTable(
# directory 
dir_vtk = '/home/kyle/Yade/install/bin/lentils/vtk/20', # directory of 
storing vtk files
dir_txt = '/home/kyle/Yade/install/bin/lentils/txt/20/Num20_servo.txt', 
# directory of storing txt files
dir_xml = '/home/kyle/Yade/install/bin/lentils/xml/20', # directory of 
storing xml files

# material parameters
young_w = 5e9, # Young's modulus of plates and walls
young_g = 1.8e6, # Young's modulus of grains [1]
den_w = 7874, # density of plates and walls
den_g = 980, # density of grains 
poi_w = 0.3, # possion's ratio of plates and walls
poi_g = 0.25, # possion's ratio of grains
friAngle_w = 0.5,#radians(15), # friction angle of plates and walls 
friAngle_g = 0.5,#radians(29), # friction angle of grains

# Parameters of cylindrical walls
x_cyl = 0.0547, # x-coordinate of center of cylindrical walls
y_cyl = 0.0535, # y-coordinate of center of cylindrical walls
z_cyl = 0, # z-coordinate of center of cylindrical walls
r_cyl = 0.0358, # radius of the cylinder
h_cyl = 0.14, # height of the cylinder

# confining pressure
preStress = -5,

# axial strain rate
strainRate=-100
  
)
from yade.params.table import *


### 3###
###   CREATE TOP AND BOTTOM PLATES   ###


# erase rigid cylindrical facets
for b in O.bodies:
   if isinstance(b.shape,Facet): O.bodies.erase(b.id) 

# create top and bottom plates
h_cyl = max([b.state.pos[2] + b.shape.radius for b in O.bodies if 
isinstance(b.shape, Sphere)])
top_plate = 
O.bodies.append(yade.geom.facetCylinder((x_cyl,y_cyl,h_cyl),radius=r_cyl*1.2,height=0,segmentsNumber=40,color=(1,1,1)))
bottom_plate = 
O.bodies.append(yade.geom.facetCylinder((x_cyl,y_cyl,0),radius=r_cyl*1.2,height=0,segmentsNumber=40,color=(1,1,1)))

'''
vel = strainRate * (h - rParticle * 2 * bcCoeff)
for s in bot:
 

[Yade-users] [Question #707183]: High unbalanced force ratio

2023-07-02 Thread Ruidong LI
New question #707183 on Yade:
https://answers.launchpad.net/yade/+question/707183

Hi! I want to model the cylindrical compression and follow the procedures as 
follows:
1.  Import geometry from microCT
2.  Create clumps using the Euclidean 3D method mentioned in the 'Clump' 
code [1]
3.  Equilibrate within rigid boundaries until unbalanced force is zero
4.  Apply gravity and leave run until unbalanced force is zero
5.  Check void ratio.

But the problems are so werid and summarized as follows:
1. Sample height decrease
2. High unbalanced force ratio after applying gravity.

My MWE is as follows:

from __future__ import print_function
from yade import pack, ymport, qt
import gts, os.path, locale, plot, random
import numpy as np
import math

locale.setlocale(
locale.LC_ALL, 'en_US.UTF-8'
)  #gts is locale-dependend.  If, for example, german locale is used, 
gts.read()-function does not import floats normally

###


###  1   ###
###   DEFINING VARIABLES AND MATERIALS   ###


# The following lines are used parameter definitions
readParamsFromTable(
# directory 
dir_clump = '/home/kyle/Downloads/yadetxtClumps20_1.16.txt', # 
positions and radius of spherical particles in the clump
dir_vtk = '/home/kyle/Yade/install/bin/lentils/vtk/20', # directory of 
storing vtk files
dir_txt = 
'/home/kyle/Yade/install/bin/lentils/txt/20/Num20_initialpacking.txt', # 
directory of storing txt files
dir_xml = '/home/kyle/Yade/install/bin/lentils/xml/20', # directory of 
storing xml files

# material parameters
young_w = 5e9, # Young's modulus of plates and walls
young_g = 1.8e6, # Young's modulus of grains [1]
den_w = 7874, # density of plates and walls
den_g = 980, # density of grains 
poi_w = 0.3, # possion's ratio of plates and walls
poi_g = 0.25, # possion's ratio of grains
friAngle_w = 0.5,#radians(15), # friction angle of plates and walls 
friAngle_g = 0.5,#radians(29), # friction angle of grains

# Parameters of cylindrical walls
x_cyl = 0.0547, # x-coordinate of center of cylindrical walls
y_cyl = 0.0535, # y-coordinate of center of cylindrical walls
z_cyl = 0, # z-coordinate of center of cylindrical walls
r_cyl = 0.0358, # radius of the cylinder
h_cyl = 0.14, # height of the cylinder
n_cyl = 100, # number of boxes forming cylinder
t_cyl = 0.0001, # thickness of the boxes

#Parameters of lower and upper plates (square box)
w_plate = 0.05, # width of plates
t_plate = 0.0001, # thickness of plates

)
from yade.params.table import *

# create materials for spheres and walls
wallMat = O.materials.append(FrictMat(young = young_w, poisson = poi_w, 
frictionAngle = friAngle_w, density = den_w, label = 'walls'))
sphereMat = O.materials.append(FrictMat(young = young_g, poisson = poi_g, 
frictionAngle = friAngle_g, density = den_g, label = 'spheres'))

###
###2###
###   IMPORTING GRAINS AND CREATING CLUMPS  ###
###

# import clumps
spheres = ymport.textClumps(dir_clump,material=sphereMat,discretization=0)

# assign unique color for each clump
currentClumpId = O.bodies[0].clumpId
color = randomColor()
for b in O.bodies:
if b.clumpId != currentClumpId:#change color each time clumpId changes
currentClumpId = b.clumpId
color = randomColor()
if isinstance(b.shape,Sphere):#colorize spheres
b.shape.color = color

# count the number of clumps 
bodyList = []
for i in O.bodies:
 if i.isClump:
  bodyList.append(i.id)
print(len(bodyList))

###
###  3  ###
###   CREATING CYLINDRICAL WALLS, BOTTOM PLATE, AND TOP PLATE   ###
###

h = max([b.state.pos[2] + b.shape.radius for b in O.bodies if 
isinstance(b.shape, Sphere)])
#top_plate = 
O.bodies.append(yade.geom.facetCylinder((x_cyl,y_cyl,h),radius=r_cyl*1.2,height=0,segmentsNumber=40,color=(1,1,1)))
#bottom_plate = 
O.bodies.append(yade.geom.facetCylinder((x_cyl,y_cyl,0),radius=r_cyl*1.2,height=0,segmentsNumber=40,color=(1,1,1)))
cyl_wallRigid = 
O.bodies.append(yade.geom.facetCylinder((x_cyl,y_cyl,h/2),radius=r_cyl,height=h,segmentsNumber=100,color=(0,0,1)))

# calculate void ratio
def myClumpVoidRatio(VolTot, density):
mass=sum([ b.state.mass for b in O.bodies if b.isClump])
VolSolid = mass/density
poro = (VolTot-VolSolid)/VolSolid
return poro 
h_cyl = max([b.state.pos[2] + b.shape.radius for b in O.bodies if 
isinstance(b.shape, Sphere)])
Vol = 

[Yade-users] [Question #707182]: level-set-based simulation with Pfacet

2023-07-02 Thread Ruidong LI
New question #707182 on Yade:
https://answers.launchpad.net/yade/+question/707182

Hi!

I'd like to know whether the YADE supports the interaction of the level-set 
body with the Pfacet elements. I want to create a cylindrical sample filled 
with level-set bodies. Moreover, for the boundary condition, I'd like to use a 
flexible membrane using Pfacet elements. I want to know whether this is 
achievable in YADE right now. Many thanks.

Cheer,
Kyle

-- 
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


Re: [Yade-users] [Question #707148]: Cylindrical triaxial test using Pfacet

2023-07-02 Thread Ruidong LI
Question #707148 on Yade changed:
https://answers.launchpad.net/yade/+question/707148

Status: Answered => Open

Ruidong LI is still having a problem:
Dear Jan,

Thanks for your reply.

1) I'll check. Many thanks.
2) I'll check. Many thanks.
3) How do I achieve servo control? I am still not clear about this. I guess 
there is no displacement-based servo control in the code 'triax.py'.
4) This means the cylindrical surface is divided into triangles. Maybe you can 
try to run the code 'triax.py' and you will understand what I am talking about.
5) I'll check. Many thanks.

Cheers,
Kyle

-- 
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


Re: [Yade-users] [Question #694667]: 'ScGeom' object has no attribute 'connectionBody'

2023-07-01 Thread Ruidong LI
Question #694667 on Yade changed:
https://answers.launchpad.net/yade/+question/694667

Ruidong LI posted a new comment:
Hi! I also entoured with this problem. What should we do with this? Many
thanks.

-- 
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


Re: [Yade-users] [Question #707167]: ModuleNotFoundError: No module named 'pandas'

2023-06-30 Thread Ruidong LI
Question #707167 on Yade changed:
https://answers.launchpad.net/yade/+question/707167

Status: Answered => Solved

Ruidong LI confirmed that the question is solved:
Hi Karol,

This solved my problem. Many thanks.

Cheers
Kyle

-- 
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


[Yade-users] [Question #707167]: ModuleNotFoundError: No module named 'pandas'

2023-06-30 Thread Ruidong LI
New question #707167 on Yade:
https://answers.launchpad.net/yade/+question/707167

Hi! I am trying to test the code 'oedometric.py' in the folder 
'clumps-breakage' 
(https://gitlab.com/yade-dev/trunk/blob/master/examples/clumps-breakage/oedometric.py)
 on ubuntu 22.04 but failed. The error is presented as below:

Traceback (most recent call last):
  File "/home/kyle7/Yade/install/bin/yade-2023-05-15.git-a46ea55", line 343, in 
runScript
execfile(script,globals())
  File "/usr/lib/python3/dist-packages/past/builtins/misc.py", line 87, in 
execfile
exec_(code, myglobals, mylocals)
  File "/home/kyle7/Yade/install/bin/clumps-breakage/oedometric.py", line 3, in 

import pandas as pd
ModuleNotFoundError: No module named 'pandas'

Can someone help me with this? Many thanks.
Kyle




-- 
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


[Yade-users] [Question #707148]: Cylindrical triaxial test using Pfacet

2023-06-29 Thread Ruidong LI
New question #707148 on Yade:
https://answers.launchpad.net/yade/+question/707148

Hi! I am new to Yade. I am working on the simulation of cylindrical triaxial 
tests. I have looked through all questions on the launchpad related to this 
field. But, unfortunately, there is no complete simulation code for cylindrical 
triaxial tests. 

My questions about the simulation of cylindrical triaxial tests are summarized 
as follows:
1) Is it possible to simulate the cylindrical triaxial tests in Yade?
2) If so, which code or what kind of methods should be referred to? 
3) How do I achieve servo control?
4) Someone mentioned that the code 'triax.py' in the 'concrete' folder is 
valuable for reference. But the problem is that when implementing the code, 
facets generated using the command 'Pfacet' are destroyed. What caused the 
simulation to be like this? How do I avoid this?
5) Can someone provide a MWE (Minimum Working Example) for simulating 
cylindrical triaxial tests?

Many thanks.
Kyle

-- 
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


Re: [Yade-users] [Question #706821]: Particle breakage of clump using JCFpm

2023-06-29 Thread Ruidong LI
Question #706821 on Yade changed:
https://answers.launchpad.net/yade/+question/706821

Status: Answered => Solved

Ruidong LI confirmed that the question is solved:
Thanks Luc Scholtès, that solved my question.

-- 
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


Re: [Yade-users] [Question #706976]: Reconstruct particles from ct images

2023-06-18 Thread Ruidong LI
Question #706976 on Yade changed:
https://answers.launchpad.net/yade/+question/706976

Status: Answered => Solved

Ruidong LI confirmed that the question is solved:
Dear Karol,

Many thanks. Your suggestion sovled my problem.

Cheers,
Kyle

-- 
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


Re: [Yade-users] [Question #706976]: Reconstruct particles from ct images

2023-06-18 Thread Ruidong LI
Question #706976 on Yade changed:
https://answers.launchpad.net/yade/+question/706976

Status: Answered => Open

Ruidong LI is still having a problem:
Dear Vasileios,

Thanks for your answer.

I am so confused. In my opinion,  the statement 'ymport.textClumps' is
enough. is Adding the statement 'O.bodies.appendClumped' unnecessary?

Moreover, What I want to do is import multiple grains with different
colour (same colour for spheres in the same clump). This can be done
with the statement 'ymport.textClumps' but requires an iteration of
loading text.

If I put all clump information into one single text like this answer
#13.  Can I still distinguish clumps by assigning different colours?

Best,
Kyle

-- 
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


Re: [Yade-users] [Question #706976]: Reconstruct particles from ct images

2023-06-17 Thread Ruidong LI
Question #706976 on Yade changed:
https://answers.launchpad.net/yade/+question/706976

Ruidong LI posted a new comment:
Dear Vasileios,

Thanks for your answer. I have tried your code. So I just need to create
a text for each clump and import them iteratively, right?  Just using
the 'ymport.textClumps statement'.

Best,
Kyle

-- 
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


Re: [Yade-users] [Question #706976]: Reconstruct particles from ct images

2023-06-16 Thread Ruidong LI
Question #706976 on Yade changed:
https://answers.launchpad.net/yade/+question/706976

Status: Answered => Open

Ruidong LI is still having a problem:
Dear Vasileios,

Thanks for your answer. I have tried your code.

The error is below:

unning script /home/kyle/Yade/install/bin/clump_test1.py
Traceback (most recent call last):
  File "./yade-Unknown", line 343, in runScript
execfile(script,globals())
  File "/usr/lib/python3/dist-packages/past/builtins/misc.py", line 87, in 
execfile
exec_(code, myglobals, mylocals)
  File "/home/kyle/Yade/install/bin/clump_test1.py", line 69, in 
O.bodies.appendClumped(spheres)
TypeError: No registered converter was able to produce a C++ rvalue of type 
boost::shared_ptr from this Python object of type tuple

My code is:

inputfile = '/home/kyle/Downloads/yadetxtClumps.txt'
spheres = ymport.textClumps(inputfile,material=sphereMat,discretization=0)
O.bodies.appendClumped(spheres)

The file in the 'inputfile' is like this (contain many clumps):
0.068037 0.02416 0.0017637 0.0011423 1
0.068615 0.022601 0.0014278 0.00077244 1
0.069542 0.023528 0.0017906 0.00071539 1
0.066801 0.025141 0.0019788 0.0006786 1
0.049731 0.03499 0.0017112 0.00070436 10
0.048747 0.034309 0.0013637 0.00063928 10
0.047719 0.034628 0.0014651 0.00056027 10
0.047299 0.035323 0.0020008 0.00052311 10

Sorry to trouble you. But do you know what's wrong with this?

Best,
Kyle

-- 
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


Re: [Yade-users] [Question #706062]: Triaxial test with flexible cylindrical membrane

2023-06-16 Thread Ruidong LI
Question #706062 on Yade changed:
https://answers.launchpad.net/yade/+question/706062

Status: Answered => Open

Ruidong LI is still having a problem:
Dear Jan,

Thanks for your reply. I have read your recommendation. But I am
wondering whether it is applicable to use bonded particles representing
flexible membrane instead of PFacet?  If so, can you give me some hints
(How to simulate bonded particles or how to apply force on them to
achieve stress-servo control)?

Looking forward to your reply. Many thanks.

Best,
Kyle

-- 
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


Re: [Yade-users] [Question #706976]: Reconstruct particles from ct images

2023-06-16 Thread Ruidong LI
Question #706976 on Yade changed:
https://answers.launchpad.net/yade/+question/706976

Status: Answered => Open

Ruidong LI is still having a problem:
Thanks for your reply, Karol.

>I can also recommend Matlab code for clumo generation developed by Angelidakis 
>et al. It is described in [3].
[3] Angelidakis et al. 2021 CLUMP: A Code Library to generate Universal 
Multi-sphere Particles, Softwarex
--By the way, I'd like to ask how can I import the position and radius of 
generated spheres into Yade. I mean once I obtain the positions and radius of 
spheres forming a clump externally such as your recommendation [1]. I can use 
the function 'O.bodies.appendClumped([])', right? But I have more than 800 
particles. Should I put those lines into the main py file together with other 
definitions such as material, or create a new py file and called by the main py 
file?

[1] Angelidakis et al. 2021 CLUMP: A Code Library to generate Universal
Multi-sphere Particles, Softwarex

Best
Kyle

-- 
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


Re: [Yade-users] [Question #706976]: Reconstruct particles from ct images

2023-06-16 Thread Ruidong LI
Question #706976 on Yade changed:
https://answers.launchpad.net/yade/+question/706976

Ruidong LI posted a new comment:
Thanks for your reply, Jan.

>Just an idea to use this concept of "suitably" overlapping spheres, which 
>would represent more realistically the actual shape then cropped regular hexa 
>packing. Of course, it would need some development, with uncertain result :-)
-- yes. I will try and respond to you ASAP. Many thanks.


Best
Kyle

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


Re: [Yade-users] [Question #706976]: Reconstruct particles from ct images

2023-06-16 Thread Ruidong LI
Question #706976 on Yade changed:
https://answers.launchpad.net/yade/+question/706976

Ruidong LI posted a new comment:
Thanks for your reply, Karol.

>I can also recommend Matlab code for clumo generation developed by Angelidakis 
>et al. It is described in [3].
[3] Angelidakis et al. 2021 CLUMP: A Code Library to generate Universal 
Multi-sphere Particles, Softwarex
--I will try and respond to you ASAP. Many thanks.

Best
Kyle

-- 
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


Re: [Yade-users] [Question #706976]: Reconstruct particles from ct images

2023-06-15 Thread Ruidong LI
Question #706976 on Yade changed:
https://answers.launchpad.net/yade/+question/706976

Ruidong LI gave more information on the question:
Thanks for your reply, Jan.

>or use a different packing method than regularHexa, see e.g. [Kozicki2012] [2]
-- I have looked through your recommended paper. But in my opinion, maybe the 
method mentioned in this paper is more suitable for regular shapes. What I have 
are irregular-shaped particles with interior holes. 

Do you have any other recommendations?

Best
Kyle

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


Re: [Yade-users] [Question #706976]: Reconstruct particles from ct images

2023-06-15 Thread Ruidong LI
Question #706976 on Yade changed:
https://answers.launchpad.net/yade/+question/706976

Status: Answered => Open

Ruidong LI is still having a problem:
Thanks for your reply, Karol.

>Are the particles somehow bonded (I mean grains in the sample)?
--What do you mean particles are bonded? The particles in a clump are bonded. 
But the particle surfaces (gts) are separated from each other with a small gap 
(one-pixel distance in the ct image). 

>If not, I think that particles rearrange and change the height of the sample.
--Yes. I think so. The rearrangement of particle positions and gaps between 
clumps changed the height of the sample.

>If you want to adjust the size of the particles, you can expand spheres in the 
>packing a little bit after generation.
--Yes, I have tried this method. I have increased the z-coordinates (the 
direction of height) of each point in the gts file by 1.2 times. But the result 
indicates that the height of the sample is still not insufficient. My target is 
40mm, and the obtained one is 37.5mm (multiple 1.2 times in z coordinates). By 
doing so, the unbalanced force ratio always stands at a high level (>0.25).

Do you have any other recommendations?

Best 
Kyle

-- 
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


Re: [Yade-users] [Question #706976]: Reconstruct particles from ct images

2023-06-15 Thread Ruidong LI
Question #706976 on Yade changed:
https://answers.launchpad.net/yade/+question/706976

Ruidong LI gave more information on the question:
Karol, Thanks for your reply.

---I think that you need to be much more specific. For example, is each of the 
800 gts files modelling a single particle?
---Yes. Each GTS file denotes one single particle.

---Do you try to reproduce the exact shape of the sample (particles in their 
corresponding locations from the very beginning)? What code do you use to 
generate clumps? 
---Yes. I'd like to reproduce the exact shape of the sample (particles in their 
corresponding locations from the very beginning). The code I used to generate 
the clump is presented below:

def createSphere(pred, ndivmin, spacing):
aabb = pred.aabb()
dim0 = aabb[1][0] - aabb[0][0]
bodyList = []
ndiv = ndivmin
while len(bodyList)==0:
radius = dim0 / ndiv # get some characteristic dimension, use 
it for radius
bodyList = O.bodies.append(pack.regularHexa(pred, radius = 
radius, gap = -radius, color = 
[random.random(),random.random(),random.random()], material = sphereMat))
ndiv = ndiv + spacing

---Can you prepare the MVE[1]? If not possible, please describe your workflow. 
--- I can provide the MVE. But I don't know how to provide my GTS.  I just 
imported gts files into Yade and created the surface, then generate spheres 
using the 'pack.regularHexa' function.

---What do you mean that the sample shrinks in the height direction? Smaller 
than expected after deposition, or did something actually shrink?
--- This means that when the unbalanced force ratio tends to be stable, the 
height of the sample is smaller than the real value. The reason behind this, I 
guess, is the voids between clumps since clumps are smaller than the gts 
surface.

-- 
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


[Yade-users] [Question #706976]: Reconstruct particles from ct images

2023-06-15 Thread Ruidong LI
New question #706976 on Yade:
https://answers.launchpad.net/yade/+question/706976

Hello!

 I have a question about generating clumps from '.gts' files. I have almost 800 
gts files. The issue was that the generated clump had a smaller volume than the 
original GTS file, causing the sample to shrink in the height direction. The 
inherent contact force chains were also altered as a result of this phenomenon. 
Can anyone assist me with this problem? 


Best Kyle

-- 
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


[Yade-users] [Question #706845]: Young's modulus and normal stiffness

2023-05-30 Thread Ruidong LI
New question #706845 on Yade:
https://answers.launchpad.net/yade/+question/706845

Hi! I am new to Yade. What I am gonna ask is a simple question. If I know the 
normal and shear stiffness kn and ks of spheres, how can I determine the 
corresponding Young's modulus E and Poisson's ratio v?  E = kn * D (radius of 
sphere)?

-- 
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


[Yade-users] [Question #706821]: Particle breakage of clump using JCFpm

2023-05-29 Thread Ruidong LI
New question #706821 on Yade:
https://answers.launchpad.net/yade/+question/706821

Hi! I want to model the particle breakage of clumps during the one-dimensional 
compression in a cylindrical boundary. My steps are as followed:
Step 1:  I  import 800 GTS files into Yade and generated one-on-one 800 clumps. 
That is to say that each GTS corresponds to a unique clump. 
Step 2:  I create a cylindrical boundary to cover those clumps and provide two 
plates (bottom one fixed, top one applied with force). Note that the force 
applied on the top plate is a multi-load, which varies with the strain of the 
sample.
Step 3:  I assign JCFpm material for each clump and material of steel for the 
boundary and plates.
Step 4:  record what we want to know and implement simulation.

Here, my questions are as follows:
1) Is my whole procedure appropriate to simulate the one-dimensional 
compression while considering particle breakage?
2) For Step 2, I would like to know how to assign multi-loads is correct. It 
seems currently the top plate is not quasi-static during loading. Do I need to 
clear the speed for every number of calculation steps?
3) For the whole simulation, how do we know how many clumps are broken and can 
we record the isolated clumps at the final? 

The MWM is presented below (I don't know how to provide the gts files without 
an external link, so maybe randomly generating some clumps can replace them.):

from __future__ import print_function
from yade import pack, ymport
import gts, os.path, locale, plot, random
import numpy as np

locale.setlocale(
locale.LC_ALL, 'en_US.UTF-8'
)  #gts is locale-dependend.  If, for example, german locale is used, 
gts.read()-function does not import floats normally


###   DEFINING VARIABLES AND MATERIALS   ###


# The following lines are used parameter definitions
readParamsFromTable(
# directory 
dir_gts = '/home/kyle/Yade/install/bin/gts', # directory of storing gts 
files
dir_vtk = '/home/kyle/Yade/install/bin/vtk', # directory of storing vtk 
files
dir_txt = '/home/kyle/Yade/install/bin/txt', # directory of storing txt 
files
fileType = '.gts', # type of file 

# type of generating spheres ['hexa','dense']
genType = 'hexa',

# material parameters
young_w = 210e9, # Young's modulus of plates and walls
young_g = 180e6, # Young's modulus of grains [1]
den_w = 7874, # density of plates and walls
den_g = 1162, # density of grains
poi_w = 0.3, # possion's ratio of plates and walls
poi_g = 0.25, # possion's ratio of grains
friAngle_w = 15, # friction angle of plates and walls 
friAngle_g = 19, # friction angle of grains

# Parameters of cylindrical walls
x_cyl = 0.0106, # x-coordinate of center of cylindrical walls
y_cyl = 0.01005, # y-coordinate of center of cylindrical walls
z_cyl = 0, # z-coordinate of center of cylindrical walls
r_cyl = 0.0097, # radius of the cylinder
h_cyl = 0.04151, # height of the cylinder
n_cyl = 100, # number of boxes forming cylinder
t_cyl = 0.0001, # thickness of the boxes

#Parameters of lower and upper plates (square box)
w_plate = 0.015, # width of plates
t_plate = 0.0001, # thickness of plates

# applied stress
stress = [12500, 25000, 5, 10, 20, 30, 40, 80, 
160, 320], # target applied stress

# target displacement 
displacement = [3.6e-5, 6.8e-5, 0.00014, 0.00028, 0.00047, 0.000642, 
0.000796, 0.001342, 0.002441, 0.003989] # target displacement

)
from yade.params.table import *

# create materials for spheres and walls
wallMat = O.materials.append(FrictMat(young = young_w, poisson = poi_w, 
frictionAngle = friAngle_w, density = den_w, label = 'walls'))
#sphereMat = O.materials.append(FrictMat(young = young_g, poisson = poi_g, 
frictionAngle = friAngle_g, density = den_g, label = 'spheres'))

def sphereMat():
return JCFpmMat(
type=1,
young = young_g,
frictionAngle = radians(friAngle_g),
density = den_g,
poisson = poi_g,
tensileStrength = 1e6,
cohesion=1e6,
jointNormalStiffness=1e7,
jointShearStiffness=1e7,
jointCohesion=1e6,
jointFrictionAngle=radians(20),
jointDilationAngle=radians(0)
)  ## Rq: density needs to be adapted as porosity of real rock is 
different to granular assembly due to difference in porosity 
(utils.sumForces(baseBodies,(0,1,0))/(Z*X) should be equal to Gamma*g*h with 
h=Y, g=9.82 and Gamma=2700 kg/m3

###
###   IMPORTING GRAINS AND CREATING CLUMPS  ###

Re: [Yade-users] [Question #706774]: Gradation curve of assembly made of clumps

2023-05-24 Thread Ruidong LI
Question #706774 on Yade changed:
https://answers.launchpad.net/yade/+question/706774

Status: Answered => Solved

Ruidong LI confirmed that the question is solved:
Thank you so much. That solved my problem.

-- 
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


Re: [Yade-users] [Question #706774]: Gradation curve of assembly made of clumps

2023-05-24 Thread Ruidong LI
Question #706774 on Yade changed:
https://answers.launchpad.net/yade/+question/706774

Status: Needs information => Open

Ruidong LI gave more information on the question:
Hello, Jan.

Actually,  what I need is the calculation of the gradation curve in
general. I have an assembly of clumps generated based on imported stl
files. And I would like to obtain the gradation curve of the assembly. I
am new to the numerical simulation. And I don't know how to calculate
the size of a clump. More specially, I don't know which length can
represent the size of the clump and be used for gradation calculation.
The length of the longest axis?  I have shared some STL files for your
reference [1].

Looking forward to your reply. Many thanks.

Ruidong

[1]https://drive.google.com/file/d/1W2P2W0uxf4ktOTbc7lNxdJojZlntXWxO/view?usp=sharing

-- 
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


[Yade-users] [Question #706774]: Gradation curve of assembly made of clumps

2023-05-24 Thread Ruidong LI
New question #706774 on Yade:
https://answers.launchpad.net/yade/+question/706774

Hello! I would like to know how to calculate the gradation curve of an assembly 
consisting of clumps. Many thanks.

-- 
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


Re: [Yade-users] [Question #706733]: volume of spheres inside a clump

2023-05-22 Thread Ruidong LI
Question #706733 on Yade changed:
https://answers.launchpad.net/yade/+question/706733

Status: Answered => Solved

Ruidong LI confirmed that the question is solved:
OK. Thank you so much.

-- 
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


Re: [Yade-users] [Question #706733]: volume of spheres inside a clump

2023-05-22 Thread Ruidong LI
Question #706733 on Yade changed:
https://answers.launchpad.net/yade/+question/706733

Ruidong LI posted a new comment:
Dear Jan,

Thanks for your help. Your answer helps a lot. But if we want to
calculate the volume for the scenario where the spheres overlap, do you
have any good ideas for solving this?

Best regards,
Ruidong LI

-- 
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


Re: [Yade-users] [Question #706733]: volume of spheres inside a clump

2023-05-22 Thread Ruidong LI
Question #706733 on Yade changed:
https://answers.launchpad.net/yade/+question/706733

Status: Needs information => Open

Ruidong LI gave more information on the question:
Dear Jan,

For each clump and corresponding 'gts' file, the ratio of the total
volume of the clump (which may be more clear) to the volume of 'gts' can
be calculated, right? I want to get this value for each clump.

Best regards,
Ruidong

-- 
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


Re: [Yade-users] [Question #706733]: volume of spheres inside a clump

2023-05-22 Thread Ruidong LI
Question #706733 on Yade changed:
https://answers.launchpad.net/yade/+question/706733

Status: Needs information => Open

Ruidong LI gave more information on the question:
Thanks for the reminder, Jan.

Actually, I would like to know the total volume of spheres in one clump.
Actually, my clumps are generated by using the function
'yade.pack.regularHexa'. The surf is determined by importing the 'GTS'
file. What I finally want is the ratio of the total volume of spheres to
the corresponding volume of the GTS file.

Not sure whether I clarify my question or not. :(

Many thanks
Ruidong

-- 
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


[Yade-users] [Question #706733]: volume of spheres inside a clump

2023-05-20 Thread Ruidong LI
New question #706733 on Yade:
https://answers.launchpad.net/yade/+question/706733

Hi! I would like to calculate the volume of spheres inside each clump. How can 
I do this? Many thanks.

-- 
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


Re: [Yade-users] [Question #706639]: Oedometer test of cylindrical specimens

2023-05-16 Thread Ruidong LI
Question #706639 on Yade changed:
https://answers.launchpad.net/yade/+question/706639

Status: Answered => Open

Ruidong LI is still having a problem:
Hi!

Thanks for your advice. Adopting the TriaxialStressController is indeed
a good choice. But I just have a question. For oedometer tests, there is
no confining pressure since the cylindrical walls are fixed to ensure
the diameter of the specimen is unchanged. I didn't do the experiment, I
am not sure about this. In this case, how should we use the
TriaxialStressController? That's really confusing.

Regards,
Ruidong

-- 
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


[Yade-users] [Question #706639]: Oedometer test of cylindrical specimens

2023-05-14 Thread Ruidong LI
New question #706639 on Yade:
https://answers.launchpad.net/yade/+question/706639

Hi! I am new to Yade. I am currently working on the simulation of the oedometer 
test of cylindrical specimens. We have obtained all .gts files of particles 
inside the cylindrical specimen by CT scanning. The corresponding clumps have 
been successfully imported into Yade using the method provided by [1]. 

Now what we want to do is to simulate the oedometer test. Referring to [2], 
there are two approaches for us to simulate subsequent procedures:
1. First, create cylindrical walls in the form of boxes. Then, fix those walls 
and create two plates (upper and lower). FIx the lower one and apply force on 
the upper one. 
2. Adopt the TriaxialStressController?

My comments and questions about the abovementioned two approaches are here:
1. This solution is easy to understand. But I am not sure whether it is 
reasonable since we have 800 particles.
2. I tried the code in [3]. It seems the wall will be broken. I am not sure 
whether those walls can be fixed so that can be used to simulate the oedometer 
test.

So, can anyone solve my questions and guide me in a possible way? Many thanks.


[1] https://answers.launchpad.net/yade/+question/662544
[2] https://answers.launchpad.net/yade/+question/658629
[3] https://gitlab.com/yade-dev/trunk/-/blob/master/examples/concrete/triax.py

-- 
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


Re: [Yade-users] [Question #706246]: create clump using gts

2023-04-16 Thread Ruidong LI
Question #706246 on Yade changed:
https://answers.launchpad.net/yade/+question/706246

Status: Open => Solved

Ruidong LI confirmed that the question is solved:
This problem was solved by inverting face orientations.

-- 
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


Re: [Yade-users] [Question #706246]: create clump using gts

2023-04-16 Thread Ruidong LI
Question #706246 on Yade changed:
https://answers.launchpad.net/yade/+question/706246

Status: Answered => Open

Ruidong LI is still having a problem:
Is it an advertisement?

-- 
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


[Yade-users] [Question #706246]: create clump using gts

2023-04-16 Thread Ruidong LI
New question #706246 on Yade:
https://answers.launchpad.net/yade/+question/706246

Hi! I try to mimic the example named 'gts-horse.py' with my own .gts file. But 
the spheres seem to be not generated with the facets but outside. My code is 
presented as follows:

# -*- encoding=utf-8 -*-
# © 2009 Václav Šmilauer 

from __future__ import print_function
from yade import pack
import gts, os.path, locale

locale.setlocale(
locale.LC_ALL, 'en_US.UTF-8'
)  #gts is locale-dependend.  If, for example, german locale is used, 
gts.read()-function does not import floats normally
'''
if you get "Error: unsupported locale setting"
-> type as root: "dpkg-reconfigure locales"
-> choose "en_US.UTF-8" (press space to choose)
'''

# coarsen the original horse if we have it
# do nothing if we have the coarsened horse already

surf = gts.read(open('26.gts'))

if surf.is_closed():
pred = pack.inGtsSurface(surf)
aabb = pred.aabb()
dim0 = aabb[1][0] - aabb[0][0]
radius = dim0 / 40.  # get some characteristic dimension, use it for 
radius
O.bodies.append(pack.regularHexa(pred, radius=radius, gap=radius / 4.))
O.bodies.append(pack.gtsSurface2Facets(surf, wire=True))

O.engines = [
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(), Bo1_Facet_Aabb()], 
label='collider'),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_ScGeom_FrictPhys_CundallStrack()],
),
NewtonIntegrator(damping=.1, gravity=[0, 0, -5000]),
PyRunner(iterPeriod=1000, command='timing.stats(); O.pause();'),
PyRunner(iterPeriod=10, command='addPlotData()')
]
O.dt = .7 * PWaveTimeStep()
O.saveTmp()
O.timingEnabled = True
O.trackEnergy = True
from yade import plot
plot.plots = {
'i': (
'total',
O.energy.keys,
)
}


def addPlotData():
plot.addData(i=O.iter, total=O.energy.total(), **O.energy)


plot.plot(subPlots=False)

from yade import timing
from yade import qt
qt.View()


The download link for the '.gts' file is shown below:
https://drive.google.com/file/d/1_vEFdUc64rDjoPJ8utrenGtqS-chAjlR/view?usp=sharing


-- 
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


[Yade-users] [Question #706217]: import shapes as levelset body

2023-04-13 Thread Ruidong LI
New question #706217 on Yade:
https://answers.launchpad.net/yade/+question/706217

Hi! I am new to Yade.  I am currently working on the Levelset-based DEM in 
Yade. I noticed there are generally three approaches for users to use the 
'yade.utils.levelSetBody'. One is among pre-defined shapes (through shape and 
related attributes), or to mimic a Clump instance (clump attribute, for 
comparison purposes), or directly assign the discrete distance field on some 
grid (distilled and grid attributes)s. So, I wonder if it is possible to create 
a level set body with shapes imported in STL or other forms as there are not 
too many illustrations on how to use this function. Can anyone help me with 
this?

Thanks!
Ruidong LI

-- 
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


[Yade-users] [Question #706062]: Triaxial test with flexible cylindrical membrane

2023-04-03 Thread Ruidong LI
New question #706062 on Yade:
https://answers.launchpad.net/yade/+question/706062

Hi, I'm new to Yade. I wanted to do a triaxial test on a cylindrical specimen 
with a flexible membrane. I would like to how can I model the flexible 
membrane, and are there any available codes for references? Can somebody help 
me?

-- 
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