I am trying to model an energy dissipater element that can undergo plastic deformation when contacted by a body, e.g. elastic perfectly plastic relationship
I have tried using a sensor as described in Article Number
000002688:
What I have so far:
-----------------------
Sensor event definition
.MODEL_1.Deformation - SENVAL(DeformationSensor)
Sensor event evaluation:
.MODEL_1.Deformation
SForce:
IF( .MODEL_1.Deformation: forceValue, 0, 0 )
Questions:
-------------
I am finding it difficult to figure out how to incorporate the plastic deformation. According to me plasticDeformation = SENVAL(DeformationSensor) therefore the force becomes (where force value: f= min(kx, plasticForceValue):
IF( .MODEL_1.Deformation + plasticDeformation: forceValue, 0, 0 ) but this is obviously incomplete and incorrect.
Is the sensor approach correct for this application, or do I need to look at doing a subroutine? Is there another approach that will work?
Sorry, I've been on vacation and have not seen your question until today. have you already solved your problem?
This can clearly be done using a sensor. I need a little time to work out the equations, but I have done this in the past for emulating elasto-plastic soil properties.
Hi JSlat, thanks very much for the assistance. I have managed to capture the maximum displacement using a sensor but, as soon as I pass this back to my force and subtract it from the 'free length' the sensor data changes and it does'nt work. I will set everything up again and share a cmd file here
I see your problem. Once you get into the plastic zone, and deformation increases, the sensor changes and deformation changes is zero. Traditionally (using subroutines) this can be handled by using a reqsub to store the max deformation as a reqsub is only called at output steps. The reqsub would store the value in a common block / global variable that can then be used by the sfosub.
But as long as your plastic and elastic stiffness are constant, this can be handled with some logic.
OK, here is an example for you. Rename the attachment to ElastoPlast.cmd and import into View.
Simulate for 10 s, 500 steps. Plot request .ElastoPlast.Last_Run.Ground_Data.Ground_Force vs .ElastoPlast.Last_Run.Ground_Data.Deformation
This model has three parameters:
PlastDef0: The deformation that defines the "knee" of the elasto-plastic curve. Set to zero for pure plastic behavior.
K_elast: Stiffness of the elastic part (as well as off-loading behavior). Set to very high for pure plastic behavior.
K_plast: Stiffness of the plastic deformation. Set to a low value for true plastic.
You can probably change the model to be true constant plastic behavior by setting PlastDef0=0, K_elast very high (>1e6) and changing the solver variable Plast_Force to a constant value.
Sorry I have taken so long to get back. I have been working on another project and only got back to this recently.
Thank you very much for the demo model and explanation. I have been playing with your ElastoPlast model to gain a better understanding of how it works. If I remove the driver and spring damper and apply a 2 stage step motion directly to the stamper, as well as set gravity to along +x. This modified model has a high frequency force and some strange behaviour in the elastic component of the Ground_Force element. It almost looks like the surface element is bouncing on the elastic force, but I have not been able to completely confirm this yet. For now, I am planning to add damping to the elastic force only and see if it damps out the high frequency vibrations.
Most likely it is bouncing on the contact force between the stamp and the ground. Or, as you say, if your elastic component is too low, that might cause the bouncing.
Best way to study this is no use displacement for the x-axis, not time.