Subroutines for anisotropy detection in surfaces
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.
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 |
Function that returns the acf of an array.
Type | Intent | Optional | 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? |
Function that returns ellipse_acf parameters calculated on the autocorrelation function. But prior to the acf calculation, the mean plane is subtracted.
Type | Intent | Optional | 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 ? |
Function that returns p_acv which contains parameters on anisotropy.
Type | Intent | Optional | 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 ? |
Function that returns simple_anisotropy min, max and max/min for different Gaussian filter cutoff
Type | Intent | Optional | 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 |
Function that returns some anisotropy parameters calculated on a polar representation, for each angle from 0 to 179
Type | Intent | Optional | 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? |