It's a pleasure to receive a reply from you. It is a great idea and I will try it.
I have tried the randomDensePack2 method to create dense pack of concrete particles in cylinder. It is however for certain radius and distribution, the method create more of the box geometry. Is there any way to avoid this problem?
Besides, I have read the woo documentation and attempt to extract and visualize the damage parameter omega in order to study the crack pattern. So far I have no luck. It would be great if you could help me with this matter. Sorry for my incompetence...
I adjusted examples/concrete-uniax.py to use randomDensePack2 (see https://github.com/woodem/woo/blob/9e55e5e509ddbc1fdd1aa07b7888c54985cd87a2/examples/concrete-uniax.py; edit to set sphereRadius=2e-3, otherwise takes way too long).
For mixing two ingredients, you could also generate single-material packing with bi-modal PSD (step-wise PSD) and then re-assign material of particles based on their radius (just a loop over particle, like if p.shape.radius<1e-3: p.mat=mat2). That could also be quite simple. The concrete model takes the initial distance as equilibrium, so it does not matter if you change stiffness.
if p.shape.radius<1e-3: p.mat=mat2
The packer always works with rectangular volumes but predicate is then used to cut it to desired shape, such as hyperboloid (in that example). For the damage parameter, you have to do in the controller panel:
This is at the end of the tensile part of the uniaxial test (discs are damage, lines are normal force, but only for compression, signFilter=-1):
Thank you so much for such a quick response! In fact I used the discreted psd to generate particles, it is great to know that, assigning different material to particles is possible without affecting the accuracy of the algorithm. In addition, I have removed "air particles" by simply remove particles with certain radius. In your opinion do you think whether it would cause problem?
Futhermore I am interested in running the compression simulation of foamed concrete such that the outer part of the radius is fixed along z-axis (as in experiment set up), my idea is to block x and y displacements of outer particles along z axis, I wonder if this approach is too primitive?
Thanks for explaining me the packing algorithm, it happened to me that I try to create a cylinder shape out of the method woo.pack.inHyperboloid (as I dont know the argument of woo._packPredicates.inCylinder)
Thanks again for a very detailed steps regarding damage visualization :) . I have follow step 1, 2 easily, for step three, the only similar I have found is 3.Display/Cphys but not concretePhys ... is it because I am running woo on windows?
You can remove particles to simulate air as you like, just do it before the first step of the simulation runs - that way you will not disturb equilibrium. You can also change material, also better before start (contact properties of existing contacts do not update automatically if material changes).
Display/concretePhys is probably missing from the windows build, since the last one predates proper integration of the concrete model. Switch to Linux and be happy. Or try out Windows Subsystem for Linux (no direct experience but read it works).
The predicates are not very well documented (https://woodem.org/woo.pack.html#woo._packPredicates.inCylinder), sorry for that, but you can look in the source https://github.com/woodem/woo/blob/9e55e5e509ddbc1fdd1aa07b7888c54985cd87a2/py/_packPredicates.cpp#L196 to see the constructor arguments are center1, center2 and radius :)
Thank a lot Vaclav, now everthing works excellently!