Inertial Nodal Force Vectors - Modal Analysis

Hello Karamba Team,

I am a student, I am trying to develop a form finding routine for shell structures under seismic loading. Most of the previous studies have focused on generating equivalent horizontal seismic load and incorporating them into Thrust Network Analysis or Dynamic Relaxation programmes. However, I want to develop a routine where in I take the seismic forces from response spectrum analysis and use those forces to feed it into one of the form finding tools for continuous iterations. However the challenge is to extract these inertial forces at each of the nodes. Karamba does give us the mode shapes and modal participation factors. However I would need the mass matrix to calculate the force vectors for each of the nodes as per the relation:
{f,i} = [m].{phi,i}.G,i.Sa,i
Where, [m] is the mass matrix
{phi,i} is the mode shape vector for ith mode
G,i is the participation factor for ith mode
Sa,i is the spectral acceleration for ith mode time period

And this being a complex curved 3d structure will further complicate the entire process.

Is there any way I can achieve this in Karamba?

Thank you for your support.


Hello @pinaki.mohanty91,
you can get the lumped nodal masses via the the static method Karamba.Algorithms.NaturalVibes.solve() in Karamba3D 2.0.0 WIP.

These are the method arguments:

    /// <param name="in_model">model for which natural vibration modes shall be computed</param>
    /// <param name="from_shape_ind">index of first natural vibration mode to be calculated. Numbering starts from one.</param>
    /// <param name="shapes_num">number of modes to be calculated</param>
    /// <param name="max_iter">maximum number of vector iterations in the Mises procedure</param>
    /// <param name="eps">convergence criteria for determining the eigenvalues</param>
    /// <param name="disp">displacement pattern for calculating participation factors</param>
    /// <param name="scaling">type of scaling applied to the resulting displacement patterns</param>
    /// <param name="nat_frequencies">frequencies of the natural vibration mode in Hz</param>
    /// <param name="modal_masses">modal mass of the corresponding natural vibration mode</param>
    /// <param name="with_lumped_masses">true if translational lumped masses shall be calculated</param>
    /// <param name="lumped_masses">list of lumped masses or empty list in case with_lumped_masses == false</param>
    /// <param name="participation_facs">participation-factor in global x-, y- and z-direction.</param>
    /// <param name="participation_facs_disp">participation-factors with respect to displacement pattern.</param>
    /// <param name="model">model with vibration modes as load-case results</param>
    public static void solve(Model in_model, int from_shape_ind, int shapes_num,
        int max_iter, double eps, List<double> disp, EigenShapesScalingType scaling,
        out List<double> nat_frequencies, out List<double> modal_masses, bool with_lumped_masses, out List<Vector3> lumped_masses,
        out List<Vector3> participation_facs, out List<double> participation_facs_disp, out Model model)

One has to set ‘with_lumped_masses’ to ‘true’ in order to get for each node a vector of masses via the list ‘lumped_masses’.

The WIP version of Karamba3D can be found here.
– Clemens

Thank you!

Hello, I’m interested to the same task of Pinaky but I’m a beginner with GH e Karamba3D… What I have to do for modify the “with_lumped_masses” parameter ?

Hi @v.bonifazi26,
there is the definition ‘’ in the examples collection that comes with Karamba3D in C:\Program Files\Rhino 7\Plug-ins\Karamba\Examples\TestExamples\Scripts. It shows how to retrieve the lumped masses.
– Clemens

Found it! Thanks !