Strengthen Fortran front-end `gemini3d.run` in several ways
* add optional md5 checksum to downloads
* make reference data downloads automatic, occurring at ctest time by CMake fixtures
* integrate hwloc in a more discrete, sensible way under src/utils/hwloc.
* add msis unit tests
* organize gemini3d.bin tests in a more hierarchal way, unit testing low level parts first
UX: add recommendations at end of Cmake configuration printout. For example;
* suggesting Ninja if Make is being used
* suggesting newer CMake as appropriate
* suggesting `hwloc` use
Added CMake scripts to install/build CMake, Ninja or hwloc, starting from CMake >= 3.7
Raspberry Pi 4 results
Using system lapack, self-built Scalapack 2.1.0, MUMPS 5.3.5
$ ctest
Test project /home/pi/code/gemini3d/build
Start 49: unit:HWLOC
1/49 Test 49: unit:HWLOC ....................... Passed 0.06 sec
Start 28: unit:mpi_basic
2/49 Test 28: unit:mpi_basic ................... Passed 1.50 sec
Start 29: unit:scalapack
3/49 Test 29: unit:scalapack ................... Passed 0.45 sec
Start 30: unit:mumps_basic
4/49 Test 30: unit:mumps_basic ................. Passed 0.46 sec
Start 27: unit:gemini_exe_ok
5/49 Test 27: unit:gemini_exe_ok ............... Passed 0.02 sec
Start 1: gemini:2dns_fang:setup
6/49 Test 1: gemini:2dns_fang:setup ........... Passed 0.66 sec
Start 2: gemini:hdf5:2dns_fang:dryrun
7/49 Test 2: gemini:hdf5:2dns_fang:dryrun ..... Passed 0.73 sec
Start 3: gemini:hdf5:2dns_fang
8/49 Test 3: gemini:hdf5:2dns_fang ............ Passed 17.72 sec
Start 4: gemini:compare:hdf5:2dns_fang
9/49 Test 4: gemini:compare:hdf5:2dns_fang .... Passed 0.29 sec
Start 5: gemini:2dew_fang:setup
10/49 Test 5: gemini:2dew_fang:setup ........... Passed 0.97 sec
Start 6: gemini:hdf5:2dew_fang:dryrun
11/49 Test 6: gemini:hdf5:2dew_fang:dryrun ..... Passed 0.73 sec
Start 7: gemini:hdf5:2dew_fang
12/49 Test 7: gemini:hdf5:2dew_fang ............ Passed 23.69 sec
Start 8: gemini:compare:hdf5:2dew_fang
13/49 Test 8: gemini:compare:hdf5:2dew_fang .... Passed 0.39 sec
Start 9: gemini:3d_fang:setup
14/49 Test 9: gemini:3d_fang:setup ............. Passed 2.07 sec
Start 10: gemini:hdf5:3d_fang:dryrun
15/49 Test 10: gemini:hdf5:3d_fang:dryrun ....... Passed 0.94 sec
Start 11: gemini:hdf5:3d_fang
16/49 Test 11: gemini:hdf5:3d_fang .............. Passed 138.21 sec
Start 12: gemini:compare:hdf5:3d_fang
17/49 Test 12: gemini:compare:hdf5:3d_fang ...... Passed 0.85 sec
Start 13: gemini:2dns_glow:setup
18/49 Test 13: gemini:2dns_glow:setup ........... Passed 0.77 sec
Start 14: gemini:hdf5:2dns_glow:dryrun
19/49 Test 14: gemini:hdf5:2dns_glow:dryrun ..... Passed 1.22 sec
Start 15: gemini:hdf5:2dns_glow
20/49 Test 15: gemini:hdf5:2dns_glow ............ Passed 46.21 sec
Start 16: gemini:compare:hdf5:2dns_glow
21/49 Test 16: gemini:compare:hdf5:2dns_glow .... Passed 0.31 sec
Start 17: gemini:2dew_glow:setup
22/49 Test 17: gemini:2dew_glow:setup ........... Passed 0.80 sec
Start 18: gemini:hdf5:2dew_glow:dryrun
23/49 Test 18: gemini:hdf5:2dew_glow:dryrun ..... Passed 1.31 sec
Start 19: gemini:hdf5:2dew_glow
24/49 Test 19: gemini:hdf5:2dew_glow ............ Passed 69.28 sec
Start 20: gemini:compare:hdf5:2dew_glow
25/49 Test 20: gemini:compare:hdf5:2dew_glow .... Passed 0.44 sec
Start 21: gemini:3d_glow:setup
26/49 Test 21: gemini:3d_glow:setup ............. Passed 1.14 sec
Start 22: gemini:hdf5:3d_glow:dryrun
27/49 Test 22: gemini:hdf5:3d_glow:dryrun ....... Passed 4.32 sec
Start 23: gemini:hdf5:3d_glow
28/49 Test 23: gemini:hdf5:3d_glow .............. Passed 368.89 sec
Start 24: gemini:compare:hdf5:3d_glow
29/49 Test 24: gemini:compare:hdf5:3d_glow ...... Passed 0.96 sec
Start 25: scalapack:BLACSbasic
30/49 Test 25: scalapack:BLACSbasic ............. Passed 0.40 sec
Start 26: scalapack:unit:real64
31/49 Test 26: scalapack:unit:real64 ............ Passed 0.44 sec
Start 31: unit:msis_setup
32/49 Test 31: unit:msis_setup .................. Passed 0.03 sec
Start 32: unit:msis_compare
33/49 Test 32: unit:msis_compare ................ Passed 0.03 sec
Start 33: unit:fangIonize
34/49 Test 33: unit:fangIonize .................. Passed 0.06 sec
Start 34: glow_basic
35/49 Test 34: glow_basic ....................... Passed 0.04 sec
Start 35: unit:interp1
36/49 Test 35: unit:interp1 ..................... Passed 0.01 sec
Start 36: unit:interp2
37/49 Test 36: unit:interp2 ..................... Passed 0.20 sec
Start 37: unit:interp3
38/49 Test 37: unit:interp3 ..................... Passed 14.59 sec
Start 38: unit:diffusion1
39/49 Test 38: unit:diffusion1 .................. Passed 0.11 sec
Start 39: unit:potential2
40/49 Test 39: unit:potential2 .................. Passed 14.51 sec
Start 40: unit:mpi:excessCPU
41/49 Test 40: unit:mpi:excessCPU ............... Passed 0.01 sec
Start 41: unit:pathlib
42/49 Test 41: unit:pathlib ..................... Passed 0.02 sec
Start 42: unit:namelist
43/49 Test 42: unit:namelist .................... Passed 0.01 sec
Start 43: unit:compiler_vendor
44/49 Test 43: unit:compiler_vendor ............. Passed 0.00 sec
Start 44: unit:DateFormats
45/49 Test 44: unit:DateFormats ................. Passed 0.00 sec
Start 45: unit:DateRollover
46/49 Test 45: unit:DateRollover ................ Passed 0.01 sec
Start 46: unit:SolarZenithAngle
47/49 Test 46: unit:SolarZenithAngle ............ Passed 0.00 sec
Start 47: unit:magcalc_exe_ok
48/49 Test 47: unit:magcalc_exe_ok .............. Passed 0.01 sec
Start 48: unit:gemini3d_run_ok
49/49 Test 48: unit:gemini3d_run_ok ............. Passed 0.02 sec