Prior to executing the model, we must define the exact outputs we are interested in which is required in both modes of operation.
By default OnScale will calculate the velocity arrays for a simulation. Anything that is required beyond these arrays must be requested explicitly in order to be calculated and stored. The most common calculated data arrays are:
- Pressure: pres & aprs
- Displacement: disp (accessed through: xdsp, ydsp, zdsp)
- Stresses: strs (all 6 components accessed through the sg arrays e.g. sgxx sgyy...)
- Strain: strn (all 6 components accessed through ep arrays e.g. epxx epyy...)
- Loss: loss
- Maximum data arrays: max
The user is only required to request the data Array Type from the drop down menu when a new output is created in the model:
Any requested property can be included using the calc command like so:
pres aprs /* calculate pressure and acoustic pressure
disp /* calculate displacement
strn /* calculate strain
strs /* calculate stress
loss /* calculate losses
max aprs pmin pmax /* capture minimum & maximum acoustic pressure and store in 'pmin' & 'pmax' array
Time Histories in OnScale are simply data fields captured over time for specific nodes/elements in the model.
As a time-domain solver, OnScale can generate any of the calculated data arrays as a set of time histories. All that is required is to request the data at specific locations on the IJK grid or by their predefined reference.
Time histories can selected as an output option when a new output is created in the model tree:
Location and Array Type properties for a time history can be modified in the properties section.
Time histories are defined using the pout and typically, with the hist or histname subcommands:
hist func /* time function - does not require ijk location
hist pres $i1 $i1 1 $j3 $j3 1 /* pressure for a single element
hist pres $i1 $i2 1 $j3 $j3 1 /* pressure for every elements in from i1 and i2
hist pres $i1 $i2 2 $j3 $j3 1 /* pressure for every 2nd element from i1 and i2
histname electrode vqi all /* voltage, charge & current data for all electrodes defined
histname electrode vq top /* voltage & charge data for 'top' electrode
histname avrg a all /* store all requested averages
histname avrg a avepres /* store the average with name 'avepres'
All time histories are given an array number in the sequence they are defined. The array numbers gives you access to the data array and can be used for plotting purposes if we want to visualise these signals during the model execution stage. This will be demonstrated later on in the tutorial section.
Mode shapes are extracted through Harmonic Analysis methods. In OnScale, we can extract the harmonic behaviour of a system by performing DFTs at specified frequencies of interest. This can also be performed for specific data fields of interest, for example pressure, x-displacement and many others. It is a powerful tool as it can provide insights into system behaviour that may be difficult to achieve in a other ways.
The advantages of performing harmonic analysis in this manner, rather than with a modal solver, is that this method takes into account damping and mode-coupling in a more effective manner. It will therefore correspond more directly with experimental measurements from laser vibrometers taken in a similar manner i.e. driving a system at a constant frequency.
Mode shapes are created in the Output section of the Model Tree. Mode shapes can be added via the plus button next to the Output dropdown and characterized in the properties window. For example:
Mode shapes can be created via the shap command. This allows the user to specify the harmonic frequencies they are interested in along with any additional data fields they wish to extract, for example:
data pres /* pressure data to be extracted with mode shapes
data xdsp /* x displacement data to be extracted with mode shapes
freq 1.5e6 /* mode shape '1'
freq 3.e6 /* mode shape '2'
OnScale works most efficiently when models are on the order of tens of wavelengths in size along each axis. Medical and Sonar devices, however, commonly require predictions of pressure amplitudes at distances many hundreds of wavelengths from the source. These are either impractical or inefficient to model fully. The best approach in such cases is to extrapolate.
The Kirchoff extrapolation technique is a powerful tool incorporated into OnScale. It uses analytic techniques (essentially a combination of Green's functions and Huygen's principle) to take pressure/time data from the finite-element model and extrapolate to a full pressure/time response at any arbitrary location or locations.
The technique is valid in both near and far fields, but makes several assumptions:
- Propagating medium is homogenous, i.e., no intervening layers
- Propagating medium is fluid, i.e. no shear waves
- Propagating medium is either lossless or very low loss
- Response is linear
Extrapolation boundaries can be setup very easily and visualised within the tool:
The setup process is to create a boundary around or over your device to capture the propagating pressure wave.
The extr command is the required command and here is a simple example of a typical extrapolation boundary setup:
defn kirc /* define type extrapolation boundary type - kirchoff
ref in $x1 $y2 /* reference point to determine extrapolation vector
node $i1 $indgrd-1 $j3+5 $j3+5 /* extrapolation boundary at the defined nodal indices
driv func /* storing time function to allow tvr calculation in toolkit end
Data Fields are usually snapshots of the entire model with data array overlaid on top of the geometric model. By capturing a series of snapshots over time, animations can also be created.
The properties currently only allow the extraction of maximum and minimum data fields:
The analysis of all the mentioned outputs will be discussed in more detail in the Post Processor section.
The data field snapshots can be captured using the data out command:
out modl /* output model geometry
out pmax /* output pressure maximum
out shap/all /* output all requested mode shape data
out ydsp /* out y-displacement snapshot