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.
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...