SOFUS ..
Classes | Typedefs | Functions | Variables
fnm Namespace Reference

Fast Nearfield Method interfaces and implementations. More...

Classes

class  Aperture
 Aperture class. More...
 
class  ApertureData
 ApertureData structure. More...
 
struct  bla
 
class  CircularAperture
 
struct  CircularApertureData
 
struct  GLQuad1D
 GL (Gauss-Legendre) structure. More...
 
struct  GLQuad2D
 GL (Gauss-Legendre) structure. More...
 
class  HanningWeightedPulse
 HanningWeightedPulse. More...
 
class  Identity
 
struct  sysparm_t
 Forward-declare sysparm_t. More...
 
class  TimeSpaceDecompositions
 
class  ToneBurst
 ToneBurst. More...
 

Typedefs

typedef void ProgIF
 
template<class T >
using element_array = sps::unique_aligned_multi_array< sps::element_rect_t< T >, 2 >
 
template<class T >
using point_array = sps::unique_aligned_array< sps::point_t< T > >
 
typedef FNM_ExcitationTypeNS::ExcitationType_Value ExcitationType
 
typedef FNM_FocusingTypeNS::FocusingType_Value FocusingType
 
typedef FNM_ApodizationTypeNS::ApodizationType_Value ApodizationType
 
typedef RwParamTypeNS::RwParamType_Value RwParamType
 
typedef FNM_TypeNS::Type_Value Type
 

Functions

template<class T , template< typename > class A>
CalcCircularTransientFieldRefZeroDelay (const fnm::sysparm_t< T > *sysparm, const fnm::CircularApertureData< T > &data, const T *pos, const size_t nPositions, T **odata, size_t *nSamples)
 
template<class T >
int CalcCircularCwFieldRef (const fnm::sysparm_t< T > *sysparm, const fnm::CircularApertureData< T > &data, const T *pos, const size_t nPositions, std::complex< T > **odata)
 
template<class T >
void MatrixArray (const size_t nRows, const size_t nCols, const T rowWidth, const T rowKerf, const T colWidth, const T colKerf, element_array< T > &&elements)
 
template<class T >
void FocusedLinearArray (const size_t nElements, const size_t nSubH, const size_t nSubW, const T width, const T kerf, const T height, const T eFocus, const int arcPlacement, element_array< T > &&elements)
 
template<class T >
void FocusedConvexArray (const size_t nElements, const size_t nSubH, const size_t nSubW, const T width, const T kerf, const T height, const T radius, const T eFocus, const int arcPlacement, element_array< T > &&elements)
 
template<class T >
std::complex< T > CalcHz (const T &s, const T &l, const T &z, const T &k, const GLQuad2D< T > *gl)
 
template<class T >
int CalcCwFieldRef (const sysparm_t< T > *sysparm, const ApertureData< T > *data, const T *pos, const size_t nPositions, std::complex< T > **odata, void *pBar)
 
template<class T >
int CalcCwFieldFourRef (const sysparm_t< T > *sysparm, const ApertureData< T > *data, const T *pos, const size_t nPositions, std::complex< T > **odata)
 
template<class T >
int CalcCwFocusNaiveFast (const sysparm_t< T > *sysparm, const ApertureData< T > &data, const T *pos, const size_t nPositions, std::complex< T > **odata)
 
template<class T >
std::complex< T > CalcSingleFast (const T &s1, const T &s2, const T &l, const T &z, const T &k, const T *uxs, const T *uweights, const size_t nUs)
 
template<class T >
int CalcCwTimeReversal (const fnm::sysparm_t< T > *sysparm, const ApertureData< T > *pData0, const ApertureData< T > *pData1, const T *pos, const size_t nPositions, const std::complex< T > *pFieldValues, const size_t nComplexValues, std::complex< T > **odata, sps::ProgressBarInterface *pBar)
 
template<class T >
int CalcCwBackThreaded (const fnm::sysparm_t< T > *sysparm, const ApertureData< T > *data, const T *pos, const size_t nPositions, const std::complex< T > *pWeights, const size_t nWeights, std::complex< T > **odata, sps::ProgressBarInterface *pbar)
 
template<class T >
int CalcCwThreaded (const fnm::sysparm_t< T > *sysparm, const ApertureData< T > *data, const T *pos, const size_t nPositions, std::complex< T > **odata, sps::ProgressBarInterface *pbar)
 
template<class T >
void CalcCwField (const sysparm_t< T > *sysparm, const ApertureData< T > &data, const T *pos, const size_t nPositions, std::complex< T > **odata)
 
template<class T >
int CalcCwFocus (const sysparm_t< T > *sysparm, const ApertureData< T > &data, const T *pos, const size_t nPositions, std::complex< T > **odata)
 
