Does anyone have tips for hunting down the causes of non-singular matrix stiffness errors (E5004)? Ive been running this large model for a few days with no problems, been getting results just fine, but after adding another set of plate elements to the model, suddenly I am getting fatal error E5004 every time i run. I have gone back through and fixed the zero stiffness elements that nastran alerts me to but eventually it stopped populating a list with them, it just skips the section in the output file that usually states where the zero stiffness elements are.
Im still learning FEMAP so im sure there has to be some setting or some small thing im overlooking that is causing this, but this project is under a time crunch to go through and remesh everything. I just dont get how the model can run perfectly a dozen or so times, but then be broken after the addition of some simple geometry elements.
Any advice is appreciated. I am running FEMAP 11.1.1 through NEi Nastran
Solved! Go to Solution.
zero stiffness for newly added elements sounds like an issue with material property definition or possibly the property definition that the new elements reference.
Since you mentioned the elements were newly created, it makes me wonder if they are properly conneced to other elements in the model or constrained properly.
If you are doing a static solution sequence, make sure the model is constrained to remove all six rigid body modes (3 translation and 3 rotations). If the model isn't properly constrained, that will cause a singularity in the stiffness matrix. Also make sure there are no free floating nodes in the model that are not connected to any elements, this will also cause a singularity.
A large stiffness gradient between two elements (really thick part connected to really thin part) can also cause an ill-conditioned stiffness matrix, wich may or may not be flagged.
If you still can't find the area causing the singularity, you may want to run a modal analysis, which can handle an improperly constrained model, and you can visualize which part of model is "flying off" and make further changes.
I will try those things you mentioned. The new nodes i added were simple plate elements connected the other plate elements by merging the nodes to simulate a weld along the perpindicular joint. I was running the model just fine, then added the extra plate elements by merging nodes, and then the fatal error spontaneously appeared the next run. This is the biggest head scratcher of the problem, since the only thing that changed as far as i know between it working and not working was some added plate elements for extra rigidity to the model.
There are ~400k nodes in the model, is there a way to check for free floating nodes? i have checked for coincident nodes and elements several times to make sure all my connections are correct.
How large of a stiffness gradient would need to appear for it to throw an error? most of the model is 1/8" to 3/8" plate with a few ~1.5" solid castings.
I have gone back through and checked all the pertinent properties. Also i do not believe the zero stiffness is in the new elements, the NASTRAN output file does not list any zero stiffness grids, the minimum stiffness diagonal is 2.4E-1
I wish i could, however we are under confidentiality from our client so I cannot upload even the nastran file.
Try using this API to find orphan or free floating nodes:
Sub Main Dim App As femap.model Set App = feFemap() Dim elSet As femap.Set Set elSet = App.feSet Dim ndElSet As femap.Set Set ndElSet = App.feSet Dim ndSet As femap.Set Set ndSet = App.feSet Dim fmsg As String Dim gr As femap.Group Set gr = App.feGroup Dim newNodesSet As femap.Set Set newNodesSet = App.feSet elSet.AddAll(FT_ELEM) ndElSet.AddSetRule( elSet.ID, FGD_NODE_ONELEM ) ndSet.AddAll(FT_NODE) ndSet.RemoveSet( ndElSet.ID ) If ndSet.Count() = 0 Then App.feAppMessageBox( 1,"No Orphaned Nodes Found" ) Else App.feViewShow(FT_NODE, ndSet.ID ) fmsg = Str$(ndSet.Count() ) + " Orphaned Node(s) Found, Do you want to delete? No to create Group" rc = App.feAppMessageBox( 3, fmsg ) If rc = FE_OK Then App.feDelete( FT_NODE, ndSet.ID ) ElseIf rc = FE_FAIL Then gr.title = "Orphaned Nodes" gr.Put( gr.NextEmptyID) 'gr.Active = gr.ID 'Uncomment to make Orphan Nodes automatically active gr.SetAdd(FT_NODE,ndSet.ID) gr.Put(gr.ID) End If App.feViewRegenerate ( 0 ) End If End Sub