Skip to content
Choose a tag to compare


@SteveDoyle2 SteveDoyle2 released this
· 50 commits to 1.2 since this release
Choose a tag to compare

I keep saying to myself there's not much to add, but Nastran is huge. Beyond HDF5
support in the BDF, I'm a huge fan of the new ability to keep track of which include file a
card came from and write it as a separate file. It's limited in usefulness, but very handy
in certain cases. There's a new (still preliminary) superelement capability. I'm far
from a superelement expert, but it's probably useful.

The OP2 reader now supports SORT2 along with much improved random results reading.
If you're using 60+ GB OP2s, you probably have had issues with RAM usage in the past.
With the new ability to dump the OP2 directly to HDF5, this should not be an as much of
an issue. It's not 100% implemented, so let me know if you need it for another result.

Regarding the GUI, there are also some new features. Groups work a bit better, but aren't
quite perfect. Logging has been dramatically sped up so the GUI loads faster and you can
load Nastran models even faster if you disable additional results (e.g., element quality).

Finally, Python 2.7 is end of life. Numpy, scipy, and matplotlib have all dropped
Python 2.7 support. It's time for pyNastran to as well. The OP2 reader is 30% faster in
Python 3.6+ than Python 2.7, so it's not all bad!


  • This is the last Python 2.7 release.
  • Dropping Python 3.5 support
  • Supports Python 2.7, 3.6-3.7
  • GUI is compatible with PyQt4/PyQt5 as well as PySide/PySide2
  • improved testing of old versions of packages


  • 373 cards supported (up from 343)

  • added abiltity to write models to separate include files

    >>> model = BDF()
    >>> model.read_bdf(bdf_filename, save_file_structure=True)
    out_filenames = {
        bdf_filename : bdf_filename_new,
        include_filename : include_filename_new,
    >>> model.write_bdfs(out_filenames, relative_dirname=None, is_windows=None)
    >>> ifile = model.grids[1].ifile
  • HDF5 import/export

    >>> model = read_bdf(bdf_filename)
    >>> model.export_hdf5_filename(hdf5_filename)
    >>> model_new = OP2()
    >>> model_new.load_hdf5_filename(hdf5_filename)
  • preliminary superelement support

    >>> model.read_bdf(bdf_filename)
    >>> model.superelement_models[1].nodes


  • reorganization of random op2 results into op2.results.psd (or ato, no, crm, rms) to aide in finding data

  • reorganization of op2 class to reduce number of functions in the object. This affects any custom table reading.

  • improved optimzation response reading

  • limited SORT2 support

  • fixed CD transformation bug for BOUGV1 and BOPHIG1 tables

  • Improved HDF5 export/import support (e.g., matrices, random results)

  • Can optionally save directly to HDF5 instead of numpy (limited).

  • Loading OP2s to an HDF5 file to decrease memory usage

    >>> op2_model = OP2()
    >>> op2_model.load_as_h5 = True
    >>> op2_model.read_op2(op2_filename)


  • HDF5 support
  • reading EQEXIN/S, GPT, GPDT, CSTM/S tables (recovery of nodes & coordinate with OP2Geom)
  • fixed theta/mcid reading for CTRIA3/CQUAD4
  • fixed CQUAD8 bug


  • sped up HTML logging
  • much improved groups menu
  • options for Nastran in preferences menu to speed up loading/limit memory usage
  • pyNastran BDF pickle reading
  • pyNastran OP2 HDF5 reading (not MSC's format)
  • visualization when pickling nodes/elements
  • min/max labels
  • highlight menu
  • Patran-style colors
  • custom force vectors
  • AVL support

Known issues:

  • Transient Pandas Dataframes will fail for newer versions of numpy/pandas.
    If anyone knows how to use a MultiIndex, this is probably pretty easy to fix.