hexagon logo

We've developed a C++based DLL for an Adams model, included Gse-deriv & Gse-output functions. It works with the dynamic solver "Sim/DYN"(results validated); however, with Sim/STAT, it gets equilibrium issue error!

We've developed a C++based DLL for an Adams model. The code includes Gse-deriv & Gse-output functions. It works perfectly fine with the dynamic solver "Sim/DYN" and the simulation results have been successfully validated; however, with Sim/STAT, it encounters error! As the model is dynamically stable and thorough, we think that the "equilibrium error" in the simulation with Sim/STAT is due to engaging with solving the differential dynamic equations in the Gse-deriv. Is there any way to deactivate Gse-deriv function when the solver is Sim/STAT? If not, shall we create to separate DLL, one for the static and 1 for the dynamic simulations?!
 
Much appreciated in advance for your helpful response.
  • Same as all user defined differential equations.
    Static is defined as "all derivatives == 0" (in a loose sense). Meaning that if you have a user defined differential equation active during statics, Adams will change the model so that the derivatives are zero. Often used to setup the model in a specific way, for example ride height for a vehicle being tied to preload of the suspension springs.
     
    To avoid this, all user defined differential equations have a "STATIC_HOLD" flag. Turning this on, 'freezes' the differential equation during statics. This goes also for a GSE. Well documented in the solver documentation.
    (as a side note, there is now also a "STATIC_ONLY" flag available for GSE. By some strange reason it is called "DYNAMIC_HOLD" for differential equations).
  • How could the "STATIC_HOLD" flag be turned on directly via syntaxes in the c++ code of DLL without needing to be set manually via the Adams view GUI menu?
    In the referred solver documentation, there exists an example for creating a separate function as:
    SUBROUTINE GSE_SET_STATIC_HOLD (ID, STATIC_HOLD)
    INTEGER STATIC_HOLD = 1
    However, this will set STATIC_HOLD to 1, locally; this means that the STATIC_HOLD integer is not unity under the Gse_deriv function, when it gets printed...
     
    Thank you again for your helpful response!
  • It can't be turned on in the code. You turn it on when you create the GSE in the interface/adm.