[MBDyn-users] ConstitutiveLaw1D

Pierangelo Masarati masarati at aero.polimi.it
Sun Jun 24 09:48:09 CEST 2007

mbdynug at osengineer.com wrote:
> Sorry about the last post.  Now I'm using a rod, which I think should work
> with a shock abosorber but I'm getting this error:
> An error occurred during the execution of MBDyn; aborting ...


let me try to describe what's up with your model.

The shock absorber, unlike other constitutive laws, doesn't have a clear
rest position.  You defined it with a reference pressure, which is the
pressure when the stroke is zero.  So the shock absorber applies a force
equal to the reference pressure times the reference area at rest.  In
your case, some 1500 N.

The rest of the model does not seem to provide any force to counteract
it, so the model is significantly unbalanced, and the shock absorber
tries to extend.

However, according to your definition, the reference stroke is also the
maximum allowed stroke, so, as soon as it tries to extend, the upper
stroke limit is enforced by means of a penalty function (a very stiff

Unfortunately, the shock absorber constitutive law is too clever, and
since the triggering of the penalty function drastically alters the
slope of the force, it throws an exception indicating that the Jacobian
matrix needs to be rebuilt and refactored.

Here's where the error occurs: during the initial assembly, there's no
handling for that exception, while there is in regular solution
handling; as a consequence, initial assembly results in a fatal error of
the process (with an obscure, generic error message, I agree).

I could easily solve your problem in two ways:

1) add enough mass to node Cube001 to make the shock absorber
essentially lie at rest; disallow initial assembly ("skip initial joint
assembly;" statement) which works since your model is well defined and
complies with all constraints.

2) add enough mass to node Cube001 to make the shock absorber
essentially lie at rest; allow the use of gravity and rigid bodies in
initial assembly ("use: gravity, rigid bodies, in assembly;" statement),
which allows initial joint assembly procedure to trim to a position that
does not trigger the penalty.  This latter case also requires to
increase the stiffness of the dummy springs that try to keep the nodes
in the original position, otherwise the shock absorber will try to
extend by pulling the clamped node out of its initial position.

The real solution would consist in enabling the initial assembly
procedure to catch the Elem::ChangedEquationStructure exception as
appropriate, or better to get rid of the initial assembly procedure ;)

Cheers, p.

More information about the Mbdyn-users mailing list