template<class T >
int CalcCwFocusRef (const sysparm_t< T > *sysparm, const ApertureData< T > &data, const T *pos, const size_t nPositions, std::complex< T > **odata)
 
template<class T >
void CalcWeightsAndAbcissae (const sysparm_t< T > *sysparm, sps::unique_aligned_array< T > &&uxs, sps::unique_aligned_array< T > &&uweights, sps::unique_aligned_array< T > &&vxs, sps::unique_aligned_array< T > &&vweights)
 
template<class T >
void CalcWeightsAndAbcissaeScaled (const sysparm_t< T > *sysparm, const sps::element_rect_t< T > &element, sps::unique_aligned_array< T > &&uxs, sps::unique_aligned_array< T > &&uweights, sps::unique_aligned_array< T > &&vxs, sps::unique_aligned_array< T > &&vweights)
 
template<class T >
void CalcWeightsAndAbcissaeSIMD (const sysparm_t< T > *sysparm, T **__restrict uv_xs, T **__restrict uv_ws)
 
template<class T >
void CalcWeightsAndAbcissaeScaledSIMD (const sysparm_t< T > *sysparm, const sps::element_rect_t< T > *pElement, sps::unique_aligned_array< T > &&uv_xs, sps::unique_aligned_array< T > &&uv_ws)
 
template<class T >
int PythagoreanFocusDelays (const sps::point_t< T > *pElementPositions, const size_t &nElements, const sps::point_t< T > &focus, const sps::point_t< T > &centerFocus, const size_t &nDelays, T *pDelays)
 
template<class T >
int PytDelays0 (const sps::unique_aligned_array< sps::point_t< T > > &positions, const size_t &nElements, const sps::point_t< T > &centerFocus, const sps::point_t< T > &focus0, const sps::point_t< T > &focus1, const T &c, sps::unique_aligned_array< T > &delays, bool allPositive=false)
 
template<class T >
int PytDelays1 (const sps::unique_aligned_array< sps::point_t< T > > &positions, const size_t &nElements, const sps::point_t< T > &centerFocus, const sps::point_t< T > &focus0, const sps::point_t< T > &focus1, const T &c, sps::unique_aligned_array< T > &delays, bool allPositive=false)
 
template<class T >
int PytDelays2 (const sps::unique_aligned_array< sps::point_t< T > > &positions, const size_t &nElements, const sps::point_t< T > &centerFocus, const sps::point_t< T > &focus0, const sps::point_t< T > &focus1, const T &c, sps::unique_aligned_array< T > &delays, bool allPositive=false)
 
template<typename T , template< typename > class A>
void FnmResponse (const sysparm_t< T > *pSysparm, const ApertureData< T > *pData, const GLQuad2D< T > *pGL, const T &amplitude, const sps::point_t< T > &point, const int &iSampleSignalStart, const size_t &nSamples, T *pOdata, const int mask=0x1F)
 
template<class T , template< typename > class A>
TransientSingleRect (const sysparm_t< T > *pSysparm, const ApertureData< T > *data, const T *pos, const size_t nPositions, T **odata, size_t *nSamples, int mask=0x1F)
 
template<class T >
CalcFdTransientRef (const sysparm_t< T > *pSysparm, const ApertureData< T > *data, const T *pos, const size_t nPositions, const size_t nDim, T **odata, size_t *nSignals, size_t *nSamples)
 
template<class T >
FourDirect (const sps::element_rect_t< T > *element, const sofus::proj_limit_dist_t< T > *limit, const GLQuad2D< T > *uv)
 
template<class T , template< typename > class A>
void DirectWaveSingle (const sysparm_t< T > *pSysparm, const sps::element_rect_t< T > *element, const GLQuad2D< T > *uv, const T &scale, const sofus::proj_limit_dist_t< T > *pld, const T delay, const int iSampleSignalStart, const size_t nSamples, T *odata)
 
template<typename T , template< typename > class A>
void EdgeResponse (const sysparm_t< T > *pSysparm, const sps::element_rect_t< T > *element, const T &scale, const size_t iEdge, const sofus::proj_limit_dist_t< T > *pld, const GLQuad1D< T > *pGL, const T &delay, const int &iSampleSignalStart, const size_t &nSamples, T *odata)
 
template<class T , template< typename > class A>
CalcPwFnmThreaded (const sysparm_t< T > *sysparm, const ApertureData< T > *data, const T *pos, const size_t nPositions, T **odata, size_t *nSamples, int mask, sps::ProgressBarInterface *pBar)
 
template<class T >
unsigned int __stdcall CalcPwFnmThreadFunc (void *ptarg)
 

Variables

template<class T >
constexpr element_array< T >(* element_array_create )(size_t m, size_t n)
 
template<class T >
constexpr element_array< T >(* point_array_create )(size_t m)
 

