Heya,
I am also working on trying to have individual material properties for each discreet element. I am, for example. working on spheres that would each have a different youngs modulus in a packed bed. I think this would be best accomplished through a restart file, where I run a simulation, and then modify the restart file (like I am doing right now to provide an individual radius based on an outside algorithm) and then to read in that restart file.
I am hoping that someone can help me understand how to apply individual material properties to a single, discreet element, which currently is done by specifying the material property in the input script and assigning each element a material property. Doing so in my case would be really laborious as I have about 27,000 elements.
Jordan
ckloss | Sun, 04/23/2017 - 11:46
Hi Jordan,
Hi Jordan,
this would necessitate modifying the contact model and replacing fix property/global with a fix property/atom that you set in the input script!
Best wishes
Christoph
jordantcox | Fri, 05/05/2017 - 14:27
Hey Christoph,
Hey Christoph,
I think I am getting closer to this thanks to your help.
So in my input file I have created the per-atom property with the following line
fix y all property/atom youngs scalar yes no no 1e7
I also understand where yeff is being built for the hertz model
Lines 117-135 in file "normal_model_hertz.h"
const int itype = sidata.itype;
const int jtype = sidata.jtype;
double ri = sidata.radi;
double rj = sidata.radj;
double reff=sidata.is_wall ? sidata.radi : (ri*rj/(ri+rj));
#ifdef SUPERQUADRIC_ACTIVE_FLAG
if(sidata.is_non_spherical)
reff = MathExtraLiggghtsNonspherical::get_effective_radius(sidata);
#endif
double meff=sidata.meff;
double sqrtval = sqrt(reff*sidata.deltan);
double Sn=2.*Yeff[itype][jtype]*sqrtval;
double St=8.*Geff[itype][jtype]*sqrtval;
double kn=4./3.*Yeff[itype][jtype]*sqrtval;
I also understand that the Yeff matrix is built in the global properties.
It seems like what I need to do is somehow get the per-atom variable that I built into the sidata, similar to the way r1 and r2 are defined with sidata.radi or sidata.radj
I am confused, in order to do this do I need to create a new variable in the src that puts the fix data into the sidata, or because it is defined in the input script, the array has already been allocated and I just need to call it in the src with something like
double y1 = sidata.yi;
Then just use the y1 to calculate my y-effective.
I also could be way off on my understanding of how this breaks down.
Jordan
ARPITA RAY | Mon, 04/08/2024 - 11:23
Issue in setting the property of particles as a variable
Hello.
I have some issues with setting the material properties. I am actually trying to simulate an undrained triaxial compression test where stiffness of particles vary according to their radius. The contact model to be used is Hooke/stiffness model. The particle stiffnesses are 1e8 times their radius (in Pascals) and the walls have a fixed stiffness of 1e10 Pascals. The normal and tangential stiffnesses are equal. I am confused as to how to set these values since Hooke/stiffness model takes 'property/global' as its input. Even if I set the property as 'property/atom', then do the values of stiffnesses of walls also get changed? Also, I have tried grouping the walls and particles into separate groups and then defining their stiffnesses but an error comes up mentioning a property cannot be defined in two different styles twice. Can someone please suggest a way out?
Thanks.
Arpita