H2Lib  3.0
Data Fields
_kernelbem3d Struct Reference

Substructure containing callback functions to different types of kernel evaluations. More...

#include <bem3d.h>

Data Fields

void(* fundamental )(pcbem3d bem, const real(*X)[3], const real(*Y)[3], pamatrix V)
 Evaluate the fundamental solution at given point sets X and Y. More...
 
void(* fundamental_wave )(pcbem3d bem, const real(*X)[3], const real(*Y)[3], pcreal dir, pamatrix V)
 Evaluate the modified fundamental solution in direction $c_\iota$ at given point sets X and Y. More...
 
void(* dny_fundamental )(pcbem3d bem, const real(*X)[3], const real(*Y)[3], const real(*NY)[3], pamatrix V)
 Evaluate the normal derivative of the fundamental solution in respect to the 2nd component at given point sets X and Y More...
 
void(* dnx_dny_fundamental )(pcbem3d bem, const real(*X)[3], const real(*NX)[3], const real(*Y)[3], const real(*NY)[3], pamatrix V)
 Evaluate the normal derivatives of the fundamental solution in respect to the 1st and 2nd component at given point sets X and Y More...
 
void(* kernel_row )(const uint *idx, const real(*Z)[3], pcbem3d bem, pamatrix A)
 Integrate the kernel function within the 1st component. More...
 
void(* kernel_col )(const uint *idx, const real(*Z)[3], pcbem3d bem, pamatrix B)
 Integrate the kernel function within the 2nd component. More...
 
void(* dnz_kernel_row )(const uint *idx, const real(*Z)[3], const real(*NZ)[3], pcbem3d bem, pamatrix A)
 Integrate the normal derivative of the kernel function with respect to the 2nd component within the 1st component. More...
 
void(* dnz_kernel_col )(const uint *idx, const real(*Z)[3], const real(*NZ)[3], pcbem3d bem, pamatrix B)
 Integrate the normal derivative of the kernel function with respect to the 1st component within the 2nd component. More...
 
void(* fundamental_row )(const uint *idx, const real(*Z)[3], pcbem3d bem, pamatrix A)
 Integrate the fundamental solution within the 1st component. More...
 
void(* fundamental_col )(const uint *idx, const real(*Z)[3], pcbem3d bem, pamatrix B)
 Integrate the fundamental solution within the 2nd component. More...
 
void(* dnz_fundamental_row )(const uint *idx, const real(*Z)[3], const real(*NZ)[3], pcbem3d bem, pamatrix A)
 Integrate the normal derivative of the fundamental solution with respect to the 2nd component within the 1st component. More...
 
void(* dnz_fundamental_col )(const uint *idx, const real(*Z)[3], const real(*NZ)[3], pcbem3d bem, pamatrix B)
 Integrate the normal derivative of the fundamental solution with respect to the 1st component within the 2nd component. More...
 
void(* lagrange_row )(const uint *idx, pcrealavector px, pcrealavector py, pcrealavector pz, pcbem3d bem, pamatrix V)
 Integrate the Lagrange polynomials or their derivatives within the 1st component. More...
 
void(* lagrange_wave_row )(const uint *idx, pcrealavector px, pcrealavector py, pcrealavector pz, pcreal dir, pcbem3d bem, pamatrix V)
 Integrate the modified Lagrange polynomials in direction $c_\iota$ or their derivatives within the 1st component. More...
 
void(* lagrange_col )(const uint *idx, pcrealavector px, pcrealavector py, pcrealavector pz, pcbem3d bem, pamatrix W)
 Integrate the Lagrange polynomials or their derivatives within the 2nd component. More...
 
void(* lagrange_wave_col )(const uint *idx, pcrealavector px, pcrealavector py, pcrealavector pz, pcreal dir, pcbem3d bem, pamatrix W)
 Integrate the modified Lagrange polynomials in direction $c_\iota$ or their derivatives within the 2nd component. More...
 

Detailed Description

Substructure containing callback functions to different types of kernel evaluations.

This struct consists of a set of callback function, that will evaluate the kernel, its derivatives or integrals over the kernel and / or its derivatives. Of course they depend on an appropriate problem to be solved. The kernel function will be a function of the following form:

\[ g : \mathbb R^3 \times \mathbb R^3 \to \mathbb K \]

