- Index
- » Programming
- » Modelica Language
- » Modeling of a breaking connection...
Modeling of a breaking connection (when stress > tensile strength)
Modeling of a breaking connection (when stress > tensile strength)
I'm trying to model the breakable connection of two Translational Mechanics blocks. This can be a layer of glue for example, that breaks when the applied stress / force in the connection is higher than the adhesiveStrength parameter. I know that the stress-strain curve of real materials like glue is not only linear, but this is a simple example.
The idea is that I have two states: broken = true and broken = false. When broken, the "connection" should give no resistance, hence the f=0. When not broken, the connection behavior should be elastic (force depending on elongation). In this sense, you could call it a "breakable spring".
The broken state is initialized to 'false' and set to 'true' when the force becomes to high.
However, the compiler tells me I'm lacking one equation (there is one more variable) when I'm testing the block below. The test is as follows. I connected the following parts in the following order: Fixed block - Spring - Mass - Force.
I connected the Force block to a "Ramp"-signal. This test works.
When I replace the default spring model by the block below, the compiler complains about a missing equation. Could you tell me what I'm overlooking?
Code:
model breakableElasticConnection
extends Modelica.Mechanics.Translational.Interfaces.PartialCompliant;
parameter Modelica.SIunits.Area contactArea;
parameter Modelica.SIunits.Stress adhesiveStrength = 250000000.0 "Yield strength";
parameter Modelica.SIunits.ModulusOfElasticity E = 1500000000.0 "Young's modulus" ;
parameter Modelica.SIunits.Length t = 0.0005 "Glue layer thickness";
Boolean broken(start = false) "adhesive state variable";
equation
when f / contactArea > adhesiveStrength then
reinit(broken, true);
end when;
f = if not broken then ((s_rel * E * contactArea) / t) else 0 "Hooke's law or zero";
end breakableElasticConnection;
Re: Modeling of a breaking connection (when stress > tensile strength)
Hi Hans,
Your usage of reinit is not valid, since the variable being reinitialized must be of type Real. Unfortunately we don't check this yet. But I think the real problem is that reinit is not counted as one equation, since a state variable should already have another equation associated with it. So from PartialCompliant you get 6 unknown and 5 equations, and then you introduce 1 unknown and 1 equation in your model. So you need to also supply an equation for broken to make the model balanced.
Unfortunately I'm not a modeler, so I'm not sure how to solve this problem. Hopefully someone else will be able to help you with that.
- perost
-
-
- 114 Posts
Re: Modeling of a breaking connection (when stress > tensile strength)
Thanks for your feedback!
I think I could replace the Boolean 'broken' with a Real (and check if it is larger or smaller than zero for example) to solve one of the problems.
However, I want to assign a value to it which *lasts* and which only is changed at certain events. For example, I don't want the 'broken' variable to depend directly on the force, because then the link would magically heal itself when the force would be small enough again.
Maybe a person with modeling experience has an idea for this? Unfortunately I couldn't find an example for this in the MSL.
Re: Modeling of a breaking connection (when stress > tensile strength)
Note that reinit() has to be applied to a state variable, so you would need der(broken) somewhere even if it is a real.
- sjoelund.se
-
-
- 1700 Posts
Re: Modeling of a breaking connection (when stress > tensile strength)
So, I would have to add
Code:
der(broken) = 0;
?
Or is there any other Modelica language item that I could use to set the state of a model? (I mean, to assign a state and to change it at a certain event)
Using a Boolean type just seems to be more "right" to me, but Modelica forces me to use a Real in this case.
Re: Modeling of a breaking connection (when stress > tensile strength)
For clarity: I updated the model to the following code
Code:
model breakableElasticConnection
extends Modelica.Mechanics.Translational.Interfaces.PartialCompliant;
parameter Modelica.SIunits.Area contactArea;
parameter Modelica.SIunits.Stress adhesiveStrength = 250000000.0 "Yield strength";
parameter Modelica.SIunits.ModulusOfElasticity E = 1500000000.0 "Young's modulus";
parameter Modelica.SIunits.Length t = 0.0005 "Glue layer thickness";
Real broken(start = -1.0) "adhesive state variable";
equation
der(broken) = 0.0;
when f / contactArea > adhesiveStrength then
reinit(broken, 1.0);
end when;
f = if broken < 0.0 then (s_rel * E * contactArea) / t else 0 "Hooke's law or zero";
end breakableElasticConnection;
The complaint about a lacking equation is still there...
- Index
- » Programming
- » Modelica Language
- » Modeling of a breaking connection...