# Guide

The FinEtools package is used here to solve linear acoustics problems.

Tutorials are provided in the form of Julia scripts and Markdown files in a dedicated folder: index of tutorials.

## Modules

The package FinEtoolsAcoustics has the following structure:

• Top-level: FinEtoolsAcoustics is the top-level module.

• Acoustics: AlgoAcoustModule (algorithms), FEMMAcoustModule, FEMMAcoustSurfModule (FEM machines to evaluate the matrix and vector quantities), MatAcoustFluidModule (acoustic fluid material).

## Acoustics FEM machines

There is one for the interior integrals and one for boundary integrals. The machine for the interior integrals can be used to compute:

• Evaluate the acoustic-mass matrix and the acoustic-stiffness matrix.

The machine for the boundary integrals can be used to compute:

• Compute transformation matrix to convert pressure to resultant force or pressure to resultant torque.
• Compute the acoustic ABC (absorbing boundary condition) matrix.
• Compute the acoustic Robin boundary condition matrix.

### Acoustics algorithms

At the moment there is one algorithm, for steady-state (harmonic) acoustics.

#### Example: baffled piston

After the mesh has been generated, the modeldata can be set up: Here we begin with the region.

material = MatAcoustFluid(bulk, rho)
region1 =  FDataDict("femm"=>FEMMAcoust(IntegDomain(fes, GaussRule(3, 2)), material))

We set up a definition of the absorbing boundary condition:

abc1  =  FDataDict("femm"=>FEMMAcoustSurf(IntegDomain(outer_fes, GaussRule(2, 2)),
material))

The surface of the piston is associated with a known-flux boundary condition (prescribed normal component of the velocity):

flux1  =  FDataDict("femm"=>FEMMAcoustSurf(IntegDomain(piston_fes, GaussRule(2, 2)),
material),  "normal_flux"=> -1.0im*rho*omega*v_piston);

And finally we make the model data,

modeldata =  FDataDict("fens"=>  fens,
"omega"=>omega,
"regions"=>[region1],
"flux_bcs"=>[flux1], "ABCs"=>[abc1])

and call the solver:

modeldata = FinEtools.AlgoAcoustModule.steadystate(modeldata)

When the algorithm completes, modeldata["P"] is the computed pressure field.