In many application the field $ \mathbb K $ will just be the field of the real number $ \mathbb R $ , as in the laplace-problem. But it can also be the complex field $ \mathbb C $ as in the helmholtz-equation or a vector valued function as in the lame-problem.

Field Documentation

void(* dnx_dny_fundamental) (pcbem3d bem, const real(*X)[3], const real(*NX)[3], const real(*Y)[3], const real(*NY)[3], pamatrix V)

Evaluate the normal derivatives of the fundamental solution in respect to the 1st and 2nd component at given point sets X and Y

This callback will evaluate the normal derivatives of the fundamental solution $ g $ corresponding to $ x $ and $ y $ at points $ x_i, y_j \in \mathbb R^3 $ and store the result into matrix V at position $ V_{ij} $ .

  • Parameters
    bemBEM-object containing additional information for computation of the matrix entries.
    XAn array of 3D-vectors. X[i][0] will be the first component of the i-th vector. Analogously X[i][1] will be the second component of the i-th vector. The length of this array is determined by V->rows .
    NXAn array of normal vectors correspoding to the vectors defined by X and are stored in the same way as X and Y.
    YAn array of 3D-vectors. Y[i][0] will be the first component of the i-th vector. Analogously Y[i][1] will be the second component of the i-th vector. The length of this array is determined by V->cols .
    NYAn array of normal vectors correspoding to the vectors defined by Y and are stored in the same way as X and Y.
    VV will contain the results of the kernel evaluations. It applies

    \[ V_{ij} = \frac{\partial^2 g}{\partial n_x \partial n_y}(\vec x_i, \vec y_j) . \]

void(* dny_fundamental) (pcbem3d bem, const real(*X)[3], const real(*Y)[3], const real(*NY)[3], pamatrix V)

Evaluate the normal derivative of the fundamental solution in respect to the 2nd component at given point sets X and Y

This callback will evaluate the normal derivatives of the fundamental solution $ g $ corresponding to $ y $ at points $ x_i, y_j \in \mathbb R^3 $ and store the result into matrix V at position $ V_{ij} $ .

Parameters
bemBEM-object containing additional information for computation of the matrix entries.
XAn array of 3D-vectors. X[i][0] will be the first component of the i-th vector. Analogously X[i][1] will be the second component of the i-th vector. The length of this array is determined by V->rows .
YAn array of 3D-vectors. Y[i][0] will be the first component of the i-th vector. Analogously Y[i][1] will be the second component of the i-th vector. The length of this array is determined by V->cols .
NYAn array of normal vectors correspoding to the vectors defined by Y and are stored in the same way as X and Y.
VV will contain the results of the kernel evaluations. It applies

\[ V_{ij} = \frac{\partial g}{\partial n_y}(\vec x_i, \vec y_j) . \]

void(* dnz_fundamental_col) (const uint *idx, const real(*Z)[3], const real(*NZ)[3], pcbem3d bem, pamatrix B)

Integrate the normal derivative of the fundamental solution with respect to the 1st component within the 2nd component.

This callback will evaluate the integral

\[ \int_\Gamma \frac{\partial g}{\partial n_z} (\vec z, \vec y) \, \psi(\vec y) \, \mathrm d \vec y \]

Parameters
idxThis array describes the permutation of the degrees of freedom. Its length is determined by B->rows . In case idx == NULL it is assumed the degrees of freedom are $ 0, 1, \ldots , \texttt{B->rows} -1 $ instead.
ZAn array of 3D-vectors. Z[i][0] will be the first component of the i-th vector. Analogously Z[i][1] will be the second component of the i-th vector. The length of this array is determined by B->cols .
NZAn array Normal vectors corresponding to the vectors Z.
bemBEM-object containing additional information for computation of the matrix entries.
BB will contain the results of the integral evaluations. It applies

\[ B_{ij} = \int_\Gamma \frac{\partial g}{\partial n_z} (\vec z_j, \vec y) \, \psi_i(\vec y) \, \mathrm d \vec y . \]

void(* dnz_fundamental_row) (const uint *idx, const real(*Z)[3], const real(*NZ)[3], pcbem3d bem, pamatrix A)

Integrate the normal derivative of the fundamental solution with respect to the 2nd component within the 1st component.

This callback will evaluate the integral

