How to Generate Random Surfaces in COMSOL Multiphysics®

June 2, 2017

To easily generate random-looking geometric surfaces, the COMSOL Multiphysics® software provides a powerful set of built-in functions and operators, such as functions for uniform and Gaussian random distributions and a very useful sum operator. In this blog post, we show you how to generate a randomized surface with what amounts to a “one liner” expression with detailed control of the constituent spatial frequency components that determine the nature of the surface’s roughness.

Characterizing Surface Roughness

There are many ways to characterize a rough surface. One way is to use its approximate fractal dimension, which is a value between 2 and 3 for a surface. A surface of fractal dimension 2 is an ordinary, almost everywhere smooth surface; the value 2.5 represents a fairly rugged surface; and values close to 3 represent something that is close to “3D space filling”. Correspondingly, a curve of fractal dimension 1 is smooth almost everywhere, the value 1.5 represents a fairly rugged line, and values close to 2 represent something that is close to “2D space filling”.

A curve with a fractal dimension value of 1.
A curve with a fractal dimension value of 1.2.
A curve with a fractal dimension value of 1.6.

The range of fractal dimension values for curves going from 1 (left) to about 1.2 (center) and to 1.6 (right).

Using a fractal dimension measure can be a useful approximation, but we need to remember that real surfaces aren’t fractal in nature over more than a few orders of magnitude of scale. Real surfaces have a spatial frequency “cutoff” due to their finite size and due to the fact that when “zooming in”, you will eventually hit some new type of microstructure behavior.

Another way of characterizing surface roughness is with respect to its spatial frequency content. This can be turned into a constructive method of synthesizing surface data by using a sum of trigonometric functions similar to a Fourier series expansion. Each term in such a sum represents a certain frequency of oscillation through space. This is the method that we will use here. Let’s quickly review the concepts of spatial frequencies and elementary wave shapes before moving on to trigonometric series.

Spatial Frequencies

In physics, the frequency of oscillations over time occurs in mathematical expressions like

cos(2\pi f t)

where the unit of the frequency f is 1/s, also known as hertz or Hz.

Oscillations through space have a corresponding spatial frequency, as in the following expression, where we simply have replaced the time variable t by a spatial variable x and the time frequency f with the spatial frequency v.

cos(2\pi \nu x)

where the SI unit of the spatial frequency is 1/m.

Spatial frequencies are commonly represented by a wave number k = 2πv.

A related quantity is the wavelength \lambda=\frac{1}{\nu}, which is related to the frequency and wave number as follows:

k=2\pi \nu=\frac{2\pi}{\lambda}

There may be more than one dimension of space and, accordingly, there may be multiple spatial frequencies. In 2D, using Cartesian coordinates, we have:

cos(2\pi (\nu_x x + \nu_y y))=cos(\bf{k} \cdot \bf{x})

where \bf{k}=(k_x,k_y)=(2\pi \nu_x,2\pi\nu_y) is the wave vector and \bf{x}=(x,y).

The wave vector \bf{k} represents the direction of the wave.

Elementary Waves

A rough surface f(x,y) can be seen as composed of many elementary waves of the form

cos(\bf{k} \cdot \bf{x}+\phi)

where φ is a phase angle.

The phase angle also makes it possible to express sine functions due to the relationship sin(\theta)=cos(\pi/2-\theta).

For a completely random surface, it should hold that the phase angle φ can take any value in, say, the interval 0 to π or –π/2 to π/2. When synthesizing elementary waves for a random surface, we can pick φ from a uniform random distribution in such an interval of length π, since we then allow for the expression cos(\phi) to span all possible values between -1 and +1. Note that there may be end-point or wrap-around effects if we choose an interval with a size bigger than π. This is due to the cosine function being its own mirror image in steps of π, according to cos(\pi-\theta)=-cos(\theta).

In order to get an efficient representation that can be used for simulations, we will only allow for a discrete set of spatial frequencies:

