Calculix with pardiso OUT-OF-CORE mode

Hello,

Did anyone tried to modify the code to have pardiso running in out-of-core mode? Apparently seams simple, just to set iparm[59]=1, has described in the following link:

(I know, the devil normally is in the details!)

This is also a suggestion to improve CalculiX as an out-of-core option would certainly allow for much larger models (at the expense of speed off course).

Maybe a simple way to do this would be to allow another solver option, for example SOLVER=PARDISO-OUT-OF-CORE. This is again just a suggestion.

Regards,
Jorge

1 Like

Look at this:

1 Like

could you send fully detailed instruction how to do it for prepomax ?

Hello,

I think this change is already included for next version of CalculiX. The feature is on the closed pull requests. I did not test, but in principle if you compile the development version from GitHub - Dhondtguido/CalculiX: This repository contains the source files of CalculiX, a three-dimensional Finite Element Program (www.calculix.de). you should get a version of calculix with the feature.

To used it I think you have to set the environment variables (MKL_PARDISO_OOC_MAX_CORE_SIZE and MKL_PARDISO_OCC_MAX_SWAP_SIZE) accordingly:

image

Its also good to understand the rules:

Again, I did not test so can not ensure all works as expected.

Unfortunately, those pull requests are closed but not merged.

Hi,

Ive noticed that the changes related with pardiso occ as proposed by viktorkemp were not commited on the main branch, so it seams not taken yet to next version.

(Also the development version seams also not ready to use.)

To have the feature you can replace the pardiso.c file as given by viktorkemp and recompile the source code (ccx_2.20 for example).

i am testing it now, first impression seams to work fine.

Hello,

Maybe someone with more insight could help to check if iparm options inside the the function on line 39

/* Added by Victor Kemp 2022-11-18 to enable Out-Of-Core (OOC) mode. */
void initialize_iparm(ITG *symmetryflag){

make any sense. Function call is then at line 106.

The iparm table can be found here:

Hello jlucas,

i would recommend you to use the function pardisoinit and then to adjust the iparm-values you want to.

Here you can find all information about mkl pardiso:

https://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2023-0/onemkl-pardiso-parallel-direct-sparse-solver-iface.html