\[ \int_\Gamma \varphi(\vec x) \, \frac{\partial g}{\partial n_z} (\vec x, \vec z) \, \mathrm d \vec x \]

Parameters
idxThis array describes the permutation of the degrees of freedom. Its length is determined by A->rows . In case idx == NULL it is assumed the degrees of freedom are $ 0, 1, \ldots , \texttt{A->rows} -1 $ instead.
ZAn array of 3D-vectors. Z[i][0] will be the first component of the i-th vector. Analogously Z[i][1] will be the second component of the i-th vector. The length of this array is determined by A->cols .
NZAn array Normal vectors corresponding to the vectors Z.
bemBEM-object containing additional information for computation of the matrix entries.
AA will contain the results of the integral evaluations. It applies

\[ A_{ij} = \int_\Gamma \varphi_i(\vec x) \, \frac{\partial g}{\partial n_z} (\vec x, \vec z_j) \, \mathrm d \vec x . \]

void(* dnz_kernel_col) (const uint *idx, const real(*Z)[3], const real(*NZ)[3], pcbem3d bem, pamatrix B)

Integrate the normal derivative of the kernel function with respect to the 1st component within the 2nd component.

This callback will evaluate the integral

\[ \int_\Gamma \frac{\partial \gamma}{\partial n_z} (\vec z, \vec y) \, \psi(\vec y) \, \mathrm d \vec y \]

with $ \gamma $ being a kernel function depending on a specific integral operator. In case of the single layer potential it applies $ \gamma = g $ . But in case of the double layer potential e.g. it applies $ \gamma = \frac{\partial g}{\partial n_y} $ .

Parameters
idxThis array describes the permutation of the degrees of freedom. Its length is determined by B->rows . In case idx == NULL it is assumed the degrees of freedom are $ 0, 1, \ldots , \texttt{B->rows} -1 $ instead.
ZAn array of 3D-vectors. Z[i][0] will be the first component of the i-th vector. Analogously Z[i][1] will be the second component of the i-th vector. The length of this array is determined by B->cols .
NZAn array Normal vectors corresponding to the vectors Z.
bemBEM-object containing additional information for computation of the matrix entries.
BB will contain the results of the integral evaluations. It applies

\[ B_{ij} = \int_\Gamma \frac{\partial \gamma}{\partial n_z} (\vec z_j, \vec y) \, \psi_i(\vec y) \, \mathrm d \vec y . \]

void(* dnz_kernel_row) (const uint *idx, const real(*Z)[3], const real(*NZ)[3], pcbem3d bem, pamatrix A)

Integrate the normal derivative of the kernel function with respect to the 2nd component within the 1st component.

This callback will evaluate the integral

\[ \int_\Gamma \varphi(\vec x) \, \frac{\partial \gamma}{\partial n_z} (\vec x, \vec z) \, \mathrm d \vec x \]

with $ \gamma $ being a kernel function depending on a specific integral operator. In case of the single layer potential it applies $ \gamma = g $ . But in case of the double layer potential e.g. it applies $ \gamma = \frac{\partial g}{\partial n_y} $ .

Parameters
idxThis array describes the permutation of the degrees of freedom. Its length is determined by A->rows . In case idx == NULL it is assumed the degrees of freedom are $ 0, 1, \ldots , \texttt{A->rows} -1 $ instead.
ZAn array of 3D-vectors. Z[i][0] will be the first component of the i-th vector. Analogously Z[i][1] will be the second component of the i-th vector. The length of this array is determined by A->cols .
NZAn array Normal vectors corresponding to the vectors Z.
bemBEM-object containing additional information for computation of the matrix entries.
AA will contain the results of the integral evaluations. It applies

\[ A_{ij} = \int_\Gamma \varphi_i(\vec x) \, \frac{\partial \gamma}{\partial n_z} (\vec x, \vec z_j) \, \mathrm d \vec x . \]

void(* fundamental) (pcbem3d bem, const real(*X)[3], const real(*Y)[3], pamatrix V)

Evaluate the fundamental solution at given point sets X and Y.

This callback will evaluate the fundamental solution $ g $ at points $ x_i, y_j \in \mathbb R^3 $ and store the result into matrix V at position $ V_{ij} $ .

