Dear Forum Users,
I recently created a interface to use the Intel MKL Pardiso sparse direct solver within FEAP version 8.4. For those of you who are using Intel Fortran and C compilers, this would be a natural inclusion in your code. The implementation is based off of the modules for various solvers for version 7.5 that are posted on the main FEAP website.
The benefit is that you can run a thread-safe parallel solver within the serial FEAP implementation to take advantage of multi-CPU workstations. The solver simply "overloads" the TANGent and UTANgent functions, similar to the MPI parallel FEAP implementation.
As an example, with 16 threads on an Dell Precision T7800 workstation solving a linear elasticity problem with 120,000 equations, the factorization time is only a few seconds.
The only modifications required are to the usolve.f subroutine and a user macro (e.g. umarc1.f) to initialize the module.
Attached are the source files along with the makefile.in file with the compiler options. I have tested for unoptimized (-g) and basic optimization (-02); the other important point is to add -mkl to LDOPTIONS.
I have tested the solver for symmetric and nonsymmetric matrices, for solid mechanics problems and Lagrange multiplier problems with zeros on the diagonal; problem sizes ranged from 20 nodes to 20,000 nodes. I also want to acknowledge a reminder from FEAP_Admin to use the OPTImize command to improve the profile of the stiffness matrix before the solution phase.
Also attached is a brief file with documentation along with a sample input/output file containing multiple example methods for calling the solver. Further documentation about the solver can be found from Intel
https://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mklman/GUID-7E829836-0FEF-46B2-8943-86A022193462.htm. The number of threads is controlled through an environmental variable (in Linux/Unix) MKL_NUM_THREADS.
Feel free to download and adapt to your needs.
Hope you find this helpful,
Tim