[Yade-users] [Question #699428]: Cannot simulate periodic box with walls

2021-11-10 Thread Danny (Dingeman) van der Haven
New question #699428 on Yade:
https://answers.launchpad.net/yade/+question/699428

Dear YADE users,

My goal is to simulate a representative volume element under uniaxial 
compression. I want to compare two cases:
1) a fully periodic simulation in which the particle coordinates are scaled
2) a simulation in which the particles are compressed by walls at the top and 
bottom of the box, with periodicity in all other directions.

Case 1 is easy to simulate, using tutorial example 
06-periodic-triaxial-test.py. To simulate case 2 I used example 
06-periodic-triaxial-test.py as a starting point and started integrating 
elements from 03-oedometric-test.py.

I can insert a wall in the periodic box of example 06. However, as soon as I 
also add the sphere-wall interaction to the collider, the simulation no longer 
runs. YADE gives no error messages but refuses to iterate past iteration 1.

The input script I would like to run is (note that although this script is more 
complicated, I already run into issues when only adding the wall and 
sphere-wall interactions to example 06):

from __future__ import print_function
sigmaIso = -1e5
sigmaMin = -1e3

#import matplotlib  

  
#matplotlib.use('Agg')  

  

# generate loose packing

  
from yade import pack, qt, plot

O.periodic = True
sp = pack.SpherePack()
# uniform distribution  

  
sp.makeCloud((0, 0, 0), (2, 2, 2), rMean=.1, rRelFuzz=.3, periodic=True)

# setup periodic boundary, insert the packing   

  
sp.toSimulation()

O.bodies.append(wall(0.0, axis=2, sense=1))

O.engines = [
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Wall_Aabb()], 
allowBiggerThanPeriod=True),
InteractionLoop([Ig2_Sphere_Sphere_ScGeom(),Ig2_Wall_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_ScGeom_FrictPhys_CundallStrack()]),
NewtonIntegrator(damping=.2),
PyRunner(command='checkUnbalanced()',realPeriod=2,label='checker')
]
O.dt = .25 * PWaveTimeStep()


def checkUnbalanced():
if O.iter < 5000:
return
if unbalancedForce() > 0.1:
return
O.bodies.append(wall(2.0, axis=2,sense=-1))
global plate
plate.state.vel = (0,0,-0.01)
O.engines = O.engines + 
[PyRunner(command='addPlotData()',iterPeriod=200)]
checker.command = 'unloadPlate()'

def unloadPlate():
if abs(O.forces.f(plate.id)[2]/(2*2)) > abs(sigmaIso):
plate.state.vel *= -1
checker.command = 'stopUnloading()'

def stopUnloading():
if abs(O.forces.f(plate.id)[2]/(2*2)) < abs(sigmaMin):
plot.saveDataTxt(O.tags['d.id']+'.txt')
O.pause()

def addPlotData():
if not isinstance(O.bodies[-1].shape,Wall):
plot.addData()
return
Fz = O.forces.f(plate.id)[2]
plot.addData(
unbalanced=unbalancedForce(),
i=O.iter,
sz=abs(fz)/(2*2),
ev=abs(plate.state.pos[2]*2*2-2*2*2)/(2*2*2)
)


# define what to plot   

  
plot.plots = {'i': ('unbalanced',),'ev': ('sz'),}
# show the plot 

  
plot.plot()

O.run()

With kind regards,
Danny van der Haven



-- 
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 #699428]: Cannot simulate periodic box with walls

2021-11-11 Thread Jan Stránský
Question #699428 on Yade changed:
https://answers.launchpad.net/yade/+question/699428

Status: Open => Answered

Jan Stránský proposed the following answer:
Hello,

> 2) a simulation in which the particles are compressed by walls at the
top and bottom of the box, with periodicity in all other directions.

Why not simply let periodicity to control also the "top-bottom"
direction? Using PeriTriaxController or similar existing tools. Are
walls necessary?

There is obviously some problem with walls and this simulation settings
[1]. Have a try with a box, like at [2]

Cheers
Jan

[1] https://answers.launchpad.net/yade/+question/692092
[2] 
https://gitlab.com/yade-dev/trunk/-/blob/master/examples/PeriodicBoundaries/periodicSandPile.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 #699428]: Cannot simulate periodic box with walls

2021-11-11 Thread Danny (Dingeman) van der Haven
Question #699428 on Yade changed:
https://answers.launchpad.net/yade/+question/699428

