generative modeling for Rhino
Hello Karamba team,
(Further to previous discussions on email)
We are in the process of creating a tool which uses the dynamic analysis module in Karamba to enable the real-time calculation of the Response Factor (dynamic serviceability criteria) for structures such as office floors which are often governed by dynamic considerations and sensitivity to accelerations. This response factor calculation node is then used in an optimisation loop (Hoopsnake) along with a Eurocode section sizing node to determine required sections from a standard database for a given geometry, support, and loading condition. We have done some work with the new version of Karamba and have a few questions regarding the eigenvectors and the normalisation thereof.
You have mentioned that the eigenvectors in Karamba are scaled to unity with respect to the mass matrix. In other words the eigenvectors form a mass orthonormal set, i.e. for mode r, the modal mass = [eigenvectorr]T . [mass matrix] . [eigenvectorr] = 1.
As you also mentioned, this implies that the length of each mode’s eigenvector = 1/Sqrt(m*) where m* is the modal mass in that mode. We have taken your modal analysis example and re-analysed it in Autodesk Robot to compare results. I have used a consistent mass matrix to calculate the results (I assume Karamba has used a lumped mass matrix for computational efficiency?). The results (frequencies, mass-normalised eigenvectors, modal masses, and mass participation factors) of this analysis are shown below:
mX,mY,mZ are the modal masses of the current mode calculated assuming unity-normalised eigenvectors (if they were calculated with mass-normalised eigenvectors, all of the modal masses would of necessity be 1).
miX,miY,miZ are the nodal modal masses (∑miX=mX)
Cur.mas.Ux gives the mass participation (%) of the current mode.
Modal mass and participation coefficients are calculated in Robot as described in this link. Dynamic analysis methods used by Robot are presented here – I used the subspace iteration method for the results above (but all methods give almost identical results as long as enough modes are calculated).
The above analysis shows a modal mass mY=40.5 kg (½ of the total mass) for the first mode. This result satisfies the basic theory: for mode n of a uniform simply-supported beam of span L and mass/unit length m, the (unity-normalised) mode shape is given by ɸ = sin (nπx/L), and the modal mass M* = m*Integral(Sin2(nπx/L),dx,[0,L]) = 0.5*m*L. In discrete form this is M* = ∑Mi*ɸi.
I attach a slight modification to your modal analysis example where I have attempted to back-calculate the modal mass from the length of the eigenvectors output for each mode. This seems to return low modal masses less than 1 – I was expecting them to be one (as the Karamba eigenvectors I am back-calculating from are mass-normalised). Would you be able to shed some light on this?
I also attempted to calculate the eigenvectors and modal masses in Karamba for the same 10m long beam, but with a 1000kg point mass at the centre of the beam, so I could compare the simpler three modes of that nodal mass with Robot. However I could not set the density of the beam to zero hence could not get pure modal results for the point mass. Should this be possible?
We also had a couple of requests (some already mentioned by email):
Thanks again for Karamba - it is an extremely useful tool!
thank you for your contribution - it was a great help (especially the comparative calculations with Robot and your literature links). I have now updated the trial version of Karamba so that the NaturalVibrations-component also returns modal masses and participation factors in global directions. The natural modes are scaled in such a way that their largest displacement component is +/-1. There is now also a Disp-component that lets on retrieve displacements along elements. I attached an example.
Here my answers to your questions:
Regarding your feature requests:
Best regards, Clemens