Detailed Description

Fast Nearfield Method interfaces and implementations.

Typedef Documentation

◆ ApodizationType

◆ element_array

using element_array = sps::unique_aligned_multi_array<sps::element_rect_t<T>, 2>

Type-alias for a unique two-dimensional array of elements

◆ ExcitationType

◆ FocusingType

◆ point_array

using point_array = sps::unique_aligned_array<sps::point_t<T> >

◆ ProgIF

typedef void ProgIF

◆ RwParamType

◆ Type

Function Documentation

◆ CalcCircularCwFieldRef()

int CalcCircularCwFieldRef ( const fnm::sysparm_t< T > *  sysparm,
const fnm::CircularApertureData< T > &  data,
const T *  pos,
const size_t  nPositions,
std::complex< T > **  odata 
)

Compute CW field from circular transducer

Parameters
sysparm
data
pos
nPositions
odata
Returns
success

◆ CalcCircularTransientFieldRefZeroDelay()

T CalcCircularTransientFieldRefZeroDelay ( const fnm::sysparm_t< T > *  sysparm,
const fnm::CircularApertureData< T > &  data,
const T *  pos,
const size_t  nPositions,
T **  odata,
size_t *  nSamples 
)

Transient field computed. The result is in units of [Pa]. The tone burst used is +/- 1.0 V.

Parameters
sysparm
dataData describing the transducer
pos
nPositions
odata
nSamples
Returns

◆ CalcFdTransientRef()

T CalcFdTransientRef ( const sysparm_t< T > *  pSysparm,
const ApertureData< T > *  data,
const T *  pos,
const size_t  nPositions,
const size_t  nDim,
T **  odata,
size_t *  nSignals,
size_t *  nSamples 
)

◆ CalcPwFnmThreaded()

T CalcPwFnmThreaded ( const sysparm_t< T > *  sysparm,
const ApertureData< T > *  data,
const T *  pos,
const size_t  nPositions,
T **  odata,
size_t *  nSamples,
int  mask,
sps::ProgressBarInterface *  pBar 
)

◆ CalcPwFnmThreadFunc()

unsigned int __stdcall CalcPwFnmThreadFunc ( void *  ptarg)

◆ CalcWeightsAndAbcissae()

void CalcWeightsAndAbcissae ( const sysparm_t< T > *  sysparm,
sps::unique_aligned_array< T > &&  uxs,
sps::unique_aligned_array< T > &&  uweights,
sps::unique_aligned_array< T > &&  vxs,
sps::unique_aligned_array< T > &&  vweights 
)
Parameters
sysparm
uxs
uweights
vxs
vweights

◆ CalcWeightsAndAbcissaeScaled()

void CalcWeightsAndAbcissaeScaled ( const sysparm_t< T > *  sysparm,
const sps::element_rect_t< T > &  element,
sps::unique_aligned_array< T > &&  uxs,
sps::unique_aligned_array< T > &&  uweights,
sps::unique_aligned_array< T > &&  vxs,
sps::unique_aligned_array< T > &&  vweights 
)

Weight and abscissa are scaled, but abcissa are not shifted

Parameters
sysparm
element
uxs
uweights
vxs
vweights

◆ CalcWeightsAndAbcissaeScaledSIMD()

void CalcWeightsAndAbcissaeScaledSIMD ( const sysparm_t< T > *  sysparm,
const sps::element_rect_t< T > *  pElement,
sps::unique_aligned_array< T > &&  uv_xs,
sps::unique_aligned_array< T > &&  uv_ws 
)

◆ CalcWeightsAndAbcissaeSIMD()

void CalcWeightsAndAbcissaeSIMD ( const sysparm_t< T > *  sysparm,
T **__restrict  uv_xs,
T **__restrict  uv_ws 
)

◆ DirectWaveSingle()

void DirectWaveSingle ( const sysparm_t< T > *  pSysparm,
const sps::element_rect_t< T > *  element,
const GLQuad2D< T > *  uv,
const T &  scale,
const sofus::proj_limit_dist_t< T > *  pld,
const T  delay,
const int  iSampleSignalStart,
const size_t  nSamples,
T *  odata 
)

Compute direct response for rectangle

Parameters
pSysparm
element
scale
pld
uv
delay
iSampleSignalStart
nSamples
odata

◆ EdgeResponse()

void EdgeResponse ( const sysparm_t< T > *  pSysparm,
const sps::element_rect_t< T > *  element,
const T &  scale,
const size_t  iEdge,
const sofus::proj_limit_dist_t< T > *  pld,
const GLQuad1D< T > *  pGL,
const T &  delay,
const int &  iSampleSignalStart,
const size_t &  nSamples,
T *  odata 
)

Compute edge response for rectangle

