====== Prescribed Displacements ====== ===== Basic usage ===== {{:doc:user:ico-beginner.png?40 |Beginner}} 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 |< 100% 8em - - >| |''target'' | ''GObject'' | meshed geometric entity where the displacement is prescribed | |''field'' | ''Field1D'' | variable to be prescribed | |''ampl'' | ''float'' | amplitude | |''fct'' | ''[[doc:user:general:fonctions|Function]]'' | function for time dependence | |''fctMulti'' {{:doc:user:ico-advanced.png?18|Advanced}} | ''[[doc:user:general:fonctions|Function]]'' | (spatiotemporal dependency) | |''fieldList'' {{:doc:user:ico-advanced.png?18|Advanced}} | | list of dependency fields | |''incr'' {{:doc:user:ico-advanced.png?18|Advanced}} | ''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:__ FIXME \\ ===== Activation/Deactivation of boundary conditions ===== {{:doc:user:ico-advanced.png?40 |Advanced}} 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 ''[[doc:user:integration:general:time_step|TimeStepManager]]''. For each stage, it is possible to activate (''activate()'') and deactivate (''deactivate()'') any ''Loading'' (including prescribed displacements). After the configuration of the ''[[doc:user:integration:general:time_step|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 | Order of operations: Activation surpasses deactivation: A node can indeed be part of two entities, one activated, one deactivated. But the operation of deactivation will be done first, then the activation, so such a node will be activated.