Table of Contents
Prescribed Displacements
Basic usage
A displacement can be prescribed to a set of nodes with an evolution function and the object LoadingSet
:
loadingset.define(target, field, ampl=0.0, fct=None, incr=INCREMENTAL_LOAD)
loadingset.define(target, field, ampl, fctMulti, fieldList, incr=INCREMENTAL_LOAD)
with
target | GObject | meshed geometric entity where the displacement is prescribed |
field | Field1D | variable to be prescribed |
ampl | float | amplitude |
fct | Function | function for time dependence |
fctMulti | Function | (spatiotemporal dependency) |
fieldList | list of dependency fields | |
incr | enum | = INCREMENTAL_LOAD : incremental (default)= TOTAL_LOAD : total (useful to apply initial displacement or for unreliable integration schemes) |
The displacement is then given by
INCREMENTAL_LOAD
:u(t1) = u(t0) + ampl * (fct(t1)-fct(t0))
TOTAL_LOAD
:u(t) = ampl * fct(t)
Example:
Activation/Deactivation of boundary conditions
Prescribed displacements can be added or removed during the computation.
It is useful to add some prescribed displacements for example when we want to avoid numerical vibrations or rigid body modes. Conversely, it is sometimes useful to drive a workpiece to a desired position, then to remove the prescribed displacements and let the workpiece deform freely.
For any calculation, the simulation time is automatically divided into several stages (Stage
objects) using the setNextTime()
method of the TimeStepManager
.
For each stage, it is possible to activate (activate()
) and deactivate (deactivate()
) any Loading
(including prescribed displacements).
After the configuration of the TimeStepManager
, all the defined stages can be retrieved using:
stages = metafor.getStageManager()
Example
Definition of a prescribed displacement on Curve
#4 and deactivation during stage #1 (corresponding to the second stage since numbering starts with 0):
load1 = loadingset.define(curveset(4), Field1D(TY,RE), 1.0, fct2) load1.deactivate(stages[1])
Definition of a load on Curve
#1, deactivated during stage #1 and activated for the next ones:
load2 = loadingset.define(curveset(1), Field1D(TY,RE), -0.1, fct1) load2.deactivate(stages[0]) load2.activate(stages[1])
These two loads are represented schematically as:
load1 | load2 | |
---|---|---|
stage #0 | ACTIVE | INACTIVE |
stage #1 | INACTIVE | ACTIVE |
stage #2 | INACTIVE | ACTIVE |