yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #05274
Re: [Question #178830]: on sample generation to model the real granular sand
Question #178830 on Yade changed:
https://answers.launchpad.net/yade/+question/178830
tranviet proposed the following answer:
Hello wangxiaoliang,
I think we can build a new script for this. I have a file to generate
the packing with a given grain size distribution and a target porosity
but it was written in C++ (I did not use python at the time of one year
ago):
- First,you create a sphere with radius satisfy:
Real SphereGenerator::GenerateRadius(vector<Real>& sieveDimension, vector<Real>& percentPassed)
{
typedef boost::random::lagged_fibonacci_01<Real, 48, 44497, 21034> lagged_fibonaccitemp;
static lagged_fibonaccitemp rng;
static boost::uniform_real<> one_hundred(0.0,100.0);
static boost::variate_generator<lagged_fibonaccitemp, boost::uniform_real<> > random1(rng, one_hundred);
Real random=random1();
//cerr<<random<<" ";
int i;//,numberOfSieves=11;
for (i=0;i!=numberOfSieves;++i)
{
if ((percentPassed[i]<random) && (percentPassed[i+1]>=random))
{
return (sieveDimension[i] + (random - percentPassed[i])*(sieveDimension[i+1]-sieveDimension[i])/(percentPassed[i+1]-percentPassed[i]))/2;///Fu, 2003;
}
}
}
- Create spheres using this function until you get your target porosity,
calculated by:
Real CommonFunction::Porosity (MetaBody * ncb, Real& height, Real& BoxDimensionX, Real& BoxDimensionZ)
{
//
Real SphereVolume=0, radius=0;
shared_ptr<BodyContainer>& bodies = ncb->bodies;
BodyContainer::iterator bi = bodies->begin();
BodyContainer::iterator biEnd = bodies->end();
for( ; bi!=biEnd ; ++bi )
{
if((*bi)->isDynamic)
{
Sphere* sphere = YADE_CAST<Sphere*>((*bi)->geometricalModel.get());
radius = sphere->radius;
SphereVolume += 4.0/3.0*Mathr::PI*radius*radius*radius;
}
}
return (1-SphereVolume/(height*BoxDimensionX*BoxDimensionZ));
}
- You can place your generated spheres using any of the proposed methods
that are available in YADE.
Let me know if it can help you.
Cheers,
Viet
--
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.