ralna / libHSL

Dummy repository for libHSL
BSD 3-Clause "New" or "Revised" License
3 stars 0 forks source link

Mismatch in private symbols between the dummy and official hsl_subset #8

Closed amontoison closed 2 weeks ago

amontoison commented 2 weeks ago

I should generate a new dummy version of HSL_jll.jl.

alexis@HP-Spectre:~$ nm -D /home/alexis/.julia/artifacts/06f6fd8e225c60d4eaed5c239b66046f406a5a40/lib/libhsl_subset.so | grep __hsl_ma48_double_MOD_ma48
000000000002ba60 T __hsl_ma48_double_MOD_ma48_analyse_real
000000000002b940 T __hsl_ma48_double_MOD_ma48_determinant_real
000000000002b9f0 T __hsl_ma48_double_MOD_ma48_factorize_real
000000000002b970 T __hsl_ma48_double_MOD_ma48_finalize_real
000000000002b950 T __hsl_ma48_double_MOD_ma48_get_perm_real
000000000002bad0 T __hsl_ma48_double_MOD_ma48_initialize_real
000000000002b980 T __hsl_ma48_double_MOD_ma48_solve_real
000000000002b960 T __hsl_ma48_double_MOD_ma48_special_rows_and_cols_real

The correct version has the following symbols.

alexis@HP-Spectre:~/Bureau/git/hsl/libhsl/HSL_jll.jl.v2024.10.9/override/lib/x86_64-linux-gnu-libgfortran5$ nm -D libhsl_subset.so | grep __hsl_ma48_double_MOD_ma48
00000000002f0360 T __hsl_ma48_double_MOD_ma48_analyse_double
00000000002ee150 T __hsl_ma48_double_MOD_ma48_determinant_double
00000000002ef0a0 T __hsl_ma48_double_MOD_ma48_factorize_double
00000000002ee430 T __hsl_ma48_double_MOD_ma48_finalize_double
00000000002f0250 T __hsl_ma48_double_MOD_ma48_get_perm_double
00000000002f1d80 T __hsl_ma48_double_MOD_ma48_initialize_double
00000000002ee580 T __hsl_ma48_double_MOD_ma48_solve_double
00000000002ee2b0 T __hsl_ma48_double_MOD_ma48_special_rows_and_cols_double
amontoison commented 2 weeks ago

@nimgould Do you have an idea with the dummy symbols of hsl_subset still has _real? I suspect that we forgot some macros in GALAHAD.

