perform and store a forward dynamic simulation on a model created with MapleSim/Multibody - MapleSim Help

MapleSim[Multibody][BuildSimulation] - perform and store a forward dynamic simulation on a model created with MapleSim/Multibody

 Calling Sequence BuildSimulation(MSimMultibodyModel, options)
 Parameters MSimMultibodyModel - Maple module of a system created using the BuildEQs command or retrieved from a MapleSim/Multibody store file (.lib) using the GetModel command.   options  - (optional) equations of the form keyword = value
 Description Important: The BuildSimulation command has been deprecated. Use the templates in the MapleSim templates folder to analyze your model instead. For more information, see Opening MapleSim Templates. The BuildSimulation command performs a forward dynamic simulation on the selected model equations of motion. The command uses dsolve/numeric to integrate the equations. In most cases, BuildSimulation converts the governing equations into an optimized Maple procedure before the integration.  However, if a differential-algebraic equation (DAE) solver is requested (rkf45_dae or mebdfi), BuildSimulation passes the unaltered system equation equations directly to dsolve/numeric/DAE.

Options

 'SimName'= string

The name of the created simulation.  All of the simulation settings, numerical substitutions, initial conditions, and results are accessible from the store file of the model (.lib) under this name. Additionally, when you run the BuildSimulation command, the simulation results (as returned by dsolve/numeric) are assigned to this name in the global worksheet.

 'NumericSubs'= list

A list of equations of the form parameter=value. Any parameters or functions that are not explicitly given a value are set to 0.

 'ICs'= list

A list of floats indicating the initial conditions for the simulation. The order of the elements in the list is assumed to be the same as the order of the model's state variables (the model's vX export).

 'Integrator'= string

A string indicating which of dsolve/numeric integrators are used to perform the forward dynamic simulations. Valid options are rkf45 (default), rkf45_dae, dverk78, gear[bstoer], gear[polyextr], lsode[adamsfunc], lsode[backfull], and mebdfi.

 'RelErrTol'= float

A float indicating the limit on the relative error tolerance for a successful integration step.  The default value is 0.001.  For more information, see dsolve/numeric.

 'AbsErrTol'= float

A float indicating the limit on the absolute error tolerance for a successful integration step. The default value is 0.001.  For more information, see dsolve/numeric.

 'Duration'= numeric

A numeric value indicating the duration of the simulation. The default value is 1.

 'NumStorePoints'= posint

A positive integer indicating the number of data points to store. The stored data points are evenly distributed over the duration of the simulation.

 'Baumgarte'= list

A list of the form [ALPHA, BETA], where ALPHA and BETA are the Baumgarte constraint stabilization parameters, as described in the Dynamic exports page.  These parameters are used to control position and velocity constraint violation for constrained systems that are not integrated with a DAE solver..

 'SilentMode'= boolean

Setting this option to true hides the output generated by the BuildSimulation command.  The default value is false.

Examples

Important: The BuildSimulation command has been deprecated. Use the templates in the MapleSim document folder to analyze your model instead.

The example below shows an embedded MapleSim model of a planar slider-crank mechanism. In this example, the embedded component name is Simulation0 and the model name is SliderCrank. When a simulation is created, you can plot simulation results using the BuildPlot command.

 > $\mathrm{leArguments}≔\left['\mathrm{InputString}'=\mathrm{MapleSim}:-\mathrm{Multibody}:-\mathrm{GetMultibodyInput}\left("Simulation0"\right),'\mathrm{ModelName}'="SliderCrank",'\mathrm{KinSimpType}'="Simplify",'\mathrm{DynSimpType}'="Simplify",'\mathrm{AugType}'="Lagrange",'\mathrm{MaxSmallQOrder}'=1,'\mathrm{SaveToLib}'=\mathrm{true},'\mathrm{SilentMode}'=\mathrm{false}\right]:$$\mathrm{MapleSim}:-\mathrm{Multibody}:-\mathrm{BuildEQs}\left(\mathrm{op}\left(\mathrm{leArguments}\right)\right):$
 ${"Analyzing system..."}$
 ${"Performing constraint analysis..."}$
 ${"The system has 1 degree\left(s\right) of freedom. It is modeled using 3 generalized coordinate\left(s\right) coupled by 2 algebraic constraint\left(s\right)."}$
 ${"Peforming a dynamic analysis using an augmented Lagrange formulation - system variables shown below:"}$
 ${"vQ"}{,}\left[\begin{array}{c}{\mathrm{s_P2}}{}\left({t}\right)\\ {\mathrm{theta_R1}}{}\left({t}\right)\\ {\mathrm{theta_R5}}{}\left({t}\right)\end{array}\right]{,}{"vP"}{,}\left[\begin{array}{c}\frac{{ⅆ}}{{ⅆ}{t}}{}{\mathrm{s_P2}}{}\left({t}\right)\\ \frac{{ⅆ}}{{ⅆ}{t}}{}{\mathrm{theta_R1}}{}\left({t}\right)\\ \frac{{ⅆ}}{{ⅆ}{t}}{}{\mathrm{theta_R5}}{}\left({t}\right)\end{array}\right]{,}{"vPdot"}{,}\left[\begin{array}{c}\frac{{{ⅆ}}^{{2}}}{{ⅆ}{{t}}^{{2}}}{}{\mathrm{s_P2}}{}\left({t}\right)\\ \frac{{{ⅆ}}^{{2}}}{{ⅆ}{{t}}^{{2}}}{}{\mathrm{theta_R1}}{}\left({t}\right)\\ \frac{{{ⅆ}}^{{2}}}{{ⅆ}{{t}}^{{2}}}{}{\mathrm{theta_R5}}{}\left({t}\right)\end{array}\right]{,}{"vLambda"}{,}\left[\begin{array}{c}{\mathrm{λ1}}{}\left({t}\right)\\ {\mathrm{λ2}}{}\left({t}\right)\end{array}\right]$
 ${"Dynamic analysis complete."}$
 ${"Saving model for future use...:"}$
 ${"Model saved to: C:/Documents and Settings/cschmitke/My Documents/HelpPages/Multibody/Building_Simulations/SliderCrank.lib"}$
 ${"Use Model := MapleSim:-Multibody:-GetModel\left("C:/Documents and Settings/cschmitke/My Documents/HelpPages/Multibody/Building_Simulations/SliderCrank.lib"\right): to retrieve stored model."}$ (5.1)

