Another major update: more accurate results, faster runs, tidier code, and a whole new validation scheme!
Performance improvements
Like with 18.0.0, we have several changes aimed at improving performance. For starters, @Copper280z added METIS ordering, making SuperLU solves run faster and with less memory in the average case. On the output side, @Copper280z and @Bruno02468 added handmade number-formatting subroutines to replace Fortran FORMATs in LINK9, making that final step run around four times as fast.
Better K6ROT and fixed RFORCE
Thanks to @victorkemp, MYSTRAN has a much-improved support for the K6ROT drilling stiffness feature! The previous implementation yielded weird results in some cases, and often didn't work with the default values most users are accustomed to. Also, RFORCE had several showstopping bugs that @victorkemp too fixed.
Validation
Also mostly thanks to @victorkemp's efforts, this is the first version of MYSTRAN to be released after undergoing a much more thorough validation of results (by comparing them to other output files known to be correct, mostly from different solvers). The results and scripts used to do that are in the MYSTRAN_Validation repository.
BLAS/LAPACK linking
At long last, MYSTRAN finally has full support for linking against any BLAS/LAPACK implementation, such as OpenBLAS. This effort by @Bruno02468 has several aspects to it:
- MYSTRAN no longer has modified reference BLAS/LAPACK subroutines embedded in its code;
- The reference implementation is now a submodule;
- When building, users can pick between between that and another implementation (provided it's installed in their system and findable by CMake);
- SuperLU uses the same BLAS as everything else;
- The
f2csubmodule, needed for SuperLU's embedded CBLAS, is no longer necessary and has been removed.
From a practical standpoint, this means free performance (when using OpenBLAS, at least) and a tidier codebase. When building MYSTRAN, you can now set the CMake option MYSTRAN_BLAS_LAPACK to AUTO, EMBEDDED, or SYSTEM. If your system has more than one option, you might also want to set the BLAS_LIBRARIES and LAPACK_LIBRARIES to whichever one you prefer. The previous option, enable_internal_blaslib still works but now emits a warning as it's deprecated.
Our official Windows binary will be built with the reference BLAS/LAPACK, for consistency.
--version and --licenses
Most open-source licenses require distributing a copy of the license alongside any distributions of the software, and that includes static linking. In order to better comply with that requirement, MYSTRAN binaries are now built with awareness of what libraries are statically linked in, and can print each library and its license by calling it with the --licenses argument.
Since we were already going to auto-generate information about the build, @Bruno02468 decided to go all the way and also added a nice --version argument too, containing useful information such as the version, build type, build flags, build date, and linked libraries. Information that's nice to have in general.
Subcases, modes, and STATSUB
The MYSTRAN internals responsible for the handling of subcases and eigenvectors (modes) has been completely reworked by @Bruno02468. That has given us two new features:
SOL 103runs can now have subcases!SOL 105runs can now have more than two subcases (throughSTATSUB)!
The first feature is pretty straightforward: before, using subcases in a SOL 103 run was not allowed, since subcases and modes shared the same internals.
The second is a bit more involed: you still have to create at least one static and at least one eigen (buckling) case. Before, there had to be exactly two. Now, if there are just the two, it all still works the same. However, you can now have more than just two! You can specify many static and buckling subcases, and you specify what static subcase a buckling case should use by using the STATSUB case control card. For example, your subcases could look like this:
SUBCASE 1
LOAD = 11
SUBCASE 2
STATSUB = 1
METHOD = 1
SUBCASE 3
LOAD = 12
SUBCASE 4
STATSUB = 3
METHOD = 2
In that example, there's two buckling subcases, 2 and 4, using the static load cases 1 and 3 respectively. They can come in any order, of course, and a static case can be used by more than one buckling case.
It's a feature present in several commercial solvers, and was only possible with a thorough revamping of the way buckling runs share their data across load steps.
Output fixes/improvements
There have been several changes to output requests and generation:
- Removed some special characters;
- Added
END OF JOBmarker - Corrected subcase/eigenvector heading before tables;
- Fixed headerless blocks in F06;
- Fixed solid results in OP2;
- Solid results now default to material coordinates (
STR_CID=-2) SOL 105runs can haveGPFORCErequests again;- Output requests without specifiers now go to both the F06 and OP2;
- Output requests with
PRINTalone go to the F06 only; - Output requests with
PLOTalone go to the OP2 only; - CELAS force and stress signs was flipped, now fixed;
- Shell strains were were mostly wrong, also fixed.
All contributions
It's a big update, we can't list every single contribution... But you can always check out the pull requests below or the commits since 18.0.0 if you want to know everything we got up to!
- Use METIS ordering for superlu by @Copper280z in #218
- METIS/MT fixes by @Bruno02468 in #219
- Licenses, build info, and fixed METIS on Windows by @Bruno02468 in #220
- patch superlu memory query by @Copper280z in #221
- Use more fortran intrinsics by @Copper280z in #222
- Added END OF JOB to F06 by @victorkemp in #223
- The BLAS/LAPACK surgery by @Bruno02468 in #229
- Making LINK9 ~4x faster by @Bruno02468 in #230
- Re-enabled GPFORCE for buckling by @victorkemp in #231
- Removed Unicode Ü from GPFORCE's INERTIA label and warning by @victorkemp in #232
- Fixed GP_FORCE_BALANCE_PROC compile warnings by @victorkemp in #233
- Fixed repeated TITLE for GPFORCE in F06 with multiple subcases by @victorkemp in #234
- Subcase mode distillation by @Bruno02468 in #241
- Fixed lower case matrix name bug. Common TO_UPPER fn. by @victorkemp in #245
- Subcase/mode output fixes by @Bruno02468 in #247
- Corner center logic by @victorkemp in #248
- Solid OP2 fix by @victorkemp in #249
- K6rot reorganize by @victorkemp in #250
- New K6ROT connecting drilling DOF to translation of adjacent grid pts. by @victorkemp in #251
- Removed headerless f06 blocks when requesting PLOT without PRINT by @victorkemp in #255
- fixed the RFORCE scale and sign bugs by @victorkemp in #256
- Corrected acceleration for rotational DOFs by @victorkemp in #258
- Fixed bug with different GID in multiple RFORCEs by @victorkemp in #260
- RFORCE tidy up by @victorkemp in #261
- Reversed sign of CELAS force&stress by @victorkemp in #262
- STRCUR for STRAIN command by @victorkemp in #266
- Changed STR_CID default from -1 to -2 by @victorkemp in #267
- Shell strain bugfixes by @victorkemp in #268
- Fixed some output requests, better data types by @Bruno02468 in #269
- Pre-v19 fixes by @Bruno02468 in #270