0000000000029410 T __hsl_ad02_backward_double_MOD___copy_hsl_ad02_backward_double_Ad02_real
000000000005a7dc B __hsl_ad02_backward_double_MOD___def_init_hsl_ad02_backward_double_Ad02_real
0000000000058580 D __hsl_ad02_backward_double_MOD___vtab_hsl_ad02_backward_double_Ad02_real
0000000000018270 T __hsl_ad02_backward_single_MOD___copy_hsl_ad02_backward_single_Ad02_real
0000000000059b84 B __hsl_ad02_backward_single_MOD___def_init_hsl_ad02_backward_single_Ad02_real
0000000000057100 D __hsl_ad02_backward_single_MOD___vtab_hsl_ad02_backward_single_Ad02_real
00000000000293f0 T __hsl_ad02_forward_double_MOD___copy_hsl_ad02_forward_double_Ad02_real
000000000005a7e4 B __hsl_ad02_forward_double_MOD___def_init_hsl_ad02_forward_double_Ad02_real
0000000000058600 D __hsl_ad02_forward_double_MOD___vtab_hsl_ad02_forward_double_Ad02_real
0000000000018250 T __hsl_ad02_forward_single_MOD___copy_hsl_ad02_forward_single_Ad02_real
0000000000059b8c B __hsl_ad02_forward_single_MOD___def_init_hsl_ad02_forward_single_Ad02_real
0000000000057180 D __hsl_ad02_forward_single_MOD___vtab_hsl_ad02_forward_single_Ad02_real
0000000000029bf0 T __hsl_ma48_double_MOD_ma48_analyse_real
0000000000029ad0 T __hsl_ma48_double_MOD_ma48_determinant_real
0000000000029b80 T __hsl_ma48_double_MOD_ma48_factorize_real
0000000000029b00 T __hsl_ma48_double_MOD_ma48_finalize_real
0000000000029ae0 T __hsl_ma48_double_MOD_ma48_get_perm_real
0000000000029c60 T __hsl_ma48_double_MOD_ma48_initialize_real
0000000000029b10 T __hsl_ma48_double_MOD_ma48_solve_real
0000000000029af0 T __hsl_ma48_double_MOD_ma48_special_rows_and_cols_real
0000000000018a50 T __hsl_ma48_single_MOD_ma48_analyse_real
0000000000018930 T __hsl_ma48_single_MOD_ma48_determinant_real
00000000000189e0 T __hsl_ma48_single_MOD_ma48_factorize_real
0000000000018960 T __hsl_ma48_single_MOD_ma48_finalize_real
0000000000018940 T __hsl_ma48_single_MOD_ma48_get_perm_real
0000000000018ac0 T __hsl_ma48_single_MOD_ma48_initialize_real
0000000000018970 T __hsl_ma48_single_MOD_ma48_solve_real
0000000000018950 T __hsl_ma48_single_MOD_ma48_special_rows_and_cols_real
000000000002d3f0 T __hsl_ma77_double_MOD_ma77_alter_real
000000000002d530 T __hsl_ma77_double_MOD_ma77_analyse_real
000000000002d410 T __hsl_ma77_double_MOD_ma77_enquire_indef_real
000000000002d430 T __hsl_ma77_double_MOD_ma77_enquire_posdef_real
000000000002d4f0 T __hsl_ma77_double_MOD_ma77_factor_real
000000000002d4d0 T __hsl_ma77_double_MOD_ma77_factor_solve_real
000000000002d350 T __hsl_ma77_double_MOD_ma77_finalise_real
000000000002d510 T __hsl_ma77_double_MOD_ma77_input_reals_real
000000000002d550 T __hsl_ma77_double_MOD_ma77_input_vars_real
000000000002d450 T __hsl_ma77_double_MOD_ma77_lmultiply_real
000000000002d570 T __hsl_ma77_double_MOD_ma77_open_real
000000000002d390 T __hsl_ma77_double_MOD_ma77_read_discard_real
000000000002d3a0 T __hsl_ma77_double_MOD_ma77_read_real
000000000002d4b0 T __hsl_ma77_double_MOD_ma77_resid_real
000000000002d330 T __hsl_ma77_double_MOD_ma77_restart_real
000000000002d3d0 T __hsl_ma77_double_MOD_ma77_scale_real
000000000002d470 T __hsl_ma77_double_MOD_ma77_solve_fredholm_real
000000000002d490 T __hsl_ma77_double_MOD_ma77_solve_real
000000000002d380 T __hsl_ma77_double_MOD_ma77_write_real
000000000001c1c0 T __hsl_ma77_single_MOD_ma77_alter_real
000000000001c300 T __hsl_ma77_single_MOD_ma77_analyse_real
000000000001c1e0 T __hsl_ma77_single_MOD_ma77_enquire_indef_real
000000000001c200 T __hsl_ma77_single_MOD_ma77_enquire_posdef_real
000000000001c2c0 T __hsl_ma77_single_MOD_ma77_factor_real
000000000001c2a0 T __hsl_ma77_single_MOD_ma77_factor_solve_real
000000000001c120 T __hsl_ma77_single_MOD_ma77_finalise_real
000000000001c2e0 T __hsl_ma77_single_MOD_ma77_input_reals_real
000000000001c320 T __hsl_ma77_single_MOD_ma77_input_vars_real
000000000001c220 T __hsl_ma77_single_MOD_ma77_lmultiply_real
000000000001c340 T __hsl_ma77_single_MOD_ma77_open_real
000000000001c160 T __hsl_ma77_single_MOD_ma77_read_discard_real
000000000001c170 T __hsl_ma77_single_MOD_ma77_read_real
000000000001c280 T __hsl_ma77_single_MOD_ma77_resid_real
000000000001c100 T __hsl_ma77_single_MOD_ma77_restart_real
000000000001c1a0 T __hsl_ma77_single_MOD_ma77_scale_real
000000000001c240 T __hsl_ma77_single_MOD_ma77_solve_fredholm_real
000000000001c260 T __hsl_ma77_single_MOD_ma77_solve_real
000000000001c150 T __hsl_ma77_single_MOD_ma77_write_real
000000000002f770 T __hsl_ma86_double_MOD_ma86_analyse_real
000000000002f6d0 T __hsl_ma86_double_MOD_ma86_factor_real
000000000002f590 T __hsl_ma86_double_MOD_ma86_factor_solve_mult_real
000000000002f630 T __hsl_ma86_double_MOD_ma86_factor_solve_one_real
000000000002f400 T __hsl_ma86_double_MOD_ma86_finalise_real
000000000002f370 T __hsl_ma86_double_MOD_ma86_get_n_real
000000000002f470 T __hsl_ma86_double_MOD_ma86_solve_mult_real
000000000002f500 T __hsl_ma86_double_MOD_ma86_solve_one_real
000000000001e520 T __hsl_ma86_single_MOD_ma86_analyse_real
000000000001e480 T __hsl_ma86_single_MOD_ma86_factor_real
000000000001e340 T __hsl_ma86_single_MOD_ma86_factor_solve_mult_real
000000000001e3e0 T __hsl_ma86_single_MOD_ma86_factor_solve_one_real
000000000001e1b0 T __hsl_ma86_single_MOD_ma86_finalise_real
000000000001e120 T __hsl_ma86_single_MOD_ma86_get_n_real
000000000001e220 T __hsl_ma86_single_MOD_ma86_solve_mult_real
000000000001e2b0 T __hsl_ma86_single_MOD_ma86_solve_one_real
0000000000031d00 T __hsl_ma87_double_MOD_ma87_analyse_real
0000000000031c60 T __hsl_ma87_double_MOD_ma87_factor_real
0000000000031b20 T __hsl_ma87_double_MOD_ma87_factor_solve_mult_real
0000000000031bc0 T __hsl_ma87_double_MOD_ma87_factor_solve_one_real
00000000000318d0 T __hsl_ma87_double_MOD_ma87_finalise_real
0000000000031840 T __hsl_ma87_double_MOD_ma87_get_n_real
0000000000031a00 T __hsl_ma87_double_MOD_ma87_solve_mult_real
0000000000031a90 T __hsl_ma87_double_MOD_ma87_solve_one_real
0000000000031940 T __hsl_ma87_double_MOD_ma87_sparse_fwd_solve_real
0000000000020aa0 T __hsl_ma87_single_MOD_ma87_analyse_real
0000000000020a00 T __hsl_ma87_single_MOD_ma87_factor_real
00000000000208c0 T __hsl_ma87_single_MOD_ma87_factor_solve_mult_real
0000000000020960 T __hsl_ma87_single_MOD_ma87_factor_solve_one_real
0000000000020670 T __hsl_ma87_single_MOD_ma87_finalise_real
00000000000205e0 T __hsl_ma87_single_MOD_ma87_get_n_real
00000000000207a0 T __hsl_ma87_single_MOD_ma87_solve_mult_real
0000000000020830 T __hsl_ma87_single_MOD_ma87_solve_one_real
00000000000206e0 T __hsl_ma87_single_MOD_ma87_sparse_fwd_solve_real
00000000000326f0 T __hsl_ma97_double_MOD_analyse_real
0000000000031f50 T __hsl_ma97_double_MOD_finalise_both_real
0000000000031e80 T __hsl_ma97_double_MOD_free_akeep_real
0000000000031e70 T __hsl_ma97_double_MOD_free_fkeep_real
0000000000031f60 T __hsl_ma97_double_MOD_ma97_alter_real
0000000000032630 T __hsl_ma97_double_MOD_ma97_analyse_coord_real
00000000000327b0 T __hsl_ma97_double_MOD_ma97_analyse_real
0000000000031ff0 T __hsl_ma97_double_MOD_ma97_enquire_indef_real
0000000000032080 T __hsl_ma97_double_MOD_ma97_enquire_posdef_real
00000000000325a0 T __hsl_ma97_double_MOD_ma97_factor_real
0000000000032490 T __hsl_ma97_double_MOD_ma97_factor_solve_one_real
0000000000032510 T __hsl_ma97_double_MOD_ma97_factor_solve_real
0000000000031e50 T __hsl_ma97_double_MOD_ma97_finalise_both_real
0000000000031e60 T __hsl_ma97_double_MOD_ma97_finalise_real
0000000000031e40 T __hsl_ma97_double_MOD_ma97_get_n_real
0000000000031e30 T __hsl_ma97_double_MOD_ma97_get_nz_real
0000000000032110 T __hsl_ma97_double_MOD_ma97_lmultiply_mult_real
00000000000321d0 T __hsl_ma97_double_MOD_ma97_lmultiply_one_real
0000000000032290 T __hsl_ma97_double_MOD_ma97_solve_fredholm_real
00000000000323e0 T __hsl_ma97_double_MOD_ma97_solve_mult_real
0000000000032350 T __hsl_ma97_double_MOD_ma97_solve_one_real
0000000000032410 T __hsl_ma97_double_MOD_ma97_solve_real
0000000000031e90 T __hsl_ma97_double_MOD_ma97_sparse_fwd_solve_real
0000000000021480 T __hsl_ma97_single_MOD_analyse_real
0000000000020ce0 T __hsl_ma97_single_MOD_finalise_both_real
0000000000020c10 T __hsl_ma97_single_MOD_free_akeep_real
0000000000020c00 T __hsl_ma97_single_MOD_free_fkeep_real
0000000000020cf0 T __hsl_ma97_single_MOD_ma97_alter_real
00000000000213c0 T __hsl_ma97_single_MOD_ma97_analyse_coord_real
0000000000021540 T __hsl_ma97_single_MOD_ma97_analyse_real
0000000000020d80 T __hsl_ma97_single_MOD_ma97_enquire_indef_real
0000000000020e10 T __hsl_ma97_single_MOD_ma97_enquire_posdef_real
0000000000021330 T __hsl_ma97_single_MOD_ma97_factor_real
0000000000021220 T __hsl_ma97_single_MOD_ma97_factor_solve_one_real
00000000000212a0 T __hsl_ma97_single_MOD_ma97_factor_solve_real
0000000000020be0 T __hsl_ma97_single_MOD_ma97_finalise_both_real
0000000000020bf0 T __hsl_ma97_single_MOD_ma97_finalise_real
0000000000020bd0 T __hsl_ma97_single_MOD_ma97_get_n_real
0000000000020bc0 T __hsl_ma97_single_MOD_ma97_get_nz_real
0000000000020ea0 T __hsl_ma97_single_MOD_ma97_lmultiply_mult_real
0000000000020f60 T __hsl_ma97_single_MOD_ma97_lmultiply_one_real
0000000000021020 T __hsl_ma97_single_MOD_ma97_solve_fredholm_real
0000000000021170 T __hsl_ma97_single_MOD_ma97_solve_mult_real
00000000000210e0 T __hsl_ma97_single_MOD_ma97_solve_one_real
00000000000211a0 T __hsl_ma97_single_MOD_ma97_solve_real
0000000000020c20 T __hsl_ma97_single_MOD_ma97_sparse_fwd_solve_real
00000000000328a0 T __hsl_mc64_double_MOD_mc64_matching_hslstd_real
00000000000328c0 T __hsl_mc64_double_MOD_mc64_matching_zd11_real
0000000000021630 T __hsl_mc64_single_MOD_mc64_matching_hslstd_real
0000000000021650 T __hsl_mc64_single_MOD_mc64_matching_zd11_real
0000000000034860 T __hsl_mi28_double_MOD_mi28_factorize_real
0000000000034830 T __hsl_mi28_double_MOD_mi28_finalise_real
0000000000034850 T __hsl_mi28_double_MOD_mi28_precondition_real
0000000000034840 T __hsl_mi28_double_MOD_mi28_solve_real
00000000000235b0 T __hsl_mi28_single_MOD_mi28_factorize_real
0000000000023580 T __hsl_mi28_single_MOD_mi28_finalise_real
00000000000235a0 T __hsl_mi28_single_MOD_mi28_precondition_real
0000000000023590 T __hsl_mi28_single_MOD_mi28_solve_real
amontoison commented 2 weeks ago