The order of the initial conditions must match the order to the variables in the vX state vector:

 > $\mathrm{convert}\left(\mathrm{SliderCrank}:-\mathrm{vX},\mathrm{list}\right);$$\mathrm{leICs}≔\left[0,0,0,1.5,0,0\right]$
 $\left[\frac{{ⅆ}}{{ⅆ}{t}}{}{\mathrm{s_P2}}{}\left({t}\right){,}\frac{{ⅆ}}{{ⅆ}{t}}{}{\mathrm{theta_R1}}{}\left({t}\right){,}\frac{{ⅆ}}{{ⅆ}{t}}{}{\mathrm{theta_R5}}{}\left({t}\right){,}{\mathrm{s_P2}}{}\left({t}\right){,}{\mathrm{theta_R1}}{}\left({t}\right){,}{\mathrm{theta_R5}}{}\left({t}\right)\right]$
 ${\mathrm{leICs}}{:=}\left[{0}{,}{0}{,}{0}{,}{1.5}{,}{0}{,}{0}\right]$ (5.2)
 > $\mathrm{leArguments}≔\left[\mathrm{SliderCrank},'\mathrm{SimName}'="Sim_rkf45",'\mathrm{NumericSubs}'=\left[\right],'\mathrm{ICs}'=\mathrm{leICs},'\mathrm{Integrator}'="rkf45",'\mathrm{RelErrTol}'=0.001,'\mathrm{AbsErrTol}'=0.001,'\mathrm{Baumgarte}'=\left[1,1\right],'\mathrm{Duration}'=5,'\mathrm{NumStorePoints}'=200,'\mathrm{SilentMode}'=\mathrm{false}\right]:$$\mathrm{MapleSim}:-\mathrm{Multibody}:-\mathrm{BuildSimulation}\left(\mathrm{op}\left(\mathrm{leArguments}\right)\right):$
 ${"***Generating forward dynamics simulation procedure \left(pXdot\right) ***"}$
 ${"Order of the State Variable Array:"}$
 $\left[\frac{{ⅆ}}{{ⅆ}{t}}{}{\mathrm{s_P2}}{}\left({t}\right){,}\frac{{ⅆ}}{{ⅆ}{t}}{}{\mathrm{theta_R1}}{}\left({t}\right){,}\frac{{ⅆ}}{{ⅆ}{t}}{}{\mathrm{theta_R5}}{}\left({t}\right){,}{\mathrm{s_P2}}{}\left({t}\right){,}{\mathrm{theta_R1}}{}\left({t}\right){,}{\mathrm{theta_R5}}{}\left({t}\right)\right]$
 ${"Order of the Constant Parameter Array:"}$
 $\left[{}\right]$
 ${"Order of the Inputs Array:"}$
 $\left[{}\right]$
 ${"--------------Processing Xdot-------------"}$
 ${"Procedure pXdot created in the Maple workspace."}$
 ${"pXdot\left(NumStates, t, States, StateDerivatives\right) #compatible with dsolve/numeric"}$
 ${4}{}{\mathrm{functions}}{+}{24}{}{\mathrm{subscripts}}{+}{93}{}{\mathrm{assignments}}{+}{80}{}{\mathrm{multiplications}}{+}{58}{}{\mathrm{additions}}{+}{3}{}{\mathrm{divisions}}$
 ${"----duration: .94e-1 seconds----"}$
 ${""}$
 ${"***Starting simulation....***"}$
 ${"Simulation complete - duration = .62e-1 seconds"}$
 ${"Saving simulation for future use...:"}$
 ${"Assigning simulation to workspace variable \text{'}Sim_rkf45\text{'}."}$ (5.3)
 > $\mathrm{MapleSim}:-\mathrm{Multibody}:-\mathrm{BuildPlot}\left(\mathrm{SliderCrank}\right)$