Randomizing structures
Randomizing structures
In most simulations regular structures (hexagonal arrays) are used, but all real fibres deviate from these ideal structures by random fluctuations in inclusion size and position. It is useful to know how much such fluctuations can affect eg losses or dispersion. Fibre has some elementary randomization routines to create randomized structures from perfect structures. It should however be noted that the implementation of the randomization is very basic, and allows little control. For systematic statistical studies it is best to randomize the structure with an external software writing structure files directly with a complete control over randomization.
Keywords
randomize position=standard_deviation (absolute)
randomize size=standard_deviation (relative)
The randomization is done within the current class of symmetry, on the currently defined structure. Calling these keywords several times is thus cumulative. To start several realizations with same standard deviation from the same ideal structure, the ideal structure has to be reloaded before calling the randomization keywords.
Algorithm
Randomization is done using a normal random distribution, maintaining the symmetry imposed by the structure file, with basic consistency checks. In more detail:
- position randomization: is done on x and y coordinates using xrandom=x0+std*random_normal() where std is the standard deviation defined with the randomize position keyword. Symmetry is maintained, which means that randomization is only done within the irreducible angular sector (with all other angular sectors derived from this sector by appropriate symmetries), with the additional constraint that cylinders which are on an axis of symmetry remain on that axis of symmetry (in that case randomization is done purely on the radial cylindrical coordinates: rrandomized=r0+std*random_normal())
- size randomization: is done on the radius (circular inclusions), inner and outer radius (coated inclusions) and long and shot axis (ellipses) using radiusrandom=radius0*(1+std*random_normal()). For coated inclusions realizations in which the inner radius is larger than the outer radius are rejected. All realizations with negative radius are rejected.
Shortcomings
This way of randomizing within constraints has several flaws. In particular because of the symmetries, a cylinder that is at the origin will always remain at the origin. Layered inclusions with several concentric layers are not randomized.