It seems that we also forgot some macros in hsl_subset.

00000000002a45b0 T __hsl_ad02_backward_double_MOD___copy_hsl_ad02_backward_double_Ad02_real
000000000049d920 R __hsl_ad02_backward_double_MOD___def_init_hsl_ad02_backward_double_Ad02_real
00000000004f9060 D __hsl_ad02_backward_double_MOD___vtab_hsl_ad02_backward_double_Ad02_real
0000000000122ed0 T __hsl_ad02_backward_single_MOD___copy_hsl_ad02_backward_single_Ad02_real
000000000048c1a0 R __hsl_ad02_backward_single_MOD___def_init_hsl_ad02_backward_single_Ad02_real
00000000004f7660 D __hsl_ad02_backward_single_MOD___vtab_hsl_ad02_backward_single_Ad02_real
00000000002a43c0 T __hsl_ad02_forward_double_MOD___copy_hsl_ad02_forward_double_Ad02_real
000000000049da50 R __hsl_ad02_forward_double_MOD___def_init_hsl_ad02_forward_double_Ad02_real
00000000004f90e0 D __hsl_ad02_forward_double_MOD___vtab_hsl_ad02_forward_double_Ad02_real
0000000000122cf0 T __hsl_ad02_forward_single_MOD___copy_hsl_ad02_forward_single_Ad02_real
000000000048c2d0 R __hsl_ad02_forward_single_MOD___def_init_hsl_ad02_forward_single_Ad02_real
00000000004f76e0 D __hsl_ad02_forward_single_MOD___vtab_hsl_ad02_forward_single_Ad02_real
00000000002d4d60 T __hsl_fa14_double_MOD_fa14_random_real
0000000000151360 T __hsl_fa14_single_MOD_fa14_random_real
0000000000318de0 T __hsl_ma77_double_MOD_ma77_read_discard_real
0000000000319650 T __hsl_ma77_double_MOD_ma77_read_real
0000000000317e70 T __hsl_ma77_double_MOD_ma77_write_real
0000000000195f40 T __hsl_ma77_single_MOD_ma77_read_discard_real
00000000001967b0 T __hsl_ma77_single_MOD_ma77_read_real
0000000000194fd0 T __hsl_ma77_single_MOD_ma77_write_real
nimgould commented 2 weeks ago

No, this is the way that the HSL people wrote their codes. The modules start with (e.g. ) the statements interface ma48_initialize module procedure ma48_initialize_real end interface This means that the outside world will see a procedure ma48_initialize, but internally this will be procedure ma48_initialize_real. Maybe meson is confused? It works fine under make

amontoison commented 2 weeks ago

The issue is that we have an error if we dynamically replace the dummy libhsl_subset.so by the real one in GALAHAD.jl. Some symbols changed and the linux linker is not happy with that.

