Boundaries of a Model
The external boundaries of a model must be set up correctly to reflect how the areas beyond the model would behave in the real world. OnScale has a number of pre-defined boundary conditions to be applied by the user. Most commonly used boundary conditions are:
- nodes can move freely with no external forces acting upon them
- When to use: edge of model is at an air boundary where the movement of boundary nodes are unrestricted
- boundary for symmetrical geometries
- assumed that what occurs on one side occurs on the other
- When to use: model is the same geometrically and electrically across the boundary
- infinite media/load
- energy continues past boundary with no reflections
- When to use: edge of model continues infinitely with the same material (typically a large body of water)
- nodes are completely fixed - zero displacement
- energy is perfectly reflected
- When to use: edge of model is infinitely stiff
All external boundaries can be customized in the properties window:
Model boundaries are applied very easily using the boun side commands where the specific side of a model can be set a specific boundary type:
side xmin free /* assign free boundary to xmin side
side xmax symm /* assign symmetry boundary to xmax side
side ymin absr /* assign absorbing boundary to ymin side
side ymax fixd /* assign fixed boundary to ymax side
Our input or drive signal, also referred to as a Time Function, is required to load a model. The time function most often than not, is a short pulse which allows the system response to be extracted from a device or can be used analyse reflections from target. OnScale provides a variety of Time Functions to use in the model ranging from sinusoids, wavelets and user-defined functions to match your experiment. See func for a full list of time functions.
The Time Function Tool allows users to modify the input arguments and visualise the resultant time function to be used within the model:
The func command is used to access the variety of time functions. The arguments will vary for each type of time function but will typically always include a frequency and amplitude argument. Here are some code examples:
func sine $freqint 1. 0. 0. /* continuous sinusoid with peak voltage of 1v
func wvlt $freqint 1. /* wavelet impulse function with peak voltage of 1v
func blak $freqint 1. /* blackman harris impulse function with peak voltage of 1v
data /* custom step function - 0v to 1v
hist drv1 5
func hist drv1 1.
A model can be loaded in 2 ways:
- Pressure loads - for simulating purely mechanical wave problems
- Piezoelectric loads - for simulating piezoelectric/electrostatic devices
Pressure loads are very simple to set up and require the following information:
- A time-varying signal to be applied as a pressure wave (time function)
- a direction to apply the forces on the nodes to generate the pressure wave
- a location on the grid/mesh to apply the load
Loads can be created by clicking on any surface of the CAD. The property window allows you to select the type of load and time function to be applied. By default, the load is generated in the normal direction to the load surface.
The plod command is used for setting the up the mentioned aspects. Here is a very simple example of a pressure load applied to the defined elements in the positive X direction:
pdef pld1 func /* create a pressure load with assigned time function
vctr vct1 1 0 0 /* define vector direction for load (+x)
sdef pld1 vct1 $i1 $i1 $j1 $j2 /* define edge/surface to load
The plod command also allows much more complex and arbitrary loads to be applied in a model by using material interfaces between 2 materials (sdf2 command) to define the location of the pressure load. This a very common technique in OnScale to generate any type of load.
Voltage loads typically require a few more steps to set up as we need to be define the window for the piezoelectric solve, at least 2 electrodes to generate an electric field and their respective electrical boundary conditions.
Similar to the pressure load, surfaces on the CAD can be selected to generate a load from which can then be customized to a piezoelectric load in the properties window. Different options for the electrical boundary conditions are also available to select from in a drop down menu:
The piez command allows the setup of the piezoelectric load. Here is a simple example of a piezoelectric load:
c piezoelectric loads
symb ascale = 1 /* area scaling for electrode area - required for accurate simulation of impedance amplitude
wndo $i1 $i2 $j2 $j3 /* define electric window around pzt material - minimise for faster model runtime
defn top $ascale /* define electrode - name 'top'
node $i1 $i2 $j3 $j3 /* assign nodes for top electrode
defn bot $ascale /* define electrode - name 'bot'
node $i1 $i2 $j2 $j2 /* assign nodes for bottom electrode
/* electrical boundary condition
bc top volt func /* apply voltage condition to 'top' electrode and assign driving signal 'func'
bc bot grnd /* apply ground condition to 'bot' electrode
This is a common example where you create 2 electrodes on the surfaces of a PZT device for example, where one electrode is connected to the time-varying voltage function and the other is connected to ground.