I want to run several steady-state frequency analyses on the object shown below (the stator of an electrical machine).
For each frequency, I need to assign a different surface traction load with varying magnitudes to each tooth surface. When I perform this procedure manually in PrePoMax, it generates the *CLOAD data reported below. As I understand it, PrePoMax converts the surface pressure into equivalent nodal forces. I cannot use only one amplitude, since the force components have different behaviors.
If I want to prepare multiple *CLOAD files programmatically (e.g., using Python) and run the CalculiX simulation by editing the input file, how can I compute the nodal force components without relying on PrePoMax?
Might be better to ask on the CalculiX forum if you don’t want to use PrePoMax for this. However, wouldn’t it be possible for you to convert the *CLOAD data obtained from PrePoMax. If it’s only about time variation amplitudes, you could split this data into multiple *CLOAD cards with different amplitude assignments (it’s even possible to set different amplitude for each DOF at the same node). If you need non-uniform spatial variation on the tooth surfaces then PrePoMax 2.4.0 has the distribution feature for that. You can provide a list of points and load (pressure or surface traction) magnitudes at those locations and PrePoMax will map them to the mesh.
What I did not understand from YT tutorial 35 and 36 is how to simulate a frequency range instead of a single frequency. I run a frequency step with 10Hz and 1500Hz. Then I run a SS dyn step with the same frequencies and I got the warning below. What is the missing index? Is there a rule to set the two steps properly?
11/19/25 09:02:55 *** Warning ***
11/19/25 09:02:55
11/19/25 09:02:55 Index was outside the bounds of the array.
11/19/25 09:09:05 Edit step: Step-1, Step-1
11/19/25 09:09:22 Run analysis: Analysis-1
11/19/25 09:09:22 Model exported to file: C:\install\PrePoMax v2.4.0\Temp\Analysis-1.inp
11/19/25 09:09:24 Run elapsed time: 1.637 s
11/19/25 09:09:26 Open results: Analysis-1
11/19/25 09:09:27
11/19/25 09:09:27 *** Warning ***
11/19/25 09:09:27
11/19/25 09:09:27 Index was outside the bounds of the array.
In case of amplitudes that are not in “amplitude data points”, are they interpolated?
How to add phase angle shift? (e.g. f1=Fcos(wt), f2=F*cos(wt+phi))?
It’s recommended to use a wider range of frequencies in the first step. For example, 1 - 2500 Hz. Regarding the error, check the content of the .dat file in your work directory.
Yes, linear interpolation is used between the points. Outside of the range, constant values are kept.
You can set the phase angle for each load in the SSD step:
Internally, this is handled by the LOAD CASE parameter:
The LOAD CASE parameter is only active in *STEADY STATE DYNAMICS calculations. LOAD CASE = 1 means that the loading is real or in-phase. LOAD CASE = 2 indicates that the load is imaginary or equivalently phaseshifted by 90°. Default is LOAD CASE = 1.
It is done by integrating the interpolation function of the selected type of finite element. This can be done in advance, and you get weight factors for each node of the finite element. You also need to know the area of the finite element.
In the CalculiX documentation, in the first beam example, the author applies a force of 9e6 N on a face of a C3D20R (9 nodes), but it applies a load with *CLOAD of only 1N (i.e., 9e6/9 I suppose). This is only an approximation, right? He should apply:
C3D20R has 8 nodes per face. That example has 4 such elements at the free end of the beam so 21 nodes in total, however, the LOAD nset consists of 9 nodes. Also, notice he’s using MN units for the force (and m for length).
Btw. this is the theoretical distribution of a pressure load from Guido Dhondt’s book:
ok, neglecting the unit, which is not a problem, I don’t understand why he selects only 9 nodes and distributes the force evenly so easily. I assume it is an approximation for a simple model? The correct way should be assigning to each node a fraction of the force element F/Atot * Ael = F/4. Right? The fraction depends on the element type, in this case C32D0R.
In any case, is the same fraction valid for each direction normal and tangential?
Unfortunately, there seems to be no full input file for this example so we can only assume exactly what the author wanted to do in this case.
Did you check how PrePoMax does it ? It also uses *CLOAD for Surface traction load. You can just open the Keyword Editor, unfold and see the keyword lines used to define this load. Or export an input file and view it in any text editor.
Yes, in FEM theory, the same approach (involving shape functions N and integration over the surface) is used for all kinds of generalized traction loading:
I don’t think I’ve completely resolved my issue yet.
If I have multiple loads obtained from an FFT, for example:
L1 = (freq₁, A₁₁, φ₁₁), …, (freqₕ, Aₕ₁, φₕ₁)
L2 = (freq₁, A₁₂, φ₁₂), …, (freqₕ, Aₕ₂, φₕ₂)
I can use amplitudes to modulate their magnitudes, but I would also need to adjust the corresponding displacement for each frequency.
To do that, it seems I would need tabulated input for the phase as well. As far as I know, this is not currently possible — is that correct?
If so, would adding support for frequency-dependent phase be a feature that could be considered for future releases?
This would be a bit tricky, because the phase angle θ is not specified directly in the input deck. Instead, it’s used to internally calculate the real and imaginary components of the load and write them to the input file in the following way:
Ok, I think I’ll create an amplitude data set for each real and imaginary load component.
I noticed that it’s not possible to import a file directly into the amplitude tool.
Copy-pasting from a .txt file often creates formatting issues, so it’s not very practical.
Do you think it would be worthwhile to add a file-import feature to this tool?
Currently, only the tab character is supported as a separator for values while pasting text. I have added support for spaces, commas, and semicolons to enable the pasting of differently formatted data.