Large modal analysis of a shell diaphragm – mesh size vs number of requested modes

I am performing a modal analysis in CalculiX of a loudspeaker diaphragm modeled as a single shell using PrePoMaX as front end.

Model characteristics:

  • Circular diaphragm, diameter: 75 mm
  • Shell model
  • Approximately 5306 shell elements
  • Number of equations: 70771
  • 3 DOF per node (U1, U2, U3)
  • Solver: Pardiso
  • 8 CPU cores

The first eigenfrequency is approximately 320 Hz.

My goal is to obtain all acoustically relevant modes up to about 10 kHz. Since many of the extracted modes are dominated by in-plane motion (U1/U2), while I am mainly interested in out-of-plane motion (U3), I need to extract a large number of modes and later filter them based on U3 participation.

With 1044 extracted modes, the highest frequency obtained is approximately 6637 Hz.
That analysis took 42 minutes.

I am currently running a solution with 2000 requested modes, but it is still running after 12 hours.

My question is:

For a model of this size (70771 equations), what is typically the limiting factor in CalculiX eigenvalue analyses?

  1. The mesh density / number of equations?
  2. The number of requested eigenmodes?
  3. Memory consumption in ARPACK/Pardiso?

Would it generally be more efficient to:

  • keep the current mesh and request more modes,
    or
  • refine the mesh and request fewer modes?

I am particularly interested in practical experience from users who have run modal analyses with 1000–3000 extracted modes.

Any advice on estimating the number of modes required to reliably cover a target frequency range would also be appreciated.

There is a similar example here: https://www.youtube.com/watch?v=oBaDbQPh6Tk

It would be good to mesh it in a structured/transfinite way with quads and perform a mesh convergence study to find the influence of the mesh size on the frequencies (as shown in the aforementioned video). Then you can use a minimum required mesh density and increase the number of modes. The bottleneck here must be the number of modes.

Ideally, you should split the extraction into separate frequency regions (steps).

Thank-, Calc_em!

I didn’t catch how you get the “reduced integration”; can you elaborate on that?

Yes, I suspected that. My problem is that most of the modes are not interesting, as they mainly involve U1 and U2. So out of 1000 modes, I only have about 15 that have any significant U3 movement.
I have a Python script that can crunch the dat-file and only output those modes.
But with 1000 modes I only get to about 6600 Hz and I want at least 10000 Hz.

Well, the frequency for the first eigenmode must be at the least the lower bound; otherwise, I get indexing faults.

Reduced integration elements have less integration points (where stress and strain is calculated). They are more computationally efficient and not prone to shear or volumetric locking, but they are also less accurate and have to be used carefully, with sufficiently refined meshes.

Their names just include “R” at the end (e.g. S4R instead of S4R). In PrePoMax, they can be selected when editing parts in the FE Model tab.

Unfortunately, there are no settings to limit the extraction to specific modes. All or a given number in the specified range will be extracted.

This seems to be a bug. In Abaqus, you can split such analysis into multiple steps with different frequency ranges.

Can you share your .inp (and maybe .pmx) file for some testing ?

I succeeded with 1.5 mm mesh and 1600 modes but only got to 8190 Hz for mode 1600.
The analysis took 50 minutes.

If I have a coarser mesh the result is not reliable, and later stages in my simulation require at least 1.5 mm.

So now I’m trying 1800 modes.
pmx- and inp-files here for that analysis.

Actually, 1800 modes worked as well. Probably because I followed your advice and went for a quad mesh.
But still not 10000 Hz. Now trying 2000 modes.