Skip to content

MYSTRAN 19.0.0

Latest

Choose a tag to compare

@Bruno02468 Bruno02468 released this 29 Jun 05:28
3a5913a

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 f2c submodule, 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:

  1. SOL 103 runs can now have subcases!
  2. SOL 105 runs can now have more than two subcases (through STATSUB)!

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 JOB marker
  • 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 105 runs can have GPFORCE requests again;
  • Output requests without specifiers now go to both the F06 and OP2;
  • Output requests with PRINT alone go to the F06 only;
  • Output requests with PLOT alone 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!