CalculiX and LIS solver

Hi everyone,

I wanted to share a recent test project I’ve been working on. With the assistance of ChatGPT, I integrated the Lis (Library of Iterative Solvers for Linear Systems) solver into CalculiX (ccx) to test its performance on large-scale problems.

I am uploading the binary for anyone interested in testing and benchmarking it on their own models (Windows):

In my initial tests, the results have been very promising compared to PARDISO:

  • Execution Time: Dropped significantly from 3,600s down to 980s.

  • RAM Usage: Decreased dramatically from around 5 GB down to 480 MB.

Simple 3D box (nonlinear material)

I would appreciate it if others could give it a try and share their feedback, benchmarks, or any issues encountered across different model types.

Best regards,

Rafał

*STATIC,SOLVER=LIS

2 Likes

Hi @rafal.brzegowy, thanks for testing! Could you explain a little more which type of iterative solution strategy you’re using? In particular, which preconditioner & solver? Our experience with iterative solvers in CalculiX is “mixed” for the general case, which is why we have a single precision direct solve followed by a double precision iterative solve strategy using PaStiX. I’d be interested in any better experiences with iterative solvers (like LIS).

maybe the solver is limited to a truly solid element only since a shell element models shown not working well.

Pardiso (divergence at ~90% prescribed displacement)

LIS solver, stopped imediately.

lis_solver

i*edited/add

solid element model, hexahedral element with rigid body, large deformation analysis also not works.

running another model of free vibration or frequency analysis of solid element reported LIS not available and return to Spooles solver.

i hope these limitations can be improved since LIS solver given promise in optimum and effectiveness of memeory usage and computational times, thank you.

1 Like

try for 2D:

set CCX_LIS_NL_FAST=0
set CCX_LIS_VERBOSE=1
set CCX_LIS_CHECK=1

maybe something wrong here on my computer, after zip file extracted it’s detect as treat by Windows security. Even for simpel case of solid with static linear analysis still not works with LIS solver, is there something blocked by the system probably.

Hi Rafal,
Unfortunately it stops also in my case without any error.
Best,
Stoli

..\Solver_LIS\ccx_i4.exe ge_bracket_coarse cpus=4




CalculiX Version 2.23, Copyright(C) 1998-2025 Guido Dhondt
CalculiX comes with ABSOLUTELY NO WARRANTY. This is free
software, and you are welcome to redistribute it under
certain conditions, see gpl.htm




You are using an executable made on Sun Oct 19 12:54:37 CEST 2025

The numbers below are estimated upper bounds

number of:

nodes:        14434
elements:        62223
one-dimensional elements:            0
two-dimensional elements:            0
integration points per element:            1
degrees of freedom per node:            3
layers per element:            1

distributed facial loads:            0
distributed volumetric loads:            0
concentrated loads:          136
single point constraints:         1053
multiple point constraints:            1
terms in all multiple point constraints:            1
tie constraints:            0
dependent nodes tied by cyclic constraints:            0
dependent nodes in pre-tension constraints:            0

sets:           17
terms in all sets:       204983

materials:            1
constants per material and temperature:            2
temperature points per material:            1
plastic data points per material:            0

orientations:            0
amplitudes:            2
data points in all amplitudes:            2
print requests:            1
transformations:            0
property cards:            0

STEP            1

Static analysis was selected

Decascading the MPC's

Determining the structure of the matrix:
Using up to 4 cpu(s) for setting up the structure of the matrix.
number of equations
42249
number of nonzero lower triangular matrix elements
789771

Using up to 4 cpu(s) for the stress calculation.

Using up to 4 cpu(s) for the symmetric stiffness/mass contributions.

Hi @Durbul at the moment, I am developing LIS for CCX; the main modifications are:

Version 2.1.17 October 16, 2026

  - Implemented the GCRO-DR and FGCRO-DR linear solvers.
  - Allowed compatible prebuilt preconditioners for LIS_MATRIX_USER and added the MFAMG preconditioner for serial/distributed matrices.
  - Supported non-conflicting near-nullspace handling between MFAMG and (F)GCRO-DR, and improved persistent sequence behavior for GCRO-DR.
  - Added matrix capability queries, row-access interfaces, sequence preconditioner reuse via lis_solver_set_sequence_precon_max_age(), and hardened sequence recovery mechanisms.

Version 2.1.16 October 9, 2026

  - Added support for symmetric diagonal scaling of shell matrices without modifying the original matrix or right-hand side.
  - Added solver-managed near-nullspace support and a two-level deflation correction for FGMRES solvers.
  - Enhanced numerical stability, error handling, and expanded the test suite with new regression tests.

Version 2.1.15 October 6, 2026

  - Clarified preconditioner ownership around lis_solve_kernel() to ensure consistent lifecycle management.
  - Fixed missing matrix restoration on error paths within Rayleigh Quotient Iteration (RQI).
  - Hardened repeated-solve error handling and residual history (rhistory) memory state safety.
  - Added regression test for repeated system reuse with user-defined preconditioners and warm start.
  - Added regression test for caller-controlled preconditioner retry and rebuild policies.
  - Hardened workspace allocation error handling and cleanup for GMRES and FGMRES solvers.
  - Defined explicit solver workspace compatibility rules for layout, precision, and MPI contexts.
  - Implemented optimal reuse of compatible solver workspaces across repeated solves.
  - Allowed prebuilt preconditioners to be successfully supplied with user-defined matrices.

Version 2.1.13 September 30, 2026

  - Added generic user-defined shell matrix interface.
  - Handled unsupported user matrix eigensolver paths.
  - Added generic linear-combination matrix operator.
  - Used matrix operator for shifted generalized eigensolvers.
  - Hardened matrix operator test coverage for composed operators and distributed-memory environments.
  - Added diagonal extraction support and recursive diagonal evaluation for user and operator matrices.
  - Added lifecycles and destroy routines for user-defined preconditioners via lis_precon_register_ex.
  - Propagated Jacobi diagonal errors.
  - Added PSD support for user preconditioners.

Currently, the following PRs are open: RHS (Right-Hand Side) and Improve matrix assembly, recycle extraction, and MFAMG robustness

https://www.ssisc.org/lis/ChangeLog.txt