Message: Re: Porous Material : any Idea | Not Logged In (login) |
Guillaume Potdevin wrote: >*** Discussion title: Geometry >Email replies to PublicHyperNews@slac.stanford.edu must include: > In-Reply-To: <"/geometry/472"@geant4-hn.slac.stanford.edu> > Subject: ...change this to be about your reply. > >Dear Geant4 users > >I have successfully used Geant4 for a number of simulations and now I >would like to go one step ahead: > >I would like to be able to study porous materials, and more precisely >powders. I know the code is certainly not made to handle with several >objects of various shapes; but it would be already interesting to have a >stack of radomly placed cubes for example... > >The problem is that I cannot use a kind of "random drop technique" for I >am sure I will have problems of overlapping of objects. > >So does anybody have an idea to define such a geometry, even if I am to >take 95% of the available gig of memory, and if simulations will last >for days and days? > >Thanks in advance for your suggestions. > > > (If the parallel geometry capability would be available today, there would probably be easier solution than what is below (*)). This does not look an easy problem and will probably be time consuming (especially if the number if volumes is large, of course). About the overlaping question, I know that the G4VSolid class defines a "CalculateExtent" method which could be used, but this looks to require some expertise. Maybe with spheres it could be less difficult ? That is assuming the powder is made of spheres of diameter R. It could be done something like shooting random (x,y,z) points and for each new point take care if this new point is at least at a distance > 2*R of any other sphere (and to avoid taking "sqrt" many times, check first if |x-x_new_point| > 2*R, if so accept the point, and if not check for y then z difference and only in the case the 3 previous tests failed, check the distance between the 2 points. If this distance is < 2*R, reject the point). At some point, the fraction of rejected points might reach some asymptot. Maybe a better way would be to apply above algorithm to some small space, say 5.R * 5.R * 5.R. And, in this small space, shoot points about the center in [-3R, +3R] ranges in each direction (3.R instead of 5.R/2 = 2.5R to avoid depletion on the region boundary). Then move to the next region space, 10.R further in some direction. When filling this new space, only the neighbours of this region need to be tested, instead of the all volume. Of course, this requires somewhat management... Not sure this helps... Cheers, Marc (*): with parallel geometry capability, the problem could be solved as : particles are traced in an empty volume, but at the begining of the step, decide, randomly, at what distance will be the next powder grain, then limit the step to this distance and switch the tracking to a geometry containing only a powder grain. Let the interaction(s) occur and put back the primary and any secondaries in the first geometry. etc... Of course you would loose the exact grain placements, but I guess this is not relevant... |
Inline Depth: | Outline Depth: | Add message: |
to: |