Releases: gemini3d/gemini3d
Features added, CMake >= 3.20 for full test
Since CMake >= 3.20 is required for Intel compilers and to reduce maintenance burden due to numerous features added in CMake 3.20, full features of Gemini3D self-tests now requires CMake >= 3.20. Gemini3d can still build and run some unit tests with CMake >= 3.13. For best robustness of build and test, we recommended CMake >= 3.20.
Features added:
- add ability to expand environment variables into paths in config.nml. This is a more robust / general method than fixed absolute paths in config.nml. For example,
@GEMINI_SIMROOT@starting a path in config.nml tells Gemini to read environment variable GEMINI_SIMROOT and inject it there - improve gemini3d.compare considerably, covering more quantities and adding ability to use Python or Matlab to plot differences detected
- use newer Glow version that corrects bugs leading to NaN in output data
- gemini3d.run frontend: more effective at finding low-level gemini.bin
- added ability to
ctest -R downloadto one-time download test reference data for systems that are normally offline - ExternalProject: use better options to avoid constantly rebuilding external libraries
- Mumps >= 5.4.0 uses an enhanced build technique with better source code traceability
Cmake external project
Use ExternalProject instead of FetchContent for project scope separation and flexibility. This has recently become performant via enhancements to CMake ExternalProject.
Turn TLS verification for all Git and Download operations
Find MPIexec more robustly
write more metadata for easier simulation reading
Full Gemini3D functionality continues to require CMake >= 3.19. Intel Fortran requires Cmake >= 3.20. Please run
cmake -P scripts/install_cmake.cmakeif you have old CMake
performance
- default build to Release (-O3 typically) for significantly faster runtime, in case you weren't using CMake preset
- MSIS: don't use HDF5 compact dataset, as larger sims will exceed 64K dataset size
- gemini3d.run: improve auto-CPU detection and warn if mpiexec not specified, as incompatible MPIexec can cause frozen runs
packaging improvements
- gemini3d.run -plan: print MPI image count on own line for tool parsing
- scripts/CMakeLists.txt to build and install prereq packages
- read_dnew2d: adapt to proper and workaround read
- gemini3d.run: apple M1 workaround CPU count
- ctest labels
- improve mumps link robustness
- h5fortran: fix findhdf5
- h5fortran 3.6.5 self-find HDF5
- mat_gemini v4.1.6
packaging, gemini3d.run cli options
v0.10.2 pygemini 1.3.2
bugfixes
- h5fortran v3.5.2 improves read() operations to check type and size versus the variable (rank and dims were already checked). This helps avoid weird results when compiler optimizations made glitches with edge cases
- workaround for GCC-10 with MSYS and
-O3causing random date for MSIS - several fixes to advanced simulation types discovered while creating more expansive offline CI suite
bugfix: hdf5 2d east-west write permute
- enhance cmake FetchContent stack to work while simultaneously capable of exporting targets
- permute HDF5 plasma axes for swapaxis case to allow restart. Update gemini3d.compare for this.
- correct Magcalc.bin MPI issues
Downlaoder enhanced: will now auto-update data when new md5's given. Previously it would never update if the folder or .zip existed.
strengthen fortran front-end
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
hwlocuse
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
refactor background modeling, enhance magcalc
always build gemini3d.compare so that when BUILD_TESTING=off, only the basic gemini.bin tests remain built and runnable by ctest. Because of the complexity of the stack, it's not wise to build absolutely no tests. At least one should ensure the gemini.bin numerics function correctly.
modularize cli help for better human and external script use
v0.9.1 help module for cli, gemini3d.run enhance cli