νx = m, νy = n

where m and n are integers.

Let’s consider a surface that is composed of elementary waves of the following form:

cos(\bf{k}_{mn} \cdot \bf{x}+\phi)= cos(2 \pi (mx+ny)+\phi) , \bf{k}_{mn}=2\pi(m,n)

By letting m and n take both positive and negative values with equal probabilities, we should be able to get a method of synthesizing a surface with no preferred direction of oscillations.

Note that, in this way, each wave direction is represented twice. For example, the direction (-2,-3) is the same as (2,3); (2,-1) is the same as (-2,1); and so on.

If we allow the spatial frequencies m and n to take values up to maximum integers M and N, respectively, then this corresponds to a high-frequency cutoff at:

\nu_{xmax}=M, \nu_{ymax}=N

Since we also allow for negative values, there are negative cutoffs at:

\nu_{xmin}=-M, \nu_{ymin}=-N

Having a spatial frequency cutoff at \nu_{xmax}=M in the x direction means that the shortest wavelength we can represent is \lambda_{xmin}=\frac{1}{M}, and similarly for the y direction, \lambda_{ymin}=\frac{1}{N}.

Associated Amplitudes for Elementary Waves

Each elementary wave will have an associated amplitude so that each constituent wave component has the following form:

A_{mn}cos(\bf{k}_{mn} \cdot \bf{x}+\phi)

The final surface will be a sum over such wave components:

f(\bf{x})=\sum_{m,n}A_{mn}cos(\bf{k}_{mn} \cdot \bf{x}+\phi)

The simplest choice of amplitude would be to choose the coefficients Amn from a uniform or perhaps Gaussian distribution. However, it turns out that this will not generate a particularly natural-looking surface. In nature, different processes, such as wearing and erosion, make it more likely that slow oscillations have a larger amplitude than fast ones. In the discrete case, this corresponds to the amplitudes tapering off according to some distribution:

A_{mn} =a(m,n) \sim h(m,n)=\frac{1}{\vert m^2+n^2\vert^{\beta}}=\frac{1}{(m^2+n^2)^{\frac{\beta}{2}}}

where the spectral exponent β indicates how quickly higher frequencies are attenuated. Following The Science of Fractal Images (Ref.1), the spectral exponent can be related to the fractal dimension of a surface, but only for an infinite series of waves covering arbitrarily high frequencies and only for certain ranges of the exponent. In practice, the amplitudes a(m,n) of our synthesized surface will be generated using a limited number of frequencies, multiplied with a random function g(m,n) having a Gaussian distribution:

a(m,n) = g(m,n)h(m,n)

A Gaussian, or normal, distribution is chosen to get a smooth but random variation in amplitudes with no limit on the magnitude.

The phase angles φ will be sampled from a function u with a uniform random distribution between –π/2 and π/2:

φ(m,n) = u(m,n)

Summing It Up

To represent our rough surface, we want to use the following double sum:

f(x,y)=\sum_{m=-M}^{M} \sum_{n=-N}^{N} a(m,n) cos(2 \pi(mx+ny)+\phi(m,n))

where x and y are spatial coordinates; m and n are spatial frequencies; a(m,n) are amplitudes; and φ(m,n) are phase angles. This expression is similar to a truncated Fourier series. Although the series is expressed in terms of cosine functions, the phase angles make it so this sum can express a quite general trigonometric series due to the angle sum rule:


Determining Periodicity

Due to its definition, the function f(x,y) will be periodic. In order to get a natural-looking surface, we should “cut out” a suitably small portion by letting x and y vary between some limited values; otherwise, the periodicity of the synthesized data will be apparent. What should these values be?

The overall periodicity will be determined by the slowest oscillations, which correspond to the spatial frequencies m = 1 or n = 1 in the x direction and y direction, respectively. This gives a period length of 1 in each direction.

We could generate the surface over a rectangle [a, a + 1] × [b, b + 1] or smaller in order to “avoid” the periodicity.