nimgould commented 2 weeks ago

You have lost me, I don't see the issue, both the dummy and subset procedures have the same names. The names within the modules are private. What should the names be?

nimgould commented 2 weeks ago

For instance, what is the correct __hsl_fa14_double_MOD_fa14_random_real ?

nimgould commented 2 weeks ago

The preprocessor should change HSL_FA14_real to hsl_fa14_double, but the procedure fa14_random_real is internal, and thus untouched by preprocessing

nimgould commented 2 weeks ago

Indeed, galahad does not use hsl_fa14 directly, this is only used by hsl test programs

amontoison commented 2 weeks ago

I have the following error when I replace the dummy libhsl_subset.so genereated here by the official one: Note this package just contains the dummy files that we have in GALAHAD.

/home/alexis/julia/julia-1.10.5/bin/julia: symbol lookup error: /home/alexis/.julia/artifacts/f2f652868e1e76ab4d47140770fe4f9241242b5c/lib/libgalahad_double.so: undefined symbol: __hsl_ma48_double_MOD_ma48_initialize_real
amontoison commented 2 weeks ago

In the official libhsl_subset.so, I have the following symbols about ma48:

alexis@HP-Spectre:~$ nm -D /home/alexis/Bureau/git/hsl/libhsl/HSL_jll.jl.v2024.10.9/override/lib/x86_64-linux-gnu-libgfortran5/libhsl_subset.so | grep ma48
00000000002f1fa0 T __hsl_ma48_double_ciface_MOD_copy_ainfo_out
00000000002f2010 T __hsl_ma48_double_ciface_MOD_copy_control_in
00000000002f1f60 T __hsl_ma48_double_ciface_MOD_copy_finfo_out
00000000002f1f10 T __hsl_ma48_double_ciface_MOD___copy_hsl_ma48_double_ciface_Ma48_ainfo
00000000002f1ed0 T __hsl_ma48_double_ciface_MOD___copy_hsl_ma48_double_ciface_Ma48_control
00000000002f1ea0 T __hsl_ma48_double_ciface_MOD___copy_hsl_ma48_double_ciface_Ma48_finfo
00000000002f1e90 T __hsl_ma48_double_ciface_MOD___copy_hsl_ma48_double_ciface_Ma48_sinfo
00000000002f1f50 T __hsl_ma48_double_ciface_MOD_copy_sinfo_out
0000000000490660 R __hsl_ma48_double_ciface_MOD___def_init_hsl_ma48_double_ciface_Ma48_ainfo
00000000004905e0 R __hsl_ma48_double_ciface_MOD___def_init_hsl_ma48_double_ciface_Ma48_control
00000000004905a0 R __hsl_ma48_double_ciface_MOD___def_init_hsl_ma48_double_ciface_Ma48_finfo
0000000000490588 R __hsl_ma48_double_ciface_MOD___def_init_hsl_ma48_double_ciface_Ma48_sinfo
00000000004ed380 D __hsl_ma48_double_ciface_MOD___vtab_hsl_ma48_double_ciface_Ma48_ainfo
00000000004ed340 D __hsl_ma48_double_ciface_MOD___vtab_hsl_ma48_double_ciface_Ma48_control
00000000004ed300 D __hsl_ma48_double_ciface_MOD___vtab_hsl_ma48_double_ciface_Ma48_finfo
00000000004ed2c0 D __hsl_ma48_double_ciface_MOD___vtab_hsl_ma48_double_ciface_Ma48_sinfo
00000000002cd110 T __hsl_ma48_double_MOD___copy_hsl_ma48_double_Ma48_ainfo
00000000002cd0c0 T __hsl_ma48_double_MOD___copy_hsl_ma48_double_Ma48_control
00000000002cd4d0 T __hsl_ma48_double_MOD___copy_hsl_ma48_double_Ma48_factors
00000000002cd090 T __hsl_ma48_double_MOD___copy_hsl_ma48_double_Ma48_finfo
00000000002cd080 T __hsl_ma48_double_MOD___copy_hsl_ma48_double_Ma48_sinfo
0000000000490460 R __hsl_ma48_double_MOD___def_init_hsl_ma48_double_Ma48_ainfo
00000000004903e0 R __hsl_ma48_double_MOD___def_init_hsl_ma48_double_Ma48_control
00000000004902a0 R __hsl_ma48_double_MOD___def_init_hsl_ma48_double_Ma48_factors
0000000000490260 R __hsl_ma48_double_MOD___def_init_hsl_ma48_double_Ma48_finfo
0000000000490250 R __hsl_ma48_double_MOD___def_init_hsl_ma48_double_Ma48_sinfo
00000000002cd160 T __hsl_ma48_double_MOD___final_hsl_ma48_double_Ma48_factors
00000000002f0360 T __hsl_ma48_double_MOD_ma48_analyse_double
00000000002ee150 T __hsl_ma48_double_MOD_ma48_determinant_double
00000000002ef0a0 T __hsl_ma48_double_MOD_ma48_factorize_double
00000000002ee430 T __hsl_ma48_double_MOD_ma48_finalize_double
00000000002f0250 T __hsl_ma48_double_MOD_ma48_get_perm_double
00000000002f1d80 T __hsl_ma48_double_MOD_ma48_initialize_double
00000000002ee580 T __hsl_ma48_double_MOD_ma48_solve_double
00000000002ee2b0 T __hsl_ma48_double_MOD_ma48_special_rows_and_cols_double
00000000004ed280 D __hsl_ma48_double_MOD___vtab_hsl_ma48_double_Ma48_ainfo
00000000004ed240 D __hsl_ma48_double_MOD___vtab_hsl_ma48_double_Ma48_control
00000000004ed200 D __hsl_ma48_double_MOD___vtab_hsl_ma48_double_Ma48_factors
00000000004ed1c0 D __hsl_ma48_double_MOD___vtab_hsl_ma48_double_Ma48_finfo
00000000004ed180 D __hsl_ma48_double_MOD___vtab_hsl_ma48_double_Ma48_sinfo
00000000002e5830 T __hsl_ma48_ma48_double_MOD_ma48ad
00000000002deb60 T __hsl_ma48_ma48_double_MOD_ma48bd
00000000002d8990 T __hsl_ma48_ma48_double_MOD_ma48cd
00000000002d8920 T __hsl_ma48_ma48_double_MOD_ma48id
00000000001708d0 T __hsl_ma48_ma48_single_MOD_ma48a
00000000001699e0 T __hsl_ma48_ma48_single_MOD_ma48b
0000000000163770 T __hsl_ma48_ma48_single_MOD_ma48c
0000000000163710 T __hsl_ma48_ma48_single_MOD_ma48i
00000000002d42c0 T __hsl_ma48_ma50_double_MOD_ma50ad
00000000002d0990 T __hsl_ma48_ma50_double_MOD_ma50bd
00000000002cef20 T __hsl_ma48_ma50_double_MOD_ma50cd
00000000002cede0 T __hsl_ma48_ma50_double_MOD_ma50dd
00000000002cea40 T __hsl_ma48_ma50_double_MOD_ma50ed
00000000002ce690 T __hsl_ma48_ma50_double_MOD_ma50fd
00000000002cde40 T __hsl_ma48_ma50_double_MOD_ma50gd
00000000002cd6d0 T __hsl_ma48_ma50_double_MOD_ma50hd
00000000002cd670 T __hsl_ma48_ma50_double_MOD_ma50id
000000000015f100 T __hsl_ma48_ma50_single_MOD_ma50a
000000000015b8c0 T __hsl_ma48_ma50_single_MOD_ma50b
0000000000159ea0 T __hsl_ma48_ma50_single_MOD_ma50c
0000000000159d60 T __hsl_ma48_ma50_single_MOD_ma50d
00000000001599e0 T __hsl_ma48_ma50_single_MOD_ma50e
0000000000159630 T __hsl_ma48_ma50_single_MOD_ma50f
0000000000158de0 T __hsl_ma48_ma50_single_MOD_ma50g
0000000000158680 T __hsl_ma48_ma50_single_MOD_ma50h
0000000000158630 T __hsl_ma48_ma50_single_MOD_ma50i
00000000002ed570 T __hsl_ma48_ma51_double_MOD_ma51ad
00000000002ed070 T __hsl_ma48_ma51_double_MOD_ma51bd
00000000002ecba0 T __hsl_ma48_ma51_double_MOD_ma51cd
00000000002ec740 T __hsl_ma48_ma51_double_MOD_ma51dd
0000000000178550 T __hsl_ma48_ma51_single_MOD_ma51a
0000000000178050 T __hsl_ma48_ma51_single_MOD_ma51b
0000000000177b90 T __hsl_ma48_ma51_single_MOD_ma51c
0000000000177730 T __hsl_ma48_ma51_single_MOD_ma51d
000000000017d0f0 T __hsl_ma48_single_ciface_MOD_copy_ainfo_out
000000000017d150 T __hsl_ma48_single_ciface_MOD_copy_control_in
000000000017d0b0 T __hsl_ma48_single_ciface_MOD_copy_finfo_out
000000000017d060 T __hsl_ma48_single_ciface_MOD___copy_hsl_ma48_single_ciface_Ma48_ainfo
000000000017d030 T __hsl_ma48_single_ciface_MOD___copy_hsl_ma48_single_ciface_Ma48_control
000000000017d000 T __hsl_ma48_single_ciface_MOD___copy_hsl_ma48_single_ciface_Ma48_finfo
000000000017cff0 T __hsl_ma48_single_ciface_MOD___copy_hsl_ma48_single_ciface_Ma48_sinfo
000000000017d0a0 T __hsl_ma48_single_ciface_MOD_copy_sinfo_out
000000000047eec0 R __hsl_ma48_single_ciface_MOD___def_init_hsl_ma48_single_ciface_Ma48_ainfo
000000000047ee60 R __hsl_ma48_single_ciface_MOD___def_init_hsl_ma48_single_ciface_Ma48_control
000000000047ee20 R __hsl_ma48_single_ciface_MOD___def_init_hsl_ma48_single_ciface_Ma48_finfo
000000000047ee08 R __hsl_ma48_single_ciface_MOD___def_init_hsl_ma48_single_ciface_Ma48_sinfo
00000000004eb9c0 D __hsl_ma48_single_ciface_MOD___vtab_hsl_ma48_single_ciface_Ma48_ainfo
00000000004eb980 D __hsl_ma48_single_ciface_MOD___vtab_hsl_ma48_single_ciface_Ma48_control
00000000004eb940 D __hsl_ma48_single_ciface_MOD___vtab_hsl_ma48_single_ciface_Ma48_finfo
00000000004eb900 D __hsl_ma48_single_ciface_MOD___vtab_hsl_ma48_single_ciface_Ma48_sinfo
00000000001580d0 T __hsl_ma48_single_MOD___copy_hsl_ma48_single_Ma48_ainfo
0000000000158090 T __hsl_ma48_single_MOD___copy_hsl_ma48_single_Ma48_control
0000000000158490 T __hsl_ma48_single_MOD___copy_hsl_ma48_single_Ma48_factors
0000000000158060 T __hsl_ma48_single_MOD___copy_hsl_ma48_single_Ma48_finfo
0000000000158050 T __hsl_ma48_single_MOD___copy_hsl_ma48_single_Ma48_sinfo
000000000047ec00 R __hsl_ma48_single_MOD___def_init_hsl_ma48_single_Ma48_ainfo
000000000047eba0 R __hsl_ma48_single_MOD___def_init_hsl_ma48_single_Ma48_control
000000000047ea60 R __hsl_ma48_single_MOD___def_init_hsl_ma48_single_Ma48_factors
000000000047ea20 R __hsl_ma48_single_MOD___def_init_hsl_ma48_single_Ma48_finfo
000000000047ea00 R __hsl_ma48_single_MOD___def_init_hsl_ma48_single_Ma48_sinfo
0000000000158120 T __hsl_ma48_single_MOD___final_hsl_ma48_single_Ma48_factors
000000000017b460 T __hsl_ma48_single_MOD_ma48_analyse_double
0000000000179130 T __hsl_ma48_single_MOD_ma48_determinant_double
000000000017a080 T __hsl_ma48_single_MOD_ma48_factorize_double
0000000000179410 T __hsl_ma48_single_MOD_ma48_finalize_double
000000000017b350 T __hsl_ma48_single_MOD_ma48_get_perm_double
000000000017cef0 T __hsl_ma48_single_MOD_ma48_initialize_double
0000000000179560 T __hsl_ma48_single_MOD_ma48_solve_double
0000000000179290 T __hsl_ma48_single_MOD_ma48_special_rows_and_cols_double
00000000004eb8c0 D __hsl_ma48_single_MOD___vtab_hsl_ma48_single_Ma48_ainfo
00000000004eb880 D __hsl_ma48_single_MOD___vtab_hsl_ma48_single_Ma48_control
00000000004eb840 D __hsl_ma48_single_MOD___vtab_hsl_ma48_single_Ma48_factors
00000000004eb800 D __hsl_ma48_single_MOD___vtab_hsl_ma48_single_Ma48_finfo
00000000004eb7c0 D __hsl_ma48_single_MOD___vtab_hsl_ma48_single_Ma48_sinfo
00000000003cbb50 T __hsl_mi20_double_MOD_ma48_matrix_deallocation
0000000000258940 T __hsl_mi20_single_MOD_ma48_matrix_deallocation
00000000002f2190 T ma48_analyse_d
000000000017d2c0 T ma48_analyse_s
00000000002f2090 T ma48_default_control_d
000000000017d1c0 T ma48_default_control_s
00000000002f4130 T ma48_determinant_d
000000000017f180 T ma48_determinant_s
00000000002f3030 T ma48_factorize_d
000000000017e110 T ma48_factorize_s
00000000002f4060 T ma48_finalize_d
000000000017f0b0 T ma48_finalize_s
00000000002f2f70 T ma48_get_perm_d
000000000017e050 T ma48_get_perm_s
00000000002f2130 T ma48_initialize_d
000000000017d260 T ma48_initialize_s
00000000002f36d0 T ma48_solve_d
000000000017e760 T ma48_solve_s
00000000002f4190 T ma48_special_rows_and_cols_d
000000000017f1d0 T ma48_special_rows_and_cols_s
amontoison commented 2 weeks ago

