Hi everyone! I am a little familiar with FEM and have recently simulated a simple model in freecad, in which a point force is applied on a metal part and I use calculix as solver. for a part of my research, I need to export a matrix from the FEM module, which might sound a bit strange to you!!
As far as I understood: in FEM we have: F=KD (Force Matrix, Stiffness and Displacement)
F is a matrix that represents Force for all nodes of the fem mesh. ( I think it is called nodal force distribution) this matrix should be calculated in the algorithm, and later, the K matrix will be made, to produce output D (displacement of nodes).
for some reason, I need the force vector which is applied on all nodes. (not the reaction force/ nor stress/ nor strain–> these are the outputs of FEM which I do not need!)
I thought F is made somewhere inside the code but unfortunately I could not find it inside the Freecad explicitly. I asked in FreeCAD Forum and they guided me to calculix developers.
Mass matrix is not what you are looking for, it’s used only in dynamic analyses. You can export stiffness matrix (K) but it seems that there’s no way to export load vector (F) in CalculiX (this can be done in Abaqus though).
Maybe you could recreate this vector yourself as it’s not very complex and the only issue is its size that grows significantly with mesh density (since each component of the vector corresponds to a single DOF of a single node).
Well, maybe I was too optimistic about calculating this manually (unless your part is very simple and has very coarse mesh). Of course, CalculiX uses all these matrices and vectors at some point but it just doesn’t have an option to export them in a readable format (apart from the aforementioned mass and stiffness matrices). However, CalculiX is open-source software so there might be a way to access this data somehow.
Why don’t you look at the source code for the option that allows you to export the mass and stiffness matrices, and then add the option for the force vector? Just look at the code and see where those changes are made
If you want to know, how a particular load (e.g. pressure, acceleration) distributes to the nodes, then you can apply this load and constrain all nodes of the model (using *boundary). Then, output the reaction force of each node, it is exactly what you need, just with the opposite sign.
Yet I doubt, whether you get anything usable for 6-dof nodes because ccx internally only has 3-dof nodes.