Defining Parameters and Random Functions in COMSOL Multiphysics®

For the COMSOL Multiphysics implementation, start by defining a couple of parameters for the spatial frequency resolution and spectral exponent according to the following figure:

A screenshot of the Parameters settings in COMSOL Multiphysics.

The amplitude generation will require a random function with a Gaussian distribution in two variables. This functionality is available under the Global Definitions node:

A screenshot of the COMSOL Multiphysics Model Builder with the Gaussian Random node highlighted.

Here, the Label and Function name have been changed to Gaussian Random and g1, respectively. In addition, the Number of arguments is set to 2 instead of the default 1 and the Distribution type is set to Normal, which corresponds to a normal or Gaussian distribution.

In a similar way, for the phase angle, we need a uniform random function in the interval between –π/2 and π/2:

A screenshot of COMSOL Multiphysics showing the Uniform Random settings.

The Label is changed to Uniform Random, the Function name to u1, the Number of arguments to 2, and the Range to pi.

You can optionally use random seeds to get the same surface each time you use the same input parameters.

Defining the Parametric Surface

The next step is to add a Parametric Surface node under Geometry using a fairly lengthy z-coordinate expression, as follows:


where x = s1 and y = s2 vary between 0 and 1.

The factor 0.01 is used to scale the data in the z direction. Alternatively, this scaling factor can be absorbed into the amplitude coefficients.

A screenshot showing an example of using a parametric surface geometry feature to generate a synthesized random surface.
A parametric surface geometry feature is used to generate a synthesized random surface.

Note that whenever you update any of the parameters or expressions for the Parametric Surface, you need to click the Rebuild with Updated Functions button in the Advanced Settings section of the Settings window.

This expression is a double-sum over the integer parameters m and n each running from –N to N. If we compare this to the mathematical discussion earlier, we can see that we have set M = N, resulting in a square surface patch. The term where m and n are simultaneously zero corresponds to an unwanted “DC” term and is eliminated from the sum by the if statement.

The syntax for the sum() operator is as follows:


which evaluates a sum of a general expression expr for all indices index from lower to upper.

The syntax for the if() operator is as follows:


for which the conditional expression cond is evaluated to expr1 or expr2 depending on the value of the condition.

In this example, the resolution of the parametric surface has been increased by setting the Maximum number of knots to 100 (the default is 20). In addition, the Relative tolerance is relaxed to 1e-3 (the default is 1e-6). The underlying representation of the parametric surface is based on nonuniform rational B-splines (NURBS). More knots correspond to a finer resolution of the NURBS representation. The tolerance is increased, since we are not overly concerned about the approximation accuracy of the generated surface for this example.

By generating a mesh, we can get a useful visualization of the surface, as seen in the figure below.

The mesh of a random surface in COMSOL Multiphysics.
A meshed random surface.

Note that N = 20 means that the fastest oscillations are 1/20 = 0.05 m, assuming SI units. The periodicity in the x and y directions can be seen by following the curves parallel to the y– and x-axes at x = 0, x = 1 and y = 0, y = 1; respectively.

To see the periodicity even more clearly, we can plot the surface on the square [0,2] × [0,2]:

A surface plot showing the periodicity of the square's surface.
The periodicity of the surface on the square [0,2] × [0,2]. The surface height is represented by color.

A surface plot for beta equals 0.5.
A surface plot for beta equals 1.
A surface plot for beta equals 1.8.
A surface plot for beta equals 1.5.

Surfaces generated on the square [0,1] × [0,1] by superimposing 20 frequency components with amplitude spectral exponents β = 0.5, β = 1.0, β = 1.5, and β = 1.8, clockwise from the top-left image. The surface height is represented by color.

Using the Surface Data in Analyses