In the dummy libhsl_subset.so, I have the following symbols about ma48:

00000000000393e0 T __hsl_ma48_double_ciface_MOD_copy_ainfo_out
0000000000039440 T __hsl_ma48_double_ciface_MOD_copy_control_in
00000000000393b0 T __hsl_ma48_double_ciface_MOD_copy_finfo_out
0000000000039360 T __hsl_ma48_double_ciface_MOD___copy_hsl_ma48_double_ciface_Ma48_ainfo
0000000000039320 T __hsl_ma48_double_ciface_MOD___copy_hsl_ma48_double_ciface_Ma48_control
00000000000392f0 T __hsl_ma48_double_ciface_MOD___copy_hsl_ma48_double_ciface_Ma48_finfo
00000000000392e0 T __hsl_ma48_double_ciface_MOD___copy_hsl_ma48_double_ciface_Ma48_sinfo
00000000000393a0 T __hsl_ma48_double_ciface_MOD_copy_sinfo_out
0000000000057b80 R __hsl_ma48_double_ciface_MOD___def_init_hsl_ma48_double_ciface_Ma48_ainfo
0000000000057b00 R __hsl_ma48_double_ciface_MOD___def_init_hsl_ma48_double_ciface_Ma48_control
0000000000057ac0 R __hsl_ma48_double_ciface_MOD___def_init_hsl_ma48_double_ciface_Ma48_finfo
0000000000057aa0 R __hsl_ma48_double_ciface_MOD___def_init_hsl_ma48_double_ciface_Ma48_sinfo
0000000000063760 D __hsl_ma48_double_ciface_MOD___vtab_hsl_ma48_double_ciface_Ma48_ainfo
0000000000063720 D __hsl_ma48_double_ciface_MOD___vtab_hsl_ma48_double_ciface_Ma48_control
00000000000636e0 D __hsl_ma48_double_ciface_MOD___vtab_hsl_ma48_double_ciface_Ma48_finfo
00000000000636a0 D __hsl_ma48_double_ciface_MOD___vtab_hsl_ma48_double_ciface_Ma48_sinfo
000000000002b3f0 T __hsl_ma48_double_MOD___copy_hsl_ma48_double_Ma48_ainfo
000000000002b3b0 T __hsl_ma48_double_MOD___copy_hsl_ma48_double_Ma48_control
000000000002b7a0 T __hsl_ma48_double_MOD___copy_hsl_ma48_double_Ma48_factors
000000000002b380 T __hsl_ma48_double_MOD___copy_hsl_ma48_double_Ma48_finfo
000000000002b370 T __hsl_ma48_double_MOD___copy_hsl_ma48_double_Ma48_sinfo
000000000004e200 R __hsl_ma48_double_MOD___def_init_hsl_ma48_double_Ma48_ainfo
000000000004e180 R __hsl_ma48_double_MOD___def_init_hsl_ma48_double_Ma48_control
000000000004e060 R __hsl_ma48_double_MOD___def_init_hsl_ma48_double_Ma48_factors
000000000004e020 R __hsl_ma48_double_MOD___def_init_hsl_ma48_double_Ma48_finfo
000000000004dff8 R __hsl_ma48_double_MOD___def_init_hsl_ma48_double_Ma48_sinfo
000000000002b430 T __hsl_ma48_double_MOD___final_hsl_ma48_double_Ma48_factors
000000000002ba60 T __hsl_ma48_double_MOD_ma48_analyse_real
000000000002b940 T __hsl_ma48_double_MOD_ma48_determinant_real
000000000002b9f0 T __hsl_ma48_double_MOD_ma48_factorize_real
000000000002b970 T __hsl_ma48_double_MOD_ma48_finalize_real
000000000002b950 T __hsl_ma48_double_MOD_ma48_get_perm_real
000000000002bad0 T __hsl_ma48_double_MOD_ma48_initialize_real
000000000002b980 T __hsl_ma48_double_MOD_ma48_solve_real
000000000002b960 T __hsl_ma48_double_MOD_ma48_special_rows_and_cols_real
0000000000062a20 D __hsl_ma48_double_MOD___vtab_hsl_ma48_double_Ma48_ainfo
00000000000629e0 D __hsl_ma48_double_MOD___vtab_hsl_ma48_double_Ma48_control
00000000000629a0 D __hsl_ma48_double_MOD___vtab_hsl_ma48_double_Ma48_factors
0000000000062960 D __hsl_ma48_double_MOD___vtab_hsl_ma48_double_Ma48_finfo
0000000000062920 D __hsl_ma48_double_MOD___vtab_hsl_ma48_double_Ma48_sinfo
00000000000282f0 T __hsl_ma48_single_ciface_MOD_copy_ainfo_out
0000000000028350 T __hsl_ma48_single_ciface_MOD_copy_control_in
00000000000282c0 T __hsl_ma48_single_ciface_MOD_copy_finfo_out
0000000000028270 T __hsl_ma48_single_ciface_MOD___copy_hsl_ma48_single_ciface_Ma48_ainfo
0000000000028240 T __hsl_ma48_single_ciface_MOD___copy_hsl_ma48_single_ciface_Ma48_control
0000000000028210 T __hsl_ma48_single_ciface_MOD___copy_hsl_ma48_single_ciface_Ma48_finfo
0000000000028200 T __hsl_ma48_single_ciface_MOD___copy_hsl_ma48_single_ciface_Ma48_sinfo
00000000000282b0 T __hsl_ma48_single_ciface_MOD_copy_sinfo_out
000000000004c540 R __hsl_ma48_single_ciface_MOD___def_init_hsl_ma48_single_ciface_Ma48_ainfo
000000000004c4e0 R __hsl_ma48_single_ciface_MOD___def_init_hsl_ma48_single_ciface_Ma48_control
000000000004c4a0 R __hsl_ma48_single_ciface_MOD___def_init_hsl_ma48_single_ciface_Ma48_finfo
000000000004c480 R __hsl_ma48_single_ciface_MOD___def_init_hsl_ma48_single_ciface_Ma48_sinfo
00000000000622e0 D __hsl_ma48_single_ciface_MOD___vtab_hsl_ma48_single_ciface_Ma48_ainfo
00000000000622a0 D __hsl_ma48_single_ciface_MOD___vtab_hsl_ma48_single_ciface_Ma48_control
0000000000062260 D __hsl_ma48_single_ciface_MOD___vtab_hsl_ma48_single_ciface_Ma48_finfo
0000000000062220 D __hsl_ma48_single_ciface_MOD___vtab_hsl_ma48_single_ciface_Ma48_sinfo
000000000001a420 T __hsl_ma48_single_MOD___copy_hsl_ma48_single_Ma48_ainfo
000000000001a3e0 T __hsl_ma48_single_MOD___copy_hsl_ma48_single_Ma48_control
000000000001a7d0 T __hsl_ma48_single_MOD___copy_hsl_ma48_single_Ma48_factors
000000000001a3b0 T __hsl_ma48_single_MOD___copy_hsl_ma48_single_Ma48_finfo
000000000001a3a0 T __hsl_ma48_single_MOD___copy_hsl_ma48_single_Ma48_sinfo
0000000000042b80 R __hsl_ma48_single_MOD___def_init_hsl_ma48_single_Ma48_ainfo
0000000000042b20 R __hsl_ma48_single_MOD___def_init_hsl_ma48_single_Ma48_control
0000000000042a00 R __hsl_ma48_single_MOD___def_init_hsl_ma48_single_Ma48_factors
00000000000429c0 R __hsl_ma48_single_MOD___def_init_hsl_ma48_single_Ma48_finfo
0000000000042998 R __hsl_ma48_single_MOD___def_init_hsl_ma48_single_Ma48_sinfo
000000000001a460 T __hsl_ma48_single_MOD___final_hsl_ma48_single_Ma48_factors
000000000001aa90 T __hsl_ma48_single_MOD_ma48_analyse_real
000000000001a970 T __hsl_ma48_single_MOD_ma48_determinant_real
000000000001aa20 T __hsl_ma48_single_MOD_ma48_factorize_real
000000000001a9a0 T __hsl_ma48_single_MOD_ma48_finalize_real
000000000001a980 T __hsl_ma48_single_MOD_ma48_get_perm_real
000000000001ab00 T __hsl_ma48_single_MOD_ma48_initialize_real
000000000001a9b0 T __hsl_ma48_single_MOD_ma48_solve_real
000000000001a990 T __hsl_ma48_single_MOD_ma48_special_rows_and_cols_real
00000000000615a0 D __hsl_ma48_single_MOD___vtab_hsl_ma48_single_Ma48_ainfo
0000000000061560 D __hsl_ma48_single_MOD___vtab_hsl_ma48_single_Ma48_control
0000000000061520 D __hsl_ma48_single_MOD___vtab_hsl_ma48_single_Ma48_factors
00000000000614e0 D __hsl_ma48_single_MOD___vtab_hsl_ma48_single_Ma48_finfo
00000000000614a0 D __hsl_ma48_single_MOD___vtab_hsl_ma48_single_Ma48_sinfo
nimgould commented 2 weeks ago

None of these procedures are used by GALAHAD, they are internal to the module. So the name shouldn't matter as it is declared private to the module. But yes, I can see that the subset and dummy versions differ:

subset:

interface ma48_initialize
  module procedure ma48_initialize_double

end interface

dummy:

interface ma48_initialize module procedure ma48_initialize_real end interface

If this really matters (and it shouldn't), we need to change the subset to look like the dummy (the internal procedures aren't always double, but they are always real).

It is the same for hsl_ma77, and a whole bunch more. If I make these changes, will it sort out the others (I have no idea what hsl_ma48_singleMODvtab_hsl_ma48_single_Ma48_sinfo is, for instance, it seems to be something invented by the compiler)

amontoison commented 2 weeks ago

@nimgould What I suspect is that when the compiler links libgalahad_double.so with libhsl_subset.so, it is performing an optimization to directly call the private symbols. I checked with nm to see what libgalahad_double.so expects from libhsl_subset.so for ma48, and I found the following symbols:

alexis@HP-Spectre:~$ nm -D /home/alexis/.julia/artifacts/f2f652868e1e76ab4d47140770fe4f9241242b5c/lib/libgalahad_double.so | grep ma48
                 U __hsl_ma48_double_ciface_MOD_copy_ainfo_out
                 U __hsl_ma48_double_ciface_MOD_copy_finfo_out
                 U __hsl_ma48_double_ciface_MOD_copy_sinfo_out
                 U __hsl_ma48_double_MOD_ma48_analyse_real
                 U __hsl_ma48_double_MOD_ma48_finalize_real
                 U __hsl_ma48_double_MOD_ma48_initialize_real
                 U __hsl_ma48_double_MOD_ma48_solve_real
                 U __hsl_ma48_double_MOD_ma48_special_rows_and_cols_real