Parameters
bemBEM-object containing additional information for computation of the matrix entries.
XAn array of 3D-vectors. X[i][0] will be the first component of the i-th vector. Analogous X[i][1] will be the second component of the i-th vector. The length of this array is determined by V->rows .
YAn array of 3D-vectors. Y[i][0] will be the first component of the i-th vector. Analogous Y[i][1] will be the second component of the i-th vector. The length of this array is determined by V->cols .
VV will contain the results of the kernel evaluations. It applies

\[ V_{ij} = g(\vec x_i, \vec y_j) . \]

void(* fundamental_col) (const uint *idx, const real(*Z)[3], pcbem3d bem, pamatrix B)

Integrate the fundamental solution within the 2nd component.

This callback will evaluate the integral

\[ \int_\Gamma g(\vec z, \vec y) \, \psi(\vec y) \, \mathrm d \vec y \]

Parameters
idxThis array describes the permutation of the degrees of freedom. Its length is determined by B->rows . In case idx == NULL it is assumed the degrees of freedom are $ 0, 1, \ldots , \texttt{B->rows} -1 $ instead.
ZAn array of 3D-vectors. Z[i][0] will be the first component of the i-th vector. Analogously Z[i][1] will be the second component of the i-th vector. The length of this array is determined by B->cols .
bemBEM-object containing additional information for computation of the matrix entries.
BB will contain the results of the integral evaluations. It applies

\[ B_{ij} = \int_\Gamma g(\vec z_j, \vec y) \, \psi_i(\vec y) \, \mathrm d \vec y . \]

void(* fundamental_row) (const uint *idx, const real(*Z)[3], pcbem3d bem, pamatrix A)

Integrate the fundamental solution within the 1st component.

This callback will evaluate the integral

\[ \int_\Gamma \varphi(\vec x) \, g(\vec x, \vec z) \, \mathrm d \vec x \]

Parameters
idxThis array describes the permutation of the degrees of freedom. Its length is determined by A->rows . In case idx == NULL it is assumed the degrees of freedom are $ 0, 1, \ldots , \texttt{A->rows} -1 $ instead.
ZAn array of 3D-vectors. Z[i][0] will be the first component of the i-th vector. Analogously Z[i][1] will be the second component of the i-th vector. The length of this array is determined by A->cols .
bemBEM-object containing additional information for computation of the matrix entries.
AA will contain the results of the integral evaluations. It applies

\[ A_{ij} = \int_\Gamma \varphi_i(\vec x) \, g(\vec x, \vec z_j) \, \mathrm d \vec x . \]

void(* fundamental_wave) (pcbem3d bem, const real(*X)[3], const real(*Y)[3], pcreal dir, pamatrix V)

Evaluate the modified fundamental solution in direction $c_\iota$ at given point sets X and Y.

This callback will evaluate the modified fundamental solution $ g_{c_\iota} $ with direction $c_\iota$ at points $ x_i, y_j \in \mathbb R^3 $ and store the result into matrix V at position $ V_{ij} $ .

Parameters
bemBEM-object containing additional information for computation of the matrix entries.
XAn array of 3D-vectors. X[i][0] will be the first component of the i-th vector. Analogous X[i][1] will be the second component of the i-th vector. The length of this array is determined by V->rows .
YAn array of 3D-vectors. Y[i][0] will be the first component of the i-th vector. Analogous Y[i][1] will be the second component of the i-th vector. The length of this array is determined by V->cols .
dirDirection $c_\iota$ in which the modified fundamental solution should be evaluated.
VV will contain the results of the kernel evaluations. It applies

\[ V_{ij} = g_{c_\iota}(\vec x_i, \vec y_j) = g(\vec x_i, \vec y_j) e^{-\langle c_\iota, \vec x_i - \vec y_j \rangle}. \]

void(* kernel_col) (const uint *idx, const real(*Z)[3], pcbem3d bem, pamatrix B)

Integrate the kernel function within the 2nd component.

This callback will evaluate the integral

\[ \int_\Gamma \gamma(\vec z, \vec y) \, \psi(\vec y) \, \mathrm d \vec y \]

with $ \gamma $ being a kernel function depending on a specific integral operator. In case of the single layer potential it applies $ \gamma = g $ . But in case of the double layer potential e.g. it applies $ \gamma = \frac{\partial g}{\partial n_y} $ .

