anisotropy Module

Subroutines for anisotropy detection in surfaces

Anistropy analysis

Autocorrelation function

The autocorrelation function searches for correspondences of a surface with itself.

If the surface heights are white noise, the only shift that matches the original surface is : and elsewhere.

Conversely if the surface exhibits “macro” features, like peaks, valleys, scratches, etc. then decreases more slowly from its maximum value 1 (reached in , ).

If the surface is isotropic (no preferred direction) is axisymmetric, otherwise has a higher decreasing rate across the pattern direction.

Therefore decreasing behavior is a means to catch the direction of anisotropy when it occurs, and especially it quantifies the amount of anisotropy, as explained on figure the figure below.

Autocorrelation function ellipsis

The aforementioned method needs a height \(z\) for the cutting plane. The *ISO 25178* norm suggests \(z=0.2\), however it is not suitable (it is too low) for numerous anisotropic surfaces. We propose to average the values of \(Sal\) and \(Rmax\) for \(z=0.3\), \(0.4\) and \(0.5\).

ACF anisotropy

- (a) A typical surface to be analyzed. - (b) The normalized 2D autocorrelation function. - (c) Two profiles are extracted along directions #1 and #2; #1 across the scratches and #2 along the scratches. - (d) The profile #1 (red curve) is more self repeating than the profile #2 because of shorter wavelengths. - (e) A plane that cuts the 2D \(f_{ACF}\) surface at height \(z\), defines an ellipsis—or just a part of it—with the small axis in direction #1 and the big axis in direction #2. The anisotropy can be quantified by \(Rmax/Sal\), and the groove length by Rmax. (\(Rmax\): semi-major axis, \(Sal\): semi-minor axis) A complementary way of catching the decreasing behavior of \(f_{ACF}\) is to directly study its slope around \((0,0)\), as explained below.

Autocorrelation function slopes

ACF slopes

- (a) In each direction, the point of maximum slope is recorded. - (b) At the minimum radius of the curve, the slopes are determined. The highest is located in \(A\) and the lowest in point \(B\). - (c) Three parameters are built: \(b.sl=\alpha_A\) , \(s.sl=\alpha_B\) and \(r.sl = b.sl/s.sl\).

Simple / multiple anisotropy

some analyses


Uses

  • module~~anisotropy~~UsesGraph module~anisotropy anisotropy data_arch data_arch module~anisotropy->data_arch fftw3 fftw3 module~anisotropy->fftw3 miscellaneous miscellaneous module~anisotropy->miscellaneous module~filter filter module~anisotropy->module~filter module~stat_mom stat_mom module~anisotropy->module~stat_mom sort_arrays sort_arrays module~anisotropy->sort_arrays surfile surfile module~anisotropy->surfile tchebychev tchebychev module~anisotropy->tchebychev module~filter->data_arch module~filter->fftw3 module~filter->module~stat_mom module~filter->sort_arrays module~filter->surfile module~stat_mom->data_arch module~stat_mom->sort_arrays

Used by

  • module~~anisotropy~~UsedByGraph module~anisotropy anisotropy program~test_anisotropy test_anisotropy program~test_anisotropy->module~anisotropy

Variables

Type Visibility Attributes Name Initial
character(len=6), public :: APO_FFT_ANI

dimension multiplier for 0-padding

real(kind=R8), public :: PAD_FFT_ANI

dimension multiplier for 0-padding


Subroutines

public subroutine acv(tab_in, tab_out, long, larg, sub_samp)

Function that returns the acf of an array.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=R8), intent(in), dimension(1:long, 1:larg) :: tab_in

input array

real(kind=R8), intent(out), dimension(1:long, 1:larg) :: tab_out

acf of the input array

integer(kind=I4), intent(in) :: long

2D array length

integer(kind=I4), intent(in) :: larg

2D array width

logical(kind=I4), intent(in) :: sub_samp

sampling?

public subroutine correlation_parameters(tab, long, larg, res, cut, sub_plane, scale_xy, omp)

Function that returns ellipse_acf parameters calculated on the autocorrelation function. But prior to the acf calculation, the mean plane is subtracted.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=R8), intent(in), dimension(1:long, 1:larg) :: tab

2D array in

integer(kind=I4), intent(in) :: long

2D array length

integer(kind=I4), intent(in) :: larg

2D array height

real(kind=R8), intent(out), dimension(1:8) :: res

correlation parameters

real(kind=R8), intent(in), optional :: cut

cut height

logical(kind=I4), intent(in) :: sub_plane

subtract least square plane (sampling)?

real(kind=R8), intent(in), dimension(1:2) :: scale_xy

lag along x and y in micrometers

logical(kind=I4), intent(in) :: omp

multithreaded ?

public subroutine ellipse_acf(tabin, long, larg, p_acv, cut, scale_xy, omp)

Function that returns p_acv which contains parameters on anisotropy.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=R8), intent(in), dimension(1:long, 1:larg) :: tabin

surface acf array

integer(kind=I4), intent(in) :: long

surface length

integer(kind=I4), intent(in) :: larg

surface width

real(kind=R8), intent(out), dimension(1:8) :: p_acv

vector containing anisotropy outputs

real(kind=R8), intent(in), optional :: cut

cut height

real(kind=R8), intent(in), dimension(1:2) :: scale_xy

lag along x and y in micrometers

logical(kind=I4), intent(in) :: omp

multithreaded ?

public subroutine multiple_anisotropy(tabin, long, larg, scale_xy, multi_fft, vec_ani)

Function that returns simple_anisotropy min, max and max/min for different Gaussian filter cutoff

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=R8), intent(in), dimension(1:long, 1:larg) :: tabin

surface acf array

integer(kind=I4), intent(in) :: long

surface length

integer(kind=I4), intent(in) :: larg

surface width

real(kind=R8), intent(in), dimension(1:2) :: scale_xy

lag along x and y

logical(kind=I4), intent(in) :: multi_fft

parallel ffts?

real(kind=R8), intent(out), dimension(1:9) :: vec_ani

anisotropy parameters

public subroutine simple_anisotropy(tabin, long, larg, vec_len, vec_pks, vec_slp, scale_xy, multi_fft)

Function that returns some anisotropy parameters calculated on a polar representation, for each angle from 0 to 179

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=R8), intent(in), dimension(1:long, 1:larg) :: tabin

surface acf array

integer(kind=I4), intent(in) :: long

surface length

integer(kind=I4), intent(in) :: larg

surface width

real(kind=R8), intent(out), dimension(0:179) :: vec_len

vector containing path length ratios

real(kind=R8), intent(out), dimension(0:179) :: vec_pks

vector containing peak mean width

real(kind=R8), intent(out), dimension(0:179) :: vec_slp

vector containing RMS slopes

real(kind=R8), intent(in), dimension(1:2) :: scale_xy

lag along x, y

logical(kind=I4), intent(in) :: multi_fft

parallel ffts?