This type of randomly generated surface can, in COMSOL Multiphysics, be used in any kind of physics simulation context, including for electromagnetics, structural mechanics, acoustics, fluid, heat, or chemical analysis. The expression for the double sum is not limited for use in geometry modeling, but can also be used for material data, equation coefficients, boundary conditions, and more. Using methods, a large number of surface realizations can be used in a loop to gather statistics of the results.

By generalizing the double-sum to a triple-sum, you can synthesize 3D inhomogeneous material data. However, you have to be prepared for long and memory-intensive computations when performing triple-sums for 3D simulations.

An example simulation based on synthetically generated fracture aperture data.
A fracture flow simulation based on synthetically generated fracture aperture data. The Rock Fracture Flow tutorial model is part of the COMSOL Multiphysics Application Library.

A model based on the parametric surface described in this blog post.
A generic thermal expansion analysis of two 1-centimeter-sized metal blocks with a material interface based on the parametric surface described in this blog post. The bottom material slab is aluminum and the top material slab is steel. The visualization shows the von Mises stress at the material interface and on the surface of the aluminum slab.

Relationship to Discrete Cosine and Fourier Transforms

The sum

f(x,y)=\sum_{m=-M}^{M} \sum_{n=-N}^{N} a(m,n) cos(2 \pi(mx+ny)+\phi(m,n))

is similar to a discrete cosine transform or to the real part of a discrete Fourier transform:

f_c(x,y)=\sum_{m=-M}^{M} \sum_{n=-N}^{N} F_c(m,n)e^{i(2 \pi(mx+ny))}

where the subscript c is used to indicate complex quantities and x and y now take discrete values. Here, the phase angle information is encoded in the complex Fourier coefficients.

Due to the definition of the discrete Fourier transform, we are allowed to perform a shift in index in order to generate the following more familiar form:

f_c(x,y)=\sum_{m=0}^{2M} \sum_{n=0}^{2N} F_c(m,n)e^{i(2 \pi(mx+ny))}

or by using discrete values:

f_c(k,l)=\sum_{m=0}^{2M} \sum_{n=0}^{2N} F_c(m,n)e^{i(2 \pi(m \frac{k}{2M+1}+n \frac{l}{2N+1}))}

More commonly, the discrete Fourier transform is indexed like this:

f_c(k,l)=\sum_{m=0}^{\mathfrak{M}-1} \sum_{n=0}^{\mathfrak{N}-1} F_c(m,n)e^{i(2 \pi(m \frac{k}{\mathfrak{M}}+n \frac{l}{\mathfrak{N}}))}


\mathfrak{M}=2M+1, \mathfrak{N}=2N+1.

Note that in order to generate real-valued data, the Fourier coefficients need to fulfill conjugate symmetry relationships in order to eliminate the imaginary-valued contributions from sine functions. Using a sum of cosine functions (i.e., a cosine transform) avoids this problem.

A fast way of generating a large number of Fourier coefficients is to use a fast cosine transform (FCT) or fast Fourier transform (FFT). This could be done in another program and then imported to the COMSOL Desktop® user interface as an interpolation table. The trigonometric interpolation method described above is slower, but has the advantage that it can be used directly on an unstructured mesh and is automatically refined by simply refining the mesh in the user interface.

For a description of using FFT for synthesizing surfaces, see Ref.1.

1D and Cylindrical Cases

Let’s conclude with a few interesting, special cases of random surface generation in COMSOL Multiphysics, including curves and cylinders.

Random Curve

In a 2D simulation, a random curve can be generated using the following expression:


where g1 and u1 are 1D random functions.

Note that when generating a curve, the spectral exponent will have a lower value as compared to that of a surface for the “same level of randomness”.

A screenshot of COMSOL Multiphysics showing a randomized curve.
A randomized curve with spectral exponent 0.8.

Random Polar Curve

A randomized curve in polar coordinates representing random deviations from a circle can be generated:



This corresponds to a parametric curve in 2D polar coordinates:

x=r(\phi) cos(\phi)
y=r(\phi) sin(\phi)

A screenshot of COMSOL Multiphysics showing a randomized polar curve.
A randomized polar curve with spectral exponent 0.8.

Random Cylinder

A randomized cylinder in 3D can be generated using a parametric surface with parameters as follows:




where the parameters s1 and s2 vary between 0 and 1.

This corresponds to a parametric surface in cylindrical coordinates:

x=r(\phi,z) cos(\phi)
y=r(\phi,z) sin(\phi)

Such a single-piece random cylinder represents a type of self-intersecting surface that is not allowed in COMSOL Multiphysics. You can easily get around this by, for example, creating four surface patches corresponding to the parameter s1 varying from 0 to 0.25, 0.25 to 0.5, 0.5 to 0.75, and 0.75 to 1.0. One such patch corresponds to a polar angle span of size \frac{\pi}{2}.

A screenshot of COMSOL Multiphysics showing a randomized tubular surface.
A randomized tubular surface using polar coordinates.

New Part in COMSOL Multiphysics® Version 5.5

As of version 5.5, the Part Library for COMSOL Multiphysics has been extended with several new parts, including a part for creating a random flat surface.

A screenshot of the Random Flat Surface part in the Part Library.
The Random Flat Surface part in the Part Library in COMSOL Multiphysics.


  • The Science of Fractal Images, Editors: Peitgen, Heinz-Otto, Saupe, Dietmar. Eds.


Comments (46)

Leave a Comment
Log In | Registration
Musa Aliyu
June 2, 2017

Very interesting and well-explained concept.

Tommaso Santagata
June 5, 2017

Hi Bjorn, thank you for this wonderful article!
Do you think it is possible to create in a similar way a 2D or 3D porous geometry?
Can I intersect a plane with this parametric surface obtaining a 2D geometry?

Bjorn Sjodin
June 5, 2017

Hi Musa,



Bjorn Sjodin
June 5, 2017

Hi Tommaso,

I’m glad you liked it.
Yes, you can use this technique to create 2D or 3D porous geometries as well.
One method is illustrated in this posting from today on how to generate random holes in a geometry:

We will soon publish another blog posting that will describe a method for generating randomized materials in 2D and 3D. The method is very similar to what is shown here for random surfaces. Stay tuned for that!

With regards to 2D cross sections. Yes, this can be done and we have this write-up and video that shows it:

I hope this helps,

Hossein Taheri
July 14, 2017

Hello Bjorn,
Can I get the surface height plot with colorbar without setting up a physics for the model? I just need to see the periodicity and pattern of the surface.

Bjorn Sjodin
July 14, 2017

Hi Hossein,

Yes, you can do that by first creating a Grid 3D data set, then a Parameterized Surface data set, and finally a 3D plot group with a Surface plot using z as the Expression. I created a file based on this at:
The file is called periodic_surface_no_physics.mph

I hope this helps.


Samuel Ayinde
October 2, 2017

Hi Bjorn,

Thank you so much for this post.


1. I want to optimize the heights of the parametric surface. That is, I want to use the z-direction as my design variable.

2. I want to apply the fixed boundary condition to one edge of the y-direction and force boundary condition to the other edge of the y-direction. So, I need both edges in the y-direction to be straight.

3. I want to use x-direction as design variable such that the shape of the geometry can also change in the x-direction

Please, how can I achieve these. Thank you so much.

Caty Fairclough
October 3, 2017

Hi Samuel,

Thank you for your comment and interest in this blog post.

For questions related to your modeling, please contact our Support team.

Online Support Center:

Paula Nehm
December 10, 2018

Hi Bjorn,
is there a possibility to export the data from the random surface. I need the values of the generated surface to show in exported data where the “bumps” in the surface are.
Thanks in advance

Bjorn Sjodin
December 11, 2018

Hi Paula,

Yes, you can export the geometry and data in a number of ways. Can you explain a bit more how you would like to use the data? Would you, for example, like to use it as a CAD geometry?

Best regards,

Paula Nehm
December 12, 2018

Hi Bjorn,
I need to compare several surface roughnesses with each other and it would be very helpful for that, if I’m able to show the rough surface, so that I can make conclusions whether my resulting fields have influences directly from the surface. There for I need the y-values for each of the x-value of my random curve. I need these values in a data type which is able to be read by python, so that I can plot the surface with my fields in the same figure.
Best regards

Bjorn Sjodin
December 12, 2018

Hi Paula,

To export to a text file for the example file called 1D_Case.mph you can do as follows:
1) Add a Study with a Stationary Solver (no physics needed, this is just to be able to move over to Results and then export)
2) Right-click the Study and select Get Initial Value
3) Right-click Results and add a 2D Plot Group
4) Right click the 2D Plot Group and add a Line plot
5) Type 1 for the Line plot Expression
6) Right click the Line plot node and select Add Plot Data to Export
7) Go to the Export>Plot 1 node, here you can give the location of a text file that you can export to and use in other software

I hope this helps,

Parag Patil
January 4, 2019

Hello Bjorn,

I love this post.
I want to create a tube (as shown by you above) but , lets say, the tube should have inner surface rough (by your illustrated way ) and outer surface plane (without roughness).
Can I do like this?

Thank you.

Shuveksha sapkota
Shuveksha sapkota
June 11, 2021

I want to do the same. Tell me the steps as well

Bjorn Sjodin
January 4, 2019

Hi Parag,

I’m glad you found the post useful. Yes, you can achieve this by follow the instructions for the rough tube and then add a cylinder with a larger radius. For example, by adding a solid cylinder and subtracting it as a solid operation. There are different ways of doing this depending on if you work with solids only or with a mixture of surfaces and solids.

I hope this helps,

昆鹏 张
March 10, 2019

Hi Bjorn,

Wonderful post.
I want to calculate the arithmetical mean height (Sa). How can I get the Sa of the surface through the f(x, y) in COMSOL?

Thank you.

Bjorn Sjodin
March 11, 2019

I’m glad you liked the post. You can easily calculate the mean height by, under Results, adding an Average node to Derived Values (or in version 5.4 you can also use an Evaluation Group for this). Then you select the surface by clicking, type in the expression z and click Evaluate. (Note that the surface of this example is tuned to have an average of zero.)


liam abc
March 13, 2019

Thank you very much, your article is very helpful!
I would also like to ask if I need to build a sphere with roughness. How can I set the corresponding parameters?

Bjorn Sjodin
March 13, 2019

Hi Liam,

