MYSTRAN 18.0.0
This major update brings massive performance improvements, a couple new features (and removal of some obsolete ones), and many bug fixes.
General performance improvements
The most noticeable change users will be able to notice is are massive performance improvements. We've seen speedups from 2x to 4x all the way to 10x.
This was achieved through optimisation of several loops and removing unused cruft. Props to @Copper280z and @victorkemp for their huge effort!
Multithreaded SuperLU support
Support has been added for the multithreaded variant of SuperLU. Some larger decks can run over twice as fast!
However, due to the fiddly nature of SuperLU's run-time memory scaling parameters, this has not been made into a default feature.
When building MYSTRAN, one can enable this feature with the -DUSE_SUPERLU_MT=yes. This requires OpenMP in your system, but most Linux and Windows (MSYS2) will already have it. If you do decide to use it, keep an eye on the SPIENV 6/7/8 PARAMs, especially SPIENV7. See PR #182 by @Bruno02468 for details.
F04 and ANS removed
The subroutine timing and log file (F04) is obsolete when debuggers and profilers exist -- and it required every source file to have a header and a footer.
The ANS file contained data similar to F06 but more machine-friendly. In the presence of OP2 and F06 tools (like pyNastran and nastools respectively), it can also be considered obsolete.
Both these formats required a ton of repetitive code for no tangible benefit, and @victorkemp undertook the grueling effort to rid us of them both.
The state of Lanczos...
This update brings several changes to the Lanczos eigenvalue extraction method. Two pieces of good news and one breaking change (warranting the major-version increase).
SuperLU for Lanczos
Thanks to @victorkemp, Lanczos solutions can now use SuperLU for the factorization step, and do so by default. It's a massive performance increase and memory usage decrease: decks that used to take hours and gigabytes now take minutes and megabytes.
Adaptive Lanczos driver for frequency-band mode
Frequency-band Lanczos mode (where you don't specify a fixed number of eigenvalues, just a frequency band) was essentially broken. The inertia-based calculation required a band matrix, which we no longer have due to the removal of BANDIT. It's not viable to run it for non-band matrices, hence the EIGESTL parameter, only allowing the estimator to run for decks with 5000 or less L-set DoF. Increasing this value just allowed the estimator to run for hours.
Instead, an adaptive Lanczos driver was implemented by @Bruno02468. Put very simply, it starts with 10 modes and doubles the amount until the number of in-band modes found becomes stable (or reaches the absurd limit of 10240). There's a bit more to it than that, but that's the gist.
What matters is, frequency-band mode now works for >5k L-set DoF.
Removed EIGRL continuation card
The EIGRL continuation card has been removed. It represented an incompatibility with major Nastran-compatible solvers, its fields were poorly-explained, and none of them should be set by the user.
Other fixes
There's also been many other bug fixes: K6ROT, MPCs, progress counters, timestamps...
Feel free to check the commits since 17.0.0 or the PRs below for details:
- Fixed existing cheap K6ROT that's dof6 springs to ground by @victorkemp in #175
- SuperLU for Lanczos by @victorkemp in #176
- Mass matrices by @victorkemp in #179
- Fix principal angle bug for tiny strains or stresses by @victorkemp in #181
- Multithreaded SuperLU support by @Bruno02468 in #182
- Remove EIGRL continuation card and LANCMETH parameter by @Bruno02468 in #183
- Fixing frequency-band mode: Adaptive Lanczos by @Bruno02468 in #186
- One buckling fix, one eigen fix by @Bruno02468 in #194
- Bugfix for 4-term MPCs by @victorkemp in #190
- Solid stress/strain in material coordinates by @victorkemp in #187
- Change PSOLID IN and ISOP options by @victorkemp in #108
- Buckling MPC fixes by @Bruno02468 in #195
- Lower DARPACK for small models by @Bruno02468 in #197
- reordered array dimensions by @victorkemp in #199
- converted internal grid number to sequence number by @victorkemp in #200
- Redefine get grid num comps by @victorkemp in #201
- gated writes to F06 by @victorkemp in #203
- Remove ans by @victorkemp in #205
- Use reverse lookup instead of nested loop for autospc by @Copper280z in #204
- Small counters update by @Bruno02468 in #207
- UNIX_TIME taking too much time by @Bruno02468 in #208
- Common link message by @victorkemp in #209
- Optimize matadd sss by @victorkemp in #210
- LINK9 speedup by @victorkemp in #212
- Remove f04 by @victorkemp in #213
- Removed SUBR_BEGEND_LEVELS from BLAS files by @victorkemp in #214
- added dev branch to build action by @victorkemp in #215
- Dev to main by @victorkemp in #216