Parameters
idxThis array describes the permutation of the degrees of freedom. Its length is determined by B->rows . In case idx == NULL it is assumed the degrees of freedom are $ 0, 1, \ldots , \texttt{B->rows} -1 $ instead.
ZAn array of 3D-vectors. Z[i][0] will be the first component of the i-th vector. Analogously Z[i][1] will be the second component of the i-th vector. The length of this array is determined by B->cols .
bemBEM-object containing additional information for computation of the matrix entries.
BB will contain the results of the integral evaluations. It applies

\[ B_{ij} = \int_\Gamma \gamma(\vec z_j, \vec y) \, \psi_i(\vec y) \, \mathrm d \vec y . \]

void(* kernel_row) (const uint *idx, const real(*Z)[3], pcbem3d bem, pamatrix A)

Integrate the kernel function within the 1st component.

This callback will evaluate the integral

\[ \int_\Gamma \varphi(\vec x) \, \gamma(\vec x, \vec z) \, \mathrm d \vec x \]

with $ \gamma $ being a kernel function depending on a specific integral operator. In case of the single layer potential it applies $ \gamma = g $ . But in case of the double layer potential e.g. it applies $ \gamma = \frac{\partial g}{\partial n_y} $ .

Parameters
idxThis array describes the permutation of the degrees of freedom. Its length is determined by A->rows . In case idx == NULL it is assumed the degrees of freedom are $ 0, 1, \ldots , \texttt{A->rows} -1 $ instead.
ZAn array of 3D-vectors. Z[i][0] will be the first component of the i-th vector. Analogously Z[i][1] will be the second component of the i-th vector. The length of this array is determined by A->cols .
bemBEM-object containing additional information for computation of the matrix entries.
AA will contain the results of the integral evaluations. It applies

\[ A_{ij} = \int_\Gamma \varphi_i(\vec x) \, \gamma(\vec x, \vec z_j) \, \mathrm d \vec x . \]

void(* lagrange_col) (const uint *idx, pcrealavector px, pcrealavector py, pcrealavector pz, pcbem3d bem, pamatrix W)

Integrate the Lagrange polynomials or their derivatives within the 2nd component.

This callback will evaluate the integral

\[ \int_\Gamma \mathcal L(\vec y) \, \psi(\vec y) \, \mathrm d \vec y \]

with $ \mathcal L $ being a Lagrange polynomial or its derivative.

Parameters
idxThis array describes the permutation of the degrees of freedom. Its length is determined by W->rows . In case idx == NULL it is assumed the degrees of freedom are $ 0, 1, \ldots , \texttt{W->rows} -1 $ instead.
pxA Vector of type avector that contains interpolation points in x-direction.
pyA Vector of type avector that contains interpolation points in y-direction.
pzA Vector of type avector that contains interpolation points in z-direction.
bemBEM-object containing additional information for computation of the matrix entries.
WW will contain the results of the integral evaluations. It applies

\[ W_{ij} = \int_\Gamma \mathcal L_j(\vec y) \, \psi_i(\vec y) \, \mathrm d \vec y . \]

The index $ j $ is computed in a tensor way. Having $ m_x $ Points in x-direction, $ m_y $ Points in y-direction and $ m_y $ Points in z-direction, then using the $ j_x $ -th, the $ j_y $ -th and the $ j_z $ -th point will result in matrix index $ j = j_x + j_y \cdot m_x + j_z \cdot m_x \cdot m_y$ .
void(* lagrange_row) (const uint *idx, pcrealavector px, pcrealavector py, pcrealavector pz, pcbem3d bem, pamatrix V)

Integrate the Lagrange polynomials or their derivatives within the 1st component.

This callback will evaluate the integral

\[ \int_\Gamma \varphi(\vec x) \, \mathcal L(\vec x) \, \mathrm d \vec x \]

with $ \mathcal L $ being a Lagrange polynomial or its derivative.

Parameters
idxThis array describes the permutation of the degrees of freedom. Its length is determined by V->rows . In case idx == NULL it is assumed the degrees of freedom are $ 0, 1, \ldots , \texttt{V->rows} -1 $ instead.
pxA Vector of type avector that contains interpolation points in x-direction.
pyA Vector of type avector that contains interpolation points in y-direction.
pzA Vector of type avector that contains interpolation points in z-direction.
bemBEM-object containing additional information for computation of the matrix entries.
VV will contain the results of the integral evaluations. It applies