I’m glad you liked it. Working with surface roughness on a sphere is a bit more complicated. You would need to work with functions that are periodic on a sphere rather than the usual trigonometric functions. There are several ways of doing this. One way is to work with spherical harmonics functions ( Those are not built-in to COMSOL Multiphysics but you would need to enter those expressions yourself. In addition, for spherical surfaces that you wish to modify it is easier to work with the tools under Results in COMSOL Multiphysics and export the rough spherical surface as an STL. I have uploaded one such example to the Application Gallery entry associated with this blog post. The corresponding files are: spherical_harmonic_stl.mph and spherical_harmonic.stl.

This topic is an interesting one and hopefully we can write a future blog post about it.


Bjorn Sjodin
March 18, 2019

This is to Liam and other interested readers. There is another way of creating a sphere with random surface roughness that doesn’t require spherical harmonics. The method is based on section 1.1.8 in the reference mentioned in the blog posting, the book by Peitgen and Saupe. The method is based on summing up Gaussian distributed values on hemispheres with random orientation. (The approach would also work on a plane.)
I have uploaded some example files to:

The files are named:

昆鹏 张
April 11, 2019

Hi Bjorn,

Thank you for your reply!
Another question: How can I calculate the roughness value about the integral formula Sa=(1/A)∬|f(x,y)|dxdy associated with the rough surface f(x,y) in COMSOL?

Thank you.

Matteo Baldo
April 11, 2019

Really helpful article Bjorn

I’d like to ask if there is a way to create the same 3D surface but instead of being defined as a geometry to be a global analytic function z(x,y), since I need a function like this to model a concentration.

I tried but Comsol says that sum() cannot be used for user defined functions.

Matteo Baldo
April 12, 2019

Nevermind found another of your blog posts that solved my problem.
Amazing work

Bjorn Sjodin
April 12, 2019

Hi 昆鹏 张,

You can integrate under Results by either choosing Derived Values>Integration or Evaluation Group>Integration. There you can integrate any expression including expressions with abs(). Alternatively, you can create what is called coupling operators for integration.
Here is one blogs that describes integration:


Bjorn Sjodin
April 12, 2019

Hi Matteo,

Good to hear.


May 27, 2019

Dear Bjorn,

Thank you for your excellent work. This is Zhen, now is studying contacting simulation(a rough surface and a smooth one).

There is a problem troubling me that how to make two surfaces just contact like this paper ( I tried to find the maximum point of the rough surface, and then let the coordinate z of smooth one be the maximum to make the two surfaces contact, however, it doesn’t work.

Thank you for your time and looking forward to your reply.

Best wishes

Bjorn Sjodin
May 28, 2019

Hi Zhen Li,

Since your problem is about mechanical contact I suggest you contact our technical support team. There you could also provide additional information about your contact problem.

Best regards,

Rukshan Azoor
July 11, 2019

Hi Bjorn,

Thank you for this well written article.

Is there a way to avoid periodicity in larger domains (where random variations over an area > 1 m are required) ?

Do I avoid the corresponding values for m and n during summation, or is there a better method?

Thanks for your help

Kind regards


Bjorn Sjodin
July 11, 2019

Hi Rukshan,

You’re welcome.

The periodicity is intrinsic and cannot be avoided. However, this is not a problem. Instead, to get a larger patch you just use a unit patch and scale it up. In COMSOL using a Scale operation. There are no drawbacks with doing so. You may see that you now need additional randomness. The way to do this is to simply increase the number of frequencies: higher values of N and M. You may also need to adjust the scaling constant (0.01 above) In summary: 1) use higher values of M and N 2) scale the patch 3) adjust the scaling constant.

