How to create a randomly distributed nanocone with the rough metal surface



This is out sample.
As shown in the picture, we need to simulate this structure.
The substrate is a randomly distributed Si nanocone.
We performed statistical calculations to obtain RMS and standard deviation.
As you can see, there are some nanoparticles on the surface and we also performed statistical calculations to obtain RMS and standard deviation.

For the randomly distributed Si nanocone, we use “Complex structures - Surface roughness” to perform the randomly distributed. However, we have no idea about how to get the roughness surface on the nanocone.

Do you have any suggestions?


I believe this post can solve your problem:

And if have any further queries you can directly message the person who posted the information given in the link.


Thank you.
I also found this page.
However, we also need to distribute Si nanocones according to the statistical results. The three randomly distributed samples provided by lumatic cannot be distributed according to statistical results.
This is the problem.


Hi @Zhan-Hong.Lin,

Generating structures with random parameters can be tricky. In this specific case, I’m not too sure how to include the information you have (RMS and standard deviation). We have a set of functions to generate random numbers, the closest I could find are randn
and randnmatrix that generate pseudo-random numbers with a certain mean and standard deviation.

You can use these functions to generate a set of positions for n cones. These cones can be created using the “cone” object from the library:


For each cone (defined by its height and full angle at the tip), you can add m nano-particles. Their positions can be defined in cylindrical coordinates, by their height from the bottom of the cone and
the theta angle (r is then imposed by the cone angle at the tip). Eventually, you can set another random parameter defining how embedded the particle is in the cone. The script could be something like:

theta = rand(0, 2*pi); 
z = rand(0, z_max); 
r = (z_max - z)/tan(alpha/2); # alpha is the full angle at the tip of the cone 
set("radius", radius);
set("x", r*cos(theta)); 
set("y", r*sin(theta));
set("z", z); 

Note this script would put the particle center at the surface of a cone located at x=y=0.

As you will probably end with a lot of elements in the simulation, I would set the “detail” setting (in “Graphical rendering” tab) to 0 (in the above script, add set(“detail”, 0);).

In any case, the resulting structure will be quite complex, and it will probably need a fairly fine mesh to resolve the particles, etc.

I hope this will help!


Hi @gbaethge,

I am sorry to reply so late.
I recently visited a partner in Japan and just returned.

Thank you for your reply.
However, it does not work well.
Based on your reply, I tried to build a single nano-cone and decorate some particles on it.
But some of the particles will be outside the nano-cone and it will not grow directly on the surface of the nano-cone.
Do you have any thoughts on this?

For the random distribution of the nano-cones, I think I can use the “randn” function to create the structure.
However, for the random distribution of particles on the surface of the nanocone. I do not know.


Hi @Zhan-Hong.Lin,

No problem! :slight_smile:

I think there should be some constraint on the particle position to make sure they are correctly positioned. If you can share your file, I will have a look and see how it could be improved.

As a first step, I would simply used the rand function for the particles on the surface. Once you are satisfied with how the particles are generated, you can add more complexity.


Hi @gbaethge,

I think I have written this structure myself.
I used “sroughness” to describe the rough surface, and then used “randn” to define the size and standard deviation of the nanoparticles on the surface.
Finally, the coordinate position of the matrix of the rough surface is taken as the coordinate position of the center of the nanoparticles.
After that, I may add a variable to slightly adjust the position of the nanoparticles.
But I think maybe this version can share with you first.
Please let me know If you have any suggestions on my script.

pillars and nanoparticle.fsp (1.4 MB)

Best regards,
Zhan-Hong Lin


Hi @Zhan-Hong.Lin,

I had a look at your simulation file, I think it is a nice way to create the rough surface (I have to admit I totally forgot about the sroughness command!).

Regarding the nanoparticles, my concern is their periodic distribution since you defined their positions on a grid.
I’m not familiar with your application so this might not be a problem. Otherwise, I think you can slightly modify your script to generate n particles (n could be a new parameter in the structure group). For each particle, you generate randomly x and y within x_span and y_span, and interpolate z from the surface. I modified your file in that sense:

pillars and nanoparticle_modGB.fsp (679.7 KB)

I added a new parameter, n particles, if set to 0, it will use your script, if different from 0, then it will randomly generate the particles’ position and radius.


Hi @gbaethge,

Thank you for your modification.
In fact, in our case, the distribution of nanoparticles is neither on the mesh nor randomly distributed.
As you can see in the SEM image, it looks like an uneven coating on the surface of the pillars.
So now, I add a parameter to adjust the local random distribution of each nanoparticle.
The range of it is about the radius to avoid a large amount of overlap with each other.
If I reduce interparticle distancce, this means reducing delta 2 in my file. I think our samples look very similar.
I think that in our case, it is enough now.
Unfortunately, it shows an error message that I can’t upload a file right now.

Here, I also want to ask a simple question.
In our simulation, delta 2 will be less than 10, which means we will have more 10,000 nanoparticles in our simulation file and the read speed will slow down.
Is it possible to reduce the detail to speed up the opening of the file?

Thank you very much.

Best regards,
Zhan-Hong Lin


Hi @Zhan-Hong.Lin,

Ok, thanks for the clarification. In any case, the modification I made allows both random or “regular” distribution.

Regarding the question, the GUI can sometimes struggle when there is a lot of object. When I did the modification, I didn’t realize there is a parameter called “detail” in the structure group that sets this. So you just need to modify the last line to:

set("detail", detail);

“detail” can go from 0 (least detail) to 1 (maximum detail). It will help to reduce it.