Status: Answered => Open

Danny (Dingeman) van der Haven is still having a problem:
Dear Jan,

Thank you for your answer.

Some sort of wall is essential. Correct me if I am wrong, but when the
box is changed using PeriTriaxController it seems that all particle
coordinates are scaled. This means that stresses will be distributed
uniformly. This is not the case in real uniaxial compaction, where the
stress varies depending on the height of the slice you are looking at.
For this reason, I want to simulate a case where the pressure is
increased using plates.

Using a box as given in [2] did not work, PeriTriaxController does not
scale the inserted box geometry.  A hacky alternative that seems to work
is to create two thin boxes (one at each end) and use those as plates.
However, if I fix these plates and use PeriTriaxController the particle
coordinates are still scaled. If I do not fix the plates and give them a
velocity then the plates move away. How can I make the box-plates move
at a constant speed (irrespective of the other forces on them)?

Also, the documentation says the option dynCell determines how the
imposed stress is controlled. What is meant with "packing stiffness" and
"applying the laws of dynamics"? I assume the latter computers the
average forces on the particles and uses that to compute a stress.

Please let me know if I should add a bug report on GitLab about the
problem with walls and periodic cells. Similarly, if there is a way that
I can help improve the documentation on the YADE website, please let me
know. I plan on implementing new features in YADE and would like to get
involved with the development.

With kind regards,
Danny

-- 
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 #699428]: Cannot simulate periodic box with walls

2021-11-11 Thread Jan Stránský
Question #699428 on Yade changed:
https://answers.launchpad.net/yade/+question/699428

Status: Open => Answered

Jan Stránský proposed the following answer:
> Some sort of wall is essential

depends on what "essential" is.
Also depends on what "some sort" is, because periodic boundary conditions 
essentially are "some sort of wall"..

> when the box is changed using PeriTriaxController it seems that all
particle coordinates are scaled.

basically yes, but it can be controlled and changed, see [3].
If you set homoDeform=0, you should not get the "scaling"

> This means that stresses will be distributed uniformly.

rather strain is distributed uniformly, stress is then result of stiffness and 
packing structure.
If the packing is "uniform", then also the resulting stress would be "uniform".
However, if the packing is "non-uniform", also the resulting stress would be 
"non-uniform".

The "scaling" is only one component of the particles motion, and
therefore only one component to the resulting stress. There are of
course other components (interparticle interactions mainly) influencing
the result.

> This is not the case in real uniaxial compaction, where the stress
varies depending on the height of the slice you are looking at.

What is the reason of stress variation? Dynamics? Gravity? Something else?
For "fast" loading yes, the stress waves should not be neglected and "wall" 
loading is more realistic.
Contrary, for "slow" loading, this "periodic approach" is actually more 
realistic than the loading induced only by planes (which induce stress waves 
not present in reality).

> Using a box as given in [2] did not work

is it still freezing, or just the behavior and results are not as
expected?

> PeriTriaxController ...

I suggest either:
- use PeriTriaxController with no walls
or:
- use "enlarged" periodic cell with only two periodic (transverse) directions 
and the axial direction enlarged (essentially making it non-periodic axially). 
Then you can push the sample by walls and somehow control stress/strain in the 
transverse directions.
or:
- probably both approaches can be used together. The plates are moving 
"independently", the axial direction is strain-controlled with zero change, the 
transverse directions are controlled by PeriTriaxController. Have a try :-)

> If I do not fix the plates and give them a velocity then the plates move away.
> How can I make the box-plates move at a constant speed (irrespective of the 
> other forces on them)?

b.state.blockedDOFs = "xyzXYZ # [4]
b.state.vel = someConstantVelocity

> ... dynCell

basically yes, you can compute stress assuming static equilibrium or you
can somehow take into account inertia of the particles.

> Please let me know if I should add a bug report on GitLab about the
problem with walls and periodic cells.

yes, it seems like a bug

> if there is a way that I can help improve the documentation on the
YADE website, please let me know.

Yes. the documentation is part of the source code. You "just" download
the source code, modify it, and commit the changes to the gitlab. I
don't remember exactly the process, but it is described in documentation
and is out of scope of this question anyway (of course you are free to
open a new question aiming on this).

I plan on implementing new features in YADE and would like to get
involved with the development.

Cool, good luck :-)

Cheers
Jan