I don’t know what you mean with avoiding m and n during summation. Perhaps you mean how to avoid certain values of m and n? If that is the case, then you can use nested if statements such as in the example above where if((m!=0),.. was used. You can use if (m!=1,if(n!=2,…)) etc. The expressions may be a bit cumbersome in that case but you can also use mathematical expressions such as if (m>1 && m<5,…) etc.


Rukshan Azoor
July 16, 2019

Hi Bjorn,

Thank you very much for your reply. Scaling and increasing the frequencies worked for me.

Kind regards


Jan Oredsson
Jan Oredsson
February 21, 2020

I cannot find the Parametric Surface node in my version 5.4?!
Please help:

Bjorn Sjodin
Bjorn Sjodin
February 21, 2020 COMSOL Employee

Hi Jan,

Perhaps you didn’t start the software in 3D? The Parametric Surface node will then be visible if you right-click the Geometry node in the Model Builder tree under More Primitives.

I hope this helps,

Daniel Lee
Daniel Lee
March 30, 2020

Hello Bjorn, thank you for this helpful article.
Now, I am studying to generate roughness on surfaces.
How can I get the roughness information in COMSOL, such as Ra (Arithmetical mean deviation), Rms (Root mean squared) and so on?

Thank you!

Bjorn Sjodin
Bjorn Sjodin
April 27, 2020 COMSOL Employee

Hi Daniel,

The files that are available for download as part of this blog post now contains a file random_flat_surface_roughness.mph (made with version 5.5) . This is a geometry part file and you can, for example, copy it to the part library at:
C:\Program Files\COMSOL\COMSOL55\Multiphysics\parts\COMSOL_Multiphysics\Random_Surfaces
This part will allow you to specify the surface roughness by an amplitude scaling factor (the “old” way) or the surface RMS height (Sq).

I hope this helps,

Shuveksha sapkota
Shuveksha sapkota
June 11, 2021

i too need the same information

Jiaxing Cheng
家幸 程
April 29, 2020

Hi Bjorn, thank you for your wonderful blog. I want to ask a question. Please,, How to obtain the surface height with colour as like the above figures; the title: “The periodicity of the surface on the square [0,2] × [0,2]. The surface height is represented by color”. I can obtain the mesh figure, while do I need build a study step to calculate or add a physical field? Thank you very much

Bjorn Sjodin
Bjorn Sjodin
April 30, 2020 COMSOL Employee

Hi Jiaxing Cheng,

Those plots are done under Results as a Surface plot type using the variable z as the expression to be plotted. In the files that are available for download, you can look at periodic_surface_no_physics.mph. That file will show how to do this. If you haven’t set up your physics yet, you can select Get Initial Value (and sometimes Update Solution, if you already solved once) to move from preprocessing to Results.

I hope this helps,

Jiaxing Cheng
Jiaxing Cheng
May 2, 2020

Thank you very much, it helps!

Mehmet Murat Gozum
Mehmet Murat Gozum
June 19, 2020

Hi Bjorn,
This is a great work. However I wonder how I can add spatially distributed sources (monopole point source) throughout the pipe with random amplitude. For example at point 1 my coefficient will be a1, and at point 2 my coefficient will be a2, and so on where all these coefficients follow a normal or uniform distribution. Instead of choosing the point separately and entering those coefficients (because for a grid it will be a lot of points throughout the pipe) is there any way that can automatically do this just like this random surface generation?
Kind Regards,

Bjorn Sjodin
Bjorn Sjodin
June 19, 2020 COMSOL Employee

Hi Mehmet,

I’m glad you liked it. Would this be for an acoustics application?

Best regards,

Mehmet Murat Gozum
Mehmet Murat Gozum
June 19, 2020

Hi Bjorn,
Yes for the acoustic system where the pipe is filled with water (acoustic) and the thickness is any elastic material (Structural mechanics). The sources are gonna be spread throughout the pipe (the grid will be in acoustic domain).

Kind regards,
Mehmet Murat Gozum

Mehmet Murat Gozum
Mehmet Murat Gozum
June 20, 2020

Hi Bjorn,
Actually I guess it would be possible by using the summation term (in r and z) as the monopole domain source which will be the spatial distribution of the sources. My only question left would be about N values both used in r and z. Because in the pipes the ratio of the length to the radius to high so would it be better idea to use N1 and N2 instead of same N in the summation or it would not change the results?

Kind regards,
Mehmet Murat Gozum

Bjorn Sjodin
Bjorn Sjodin
June 22, 2020 COMSOL Employee

Hi Methmet,
N1 and N2 would control the maximum spatial frequency content in the two coordinate directions. If you have the same frequency content then they would be the same. If, say, N2, has slower variations only then N2 would be smaller than N1.

Best regards,

Shuveksha sapkota
Shuveksha sapkota
June 11, 2021

Hey there. I am using Comsol to study about the effects on roughness on heat transfer chractersistics of a circular microchannel. These are the details.
Standard deviation = 1.00 micrometers
Surface roughness mean= 1.40 micrometers
Inner diameter= 123 micrometres
Outer diameter= 282 micrometers
Please provide me a suitable way on how this geomtry can be created and analysis be done.

You have similar file as i ned. Please provide details on how you created this.
random_tube_geometry_4_patches_hollowed_with_cylinder.mph – 6.42MB

Shuveksha sapkota
Shuveksha sapkota
June 11, 2021

Can we export geometry file created in COMSOL to other format like .iges or .stp?

Brianne Christopher
June 11, 2021

Hi Shuveksha,

Please go to or email for assistance with your modeling problem.

Best regards,