individual material properties

Submitted by jordantcox on Thu, 04/13/2017 - 10:37

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's picture

ckloss | Sun, 04/23/2017 - 11:46

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,

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

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