Note: Uses scaled Gauss-Legendre weights and abcissae

Parameters
pSysparm
element
scale
iEdge
pld
pGL
delay
iSampleSignalStart
nSamples
odata

◆ FnmResponse()

void FnmResponse ( const sysparm_t< T > *  pSysparm,
const ApertureData< T > *  pData,
const GLQuad2D< T > *  pGL,
const T &  amplitude,
const sps::point_t< T > &  point,
const int &  iSampleSignalStart,
const size_t &  nSamples,
T *  pOdata,
const int  mask = 0x1F 
)

◆ FocusedConvexArray()

void FocusedConvexArray ( const size_t  nElements,
const size_t  nSubH,
const size_t  nSubW,
const T  width,
const T  kerf,
const T  height,
const T  radius,
const T  eFocus,
const int  arcPlacement,
element_array< T > &&  elements 
)

Compute focused convex array

Parameters
[in]nElements
[in]nSubHsub-elements: elevation
[in]nSubWsub-elements: azimuth
[in]width
[in]kerf
[in]height
[in]radius
[in]eFocuselevation focus
[in]arcPlacement0 = outside, 1 = inside
[out]elements
Returns

◆ FocusedLinearArray()

void FocusedLinearArray ( const size_t  nElements,
const size_t  nSubH,
const size_t  nSubW,
const T  width,
const T  kerf,
const T  height,
const T  eFocus,
const int  arcPlacement,
element_array< T > &&  elements 
)

Compute focused linear array

Parameters
[in]nElements
[in]nSubH
[in]nSubW
[in]width
[in]kerf
[in]height
[in]eFocus
[in]arcPlacement0 = outside, 1 = inside
[out]elements

◆ FourDirect()

T FourDirect ( const sps::element_rect_t< T > *  element,
const sofus::proj_limit_dist_t< T > *  limit,
const GLQuad2D< T > *  uv 
)

Note: Uses scaled Gauss-Legendre weights and abcissae

Parameters
element
limitProjection and limits for sphere intersecting element
uvGauss-Legendre weights and abcissae scaled by hw (for u) and hh (for v)
Returns

◆ MatrixArray()

void MatrixArray ( const size_t  nRows,
const size_t  nCols,
const T  rowWidth,
const T  rowKerf,
const T  colWidth,
const T  colKerf,
element_array< T > &&  elements 
)

Create Matrix array

Parameters
[in]nRows
[in]nCols
[in]rowWidth
[in]rowKerf
[in]colWidth
[in]colKerf
[out]elements
Returns

◆ PytDelays0()

int PytDelays0 ( const sps::unique_aligned_array< sps::point_t< T > > &  positions,
const size_t &  nElements,
const sps::point_t< T > &  centerFocus,
const sps::point_t< T > &  focus0,
const sps::point_t< T > &  focus1,
const T &  c,
sps::unique_aligned_array< T > &  delays,
bool  allPositive = false 
)

◆ PytDelays1()

int PytDelays1 ( const sps::unique_aligned_array< sps::point_t< T > > &  positions,
const size_t &  nElements,
const sps::point_t< T > &  centerFocus,
const sps::point_t< T > &  focus0,
const sps::point_t< T > &  focus1,
const T &  c,
sps::unique_aligned_array< T > &  delays,
bool  allPositive = false 
)

◆ PytDelays2()

int PytDelays2 ( const sps::unique_aligned_array< sps::point_t< T > > &  positions,
const size_t &  nElements,
const sps::point_t< T > &  centerFocus,
const sps::point_t< T > &  focus0,
const sps::point_t< T > &  focus1,
const T &  c,
sps::unique_aligned_array< T > &  delays,
bool  allPositive = false 
)

◆ PythagoreanFocusDelays()

int PythagoreanFocusDelays ( const sps::point_t< T > *  pElementPositions,
const size_t &  nElements,
const sps::point_t< T > &  focus,
const sps::point_t< T > &  centerFocus,
const size_t &  nDelays,
T *  pDelays 
)

◆ TransientSingleRect()

T TransientSingleRect ( const sysparm_t< T > *  pSysparm,
const ApertureData< T > *  data,
const T *  pos,
const size_t  nPositions,
T **  odata,
size_t *  nSamples,
int  mask = 0x1F 
)

Variable Documentation

◆ element_array_create

constexpr element_array< T >(* element_array_create) (size_t m, size_t n) ( size_t  m,
size_t  n 
)
constexpr
Initial value:
=
&sps::unique_aligned_multi_array_create<sps::element_rect_t<T>, 2>

◆ point_array_create

constexpr element_array< T >(* point_array_create) (size_t m) ( size_t  m)
constexpr
Initial value:
=
&sps::unique_aligned_array_create<sps::point_t<T> >