Hello, I’m an experienced Abaqus user and have started having a play with Calculix. I want to try to run a wave propagation model using the explicit solver. I’ve used *STEP, DYNAMIC, EXPLICIT and it runs but it’s very slow (about 25 times slower than it would have been with the Abaqus explicit solver).
Is there any way to check if Calculix is actually using the explicit solver?
when the explicit solver is called, it shows an estimated stable time increment employed. This can be a check to verify that the explicit solver is running. To my understanding, the explicit solution is still not optimized. Some parts of the postprocessing are not parallel and some checks, as the energy balance checks, are done per each time step. This affects the performance of the actual implementation.
If I remember correctly, if the DIRECT parameter is not having effect, then is likely it is not recognized by the explicit solver in the actual implementation. The selected time step is already close to the theoretical linear maximum stable time increment, so values bigger than that are likely to be unstable.
I have a catch 22 problem now. I’ve found that an older version (2.8p2) does recognise the DIRECT option and runs the model ok but only when I reduce the time increment. The more recent versions don’t allow me to do this as they don’t seem to recognise the DIRECT option. Can anyone fix this? I’d also like to try some of the other solvers to see if I can get better calculation times (e.g. Spooles) but I can’t find a way to do this with the older 2.8p2 version.
Yes, I think at v2.9 the function was deprecated. I am not sure if the linear solvers will have a significant effect, since the solution is vector based, as it diagonalized the mass matrix and there is no need of using a linear solver, at least for the time integration. Compiling it with MKL certainly is much more performant overall, but the difference is more dramatic when it calls the MKL PARDISO instead of Spooles for lienar systems, which are not used in the explicit solution AFAIK.
If v2.8 is crashing but seems to do what you need, I would try to compile it. In Linux is straightforward, and if you are under a Debian based distro (like Ubuntu or Mint) can be even easier by calling the dependencies from the OS rather than installing them yourself.
I have used Courant’s number to calculate the time increment and it was also smaller than the one selected by Calculix so I don’t think it is that causing the problem.
Thanks, that is useful to know. I’m using windows at the moment and whilst I’m an experienced FE analyst, I’m a total noob when it comes to things like compiling. Do you know if there is any step by step guide anywhere for how to do it with windows?
As far as I know, you cannot compile it under windows. You can, however, install Linux under WSL in Windows. Ubuntu, for instance, is available in the Microsft store.
Cheers.
I don’t have experience compiling it in Windows, but my impression is that is not so straightforward since CCX its developed in Linux. If you have Windows 10, I agree with @Uom0 that the WSL is a very nice alternative. It creates a very thin virtual Linux that works almost as fast as a native OS.
Thanks @carlomontec and @Uom0, I really appreciate your help and advice.
I’ve now discovered a work around for the version problem. It seems if you set the maximum and minimum time increments both equal to the time increment you want it forces it to run it as if it’s recognised the DIRECT option. For example:
*DYNAMIC, EXPLICIT, DIRECT
2.0e-7, 0.000143, 2.0e-7, 2.0e-7
This has meant that I’ve been able to try it with Spooles but it’s still excruciatingly slow compared with Abaqus. An identical model took 10 minutes to run using Abaqus and 300 minutes with Calculix. Does this seem right to you? I find it hard to believe that Abaqus have streamlined their solver that much.
I’m glad you found a way, which yes sounds straight forward now that you mention it
Have you checked if you are running multi core? As mentioned before, a part of the explicit dynamics code are not in parallel, but it will help in some extent. Set your enviroment variables “NUMBER_OF_CPUS” and “OMP_NUM_THREADS” to the total of physical cores or your computer. (How to change environment variables on Windows 10 | Architect Ryan)
I have no experience with Abaqus to answer your question, but agreed that 30x sounds quite a bit.
No worries. Thanks, I am able to run multicore, I can tell it’s working not only by the message confirming it but by how loud a whirring noise my PC starts to make! I’ve since tried out some alternative solvers like PASTIX but with no improvement in run time.