It explains why I have an error with the official hsl_subset. Next, I checked all the symbols containing hsl so I could identify which symbols should be the same in both the dummy and official libhsl_subset.so:

                 U __hsl_ma48_double_ciface_MOD_copy_ainfo_out
                 U __hsl_ma48_double_ciface_MOD_copy_finfo_out
                 U __hsl_ma48_double_ciface_MOD_copy_sinfo_out
                 U __hsl_ma48_double_MOD_ma48_analyse_real
                 U __hsl_ma48_double_MOD_ma48_finalize_real
                 U __hsl_ma48_double_MOD_ma48_initialize_real
                 U __hsl_ma48_double_MOD_ma48_solve_real
                 U __hsl_ma48_double_MOD_ma48_special_rows_and_cols_real
                 U __hsl_ma57_double_ciface_MOD_copy_ainfo_out
                 U __hsl_ma57_double_ciface_MOD_copy_finfo_out
                 U __hsl_ma57_double_ciface_MOD_copy_sinfo_out
                 U __hsl_ma57_double_MOD_ma57_alter_d
                 U __hsl_ma57_double_MOD_ma57_analyse
                 U __hsl_ma57_double_MOD_ma57_enquire
                 U __hsl_ma57_double_MOD_ma57_factorize
                 U __hsl_ma57_double_MOD_ma57_finalize
                 U __hsl_ma57_double_MOD_ma57_fredholm_alternative
                 U __hsl_ma57_double_MOD_ma57_initialize
                 U __hsl_ma57_double_MOD_ma57_part_solve1
                 U __hsl_ma57_double_MOD_ma57_solve1
                 U __hsl_ma57_double_MOD_ma57_solve2
                 U __hsl_ma57_double_MOD_ma57_sparse_lsolve
                 U __hsl_ma77_double_ciface_MOD_copy_info_out
                 U __hsl_ma77_double_MOD_ma77_alter_real
                 U __hsl_ma77_double_MOD_ma77_analyse_real
                 U __hsl_ma77_double_MOD_ma77_enquire_indef_real
                 U __hsl_ma77_double_MOD_ma77_enquire_posdef_real
                 U __hsl_ma77_double_MOD_ma77_factor_real
                 U __hsl_ma77_double_MOD_ma77_finalise_real
                 U __hsl_ma77_double_MOD_ma77_input_reals_real
                 U __hsl_ma77_double_MOD_ma77_input_vars_real
                 U __hsl_ma77_double_MOD_ma77_open_real
                 U __hsl_ma77_double_MOD_ma77_restart_real
                 U __hsl_ma77_double_MOD_ma77_scale_real
                 U __hsl_ma77_double_MOD_ma77_solve_fredholm_real
                 U __hsl_ma77_double_MOD_ma77_solve_real
                 U __hsl_ma86_double_ciface_MOD_copy_info_out
                 U __hsl_ma86_double_MOD_ma86_analyse_real
                 U __hsl_ma86_double_MOD_ma86_factor_real
                 U __hsl_ma86_double_MOD_ma86_finalise_real
                 U __hsl_ma86_double_MOD_ma86_solve_mult_real
                 U __hsl_ma86_double_MOD_ma86_solve_one_real
                 U __hsl_ma87_double_ciface_MOD_copy_info_out
                 U __hsl_ma87_double_MOD_ma87_analyse_real
                 U __hsl_ma87_double_MOD_ma87_factor_real
                 U __hsl_ma87_double_MOD_ma87_finalise_real
                 U __hsl_ma87_double_MOD_ma87_solve_mult_real
                 U __hsl_ma87_double_MOD_ma87_solve_one_real
                 U __hsl_ma87_double_MOD_ma87_sparse_fwd_solve_real
                 U __hsl_ma97_double_ciface_MOD_copy_info_out
                 U __hsl_ma97_double_MOD_analyse_real
                 U __hsl_ma97_double_MOD_finalise_both_real
                 U __hsl_ma97_double_MOD_ma97_alter_real
                 U __hsl_ma97_double_MOD_ma97_enquire_indef_real
                 U __hsl_ma97_double_MOD_ma97_enquire_posdef_real
                 U __hsl_ma97_double_MOD_ma97_factor_real
                 U __hsl_ma97_double_MOD_ma97_solve_fredholm_real
                 U __hsl_ma97_double_MOD_ma97_solve_mult_real
                 U __hsl_ma97_double_MOD_ma97_solve_one_real
                 U __hsl_ma97_double_MOD_ma97_sparse_fwd_solve_real
                 U __hsl_mc64_double_ciface_MOD_copy_info_out
                 U __hsl_mc64_double_MOD_mc64_matching_zd11_real
                 U __hsl_mc68_integer_ciface_MOD_copy_info_out
                 U __hsl_mc68_integer_MOD_mc68_order_integer
                 U __hsl_mi28_double_ciface_MOD_copy_control_in
                 U __hsl_mi28_double_ciface_MOD_copy_info_out
                 U __hsl_mi28_double_MOD_mi28_factorize_real
                 U __hsl_mi28_double_MOD_mi28_precondition_real
                 U __hsl_zd11_double_MOD_zd11_get
                 U __hsl_zd11_double_MOD_zd11_put

There aren't that many symbols!

nimgould commented 2 weeks ago

I changed the hsl_subset modules so that _double names are now _real (to agree with the dummy versions in galahad). But ... I can't push my changes (You are not allowed to push code to protected branches on this project.). I presume I need to create a new branch, and get one of you to agree to the pull). Will

git branch new_subset git checkout new_subet git commit -a git push

and then a request on new_subset do the job? When I create a branch, does this use the files I have just created. Is there a git branch option that changes to the new branch? I'm sure you've told me all of this before!

nimgould commented 2 weeks ago

git switch -c new_subset -m seems to be recommended, is that right?

amontoison commented 2 weeks ago

What you need is: git checkout -b new_subset

amontoison commented 2 weeks ago

@nimgould All tests of GALAHAD.jl passed with the new HSL_jll.jl that includes your modifications to hsl_subset. 👍

nimgould commented 2 weeks ago

Fabulous. That is a game changer for GALAHAD.

Now that we can expect academic users to have easy access to all the HSL linear solvers, I shall move towards implementing the 'automatic' option for GALAHAD packages to select the most appropriate linear solver(s) (unsymmetric, symmetric and definite) rather than relying on the flakey spral/ssids default. This is a fair bit or work, but should be quite mechanical. And possibly of use for sparseHSL going forward. For GALAHAD, it will be core for the symmetric and unsymmetric ubersolvers (sls & uls)

Things I have in mind are

I plan to ask the MUMPS people to add a mumps_available flag to their modules so that we can test this as well, we currently have rather cludgy ways to test if mumps, pardiso, mkl_pardiso and pastix are available.

@jfowkes, @AndrewLister-STFC, @tyronerees, @jenniferscott please chime in. Perhaps you HSL people already do this in some way?