[3] https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.Cell.homoDeform
[4] https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.State.blockedDOFs

-- 
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 #699428]: Cannot simulate periodic box with walls

2021-11-12 Thread Danny (Dingeman) van der Haven
Question #699428 on Yade changed:
https://answers.launchpad.net/yade/+question/699428

Status: Answered => Solved

Danny (Dingeman) van der Haven confirmed that the question is solved:
Dear Jan,

> depends on what "essential" is.
> Also depends on what "some sort" is, because periodic boundary conditions 
> essentially are "some > sort of wall"..

A wall that interacts with the particles like a physical wall is
necessary for me to be able to make the comparison I mentioned in the
original question.

> What is the reason of stress variation? Dynamics? Gravity? Something else?
> For "fast" loading yes, the stress waves should not be neglected and "wall" 
> loading is more realistic.
> Contrary, for "slow" loading, this "periodic approach" is actually more 
> realistic than the loading 
> induced only by planes (which induce stress waves not present in reality).

These are valid concerns / questions. This is why I want to do the
comparison between plate compression and periodic compression. I study
the compaction of pharmaceutical powders. The speed of the compression
can be 0.1 mm/s (quasi-static) but also 950.00 mm/s (dynamic) for
tablets with a final thickness of 4.00 mm. Gravity is not a concern, but
dynamics and wall interactions are. For slow compression speeds the
variation in stress along the compression axis is likely caused by
interaction with the side walls. The comparison is mainly to look at the
potential differences made by dynamics.

> is it still freezing, or just the behavior and results are not as
expected?

The simulation iterates, but the behaviour is not what I was aiming for.
The box stays the same size so the wall do not exert any pressure on the
particles. The cell does change.

> If you set homoDeform=0, you should not get the "scaling"

Thank you, that option indeed disabled the scaling / shifting of
particle coordinates.

> b.state.blockedDOFs = "xyzXYZ”
> b.state.vel = someConstantVel

This solved my problem! Thank you! I created a periodic box with an
extra long z-axis. Using two box-plates I can then compress the
particles in the z-direction using the blockedDOFs and vel options,
keeping periodicity in the x and y directions.

> basically yes, you can compute stress assuming static equilibrium or
you can somehow take into account inertia of the particles.

So that means if dynCell = False you assume static equilibrium and if
dynCell = True you take into account the inertia?

> yes, it seems like a bug

I filed an issue report on Gitlab.


Kind regards,
Danny

-- 
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 #699428]: Cannot simulate periodic box with walls

2021-11-13 Thread Jan Stránský
Question #699428 on Yade changed:
https://answers.launchpad.net/yade/+question/699428

Jan Stránský posted a new comment:
concerning dynCell, I don't use it myself and don't know much details.
If you are interested on more details, please open a new question focusing on 
dynCell
Cheers
Jan

-- 
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 #699428]: Cannot simulate periodic box with walls

2021-11-15 Thread Jérôme Duriez
Question #699428 on Yade changed:
https://answers.launchpad.net/yade/+question/699428

Jérôme Duriez posted a new comment:
Regarding dynCell, maybe Eq. (47) of
https://www.sciencedirect.com/science/article/pii/S1631072117302346
could help to understand what are these "laws of dynamic" here.

(Including this reference is actually on my TODO list for Periodic
Boundaries documentation, following up in some future on
https://gitlab.com/yade-dev/trunk/-/merge_requests/802)

-- 
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 #699428]: Cannot simulate periodic box with walls

2021-11-15 Thread Bruno Chareyre
Question #699428 on Yade changed:
https://answers.launchpad.net/yade/+question/699428

Bruno Chareyre posted a new comment:
Hi Danny,
I didn't read all posts in details but I suspect Jan already suggested how to 
proceed: insert boxes and impose their velocities.
Meanwhile the periodic cell should not move.
If the problem persist please post your script again.
Cheers
Bruno

ps. I closed the gitlab issue [2] since it is not actually a bug in my
view (or at least, it won't be fixed).

[2] https://gitlab.com/yade-dev/trunk/-/issues/246

-- 
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 #699428]: Cannot simulate periodic box with walls

2021-12-03 Thread Danny (Dingeman) van der Haven
Question #699428 on Yade changed:
https://answers.launchpad.net/yade/+question/699428

Danny (Dingeman) van der Haven confirmed that the question is solved:
Thanks Jan Stránský, 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