\[ V_{ij} = \int_\Gamma \varphi_i(\vec x) \, \mathcal L_j(\vec x) \, \mathrm d \vec x . \]

The index $ j $ is computed in a tensor way. Having $ m_x $ Points in x-direction, $ m_y $ Points in y-direction and $ m_y $ Points in z-direction, then using the $ j_x $ -th, the $ j_y $ -th and the $ j_z $ -th point will result in matrix index $ j = j_x + j_y \cdot m_x + j_z \cdot m_x \cdot m_y$ .
void(* lagrange_wave_col) (const uint *idx, pcrealavector px, pcrealavector py, pcrealavector pz, pcreal dir, pcbem3d bem, pamatrix W)

Integrate the modified Lagrange polynomials in direction $c_\iota$ or their derivatives within the 2nd component.

This callback will evaluate the integral

\[ \int_\Gamma \mathcal L_{c_\iota}(\vec y) \, \psi(\vec y) \, \mathrm d \vec y = \int_\Gamma \mathcal L(\vec y) \, e^{\langle c_\iota, \vec y \rangle} \,\psi(\vec y) \, \mathrm d \vec y \]

with $ \mathcal L $ being a Lagrange polynomial or its derivative.

Parameters
idxThis array describes the permutation of the degrees of freedom. Its length is determined by W->rows . In case idx == NULL it is assumed the degrees of freedom are $ 0, 1, \ldots , \texttt{W->rows} -1 $ instead.
pxA Vector of type avector that contains interpolation points in x-direction.
pyA Vector of type avector that contains interpolation points in y-direction.
pzA Vector of type avector that contains interpolation points in z-direction.
dirDirection $c_\iota$ in which the modified Lagrange polynomials should be evaluated.
bemBEM-object containing additional information for computation of the matrix entries.
WW will contain the results of the integral evaluations. It applies

\[ W_{ij} = \int_\Gamma \mathcal L_{c_\iota,\, j}(\vec y) \, \psi_i(\vec y) \, \mathrm d \vec y . \]

The index $ j $ is computed in a tensor way. Having $ m_x $ Points in x-direction, $ m_y $ Points in y-direction and $ m_y $ Points in z-direction, then using the $ j_x $ -th, the $ j_y $ -th and the $ j_z $ -th point will result in matrix index $ j = j_x + j_y \cdot m_x + j_z \cdot m_x \cdot m_y$ .
void(* lagrange_wave_row) (const uint *idx, pcrealavector px, pcrealavector py, pcrealavector pz, pcreal dir, pcbem3d bem, pamatrix V)

Integrate the modified Lagrange polynomials in direction $c_\iota$ or their derivatives within the 1st component.

This callback will evaluate the integral

\[ \int_\Gamma \varphi(\vec x) \, \mathcal L_{c_\iota}(\vec x) \, \mathrm d \vec x = \int_\Gamma \varphi(\vec x) \, \mathcal L(\vec x) \, e^{\langle c_\iota, \vec x \rangle} \, \mathrm d \vec x \]

with $ \mathcal L $ being a Lagrange polynomial or its derivative.

Parameters
idxThis array describes the permutation of the degrees of freedom. Its length is determined by V->rows . In case idx == NULL it is assumed the degrees of freedom are $ 0, 1, \ldots , \texttt{V->rows} -1 $ instead.
pxA Vector of type avector that contains interpolation points in x-direction.
pyA Vector of type avector that contains interpolation points in y-direction.
pzA Vector of type avector that contains interpolation points in z-direction.
dirDirection $c_\iota$ in which the modified Lagrange polynomials should be evaluated.
bemBEM-object containing additional information for computation of the matrix entries.
VV will contain the results of the integral evaluations. It applies

\[ V_{ij} = \int_\Gamma \varphi_i(\vec x) \, \mathcal L_{c_\iota, \, j}(\vec x) \, \mathrm d \vec x . \]

The index $ j $ is computed in a tensor way. Having $ m_x $ Points in x-direction, $ m_y $ Points in y-direction and $ m_y $ Points in z-direction, then using the $ j_x $ -th, the $ j_y $ -th and the $ j_z $ -th point will result in matrix index $ j = j_x + j_y \cdot m_x + j_z \cdot m_x \cdot m_y$ .

The documentation for this struct was generated from the following file: