Download Sonitus BE R1 User Manual

Transcript
const vector <MeshTypes::BCdetails <int>
> &BCnum,
const vector < ComplexMath_std::complex
<double> > &BCval,
const ComplexMath_std::complex <double>
&ST,
const vector <MeshTypes::Node <double> >
&SL,
vector <double> &OutputdB,
vector <vector <double> > &OutputVar);
The matrices are initialised, for F = A Sigma, where F are the array of boundary conditions, Sigma
is the vectors of unknown potentials and A the matrix of boundary integrals. For every element, we
perform a boundary integral for every other element. As the elements are all at different angles to
each other, we perform a Jacobian transformation based on non-dimensionalised coordinates on the
surface of one element to obtain the integral.
For the non-trivial solution, we must also add the boundary integral contribution of a discrete point
source, which is calculated using the IntBHelm function.
We then solve the system of equations and based on this solution, generate a series of physical
parameters at every single data recovery point.
In order to calculate the integral term for each element, we call the routine IntSourceHelm. This can
be described as finding the contribution to the node i from a source placed on element j. Therefore
we are observing the contribution of element j. This is determined by examining the amplitudes of
the fundamental solutions at each of the element j's node locations.
ComplexMath_std::complex <double> IntSourceHelm(
const MeshTypes::Node <double> &iNode,
const MeshTypes::Element <int> &ObsElemStruct,
const MeshTypes::Node <double> &ObsNode1,
const MeshTypes::Node <double> &ObsNode2,
const MeshTypes::Node <double> &ObsNode3,
const MeshTypes::Node <double> &ObsNode4,
const double &Freq, const double &C,const double
&rho);
The code first calculates the location of the node i. It then immediately branches into a loop
depending on whether the element j is triangular or quadrilateral. This then follows the same
concept described in section VI.
The value of u* for each node making up element j is obtained by examination of the distance
between this element’s node and the original i node.
For each node i, the contribution to the boundary condition value must be included. This routine
calculates the required contribution of the pressure at node i from the source.
ComplexMath_std::complex <double> IntBHelm(
const MeshTypes::Node <double> &iNode,
const ComplexMath_std::complex <double> &Bsourcestr,
const MeshTypes::Node <double> &Bsourceloc,
Sonitus BE
Page 45 of 58